From 701889b4218c59ce7b261729d270cb2f79a9d1d1 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: Tue, 10 Jun 2014 12:03:00 +0300 Subject: [PATCH] 2_2_2_48 --- .../Forms/ДействиеВыполнить/Module.bsl | 27 +- .../Forms/ДействиеПроверить/Module.bsl | 17 +- .../ConditionalAppearance.dcssca | 54 - .../Forms/ФормаБизнесПроцесса/Form.form | 2 - .../Forms/ФормаБизнесПроцесса/Module.bsl | 77 +- .../Задание/Forms/ФормаСписка/Form.form | 83 +- .../Задание/Forms/ФормаСписка/Module.bsl | 20 +- .../BusinessProcesses/Задание/Help/ru.html | 2 +- .../Задание/ManagerModule.bsl | 42 +- .../Задание/ObjectModule.bsl | 10 +- .../ПодборВалютИзКлассификатора/Help/ru.html | 36 +- .../ПодборВалютИзКлассификатора/Module.bsl | 20 +- .../Валюты/Forms/ФормаСписка/Form.form | 134 +- .../Валюты/Forms/ФормаСписка/Module.bsl | 20 +- .../Валюты/Forms/ФормаЭлемента/Form.form | 8 +- .../Валюты/Forms/ФормаЭлемента/Help/ru.html | 58 +- .../Валюты/Forms/ФормаЭлемента/Module.bsl | 16 +- SSL/src/Catalogs/Валюты/Help/ru.html | 58 +- SSL/src/Catalogs/Валюты/ManagerModule.bsl | 23 + SSL/src/Catalogs/Валюты/ObjectModule.bsl | 5 +- .../Template.txt | 2 +- .../Forms/ФормаВыбора/Form.form | 74 +- .../Forms/ФормаВыбора/Module.bsl | 5 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../Forms/ФормаЭлемента/Module.bsl | 5 +- .../ВариантыОтветовАнкет/Help/ru.html | 9 + .../ВариантыОтветовАнкет/ManagerModule.bsl | 21 + .../ВариантыОтветовАнкет.mdo | 5 + .../Commands/Открыть/CommandModule.bsl | 6 +- .../РазместитьВРазделах/CommandModule.bsl | 6 +- .../CommandModule.bsl | 8 +- .../CommandModule.bsl | 6 +- .../Form.form | 182 + .../Module.bsl | 12 + .../ConditionalAppearance.dcssca | 23 - .../Forms/РазмещениеВРазделах/Form.form | 4 +- .../Forms/РазмещениеВРазделах/Help/ru.html | 14 +- .../Forms/РазмещениеВРазделах/Module.bsl | 47 +- .../Forms/СбросНастроекРазмещения/Module.bsl | 16 +- .../СбросПользовательскихНастроек/Module.bsl | 16 +- .../Forms/ФормаСписка/Form.form | 977 +- .../Forms/ФормаСписка/Module.bsl | 295 +- .../Forms/ФормаЭлемента/Form.form | 246 +- .../Forms/ФормаЭлемента/Help/ru.html | 57 +- .../Forms/ФормаЭлемента/Module.bsl | 67 +- SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html | 108 +- .../ВариантыОтчетов/ManagerModule.bsl | 19 + .../Catalogs/ВариантыОтчетов/ObjectModule.bsl | 40 +- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 83 +- .../ОткрытьВерсииФайла/CommandModule.bsl | 14 +- .../Form.form | 70 +- .../Module.bsl | 18 +- .../Form.form | 0 .../ВыборСпособаСравненияВерсий/Help/ru.html | 7 + .../Module.bsl | 5 +- .../Forms/УдалитьФормаСписка/Form.form | 54 - .../ВерсииФайлов/Forms/ФормаВыбора/Form.form | 88 +- .../Forms/ФормаВыбора/Help/ru.html | 16 + .../ВерсииФайлов/Forms/ФормаСписка/Form.form | 94 +- .../ВерсииФайлов/Forms/ФормаСписка/Module.bsl | 11 +- .../Forms/ФормаЭлемента/Form.form | 4 +- .../Forms/ФормаЭлемента/Help/ru.html | 39 + .../Forms/ФормаЭлемента/Module.bsl | 15 +- SSL/src/Catalogs/ВерсииФайлов/Help/ru.html | 42 +- .../Catalogs/ВерсииФайлов/ManagerModule.bsl | 5 +- .../Catalogs/ВерсииФайлов/ObjectModule.bsl | 10 +- .../Catalogs/ВерсииФайлов/ВерсииФайлов.mdo | 73 +- .../Список/ExtInfo/ListSettings.dcss | 25 - .../Forms/ФормаСписка/Module.bsl | 16 - .../Forms/ФормаЭлемента/Form.form | 80 - .../ВидыДокументовФизическихЛиц/Help/ru.html | 9 - .../ManagerModule.bsl | 35 - .../ВидыДокументовФизическихЛиц.mdo | 249 - .../Forms/ФормаВыбораГруппы/Form.form | 79 +- .../Forms/ФормаВыбораГруппы/Module.bsl | 6 +- .../Forms/ФормаСписка/Form.form | 94 +- .../Forms/ФормаСписка/Module.bsl | 11 +- .../Forms/ФормаЭлемента/Form.form | 22 +- .../Forms/ФормаЭлемента/Help/ru.html | 39 +- .../Forms/ФормаЭлемента/Module.bsl | 70 +- .../ВидыКонтактнойИнформации/Help/ru.html | 14 +- .../ManagerModule.bsl | 28 +- .../ВидыКонтактнойИнформации.mdo | 8 +- .../ExtInfo/ListSettings.dcss | 15 +- .../Forms/ФормаСписка/Form.form | 468 +- .../Forms/ФормаСписка/Module.bsl | 127 +- .../Forms/ФормаЭлемента/Form.form | 792 +- .../Forms/ФормаЭлемента/Help/ru.html | 50 +- .../Forms/ФормаЭлемента/Module.bsl | 723 +- .../Catalogs/ВнешниеПользователи/Help/ru.html | 55 +- .../ВнешниеПользователи/ManagerModule.bsl | 18 +- .../ВнешниеПользователи/ObjectModule.bsl | 40 +- .../ВнешниеПользователи.mdo | 186 +- .../ВопросыШаблонаАнкеты/ManagerModule.bsl | 23 + .../ManagerModule.bsl | 16 + .../Forms/ФормаСписка/Form.form | 79 +- .../Forms/ФормаСписка/Module.bsl | 11 +- .../ConditionalAppearance.dcssca | 28 - .../Forms/ФормаЭлемента/Form.form | 10 +- .../Forms/ФормаЭлемента/Help/ru.html | 34 +- .../Forms/ФормаЭлемента/Module.bsl | 54 +- .../ГруппыВнешнихПользователей/Help/ru.html | 27 +- .../ManagerModule.bsl | 5 +- .../ObjectModule.bsl | 5 +- .../ГруппыВнешнихПользователей.mdo | 5 +- .../Forms/ВыборПоОтветственному/Module.bsl | 21 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 9 + .../Forms/ФормаГруппы/Help/ru.html | 11 + .../Forms/ФормаГруппы/Module.bsl | 5 +- .../ГруппыДоступа/Forms/ФормаСписка/Form.form | 90 +- .../Forms/ФормаСписка/Help/ru.html | 24 +- .../Forms/ФормаСписка/Module.bsl | 11 +- .../ConditionalAppearance.dcssca | 36 - .../Forms/ФормаЭлемента/Form.form | 4 +- .../Forms/ФормаЭлемента/Help/ru.html | 50 +- .../Forms/ФормаЭлемента/Module.bsl | 195 +- SSL/src/Catalogs/ГруппыДоступа/Help/ru.html | 23 +- .../Catalogs/ГруппыДоступа/ManagerModule.bsl | 37 +- .../Catalogs/ГруппыДоступа/ObjectModule.bsl | 33 +- .../Catalogs/ГруппыДоступа/ГруппыДоступа.mdo | 39 +- .../ГруппыИсполнителейЗадач/ManagerModule.bsl | 9 +- .../ГруппыИсполнителейЗадач/ObjectModule.bsl | 10 +- .../Forms/ФормаСписка/Form.form | 79 +- .../Forms/ФормаСписка/Module.bsl | 11 +- .../ConditionalAppearance.dcssca | 23 - .../Forms/ФормаЭлемента/Help/ru.html | 28 +- .../Forms/ФормаЭлемента/Module.bsl | 49 +- .../Catalogs/ГруппыПользователей/Help/ru.html | 25 +- .../ГруппыПользователей/ObjectModule.bsl | 6 +- .../Module.bsl | 26 +- .../Forms/ПодборРазделов/Module.bsl | 10 +- .../ФормаСписка/ConditionalAppearance.dcssca | 53 - .../Forms/ФормаСписка/Form.form | 317 +- .../Forms/ФормаСписка/Module.bsl | 117 +- .../ConditionalAppearance.dcssca | 31 - .../Forms/ФормаЭлемента/Form.form | 1584 +- .../Forms/ФормаЭлемента/Help/ru.html | 49 +- .../Forms/ФормаЭлемента/Module.bsl | 626 +- .../Help/ru.html | 33 +- .../ManagerModule.bsl | 20 + .../ObjectModule.bsl | 18 +- .../ДополнительныеОтчетыИОбработки.mdo | 20 +- .../Forms/ФормаСписка/Module.bsl | 4 +- .../Forms/ФормаЭлемента/Help/ru.html | 4 +- .../Forms/ФормаЭлемента/Module.bsl | 10 +- .../ЗакладкиВзаимодействий/ManagerModule.bsl | 22 + .../Commands/ВсеЗаметки/CommandModule.bsl | 6 +- .../Заметки/Forms/ВсеЗаметки/Help/ru.html | 21 + .../Заметки/Forms/ВсеЗаметки/Module.bsl | 15 +- .../Forms/ЗаметкиПоПредмету/Help/ru.html | 21 + .../Forms/ЗаметкиПоПредмету/Module.bsl | 16 +- .../Заметки/Forms/МоиЗаметки/Help/ru.html | 7 + .../Заметки/Forms/МоиЗаметки/Module.bsl | 6 +- .../Заметки/Forms/ФормаГруппы/Help/ru.html | 12 + .../Заметки/Forms/ФормаГруппы/Module.bsl | 6 +- .../Заметки/Forms/ФормаЭлемента/Help/ru.html | 22 + .../Заметки/Forms/ФормаЭлемента/Module.bsl | 17 +- SSL/src/Catalogs/Заметки/Help/ru.html | 22 + SSL/src/Catalogs/Заметки/ManagerModule.bsl | 23 + SSL/src/Catalogs/Заметки/Заметки.mdo | 30 + .../ManagerModule.bsl | 16 + .../Forms/ФормаГруппы/Module.bsl | 10 +- .../Forms/ФормаСписка/Form.form | 90 +- .../Forms/ФормаСписка/Module.bsl | 20 +- .../Forms/ФормаЭлемента/Module.bsl | 20 +- .../ЗначенияСвойствОбъектов/Help/ru.html | 18 +- .../ЗначенияСвойствОбъектов/ManagerModule.bsl | 5 +- .../ЗначенияСвойствОбъектов/ObjectModule.bsl | 36 + .../Forms/ФормаСписка/Form.form | 90 +- .../Forms/ФормаСписка/Module.bsl | 20 +- .../Forms/ФормаЭлемента/Module.bsl | 20 +- .../Help/ru.html | 16 +- .../ManagerModule.bsl | 5 +- .../ObjectModule.bsl | 36 + .../Forms/ФормаСписка/Form.form | 93 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../Forms/ФормаЭлемента/Help/ru.html | 9 + .../Forms/ФормаЭлемента/Module.bsl | 16 +- .../Help/ru.html | 7 + .../ManagerModule.bsl | 903 +- .../ObjectModule.bsl | 21 +- .../ИдентификаторыОбъектовМетаданных.mdo | 122 +- .../Forms/РасписаниеРаботы/Module.bsl | 18 +- .../Календари/Forms/ФормаСписка/Form.form | 103 +- .../Календари/Forms/ФормаСписка/Module.bsl | 16 +- .../ConditionalAppearance.dcssca | 119 - .../Forms/ФормаЭлемента/Help/ru.html | 41 + .../Календари/Forms/ФормаЭлемента/Module.bsl | 123 +- SSL/src/Catalogs/Календари/Help/ru.html | 28 + SSL/src/Catalogs/Календари/ManagerModule.bsl | 16 +- SSL/src/Catalogs/Календари/ObjectModule.bsl | 6 +- SSL/src/Catalogs/Календари/Календари.mdo | 48 +- .../Forms/ЗагрузкаКлассификатора/Help/ru.html | 14 + .../Forms/ЗагрузкаКлассификатора/Module.bsl | 20 +- .../Forms/ФормаВыбора/Form.form | 79 +- .../Forms/ФормаВыбора/Module.bsl | 16 +- .../Forms/ФормаСписка/Form.form | 79 +- .../Forms/ФормаСписка/Module.bsl | 11 +- .../Forms/ФормаЭлемента/Help/ru.html | 18 + .../Forms/ФормаЭлемента/Module.bsl | 5 +- .../КлассификаторБанковРФ/Help/ru.html | 71 +- .../КлассификаторБанковРФ/ManagerModule.bsl | 24 +- .../КлассификаторБанковРФ.mdo | 10 + .../Forms/ФормаВыбора/Module.bsl | 18 +- .../Forms/ФормаСписка/Module.bsl | 19 +- .../Forms/ФормаЭлемента/Form.form | 42 + .../Forms/ФормаЭлемента/Help/ru.html | 12 + .../Forms/ФормаЭлемента/Module.bsl | 8 +- .../Catalogs/КлючевыеОперации/Help/ru.html | 15 + .../КлючевыеОперации/КлючевыеОперации.mdo | 40 +- .../Forms/ФормаВыбора/Form.form | 77 +- .../Forms/ФормаГруппы/Module.bsl | 6 +- .../Forms/ФормаСписка/Form.form | 111 +- .../Forms/ФормаСписка/Module.bsl | 34 +- .../Forms/ФормаЭлемента/Module.bsl | 5 +- .../Help/ru.html | 46 +- .../ManagerModule.bsl | 10 +- .../ObjectModule.bsl | 5 +- .../Template.txt | 0 .../НазначенияСертификатовЭП.mdo | 4 +- .../Forms/ФормаЭлемента/Module.bsl | 6 +- .../Catalogs/Организации/ManagerModule.bsl | 20 +- .../ПапкиФайлов/Forms/ФормаВыбора/Form.form | 77 +- .../ПапкиФайлов/Forms/ФормаВыбора/Module.bsl | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 15 + .../Forms/ФормаЭлемента/Module.bsl | 23 +- SSL/src/Catalogs/ПапкиФайлов/Help/ru.html | 15 +- .../Catalogs/ПапкиФайлов/ManagerModule.bsl | 5 +- SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl | 9 +- SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo | 25 +- .../Forms/ФормаВыбора/Form.form | 74 +- .../Forms/ФормаСписка/Module.bsl | 5 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 4 +- .../ПапкиЭлектронныхПисем/ManagerModule.bsl | 23 + .../ConditionalAppearance.dcssca | 119 - .../Forms/ПользователиИБ/Form.form | 867 +- .../Forms/ПользователиИБ/Help/ru.html | 59 +- .../Forms/ПользователиИБ/Module.bsl | 610 +- .../ФормаВыбораПользователяОС/Help/ru.html | 20 +- .../ФормаВыбораПользователяОС/Module.bsl | 31 +- .../ExtInfo/ListSettings.dcss | 15 +- .../Пользователи/Forms/ФормаСписка/Form.form | 473 +- .../Пользователи/Forms/ФормаСписка/Module.bsl | 137 +- .../ConditionalAppearance.dcssca | 67 - .../Forms/ФормаЭлемента/Form.form | 703 +- .../Forms/ФормаЭлемента/Help/ru.html | 59 +- .../Forms/ФормаЭлемента/Module.bsl | 1120 +- SSL/src/Catalogs/Пользователи/Help/ru.html | 55 +- .../Catalogs/Пользователи/ManagerModule.bsl | 13 +- .../Catalogs/Пользователи/ObjectModule.bsl | 101 +- .../Catalogs/Пользователи/Пользователи.mdo | 115 +- .../ManagerModule.bsl | 16 + .../ПользовательскиеНастройкиОтчетов.mdo} | 120 +- ...авляемыеДополнительныеОтчетыИОбработки.mdo | 632 - .../Forms/ПрименениеПравил/Help/ru.html | 2 +- .../Forms/ПрименениеПравил/Module.bsl | 14 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 10 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 18 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 23 + .../ObjectModule.bsl | 5 +- .../Template.dcs | 13 +- .../ManagerModule.bsl | 13 + .../ObjectModule.bsl | 5 +- .../ПредопределенныеВариантыОтчетов.mdo | 82 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 21 +- .../ManagerModule.bsl | 7 +- .../ObjectModule.bsl | 5 +- .../Forms/ФормаВыбораГруппы/Form.form | 77 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 10 + .../Forms/ФормаГруппы/Help/ru.html | 10 + .../Forms/ФормаСписка/Form.form | 76 +- .../Forms/ФормаСписка/Help/ru.html | 21 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 32 + .../Forms/ФормаЭлемента/Module.bsl | 32 +- .../Catalogs/ПрофилиГруппДоступа/Help/ru.html | 22 +- .../ПрофилиГруппДоступа/ManagerModule.bsl | 17 +- .../ПрофилиГруппДоступа/ObjectModule.bsl | 6 +- .../ПрофилиГруппДоступа.mdo | 15 + .../ВыполнитьСейчас/CommandModule.bsl | 6 +- .../СобытияРассылки/CommandModule.bsl | 10 +- .../Forms/ПараметрыFTP/Help/ru.html | 2 +- .../Forms/ПараметрыFTP/Module.bsl | 21 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаВыбораГруппы/Module.bsl | 6 +- .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Forms/ФормаГруппы/Module.bsl | 6 +- .../Forms/ФормаСписка/Form.form | 155 +- .../Forms/ФормаСписка/Module.bsl | 39 +- .../ConditionalAppearance.dcssca | 65 - .../Forms/ФормаЭлемента/Form.form | 499 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 355 +- SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html | 2 +- .../РассылкиОтчетов/ManagerModule.bsl | 19 + .../Catalogs/РассылкиОтчетов/ObjectModule.bsl | 10 +- .../Forms/ФормаВыбора/Form.form | 77 +- .../Forms/ФормаСписка/Form.form | 93 +- .../Forms/ФормаЭлемента/Module.bsl | 5 +- .../Catalogs/РолиИсполнителей/Help/ru.html | 2 +- .../РолиИсполнителей/ManagerModule.bsl | 25 + .../Forms/ФормаСписка/Module.bsl | 5 +- .../Forms/ФормаЭлемента/Module.bsl | 10 +- .../ManagerModule.bsl | 16 + .../Forms/ФормаСписка/Module.bsl | 20 +- .../Forms/ФормаЭлемента/Module.bsl | 6 +- .../Forms/ФормаСписка/Module.bsl | 21 +- .../Forms/ФормаЭлемента/Module.bsl | 6 +- .../СообщенияСистемы/ManagerModule.bsl | 21 + .../СтраныМира/Forms/Классификатор/Form.form | 3 +- .../Forms/Классификатор/Help/ru.html | 2 +- .../СтраныМира/Forms/Классификатор/Module.bsl | 19 +- .../СтраныМира/Forms/ФормаСписка/Form.form | 93 +- .../СтраныМира/Forms/ФормаСписка/Module.bsl | 20 +- .../СтраныМира/Forms/ФормаЭлемента/Module.bsl | 5 +- SSL/src/Catalogs/СтраныМира/Help/ru.html | 2 +- SSL/src/Catalogs/СтраныМира/ManagerModule.bsl | 107 +- SSL/src/Catalogs/СтраныМира/ObjectModule.bsl | 10 +- .../Templates/Классификатор/Template.txt | 2 +- .../ManagerModule.bsl | 20 + .../Module.bsl | 21 +- .../Forms/ФормаСписка/Form.form | 79 +- .../Forms/ФормаСписка/Module.bsl | 10 +- .../Forms/ФормаЭлемента/Form.form | 45 - .../Forms/ФормаЭлемента/Help/ru.html | 15 + .../Forms/ФормаЭлемента/Module.bsl | 25 +- .../СценарииОбменовДанными/Help/ru.html | 16 +- .../СценарииОбменовДанными/ManagerModule.bsl | 25 +- .../СценарииОбменовДанными/ObjectModule.bsl | 10 +- .../СценарииОбменовДанными.mdo | 27 +- .../ManagerModule.bsl | 16 + .../Forms/ФормаСписка/Form.form | 339 +- .../Forms/ФормаСписка/Module.bsl | 111 + .../Forms/ФормаЭлемента/Form.form | 169 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 179 +- .../Catalogs/ТомаХраненияФайлов/Help/ru.html | 2 +- .../ТомаХраненияФайлов/ManagerModule.bsl | 78 +- .../ТомаХраненияФайлов/ObjectModule.bsl | 154 +- .../Help/ru.html | 15 - .../Module.bsl | 316 - .../ПомощникНастройкиУчетнойЗаписи/Form.form | 3710 ++++ .../ПомощникНастройкиУчетнойЗаписи/Module.bsl | 912 + .../Forms/ФормаВыбора/Form.form | 77 +- .../Forms/ФормаСписка/Form.form | 109 +- .../Forms/ФормаЭлемента/Form.form | 1877 +- .../Forms/ФормаЭлемента/Help/ru.html | 48 +- .../Forms/ФормаЭлемента/Module.bsl | 215 +- .../Help/ru.html | 32 +- .../ManagerModule.bsl | 151 + .../ObjectModule.bsl | 21 +- .../УчетныеЗаписиЭлектроннойПочты.mdo | 468 +- .../Module.bsl | 11 +- .../Forms/ВопросПриИмпортеФайлов/Help/ru.html | 8 +- .../Forms/ВопросПриИмпортеФайлов/Module.bsl | 6 +- .../Файлы/Forms/ВыборКодировки/Help/ru.html | 2 +- .../Файлы/Forms/ВыборКодировки/Module.bsl | 62 +- .../Help/ru.html | 2 +- .../Module.bsl | 15 +- .../ВыборУстройстваСканирования/Form.form | 8 +- .../ВыборУстройстваСканирования/Module.bsl | 42 +- .../ИнформацияФайлНеБылИзменен/Module.bsl | 10 +- .../Forms/НастройкаСканирования/Form.form | 57 +- .../Forms/НастройкаСканирования/Help/ru.html | 2 +- .../Forms/НастройкаСканирования/Module.bsl | 34 +- .../НастройкаСканированияНаСеанс/Help/ru.html | 2 +- .../НастройкаСканированияНаСеанс/Module.bsl | 20 +- .../Help/ru.html | 2 +- .../РедактированиеТекстовогоФайла/Module.bsl | 20 +- .../Файлы/Forms/РедактируемыеФайлы/Form.form | 90 +- .../Forms/РедактируемыеФайлы/Help/ru.html | 2 +- .../Файлы/Forms/РедактируемыеФайлы/Module.bsl | 27 +- .../Module.bsl | 11 +- .../Forms/РезультатСканирования/Help/ru.html | 2 +- .../Forms/РезультатСканирования/Module.bsl | 83 +- .../Forms/СписокЗанятыхСВопросом/Form.form | 90 +- .../Forms/СписокЗанятыхСВопросом/Help/ru.html | 2 +- .../Forms/СписокЗанятыхСВопросом/Module.bsl | 20 +- .../Файлы/Forms/ФайлСуществует/Module.bsl | 10 +- SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form | 191 +- .../Catalogs/Файлы/Forms/Файлы/Help/ru.html | 42 +- SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl | 33 +- .../ФайлыВОсновномРабочемКаталоге/Form.form | 121 +- .../Help/ru.html | 2 +- .../ФайлыВОсновномРабочемКаталоге/Module.bsl | 24 +- .../Forms/ФормаВозвратаФайла/Help/ru.html | 2 +- .../Файлы/Forms/ФормаВозвратаФайла/Module.bsl | 16 +- .../Файлы/Forms/ФормаВопроса/Module.bsl | 10 +- .../Module.bsl | 11 +- .../Файлы/Forms/ФормаВыбора/Form.form | 118 +- .../Файлы/Forms/ФормаВыбора/Help/ru.html | 1 + .../Файлы/Forms/ФормаВыбора/Module.bsl | 43 +- .../ФормаВыбораРежимаОткрытия/Help/ru.html | 2 +- .../ФормаВыбораРежимаОткрытия/Module.bsl | 11 +- .../ФормаГруповаяОперацияНаПапке/Module.bsl | 6 +- .../Forms/ФормаИмпортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаИмпортаПапки/Module.bsl | 20 +- .../Forms/ФормаИмпортаФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ФормаИмпортаФайлов/Module.bsl | 21 +- .../Module.bsl | 11 +- .../Файлы/Forms/ФормаНового/Help/ru.html | 2 +- .../Файлы/Forms/ФормаНового/Module.bsl | 15 +- .../Файлы/Forms/ФормаОтчета/Module.bsl | 11 +- .../Forms/ФормаПеретаскивания/Module.bsl | 21 +- .../Файлы/Forms/ФормаПодбора/Form.form | 114 +- .../Файлы/Forms/ФормаПодбора/Module.bsl | 20 +- .../Файлы/Forms/ФормаСписка/Form.form | 6 +- .../Файлы/Forms/ФормаСписка/Module.bsl | 20 +- .../ФормаСпискаПрисоединенныхФайлов/Form.form | 4 + .../Help/ru.html | 18 + .../Module.bsl | 20 +- .../Forms/ФормаЭкспортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭкспортаПапки/Module.bsl | 21 +- .../ConditionalAppearance.dcssca | 72 - .../Файлы/Forms/ФормаЭлемента/Form.form | 304 +- .../Файлы/Forms/ФормаЭлемента/Help/ru.html | 37 +- .../Файлы/Forms/ФормаЭлемента/Module.bsl | 93 +- SSL/src/Catalogs/Файлы/Help/ru.html | 24 +- SSL/src/Catalogs/Файлы/ManagerModule.bsl | 5 +- SSL/src/Catalogs/Файлы/ObjectModule.bsl | 10 +- SSL/src/Catalogs/Файлы/Файлы.mdo | 54 +- .../Forms/ФормаГруппы/Form.form | 132 - .../Forms/ФормаГруппы/Module.bsl | 9 - SSL/src/Catalogs/ФизическиеЛица/Help/ru.html | 16 - .../Catalogs/ФизическиеЛица/ManagerModule.bsl | 27 - .../Help/ru.html | 2 +- .../ФормаМастераТабличныхВопросов/Module.bsl | 21 +- .../Forms/ФормаПростыхВопросов/Module.bsl | 23 +- .../ШаблоныАнкет/Forms/ФормаСписка/Module.bsl | 9 +- .../ConditionalAppearance.dcssca | 81 - .../Forms/ФормаЭлемента/Form.form | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 96 +- .../Catalogs/ШаблоныАнкет/ManagerModule.bsl | 25 + .../ManagerModule.bsl | 16 + .../ManagerModule.bsl | 16 + .../Forms/ФормаВыбора/Module.bsl | 5 +- .../ConditionalAppearance.dcssca | 75 - .../Forms/ФормаЭлемента/Module.bsl | 72 +- .../ВопросыДляАнкетирования/ManagerModule.bsl | 20 + .../ВопросыДляАнкетирования/ObjectModule.bsl | 7 +- .../ИзменениеНастройкиСвойства/Module.bsl | 20 +- .../РазблокированиеРеквизитов/Module.bsl | 11 +- .../Forms/ФормаВыбора/Form.form | 93 +- .../Forms/ФормаВыбора/Module.bsl | 16 +- .../Forms/ФормаСписка/Form.form | 79 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 12 +- .../Forms/ФормаЭлемента/Module.bsl | 30 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 11 +- .../ObjectModule.bsl | 5 +- .../Forms/ФормаСписка/Form.form | 84 +- .../ОбъектыАдресацииЗадач/Help/ru.html | 2 +- .../ОбъектыАдресацииЗадач/ManagerModule.bsl | 21 + .../ObjectModule.bsl | 6 +- .../УдалитьВидыДоступа/УдалитьВидыДоступа.mdo | 68 - .../ОбластьДанныхВспомогательныеДанные.mdo | 8 - .../ОбластьДанныхОсновныеДанные.mdo | 84 +- .../ВыполнитьОбменДанными/CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../ЗаполнениеОбъекта/CommandModule.bsl | 6 +- .../МоиЗаметкиПоПредмету/CommandModule.bsl | 6 +- .../Напомнить/CommandModule.bsl | 5 +- .../CommonCommands/Напомнить/Напомнить.mdo | 1 - .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 7 +- .../ОбменСообщениями/CommandModule.bsl | 6 +- .../ОткрытьОбменыДанными/CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../ОтчетыОбъекта/CommandModule.bsl | 6 +- .../CommandModule.bsl | 9 + .../ПанельОтчетовАдминистрирование.mdo | 14 + .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 17 + ...ПоказатьРезультатРезервногоКопирования.mdo | 10 + .../CommandModule.bsl | 11 +- .../CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../СоздатьРезервнуюКопию/CommandModule.bsl | 5 +- .../CommonForms/АвтономнаяРабота/Form.form | 125 + .../CommonForms/АвтономнаяРабота/Module.bsl | 38 +- .../АвтономнаяРаботаВМоделиСервиса/Form.form | 181 +- .../АвтономнаяРаботаВМоделиСервиса/Module.bsl | 39 +- SSL/src/CommonForms/АдреснаяКнига/Form.form | 3 - SSL/src/CommonForms/АдреснаяКнига/Module.bsl | 40 +- .../ВводПароляСОписаниями/Help/ru.html | 2 +- .../ВводПароляСОписаниями/Module.bsl | 10 +- SSL/src/CommonForms/Вопрос/Form.form | 7 +- SSL/src/CommonForms/Вопрос/Module.bsl | 33 +- .../Form.form | 6 + .../Module.bsl | 14 +- .../Form.form | 380 + .../Help/ru.html | 5 + .../Module.bsl | 115 + .../ВосстановлениеСвязиСГлавнымУзлом.mdo | 15 + .../CommonForms/ВходВОбластьДанных/Form.form | 4 + .../CommonForms/ВходВОбластьДанных/Module.bsl | 25 +- SSL/src/CommonForms/ВыборДаты/Form.form | 4 + SSL/src/CommonForms/ВыборДаты/Module.bsl | 29 +- .../Module.bsl | 11 +- .../Help/ru.html | 2 +- .../ВыборИсполнителяБизнесПроцесса/Module.bsl | 20 +- SSL/src/CommonForms/ВыборКонтакта/Form.form | 3 - SSL/src/CommonForms/ВыборКонтакта/Module.bsl | 54 +- .../Module.bsl | 23 +- .../ВыборОбъектовМетаданных/Help/ru.html | 8 + .../ВыборОбъектовМетаданных/Module.bsl | 96 +- .../ВыборОбъектовМетаданных.mdo | 5 + .../ConditionalAppearance.dcssca | 32 - SSL/src/CommonForms/ВыборПодписей/Form.form | 17 - .../CommonForms/ВыборПодписей/Help/ru.html | 2 +- SSL/src/CommonForms/ВыборПодписей/Module.bsl | 57 +- .../ВыборПрисоединенныхФайлов/Form.form | 104 +- .../ВыборПрисоединенныхФайлов/Help/ru.html | 9 + .../ВыборПрисоединенныхФайлов/Module.bsl | 37 +- .../ВыборПрисоединенныхФайлов.mdo | 5 + .../ВыборПроизвольногоПериода/Module.bsl | 11 +- .../ВыборПутиКАрхивуФайловТомов/Module.bsl | 20 +- .../ВыборРолиИсполнителя/Module.bsl | 21 +- .../ConditionalAppearance.dcssca | 44 - .../ВыборСертификатовШифрования/Help/ru.html | 2 +- .../ВыборСертификатовШифрования/Module.bsl | 52 +- .../ВыборУзловПлановОбмена/Help/ru.html | 11 + .../ВыборУзловПлановОбмена/Module.bsl | 19 +- .../ВыборУзловПлановОбмена.mdo | 5 + .../ВыборФорматаВложений/Help/ru.html | 6 + .../ВыборФорматаВложений/Module.bsl | 16 +- .../ВыборФорматаВложений.mdo | 5 + .../ConditionalAppearance.dcssca | 23 - .../CommonForms/ГруппыПользователей/Form.form | 4 - .../ГруппыПользователей/Help/ru.html | 11 + .../ГруппыПользователей/Module.bsl | 44 +- .../ГруппыПользователей.mdo | 5 + .../CommonForms/ДлительнаяОперация/Module.bsl | 11 +- .../Module.bsl | 16 +- .../ConditionalAppearance.dcssca | 43 - .../ДобавлениеПодписиИзФайла/Form.form | 4 + .../ДобавлениеПодписиИзФайла/Help/ru.html | 2 +- .../ДобавлениеПодписиИзФайла/Module.bsl | 43 +- .../ДополнительноеОписание/Module.bsl | 6 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 19 +- .../Module.bsl | 20 +- .../ConditionalAppearance.dcssca | 23 - .../МастерАнкетыПоРазделам/Module.bsl | 34 +- .../Module.bsl | 16 +- .../НапоминаниеПриРедактировании/Module.bsl | 11 +- .../НастройкаМоихОтчетовИОбработок/Module.bsl | 16 +- .../НастройкаОбменаСообщениями/Module.bsl | 21 +- .../Help/ru.html | 31 +- .../Module.bsl | 20 +- .../НастройкаОтправкиSMS/Help/ru.html | 2 +- .../НастройкаОтправкиSMS/Module.bsl | 8 +- .../НастройкиАгентаСервиса/Form.form | 175 - .../НастройкиАгентаСервиса.mdo | 11 - .../НастройкиКриптографии/Form.form | 17 + .../НастройкиКриптографии/Help/ru.html | 2 +- .../НастройкиКриптографии/Module.bsl | 117 +- .../ConditionalAppearance.dcssca | 23 - .../НастройкиПравОбъектов/Module.bsl | 49 +- .../Module.bsl | 16 +- SSL/src/CommonForms/ОбменыДанными/Form.form | 326 +- .../CommonForms/ОбменыДанными/Help/ru.html | 65 +- SSL/src/CommonForms/ОбменыДанными/Module.bsl | 62 +- .../ОписаниеИзмененийСистемы/Form.form | 21 + .../ОписаниеИзмененийСистемы/Help/ru.html | 12 +- .../ОписаниеИзмененийСистемы/Module.bsl | 54 +- .../Module.bsl | 32 +- .../CommonForms/ОтправкаСообщения/Form.form | 96 +- .../ОтправкаСообщения/Help/ru.html | 22 +- .../CommonForms/ОтправкаСообщения/Module.bsl | 211 +- .../Help/ru.html | 6 + .../Module.bsl | 26 +- .../ОтправкаТабличныхДокументовПоПочте.mdo | 5 + SSL/src/CommonForms/ПанельОтчетов/Form.form | 1248 +- .../CommonForms/ПанельОтчетов/Help/ru.html | 66 +- SSL/src/CommonForms/ПанельОтчетов/Module.bsl | 1799 +- .../Form.form | 2373 +-- .../Help/ru.html | 8 + .../Module.bsl | 290 + .../ПараметрыАдминистрированияПрограммы.mdo} | 4 +- .../Form.form | 969 - .../Help/ru.html | 9 - .../Module.bsl | 175 - .../ПараметрыПроксиСервера/Help/ru.html | 7 +- .../ПараметрыПроксиСервера/Module.bsl | 21 +- .../ПерсональныеНастройкиЭП/Form.form | 19 +- .../ПерсональныеНастройкиЭП/Help/ru.html | 2 +- .../ПерсональныеНастройкиЭП/Module.bsl | 25 +- .../Help/ru.html | 2 +- .../Module.bsl | 31 +- .../ConditionalAppearance.dcssca | 28 - .../CommonForms/ПечатьДокументов/Form.form | 16 +- .../CommonForms/ПечатьДокументов/Help/ru.html | 42 +- .../CommonForms/ПечатьДокументов/Module.bsl | 137 +- .../ПодготовкаНовогоПисьма/Module.bsl | 26 +- .../ПодключениеКонечнойТочки/Module.bsl | 15 +- SSL/src/CommonForms/ПодписьЭП/Help/ru.html | 2 +- SSL/src/CommonForms/ПодписьЭП/Module.bsl | 11 +- .../Help/ru.html | 15 +- .../Module.bsl | 17 +- .../ConditionalAppearance.dcssca | 57 - .../ПользователиСервиса/Module.bsl | 61 +- SSL/src/CommonForms/ПраваДоступа/Help/ru.html | 20 + SSL/src/CommonForms/ПраваДоступа/Module.bsl | 23 +- .../CommonForms/ПраваДоступа/ПраваДоступа.mdo | 5 + .../ConditionalAppearance.dcssca | 67 - .../ПраваДоступаУпрощенно/Form.form | 6 +- .../ПраваДоступаУпрощенно/Help/ru.html | 21 + .../ПраваДоступаУпрощенно/Module.bsl | 107 +- .../ПраваДоступаУпрощенно.mdo | 5 + .../Form.form | 3 +- .../Module.bsl | 415 +- .../ConditionalAppearance.dcssca | 53 - .../CommonForms/ПрисоединенныеФайлы/Form.form | 118 +- .../ПрисоединенныеФайлы/Help/ru.html | 64 + .../ПрисоединенныеФайлы/Module.bsl | 89 +- .../ПрисоединенныеФайлы.mdo | 5 + .../CommonForms/ПрисоединенныйФайл/Form.form | 2 +- .../ПрисоединенныйФайл/Help/ru.html | 66 + .../CommonForms/ПрисоединенныйФайл/Module.bsl | 118 +- .../ПрисоединенныйФайл/ПрисоединенныйФайл.mdo | 5 + .../Module.bsl | 21 +- .../Help/ru.html | 15 +- .../Module.bsl | 23 +- SSL/src/CommonForms/СертификатЭП/Help/ru.html | 2 +- SSL/src/CommonForms/СертификатЭП/Module.bsl | 15 +- .../Module.bsl | 13 +- .../Help/ru.html | 2 +- .../Module.bsl | 20 +- .../СозданиеРезервнойКопии/Module.bsl | 36 +- .../СохранениеПечатнойФормы/Help/ru.html | 7 + .../СохранениеПечатнойФормы/Module.bsl | 21 +- .../СохранениеПечатнойФормы.mdo | 5 + .../ConditionalAppearance.dcssca | 23 - .../СтруктураПодчиненности/Form.form | 4 - .../СтруктураПодчиненности/Help/ru.html | 2 +- .../СтруктураПодчиненности/Module.bsl | 26 +- .../УстановкаВедущейКонечнойТочки/Module.bsl | 17 +- .../УстановкаПодписиЭП/Help/ru.html | 2 +- .../CommonForms/УстановкаПодписиЭП/Module.bsl | 20 +- .../ConditionalAppearance.dcssca | 63 - .../CommonForms/УточнениеКонтактов/Module.bsl | 63 +- SSL/src/CommonForms/ФайлыВТоме/Form.form | 91 +- SSL/src/CommonForms/ФайлыВТоме/Help/ru.html | 12 + SSL/src/CommonForms/ФайлыВТоме/Module.bsl | 21 +- SSL/src/CommonForms/ФайлыВТоме/ФайлыВТоме.mdo | 5 + .../ФормаВариантаОтчета/Module.bsl | 26 +- .../CommonForms/ФормаНастроекОтчета/Form.form | 4 + .../ФормаНастроекОтчета/Module.bsl | 37 +- SSL/src/CommonForms/ФормаОтчета/Form.form | 813 +- SSL/src/CommonForms/ФормаОтчета/Help/ru.html | 56 + SSL/src/CommonForms/ФормаОтчета/Module.bsl | 858 +- .../CommonForms/ФормаОтчета/ФормаОтчета.mdo | 5 + .../CommonModules/АвтономнаяРабота/Module.bsl | 7 +- .../АвтономнаяРаботаСлужебный/Module.bsl | 57 +- .../Module.bsl | 7 +- .../Module.bsl | 1901 ++ ...министрированиеКластераCOMКлиентСервер.mdo | 12 + .../Module.bsl | 2251 +++ ...министрированиеКластераRASКлиентСервер.mdo | 12 + .../Module.bsl | 1336 ++ .../АдминистрированиеКластераКлиентСервер.mdo | 12 + .../АдресныйКлассификатор/Module.bsl | 2973 +-- .../Module.bsl | 32 +- .../АдресныйКлассификаторКлиент/Module.bsl | 108 +- .../Module.bsl | 73 +- .../Module.bsl | 12 +- .../Module.bsl | 53 +- .../CommonModules/Анкетирование/Module.bsl | 85 +- .../АнкетированиеКлиент/Module.bsl | 4 +- .../АнкетированиеКлиентСервер/Module.bsl | 14 +- .../БанкиСлужебныйВМоделиСервиса/Module.bsl | 10 +- .../Module.bsl | 55 +- .../БизнесПроцессыИЗадачиКлиент/Module.bsl | 136 +- .../Module.bsl | 4 +- .../Module.bsl | 7 +- .../БизнесПроцессыИЗадачиСервер/Module.bsl | 63 +- .../БизнесПроцессыИЗадачиСобытия/Module.bsl | 5 +- .../CommonModules/ВариантыОтчетов/Module.bsl | 2861 ++- .../ВариантыОтчетовКлиент/Module.bsl | 24 +- .../ВариантыОтчетовКлиентСервер/Module.bsl | 68 +- .../Module.bsl | 67 +- .../ВариантыОтчетовПовтИсп/Module.bsl | 26 +- .../ВерсионированиеОбъектов/Module.bsl | 62 +- .../ВерсионированиеОбъектовКлиент/Module.bsl | 12 +- .../ВерсионированиеОбъектовСобытия/Module.bsl | 9 +- .../CommonModules/Взаимодействия/Module.bsl | 292 +- .../ВзаимодействияВызовСервера/Module.bsl | 5 +- .../ВзаимодействияКлиент/Module.bsl | 64 +- .../Module.bsl | 7 +- .../ВзаимодействияКлиентСервер/Module.bsl | 53 +- .../Module.bsl | 7 +- .../ВзаимодействияПереопределяемый/Module.bsl | 5 +- .../ВзаимодействияСобытия/Module.bsl | 6 +- .../ВнешниеПользователи/Module.bsl | 5 +- .../CommonModules/ГрафикиРаботы/Module.bsl | 140 +- .../ГрафикиРаботыКлиентСервер/Module.bsl | 5 +- .../Module.bsl | 7 +- .../ДатыЗапретаИзменения/Module.bsl | 10 +- .../Module.bsl | 4 +- .../ДатыЗапретаИзмененияПовтИсп/Module.bsl | 5 +- .../ДатыЗапретаИзмененияСлужебный/Module.bsl | 182 +- .../ДлительныеОперации/Module.bsl | 23 +- .../ДлительныеОперацииКлиент/Module.bsl | 7 +- .../Module.bsl | 5 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 617 +- .../Module.bsl | 523 - .../Module.bsl | 36 +- .../Module.bsl | 10 +- .../Module.bsl | 127 +- .../Module.bsl | 10 +- .../Module.bsl | 172 +- .../Module.bsl | 45 - ...езопасномРежимеСлужебныйВМоделиСервиса.mdo | 11 - .../Module.bsl | 1683 -- .../Module.bsl | 373 - ...ОтчетыИОбработкиВМоделиСервисаМанифест.mdo | 11 - .../Module.bsl | 238 - ...работкиВМоделиСервисаМанифестИнтерфейс.mdo | 11 - .../Module.bsl | 53 - .../Module.bsl | 35 - ...ыИОбработкиВМоделиСервисаСовместимость.mdo | 11 - .../Module.bsl | 126 - ...киВМоделиСервисаСовместимостьИнтерфейс.mdo | 11 - .../Module.bsl | 24 +- .../Module.bsl | 135 +- .../Module.bsl | 7 +- .../Module.bsl | 5 +- .../Module.bsl | 4 +- .../Module.bsl | 47 +- .../Module.bsl | 17 +- .../Module.bsl | 124 - ...боткиРегламентныеЗаданияВМоделиСервиса.mdo | 11 - .../ЖурналРегистрации/Module.bsl | 107 +- .../ЖурналРегистрацииВызовСервера/Module.bsl | 5 +- .../ЖурналРегистрацииКлиент/Module.bsl | 42 +- .../ЗаметкиПользователя/Module.bsl | 44 + .../ЗаметкиПользователя.mdo} | 6 +- .../ЗаметкиПользователяСлужебный/Module.bsl | 12 +- .../Module.bsl | 23 +- .../Module.bsl | 11 +- .../ЗащитаПерсональныхДанных/Module.bsl | 10 +- .../ЗащитаПерсональныхДанныхКлиент/Module.bsl | 5 +- .../Module.bsl | 5 +- .../Module.bsl | 7 +- .../Module.bsl | 15 +- .../Module.bsl | 11 +- .../ИнформацияПриЗапуске/Module.bsl | 5 +- .../ИнформацияПриЗапускеКлиент/Module.bsl | 4 +- .../КалендарныеГрафики/Module.bsl | 38 +- .../Module.bsl | 7 +- .../Module.bsl | 10 +- .../КонтактнаяИнформацияXML/Module.bsl | 48 +- .../Module.bsl | 10 +- .../Module.bsl | 56 +- .../КонтактнаяИнформацияСлужебный/Module.bsl | 487 +- .../Module.bsl | 4 +- .../Module.bsl | 62 +- .../Module.bsl | 4 +- .../Module.bsl | 7 +- .../Module.bsl | 14 +- .../Module.bsl | 5 +- .../Module.bsl | 11 +- .../Module.bsl | 7 +- .../Module.bsl | 5 +- .../НапоминанияПользователяКлиент/Module.bsl | 17 +- .../Module.bsl | 7 +- .../Module.bsl | 5 +- .../Module.bsl | 7 +- .../Module.bsl | 12 +- .../НастройкаПорядкаЭлементов/Module.bsl | 10 +- .../Module.bsl | 10 +- .../Module.bsl | 24 +- .../Module.bsl | 4 +- .../Module.bsl | 34 + ...ИспользованиеВнешнихРесурсовГлобальный.mdo | 11 + .../Module.bsl | 573 + ...ийНаИспользованиеВнешнихРесурсовКлиент.mdo | 10 + .../НастройкиПользователейКлиент/Module.bsl | 7 +- .../ОбменДаннымиВМоделиСервиса/Module.bsl | 206 +- .../Module.bsl | 35 +- .../Module.bsl | 5 +- .../ОбменДаннымиВнешнееСоединение/Module.bsl | 5 +- .../ОбменДаннымиВызовСервера/Module.bsl | 101 +- .../ОбменДаннымиГлобальный/Module.bsl | 7 +- .../ОбменДаннымиКлиент/Module.bsl | 241 +- .../ОбменДаннымиКлиентСервер/Module.bsl | 5 +- .../ОбменДаннымиПереопределяемый/Module.bsl | 145 +- .../ОбменДаннымиПовтИсп/Module.bsl | 183 +- .../ОбменДаннымиСервер/Module.bsl | 1863 +- .../ОбменДаннымиСобытия/Module.bsl | 205 +- .../CommonModules/ОбменСообщениями/Module.bsl | 235 +- .../ОбменСообщениямиВнутренний/Module.bsl | 79 +- .../ОбменСообщениямиВызовСервера/Module.bsl | 7 +- .../ОбменСообщениямиКлиент/Module.bsl | 4 +- .../Module.bsl | 36 +- .../ОбменСообщениямиПовтИсп/Module.bsl | 7 +- .../ОбновлениеИнформационнойБазы/Module.bsl | 2797 +-- .../Module.bsl | 28 +- .../Module.bsl | 35 +- .../Module.bsl | 5 +- .../Module.bsl | 74 +- .../Module.bsl | 5 +- .../Module.bsl | 13 +- .../Module.bsl | 3080 +++ .../ОбновлениеИнформационнойБазыСлужебный.mdo | 12 + .../Module.bsl | 156 +- .../Module.bsl | 22 +- .../Module.bsl | 6 +- .../ОбновлениеКонфигурации/Module.bsl | 73 +- .../Module.bsl | 5 +- .../ОбновлениеКонфигурацииКлиент/Module.bsl | 87 +- .../Module.bsl | 4 +- .../Module.bsl | 22 +- .../Module.bsl | 44 +- .../Module.bsl | 8 +- .../CommonModules/ОбщегоНазначения/Module.bsl | 1841 +- .../ОбщегоНазначенияВызовСервера/Module.bsl | 10 +- .../ОбщегоНазначенияГлобальный/Module.bsl | 5 +- .../ОбщегоНазначенияКлиент/Module.bsl | 84 +- .../Module.bsl | 28 +- .../ОбщегоНазначенияКлиентПовтИсп/Module.bsl | 10 +- .../ОбщегоНазначенияКлиентСервер/Module.bsl | 221 +- .../Module.bsl | 52 +- .../ОбщегоНазначенияПовтИсп/Module.bsl | 60 +- .../ОрганизацииСлужебный/Module.bsl | 19 +- SSL/src/CommonModules/ОтправкаSMS/Module.bsl | 51 +- .../ОтправкаSMSПереопределяемый/Module.bsl | 20 +- .../ОтправкаSMSЧерезБилайн/Module.bsl | 24 +- .../ОтправкаSMSЧерезМТС/Module.bsl | 38 +- .../Module.bsl | 44 +- .../Module.bsl | 200 +- .../ОценкаПроизводительностиКлиент/Module.bsl | 55 +- .../Module.bsl | 9 +- .../Module.bsl | 52 +- .../Module.bsl | 236 +- .../CommonModules/ОчередьЗаданий/Module.bsl | 49 +- .../ОчередьЗаданийПереопределяемый/Module.bsl | 15 +- .../ОчередьЗаданийСлужебный/Module.bsl | 484 +- .../ОчередьЗаданийСлужебныйПовтИсп/Module.bsl | 16 +- .../Module.bsl | 9 +- .../ПерепрефиксацияОбъектов/Module.bsl | 90 +- .../Module.bsl | 5 +- .../ПолнотекстовыйПоискСервер/Module.bsl | 42 +- .../ПолучениеФайловИзИнтернета/Module.bsl | 190 +- .../Module.bsl | 86 +- .../Module.bsl | 185 +- .../Module.bsl | 26 +- SSL/src/CommonModules/Пользователи/Module.bsl | 173 +- .../ПользователиКлиентСервер/Module.bsl | 7 +- .../ПользователиПереопределяемый/Module.bsl | 64 +- .../ПользователиСлужебный/Module.bsl | 1691 +- .../Module.bsl | 173 +- .../Module.bsl | 5 +- .../Module.bsl | 7 +- .../Module.bsl | 41 +- .../ПользователиСлужебныйКлиент/Module.bsl | 97 +- .../Module.bsl | 5 +- .../ПользователиСлужебныйПовтИсп/Module.bsl | 4 +- .../ПоставляемыеДанные/Module.bsl | 20 +- .../Module.bsl | 5 +- .../Module.bsl | 10 +- .../Module.bsl | 8 +- .../Module.bsl | 73 +- .../ПрефиксацияОбъектовПовтИсп/Module.bsl | 5 +- .../ПрефиксацияОбъектовСлужебный/Module.bsl | 31 +- .../ПрефиксацияОбъектовСобытия/Module.bsl | 13 +- .../ПрисоединенныеФайлы/Module.bsl | 40 +- .../ПрисоединенныеФайлыКлиент/Module.bsl | 60 +- .../Module.bsl | 31 + .../ПрисоединенныеФайлыКлиентСервер.mdo} | 7 +- .../Module.bsl | 7 +- .../ПрисоединенныеФайлыСлужебный/Module.bsl | 42 +- .../Module.bsl | 21 +- .../Module.bsl | 82 +- .../Module.bsl | 15 +- .../РаботаВБезопасномРежиме/Module.bsl | 741 + .../РаботаВБезопасномРежиме.mdo} | 6 +- .../РаботаВБезопасномРежимеКлиент/Module.bsl | 60 + .../РаботаВБезопасномРежимеКлиент.mdo} | 6 +- .../Module.bsl | 42 + ...аботаВБезопасномРежимеПереопределяемый.mdo | 11 + .../Module.bsl | 804 + .../РаботаВБезопасномРежимеСлужебный.mdo | 11 + .../Module.bsl | 41 + ...ботаВБезопасномРежимеСлужебныйПовтИсп.mdo} | 6 +- .../РаботаВМоделиСервиса/Module.bsl | 307 +- .../РаботаВМоделиСервисаКлиент/Module.bsl | 5 +- .../Module.bsl | 4 +- .../РаботаВМоделиСервисаПовтИсп/Module.bsl | 5 +- .../CommonModules/РаботаСБанками/Module.bsl | 64 +- .../РаботаСБанкамиГлобальный/Module.bsl | 5 +- .../РаботаСБанкамиКлиент/Module.bsl | 10 +- .../РаботаСБанкамиПереопределяемый/Module.bsl | 7 +- .../РаботаСКурсамиВалют/Module.bsl | 267 +- .../Module.bsl | 5 +- .../РаботаСКурсамиВалютГлобальный/Module.bsl | 4 +- .../РаботаСКурсамиВалютКлиент/Module.bsl | 10 +- .../Module.bsl | 10 +- .../Module.bsl | 7 +- .../РаботаСПочтовымиСообщениями/Module.bsl | 300 +- .../Module.bsl | 38 + ...ботаСПочтовымиСообщениямиВызовСервера.mdo} | 4 +- .../Module.bsl | 143 +- .../Module.bsl | 550 +- .../РаботаСПочтовымиСообщениямиСлужебный.mdo} | 4 +- .../CommonModules/РаботаСФайлами/Module.bsl | 6 +- .../РаботаСФайламиКлиент/Module.bsl | 44 +- .../Module.bsl | 5 +- .../РаботаСФайламиКлиентСервер/Module.bsl | 5 +- .../РаботаСФайламиПереопределяемый/Module.bsl | 9 +- .../РаботаСФайламиСлужебный/Module.bsl | 54 +- .../Module.bsl | 23 +- .../РаботаСФайламиСлужебныйКлиент/Module.bsl | 87 +- .../Module.bsl | 5 +- .../РаботаСоСканеромКлиент/Module.bsl | 5 +- .../CommonModules/РассылкаОтчетов/Module.bsl | 192 +- .../РассылкаОтчетовВызовСервера/Module.bsl | 15 +- .../РассылкаОтчетовКлиент/Module.bsl | 10 +- .../РассылкаОтчетовКлиентСервер/Module.bsl | 13 +- .../Module.bsl | 4 +- .../РассылкаОтчетовПовтИсп/Module.bsl | 5 +- .../Module.bsl | 157 +- .../РегламентныеЗаданияСервер/Module.bsl | 5 +- .../РегламентныеЗаданияСлужебный/Module.bsl | 12 +- .../Module.bsl | 7 +- .../РезервноеКопированиеИБКлиент/Module.bsl | 66 +- .../Module.bsl | 5 +- .../РезервноеКопированиеИБСервер/Module.bsl | 169 +- .../Module.bsl | 153 +- .../Module.bsl | 7 +- .../Module.bsl | 7 +- .../Module.bsl | 5 +- SSL/src/CommonModules/СоединенияИБ/Module.bsl | 322 +- .../СоединенияИБВызовСервера/Module.bsl | 117 +- .../Module.bsl | 19 +- .../СоединенияИБГлобальный/Module.bsl | 20 +- .../СоединенияИБКлиент/Module.bsl | 88 +- .../СоединенияИБКлиентСервер/Module.bsl | 555 +- .../Module.bsl | 13 +- .../Module.bsl | 10 +- .../Module.bsl | 11 +- .../Module.bsl | 18 +- .../СообщенияВМоделиСервиса/Module.bsl | 36 +- .../Module.bsl | 18 +- .../Module.bsl | 37 +- .../СообщенияВМоделиСервисаПовтИсп/Module.bsl | 4 +- .../Module.bsl | 36 +- .../Module.bsl | 123 - ...полнительныхОтчетовИОбработокИнтерфейс.mdo | 11 - .../Module.bsl | 73 - ...ИОбработокОбработчикТрансляции_1_0_0_1.mdo | 11 - .../Module.bsl | 11 +- .../Module.bsl | 7 +- .../Module.bsl | 12 +- .../Module.bsl | 9 +- .../Module.bsl | 9 +- .../Module.bsl | 12 +- .../Module.bsl | 11 +- .../Module.bsl | 10 +- .../Module.bsl | 11 +- .../Module.bsl | 10 +- .../Module.bsl | 15 +- .../Module.bsl | 14 +- .../Module.bsl | 10 +- .../Module.bsl | 10 +- .../Module.bsl | 10 +- .../Module.bsl | 165 +- .../Module.bsl | 10 +- .../Module.bsl | 13 +- .../Module.bsl | 14 +- .../Module.bsl | 9 +- .../Module.bsl | 10 +- .../Module.bsl | 5 +- .../Module.bsl | 153 - ...ительнымиОтчетамиИОбработкамиИнтерфейс.mdo | 11 - .../Module.bsl | 234 - ...ОбработкамиОбработчикСообщения_1_0_1_1.mdo | 11 - .../Module.bsl | 238 - ...тельнымиОтчетамиИОбработкамиРеализация.mdo | 11 - .../Module.bsl | 16 +- .../Module.bsl | 74 +- .../Module.bsl | 12 +- .../СтандартныеПодсистемыКлиент/Module.bsl | 407 +- .../Module.bsl | 12 +- .../Module.bsl | 5 +- .../СтандартныеПодсистемыПовтИсп/Module.bsl | 64 +- .../СтандартныеПодсистемыСервер/Module.bsl | 950 +- .../СтроковыеФункцииКлиентСервер/Module.bsl | 94 +- .../Module.bsl | 4 +- .../CommonModules/ТрансляцияXDTO/Module.bsl | 5 +- .../ТрансляцияXDTOПереопределяемый/Module.bsl | 9 +- .../ТрансляцияXDTOСлужебный/Module.bsl | 22 +- .../Module.bsl | 9 +- .../УправлениеДоступом/Module.bsl | 16 +- .../Module.bsl | 9 +- .../УправлениеДоступомСлужебный/Module.bsl | 705 +- .../Module.bsl | 11 +- .../Module.bsl | 5 +- .../Module.bsl | 6 +- .../Module.bsl | 5 +- .../Module.bsl | 5 +- .../Module.bsl | 6 +- .../Module.bsl | 7 +- .../Module.bsl | 157 +- .../Module.bsl | 141 +- .../Module.bsl | 93 +- .../Module.bsl | 10 +- .../УправлениеПечатью/Module.bsl | 640 +- .../Module.bsl | 2 +- .../УправлениеПечатьюВызовСервера/Module.bsl | 35 +- .../УправлениеПечатьюКлиент/Module.bsl | 53 +- .../УправлениеПечатьюКлиентПовтИсп/Module.bsl | 5 +- .../Module.bsl | 5 +- .../Module.bsl | 23 +- .../УправлениеСвойствами/Module.bsl | 97 +- .../УправлениеСвойствамиКлиент/Module.bsl | 5 +- .../Module.bsl | 22 +- .../УправлениеСвойствамиСлужебный/Module.bsl | 39 +- .../УправлениеЭлектроннойПочтой/Module.bsl | 65 +- .../Module.bsl | 6 +- .../CommonModules/ФайловыеФункции/Module.bsl | 5 +- .../ФайловыеФункцииСлужебный/Module.bsl | 52 +- .../Module.bsl | 11 +- .../Module.bsl | 4 +- .../ФайловыеФункцииСлужебныйКлиент/Module.bsl | 9 +- .../Module.bsl | 5 +- .../Module.bsl | 12 +- .../Module.bsl | 9 +- .../CommonModules/ФизическиеЛица/Module.bsl | 424 - .../ФизическиеЛицаКлиент/Module.bsl | 23 - .../ФизическиеЛицаКлиентСервер/Module.bsl | 290 +- .../Module.bsl | 15 +- .../ФормаОтчетаПереопределяемый/Module.bsl | 32 +- .../ФункцииОтчетовКлиентСервер/Module.bsl | 15 +- .../ЭлектроннаяПодпись/Module.bsl | 62 +- .../ЭлектроннаяПодписьКлиент/Module.bsl | 35 +- .../ЭлектроннаяПодписьКлиентСервер/Module.bsl | 9 +- .../ЭлектроннаяПодписьПовтИсп/Module.bsl | 5 +- .../ЭлектроннаяПочтаВызовСервера/Module.bsl | 32 - .../ПримечаниеЖурналаРегистрации/Picture.png | Bin 0 -> 201 bytes .../ПримечаниеЖурналаРегистрации.mdo | 8 + .../ru.html | 2 +- .../КомпонентаПечатиQRКода/Template.bin | Bin 0 -> 406366 bytes .../КомпонентаПечатиQRКода.mdo | 10 + .../Template.dcs | 10 +- SSL/src/Configuration/Configuration.mdo | 120 +- .../ManagedApplicationModule.bsl | 4 +- .../OrdinaryApplicationModule.bsl | 4 +- .../Configuration/ParentConfigurations.bin | 2 +- SSL/src/Configuration/SessionModule.bsl | 1 - .../ValueManagerModule.bsl | 13 + ...раиватьРазрешенияВПрофиляхБезопасности.mdo | 20 + .../АдресАгентаСервиса/АдресАгентаСервиса.mdo | 20 - SSL/src/Constants/ГлавныйУзел/ГлавныйУзел.mdo | 19 + .../ИмяПользователяАгентаСервиса.mdo | 20 - ...тельныхОтчетовИОбработокВМоделиСервиса.mdo | 20 - .../ValueManagerModule.bsl | 5 +- .../ValueManagerModule.bsl | 5 +- .../ValueManagerModule.bsl | 5 +- .../ValueManagerModule.bsl | 6 +- .../ИспользуютсяПрофилиБезопасности.mdo | 20 + .../ValueManagerModule.bsl | 9 + .../ValueManagerModule.bsl | 9 + ...ствоЭлементовВТранзакцииЗагрузкиДанных.mdo | 23 + ...тельныхОтчетовИОбработокВМоделиСервиса.mdo | 24 - ...ройкаАвтономногоРабочегоМестаЗавершена.mdo | 19 - .../ValueManagerModule.bsl | 9 - ...тельныхОтчетовИОбработокВМоделиСервиса.mdo | 20 - .../ValueManagerModule.bsl | 5 +- .../ValueManagerModule.bsl | 10 +- .../ValueManagerModule.bsl | 11 +- .../ValueManagerModule.bsl | 5 +- .../ПарольПользователяАгентаСервиса.mdo | 20 - .../ПрофильБезопасностиИнформационнойБазы.mdo | 21 + ...окРегламентнымиЗаданиямиВМоделиСервиса.mdo | 20 - .../CommandModule.bsl | 6 +- .../Forms/Форма/Module.bsl | 36 +- .../Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 20 +- .../Help/ru.html | 2 +- .../ConditionalAppearance.dcssca | 23 - .../Form.form | 76 +- .../Help/ru.html | 4 - .../Module.bsl | 155 +- .../АктивныеПользователи/Help/ru.html | 28 +- .../АктивныеПользователи.mdo | 5 - .../Module.bsl | 22 +- .../Forms/Форма/ConditionalAppearance.dcssca | 93 - .../Forms/Форма/Form.form | 462 +- .../Forms/Форма/Module.bsl | 326 +- .../Help/ru.html | 95 +- .../ObjectModule.bsl | 21 +- .../Forms/ВводАдреса/Form.form | 55 + .../Forms/ВводАдреса/Help/ru.html | 9 +- .../Forms/ВводАдреса/Module.bsl | 204 +- .../Forms/ВводТелефона/Module.bsl | 20 +- .../Forms/НаселенныйПунктАдреса/Help/ru.html | 4 + .../Forms/НаселенныйПунктАдреса/Module.bsl | 52 +- .../ПоискАдресаПоПочтовомуИндексу/Module.bsl | 9 +- .../ВводКонтактнойИнформации.mdo | 5 + .../Forms/Форма/Form.form | 458 +- .../Forms/Форма/Module.bsl | 218 +- .../CommandModule.bsl | 5 - .../Список/ExtInfo/ListSettings.dcss | 17 - .../ДополнительныеПараметры/Help/ru.html | 5 - .../Forms/Форма/ConditionalAppearance.dcssca | 23 - .../ГрупповоеИзменениеОбъектов/Help/ru.html | 9 - .../CommandModule.bsl | 5 + .../Forms/ВыборВидаОбъектов/Form.form | 4 +- .../Forms/ВыборВидаОбъектов/Module.bsl | 19 +- .../Список/ExtInfo/ListSettings.dcss | 0 .../Forms/ВыбранныеЭлементы/Form.form | 2 +- .../Forms/ВыбранныеЭлементы/Module.bsl | 22 +- .../Forms/ДополнительныеПараметры/Form.form | 0 .../ДополнительныеПараметры/Help/ru.html | 18 + .../Forms/ДополнительныеПараметры/Module.bsl | 25 +- .../Forms/Форма/Form.form | 311 +- .../Forms/Форма/Module.bsl | 273 +- .../ГрупповоеИзменениеРеквизитов/Help/ru.html | 49 + .../ManagerModule.bsl | 0 .../ObjectModule.bsl | 37 +- .../Templates/ФильтрРеквизитов/Template.txt | 5 +- .../ГрупповоеИзменениеРеквизитов.mdo} | 6 +- .../Forms/ЖурналРегистрации/Form.form | 1109 +- .../Forms/ЖурналРегистрации/Module.bsl | 108 +- .../Forms/ОтборЖурналаРегистрации/Form.form | 1815 +- .../Forms/ОтборЖурналаРегистрации/Module.bsl | 70 +- .../Forms/РазделениеДанныхСеанса/Form.form | 640 + .../Forms/РазделениеДанныхСеанса/Module.bsl | 75 + .../Forms/РедакторСоставаСвойства/Module.bsl | 21 +- .../Forms/ФормаСобытия/Form.form | 15 +- .../Forms/ФормаСобытия/Help/ru.html | 47 +- .../Forms/ФормаСобытия/Module.bsl | 27 +- .../ЖурналРегистрации/Help/ru.html | 100 +- .../ЖурналРегистрации/ManagerModule.bsl | 5 +- .../ЖурналРегистрации/ЖурналРегистрации.mdo | 9 + .../Forms/Форма/ConditionalAppearance.dcssca | 26 - .../ЗагрузкаКурсовВалют/Forms/Форма/Form.form | 8 +- .../Forms/Форма/Module.bsl | 44 +- .../ЗагрузкаКурсовВалют/Help/ru.html | 49 +- .../ЗагрузкаКурсовВалют/ObjectModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../ObjectModule.bsl | 6 +- .../ConditionalAppearance.dcssca | 143 - .../Forms/ЗаменаЭлементов/Form.form | 12 +- .../Forms/ЗаменаЭлементов/Help/ru.html | 22 +- .../Forms/ЗаменаЭлементов/Module.bsl | 42 +- .../МногострочноеПредупреждение/Module.bsl | 11 +- .../ConditionalAppearance.dcssca | 259 - .../Forms/ОбъединениеЭлементов/Form.form | 2 +- .../Forms/ОбъединениеЭлементов/Help/ru.html | 30 +- .../Forms/ОбъединениеЭлементов/Module.bsl | 158 +- .../ЗаменаСсылок/ManagerModule.bsl | 7 +- .../Forms/Форма/ConditionalAppearance.dcssca | 24 - .../Forms/Форма/Form.form | 8 +- .../Forms/Форма/Module.bsl | 41 +- .../ManagerModule.bsl | 5 +- .../ВыборВидаОбъектаСоставаУзла/Module.bsl | 21 +- .../ОбщиеПараметрыСинхронизации/Module.bsl | 6 +- .../РедактированиеПериодаИОтбора/Form.form | 5 +- .../РедактированиеПериодаИОтбора/Module.bsl | 23 +- .../РедактированиеСоставаНастроек/Module.bsl | 21 +- .../Forms/СоставВыгрузки/Help/ru.html | 15 + .../Forms/СоставВыгрузки/Module.bsl | 30 +- .../Forms/Форма/Module.bsl | 21 +- .../Help/ru.html | 16 + .../ObjectModule.bsl | 205 +- .../СхемаКомпоновкиДанных/Template.dcs | 1 - .../ИнтерактивноеИзменениеВыгрузки.mdo | 10 + .../Forms/Форма/Module.bsl | 105 +- .../ИнформацияПриЗапуске/Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 20 +- .../ObjectModule.bsl | 1215 +- .../ObjectModule.bsl | 251 +- .../Module.bsl | 20 +- .../УсловияРаспространенияОбновлений/ru.html | 2 +- .../CommandModule.bsl | 7 + .../ЗавершениеЗапросаРазрешений/Form.form | 212 + .../ЗавершениеЗапросаРазрешений/Module.bsl | 162 + .../ИнициализацияЗапросаРазрешений/Form.form | 364 + .../ИнициализацияЗапросаРазрешений/Module.bsl | 221 + .../Form.form | 2654 +++ .../Help/ru.html | 8 + .../Module.bsl | 349 + .../Form.form | 1078 + .../Help/ru.html | 37 + .../Module.bsl | 323 + .../Forms/Форма/Form.form | 42 + .../Forms/Форма/Module.bsl | 11 + .../Help/ru.html | 7 + .../ManagerModule.bsl | 2038 ++ .../ObjectModule.bsl} | 0 ...зрешенийНаИспользованиеВнешнихРесурсов.mdo | 82 + .../Forms/НапоминаниеКлиентСервер/Form.form | 4 + .../Forms/НапоминаниеКлиентСервер/Module.bsl | 56 +- .../Forms/Форма/Form.form | 1598 +- .../Forms/Форма/Module.bsl | 102 +- .../Help/ru.html | 2 +- .../НастройкаРезервногоКопированияИБ.mdo | 118 +- .../Forms/НастройкаБезИнтервалов/Module.bsl | 15 +- .../Forms/НастройкаСИнтервалами/Module.bsl | 15 +- .../ManagerModule.bsl | 7 +- .../Forms/ВыборНастроек/Form.form | 3 - .../Forms/ВыборНастроек/Help/ru.html | 18 +- .../Forms/ВыборНастроек/Module.bsl | 27 +- .../ConditionalAppearance.dcssca | 27 - .../Forms/ВыборПользователей/Form.form | 10 +- .../Forms/ВыборПользователей/Help/ru.html | 16 +- .../Forms/ВыборПользователей/Module.bsl | 47 +- .../Help/ru.html | 32 +- .../Module.bsl | 40 +- .../Forms/НастройкиПользователей/Form.form | 3 - .../Forms/НастройкиПользователей/Help/ru.html | 76 +- .../Forms/НастройкиПользователей/Module.bsl | 68 +- .../ОчисткаНастроекПользователей/Help/ru.html | 23 +- .../ОчисткаНастроекПользователей/Module.bsl | 31 +- .../Module.bsl | 11 +- .../НастройкиПользователей/Help/ru.html | 11 + .../НастройкиПользователей/ManagerModule.bsl | 193 +- .../НастройкиПользователей.mdo | 5 + .../НерекомендуемаяВерсияПлатформы/Form.form | 4 +- .../НерекомендуемаяВерсияПлатформы/Module.bsl | 16 +- .../ПорядокОбновленияПлатформы/Form.form | 136 +- .../ПорядокОбновленияПлатформы/Module.bsl | 30 +- .../ru.html | 2 +- .../ПорядокОбновленияДляФайловойБазы/ru.html | 4 +- .../Forms/ИндикацияХодаОбновленияИБ/Form.form | 502 +- .../ИндикацияХодаОбновленияИБ/Help/ru.html | 5 + .../ИндикацияХодаОбновленияИБ/Module.bsl | 645 +- .../Form.form | 209 +- .../Help/ru.html | 17 + .../Module.bsl | 72 +- .../Forms/ОтложенныеОбработчики/Form.form | 340 +- .../Forms/ОтложенныеОбработчики/Help/ru.html | 16 + .../Forms/ОтложенныеОбработчики/Module.bsl | 62 +- .../СообщениеОНеудачномОбновлении/Form.form | 54 +- .../Help/ru.html | 5 + .../СообщениеОНеудачномОбновлении/Module.bsl | 22 +- .../ОбновлениеИнформационнойБазы/Help/ru.html | 40 + .../ОбновлениеИнформационнойБазы.mdo | 25 + .../Forms/НастройкаРасписания/Form.form | 27 - .../Forms/НастройкаРасписания/Module.bsl | 20 +- .../Forms/НастройкаРезервнойКопии/Module.bsl | 20 +- .../Forms/Обозреватель/Module.bsl | 15 +- .../Forms/ПредупреждениеWMI/Form.form | 282 - .../Forms/ПредупреждениеWMI/Module.bsl | 7 - .../Forms/Форма/Form.form | 2819 --- .../Forms/Форма/Module.bsl | 943 +- .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../Template.txt | 11 +- .../ОбновлениеКонфигурации.mdo | 157 +- .../Form.form | 10 + .../Help/ru.html | 12 + .../Module.bsl | 210 +- .../Forms/ИсторияВыполнения/Module.bsl | 12 +- .../Forms/Форма/ConditionalAppearance.dcssca | 91 - .../Forms/Форма/Form.form | 11 +- .../Forms/Форма/Module.bsl | 128 +- .../Forms/ФормаОтбора/Module.bsl | 16 +- .../ОценкаПроизводительности/Help/ru.html | 50 +- .../ОценкаПроизводительности/ObjectModule.bsl | 50 +- .../ОценкаПроизводительности.mdo | 25 + .../CommandModule.bsl | 6 +- .../НастройкиРаботыСФайлами/CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../Commands/ОбщиеНастройки/CommandModule.bsl | 6 +- .../Commands/Органайзер/CommandModule.bsl | 6 +- .../CommandModule.bsl | 6 +- .../ПоддержкаИОбслуживание/CommandModule.bsl | 6 +- .../НастройкиПользователейИПрав/Form.form | 518 +- .../НастройкиПользователейИПрав/Help/ru.html | 2 +- .../НастройкиПользователейИПрав/Module.bsl | 29 +- .../Forms/НастройкиРаботыСФайлами/Form.form | 107 - .../НастройкиРаботыСФайлами/Help/ru.html | 8 +- .../Forms/НастройкиРаботыСФайлами/Module.bsl | 75 +- .../НастройкиСинхронизацииДанных/Form.form | 13 +- .../НастройкиСинхронизацииДанных/Help/ru.html | 2 +- .../НастройкиСинхронизацииДанных/Module.bsl | 112 +- .../Forms/ОбщиеНастройки/Form.form | 419 +- .../Forms/ОбщиеНастройки/Help/ru.html | 4 +- .../Forms/ОбщиеНастройки/Module.bsl | 60 +- .../Forms/Органайзер/Help/ru.html | 2 +- .../Forms/Органайзер/Module.bsl | 21 +- .../Help/ru.html | 2 +- .../ПечатныеФормыОтчетыИОбработки/Module.bsl | 20 +- .../Forms/ПоддержкаИОбслуживание/Form.form | 203 +- .../Forms/ПоддержкаИОбслуживание/Help/ru.html | 2 +- .../Forms/ПоддержкаИОбслуживание/Module.bsl | 106 +- .../ConditionalAppearance.dcssca | 23 - .../Form.form | 31 +- .../Help/ru.html | 2 +- .../Module.bsl | 177 +- .../ПанельАдминистрированияБСП/Help/ru.html | 2 +- .../ManagerModule.bsl | 8 +- .../CommandModule.bsl | 6 +- .../Help/ru.html | 2 +- .../Module.bsl | 15 +- .../Form.form | 354 +- .../Help/ru.html | 2 +- .../Module.bsl | 20 +- .../ПереносФайловВТома/CommandModule.bsl | 6 +- .../ПереносФайловВТома/Forms/Форма/Module.bsl | 16 +- .../Forms/ФормаОтчета/Module.bsl | 10 +- .../ПереносФайловВТома/Help/ru.html | 2 +- .../Forms/ОбластьПоискаДублей}/Form.form | 292 +- .../Forms/ОбластьПоискаДублей/Module.bsl | 83 + .../Forms/ПоискДублей/Form.form | 4726 +++++ .../ПоискДублей/Items/Внимание16/Picture.png | Bin 0 -> 653 bytes .../Items/ДлительнаяОперация48/Picture.gif | Bin 0 -> 14354 bytes .../Items/Информация16/Picture.png | Bin 0 -> 831 bytes .../Items/Информация32/Picture.png | Bin 0 -> 784 bytes .../ValuesPicture.png | Bin 0 -> 653 bytes .../Items/Предупреждение32/Picture.png | Bin 0 -> 1459 bytes .../Forms/ПоискДублей/Module.bsl | 2378 +++ .../Forms/ПравилаОтбора}/Form.form | 313 +- .../Forms/ПравилаОтбора/Help/ru.html | 19 + .../Forms/ПравилаОтбора/Module.bsl | 64 + .../Forms/ПравилаПоиска/Form.form | 761 + .../Forms/ПравилаПоиска/Module.bsl | 258 + .../ПоискИУдалениеДублей/Help/ru.html | 29 + .../ПоискИУдалениеДублей/ObjectModule.bsl | 937 + .../ПоискИУдалениеДублей.mdo | 60 + .../ПолнотекстовыйПоиск/CommandModule.bsl | 6 +- .../Forms/УпрощеннаяФорма/Module.bsl | 15 +- .../Forms/Форма/Module.bsl | 34 +- .../ПолнотекстовыйПоискВДанных/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 17 + .../Forms/Форма/Module.bsl | 54 +- .../Help/ru.html | 54 +- .../ObjectModule.bsl | 28 +- .../Forms/Форма/Form.form | 2126 +- .../Forms/Форма/Module.bsl | 734 +- .../ManagerModule.bsl | 98 + .../ОтключениеСинхронизацииДанных/Module.bsl | 31 +- .../ПолучениеДанныхКорреспондента/Module.bsl | 29 +- .../Forms/Форма/Form.form | 1078 +- .../Forms/Форма/Module.bsl | 215 +- .../ManagerModule.bsl | 6 +- .../Forms/ДополнительноеОписание/Module.bsl | 6 +- .../Form.form | 2087 -- .../Picture.png | Bin 30975 -> 0 bytes .../Module.bsl | 504 - .../Forms/НастройкаНаСторонеСервиса/Form.form | 35 +- .../НастройкаНаСторонеСервиса/Module.bsl | 75 +- .../ManagerModule.bsl | 14 +- .../ru.html | 14 +- .../ru.html | 2 +- ...мощникСозданияАвтономногоРабочегоМеста.mdo | 21 +- .../Forms/ДополнительноеОписание/Module.bsl | 6 +- .../Form.form | 263 - .../Module.bsl | 19 - .../Forms/Форма/Form.form | 1206 +- .../Forms/Форма/Module.bsl | 568 +- .../Help/ru.html | 112 +- .../ObjectModule.bsl | 48 +- .../КакОпределитьПараметрыПодключения/ru.html | 2 +- .../ru.html | 2 +- .../ru.html | 2 +- .../ru.html | 4 +- .../ru.html | 2 +- .../ПомощникСозданияОбменаДанными.mdo | 21 +- .../Forms/ВыборКонстанты/Module.bsl | 21 +- .../Forms/ВыборОбъектовОтбором/Form.form | 1 - .../Forms/ВыборОбъектовОтбором/Module.bsl | 26 +- .../ConditionalAppearance.dcssca | 26 - .../Forms/ВыборУзлаПланаОбмена/Module.bsl | 42 +- .../Forms/Настройки/Module.bsl | 35 +- .../НомераСообщенийУзлаПланаОбмена/Module.bsl | 16 +- .../СообщениеОбОбычномИнтерфейсе/Form.oform | Bin 8402 -> 8448 bytes .../ConditionalAppearance.dcssca | 88 - .../Forms/УзлыРегистрацииОбъекта/Form.form | 4 +- .../Forms/УзлыРегистрацииОбъекта/Module.bsl | 73 +- .../Forms/Форма/ConditionalAppearance.dcssca | 99 - .../Forms/Форма/Form.form | 229 +- .../Forms/Форма/Module.bsl | 240 +- .../Help/ru.html | 24 + .../ObjectModule.bsl | 187 +- .../РегистрацияИзмененийДляОбменаДанными.mdo | 17 + .../Forms/РегламентноеЗадание/Help/ru.html | 2 +- .../Forms/РегламентноеЗадание/Module.bsl | 21 +- .../ConditionalAppearance.dcssca | 22 - .../РегламентныеИФоновыеЗадания/Form.form | 17 +- .../РегламентныеИФоновыеЗадания/Module.bsl | 51 +- .../Forms/ФоновоеЗадание/Help/ru.html | 2 +- .../Forms/ФоновоеЗадание/Module.bsl | 5 +- .../РегламентныеИФоновыеЗадания/Help/ru.html | 2 +- .../ПоказатьРезультат/CommandModule.bsl | 17 + .../Help/ru.html | 4 +- .../Module.bsl | 29 +- .../РезервноеКопированиеДанных/Help/ru.html | 2 +- .../РезервноеКопированиеДанных/Module.bsl | 79 +- .../ЗаставкаВосстановления/Template.txt | 15 +- .../МакетФайлаЗагрузкаИБ/Template.txt | 14 - .../Template.txt | 13 - .../РезервноеКопированиеИБ.mdo | 9 + .../Forms/ОсновнаяФорма/Module.bsl | 21 +- .../Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 61 +- .../ManagerModule.bsl | 16 +- .../Module.bsl | 21 +- .../Forms/НастройкаПолейТаблицы/Module.bsl | 11 +- .../Module.bsl | 16 +- .../Forms/НастройкаСортировки/Module.bsl | 11 +- .../Module.bsl | 34 +- .../Forms/Форма/ConditionalAppearance.dcssca | 51 - .../Forms/Форма/Form.form | 16 +- .../Forms/Форма/Module.bsl | 74 +- .../ФормаВыбораСвязиСопоставления/Module.bsl | 21 +- .../Help/ru.html | 17 +- .../ObjectModule.bsl | 34 +- .../Forms/АрхивАнкет/Module.bsl | 15 +- .../СписокРеспондента/Forms/Форма/Module.bsl | 23 +- .../ObjectModule.bsl | 34 +- .../ObjectModule.bsl | 31 +- .../ObjectModule.bsl | 28 +- .../ConditionalAppearance.dcssca | 58 - .../Forms/ОсновнаяФорма/Form.form | 13 +- .../Forms/ОсновнаяФорма/Module.bsl | 97 +- .../УдалениеПомеченныхОбъектов/Help/ru.html | 32 +- .../ManagerModule.bsl | 44 +- .../Forms/УправляемаяФорма/Form.form | 2 +- .../Forms/УправляемаяФорма/Module.bsl | 58 +- .../Module.bsl | 22 +- .../УниверсальныйОбменДаннымиXML/Help/ru.html | 2 +- .../ObjectModule.bsl | 445 +- .../ОбщиеПроцедурыФункции/Template.txt | 112 +- .../ПараметрыОбработчиков/Template.mxlx | 557 +- .../ConditionalAppearance.dcssca | 182 - .../Forms/ОсновнаяФорма/Form.form | 46 +- .../Forms/ОсновнаяФорма/Module.bsl | 140 +- .../Forms/ФормаВыбораПериода/Help/ru.html | 2 +- .../Forms/ФормаВыбораПериода/Module.bsl | 22 +- .../ФормаПараметровПерестроения/Help/ru.html | 2 +- .../ФормаПараметровПерестроения/Module.bsl | 11 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../CommandModule.bsl | 6 +- .../Forms/Форма/ConditionalAppearance.dcssca | 23 - .../Forms/Форма/Module.bsl | 39 +- .../Help/ru.html | 2 +- .../БезопасныйРежим/БезопасныйРежим.mdo | 18 + .../ЗначениеДоступа/ЗначениеДоступа.mdo | 1 - .../Forms/НастройкиРаботыСПочтой/Help/ru.html | 2 +- .../Forms/НастройкиРаботыСПочтой/Module.bsl | 26 +- .../ПараметрыЭлектронногоПисьма/Help/ru.html | 2 +- .../ПараметрыЭлектронногоПисьма/Module.bsl | 15 +- .../Forms/ПечатьЭлектронногоПисьма/Module.bsl | 10 +- .../ФормаСписка/ConditionalAppearance.dcssca | 137 - .../Forms/ФормаСписка/Form.form | 296 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 393 +- .../ConditionalAppearance.dcssca | 53 - .../ФормаСпискаПараметрическая/Form.form | 120 +- .../ФормаСпискаПараметрическая/Help/ru.html | 2 +- .../ФормаСпискаПараметрическая/Module.bsl | 117 +- .../Template.dcs | 1 - .../Взаимодействия/Взаимодействия.mdo | 1 + .../Анкета/Forms/ФормаДокумента/Help/ru.html | 2 +- .../Анкета/Forms/ФормаДокумента/Module.bsl | 26 +- .../Анкета/Forms/ФормаСписка/Module.bsl | 6 +- SSL/src/Documents/Анкета/ManagerModule.bsl | 23 + SSL/src/Documents/Анкета/Анкета.mdo | 9 +- .../Встреча/Forms/ФормаДокумента/Form.form | 20 +- .../Встреча/Forms/ФормаДокумента/Help/ru.html | 2 +- .../Встреча/Forms/ФормаДокумента/Module.bsl | 48 +- SSL/src/Documents/Встреча/ManagerModule.bsl | 33 +- SSL/src/Documents/Встреча/ObjectModule.bsl | 10 +- SSL/src/Documents/Встреча/Встреча.mdo | 20 +- .../Forms/ФормаДокумента/Form.form | 6 +- .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 49 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 30 +- .../ObjectModule.bsl | 10 +- .../ЗапланированноеВзаимодействие.mdo | 20 +- .../Forms/ФормаДокумента/Module.bsl | 28 +- .../Forms/ФормаПодбораРеспондентов/Form.form | 7 +- .../Forms/ФормаПодбораРеспондентов/Module.bsl | 6 +- .../НазначениеОпросов/ManagerModule.bsl | 26 + .../НазначениеОпросов/НазначениеОпросов.mdo | 6 +- .../ConditionalAppearance.dcssca | 48 - .../Forms/ФормаДокумента/Form.form | 24 +- .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 79 +- SSL/src/Documents/СообщениеSMS/Help/ru.html | 2 +- .../Documents/СообщениеSMS/ManagerModule.bsl | 31 +- .../Documents/СообщениеSMS/ObjectModule.bsl | 5 +- .../Documents/СообщениеSMS/СообщениеSMS.mdo | 20 +- .../Forms/ФормаДокумента/Form.form | 24 +- .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 46 +- .../ТелефонныйЗвонок/ManagerModule.bsl | 29 +- .../ТелефонныйЗвонок/ObjectModule.bsl | 14 +- .../ТелефонныйЗвонок/ТелефонныйЗвонок.mdo | 20 +- .../Forms/ФормаВыбора/Module.bsl | 5 +- .../ConditionalAppearance.dcssca | 23 - .../Forms/ФормаДокумента/Form.form | 28 +- .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 74 +- .../ManagerModule.bsl | 38 +- .../ObjectModule.bsl | 5 +- .../ЭлектронноеПисьмоВходящее.mdo | 20 +- .../ConditionalAppearance.dcssca | 68 - .../Forms/ФормаДокумента/Form.form | 34 +- .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 387 +- .../Module.bsl | 19 +- .../ManagerModule.bsl | 32 +- .../ObjectModule.bsl | 11 +- .../ЭлектронноеПисьмоИсходящее.mdo | 20 +- .../ОперацииСНаборамиРазрешений.mdo | 66 + ...тельныхОтчетовИОбработокВМоделиСервиса.mdo | 52 - ...ешенийДополнительныхОтчетовИОбработок.mdo} | 24 +- .../СостоянияЗаданий/СостоянияЗаданий.mdo | 7 + ...ЗапросовНаИспользованиеВнешнихРесурсов.mdo | 52 + ...нтрольПравомерностиИзмененияРеквизитов.mdo | 13 - ...ельныеОтчетыИОбработкиКонтрольУдаления.mdo | 13 - ...льНеразделенныхНаборовЗаписейПриЗаписи.mdo | 9 + ...КонтрольНеразделенныхОбъектовПриЗаписи.mdo | 15 +- ...овитьПредставлениеВнешнегоПользователя.mdo | 1 - ...ормуПрисоединенногоФайлаВзаимодействия.mdo | 2 +- .../ПроверитьИзмененияДатВПредмете.mdo | 1 - .../Forms/ФормаУзла/Module.bsl | 10 +- .../ОбменСообщениями/ManagerModule.bsl | 34 +- .../ИспользоватьАнкетирование.mdo | 1 + ...льзоватьДополнительныеОтчетыИОбработки.mdo | 2 +- .../ИспользуютсяПрофилиБезопасности.mdo | 22 + ...тельныхОтчетовИОбработокВМоделиСервиса.mdo | 10 - .../ОграничиватьДоступНаУровнеЗаписей.mdo | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 20 +- .../Forms/АдресныйКлассификатор/Help/ru.html | 2 +- .../Forms/АдресныйКлассификатор/Module.bsl | 20 +- .../ЗагрузкаАдресногоКлассификатора/Form.form | 38 +- .../Help/ru.html | 2 +- .../Module.bsl | 149 +- .../ОчисткаАдресногоКлассификатора/Form.form | 94 +- .../Help/ru.html | 2 +- .../ОчисткаАдресногоКлассификатора/Module.bsl | 76 +- .../Forms/ФормаВыбора/Form.form | 185 +- .../Forms/ФормаВыбора/Module.bsl | 227 +- .../АдресныйКлассификатор/Help/ru.html | 2 +- .../Template.txt | 2 + .../АдресныйКлассификатор.mdo | 5 - .../Forms/ВыборХранимыхВерсий/Form.form | 18 + .../Forms/ВыборХранимыхВерсий/Module.bsl | 119 +- .../Forms/ОтчетПоВерсиямОбъекта/Module.bsl | 22 +- .../Forms/ФормаЗаписи/Module.bsl | 6 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ВерсииОбъектов/ManagerModule.bsl | 5 +- .../ВерсииПодсистем/ВерсииПодсистем.mdo | 27 +- .../Forms/ФормаЗаписи/Module.bsl | 11 +- .../ФормаСписка/ConditionalAppearance.dcssca | 128 - .../Forms/ФормаСписка/Module.bsl | 43 +- .../ГруппыЗначенийДоступа/ManagerModule.bsl | 10 +- .../ГруппыЗначенийДоступа.mdo | 2 +- .../Forms/МоиБизнесПроцессы/Module.bsl | 25 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ДанныеБизнесПроцессов/Help/ru.html | 2 +- .../ConditionalAppearance.dcssca | 108 - .../Forms/ДатыЗапретаИзменения/Form.form | 10 +- .../Forms/ДатыЗапретаИзменения/Module.bsl | 144 +- .../РедактированиеДатыЗапрета/Module.bsl | 20 +- .../Forms/ФормаСписка/Module.bsl | 14 +- .../ДатыЗапретаИзменения/Help/ru.html | 2 +- .../CommandModule.bsl | 7 - .../Список/ExtInfo/ListSettings.dcss | 21 - .../Forms/ДокументыФизическогоЛица/Form.form | 390 - .../Forms/ДокументыФизическогоЛица/Module.bsl | 42 - .../Forms/ФормаЗаписи/Form.form | 517 - .../Forms/ФормаЗаписи/Module.bsl | 22 - .../Список/ExtInfo/ListSettings.dcss | 21 - .../Forms/ФормаСписка/Module.bsl | 1 - .../ДокументыФизическихЛиц/Help/ru.html | 6 - .../ДокументыФизическихЛиц/ManagerModule.bsl | 102 - .../RecordSetModule.bsl | 119 - .../ДокументыФизическихЛиц.mdo | 362 - .../ДополнительныеСведения/Help/ru.html | 2 +- .../Forms/ФормаЗаписи/Module.bsl | 10 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ЗависимостиПравДоступа/ManagerModule.bsl | 5 +- .../ЗамерыВремени/Help/ru.html | 18 + .../ЗамерыВремени/ЗамерыВремени.mdo | 5 + ...РазрешенийИспользованияВнешнихРесурсов.mdo | 147 + ...зрешенийНаИспользованиеВнешнихРесурсов.mdo | 197 + .../Forms/ФормаЗаписи/Module.bsl | 10 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ЗначенияГруппДоступа/ManagerModule.bsl | 101 +- .../Forms/ФормаЗаписи/Module.bsl | 10 +- .../ФормаСписка/ConditionalAppearance.dcssca | 28 - .../Forms/ФормаСписка/Module.bsl | 16 +- .../ManagerModule.bsl | 5 +- .../Forms/АдресацияПоОбъекту/Help/ru.html | 2 +- .../Forms/АдресацияПоОбъекту/Module.bsl | 24 +- .../АдресацияПоОбъектуИРоли/Help/ru.html | 2 +- .../Forms/АдресацияПоОбъектуИРоли/Module.bsl | 14 +- .../Forms/ИсполнителиРоли/Help/ru.html | 2 +- .../Forms/ИсполнителиРоли/Module.bsl | 6 +- .../Forms/ФормаЗаписи/Module.bsl | 15 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../ИсполнителиЗадач/Help/ru.html | 2 +- .../ИсполнителиЗадач/RecordSetModule.bsl | 11 +- ...бработокСервисаВАвтономномРабочемМесте.mdo | 93 - ...ельныхОтчетовИОбработокВОбластяхДанных.mdo | 94 - .../КалендарныеГрафики/Help/ru.html | 2 +- .../КонтактыВзаимодействий/ManagerModule.bsl | 11 +- .../RecordSetModule.bsl | 5 +- .../КурсыВалют/Forms/ФормаЗаписи/Module.bsl | 17 +- .../КурсыВалют/Help/ru.html | 23 + .../КурсыВалют/RecordSetModule.bsl | 10 +- .../КурсыВалют/КурсыВалют.mdo | 5 + .../Forms/ФормаЗаписи/Module.bsl | 11 +- .../ФормаСписка/ConditionalAppearance.dcssca | 63 - .../Forms/ФормаСписка/Module.bsl | 44 +- .../НаборыЗначенийДоступа/ManagerModule.bsl | 10 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../ManagerModule.bsl | 5 +- .../Forms/МоиНапоминания/Module.bsl | 20 +- .../Forms/Напоминание/Module.bsl | 22 +- .../Forms/ФормаОповещения/Module.bsl | 25 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ManagerModule.bsl | 10 +- .../ManagerModule.bsl | 5 +- .../Forms/ВерсионированиеОбъектов/Module.bsl | 27 +- .../Help/ru.html | 2 +- .../НастройкиОтправителя/CommandModule.bsl | 6 +- .../Forms/ФормаЗаписи/Module.bsl | 6 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../НастройкиОтправителя/ManagerModule.bsl | 7 +- .../Forms/ФормаЗаписи/Module.bsl | 11 +- .../ФормаСписка/ConditionalAppearance.dcssca | 28 - .../Forms/ФормаСписка/Module.bsl | 39 +- .../НастройкиПравОбъектов/ManagerModule.bsl | 10 +- .../НастройкаПодключенияКСервису/Module.bsl | 16 +- .../Form.form | 851 +- .../Module.bsl | 599 +- .../Forms/ФормаЗаписи/Form.form | 318 +- .../Forms/ФормаЗаписи/Module.bsl | 208 +- .../НастройкиТранспортаОбмена/Help/ru.html | 34 +- .../ManagerModule.bsl | 148 +- .../RecordSetModule.bsl | 11 +- .../Forms/ФормаЗаписи/Form.form | 121 - .../Forms/ФормаЗаписи/Module.bsl | 21 +- .../ManagerModule.bsl | 5 +- ...астройкиТранспортаОбменаОбластейДанных.mdo | 46 - .../Forms/ФормаЗаписи/Module.bsl | 5 +- .../ManagerModule.bsl | 9 +- .../Forms/ФормаЗаписи/Help/ru.html | 2 +- .../Forms/ФормаЗаписи/Module.bsl | 33 +- .../CommandModule.bsl | 6 - .../НомераОтсканированныхФайлов/Help/ru.html | 11 + .../НомераОтсканированныхФайлов.mdo | 14 +- .../ManagerModule.bsl | 5 +- .../Module.bsl | 6 +- .../Forms/ФормаЗаписи/Module.bsl | 6 +- .../ПодпискиПолучателей/ManagerModule.bsl | 10 +- .../ПодпискиПолучателей/RecordSetModule.bsl | 5 +- .../ВыбораРежимаОткрытияМакета/Help/ru.html | 24 +- .../ВыбораРежимаОткрытияМакета/Module.bsl | 16 +- .../Forms/ДиалогПовтораПечати/Help/ru.html | 4 + .../Forms/ДиалогПовтораПечати/Module.bsl | 11 +- .../ConditionalAppearance.dcssca | 28 - .../Forms/МакетыПечатныхФорм/Form.form | 12 +- .../Forms/МакетыПечатныхФорм/Help/ru.html | 42 +- .../Forms/МакетыПечатныхФорм/Module.bsl | 21 +- .../Help/ru.html | 4 + .../НастройкаКаталогаФайловПечати/Module.bsl | 16 +- .../Forms/РедактированиеМакета/Help/ru.html | 11 +- .../Forms/РедактированиеМакета/Module.bsl | 78 +- .../ПользовательскиеМакетыПечати/Help/ru.html | 29 + .../ПользовательскиеМакетыПечати.mdo | 15 + .../ManagerModule.bsl | 4 +- .../ПраваРолей/Forms/ФормаЗаписи/Module.bsl | 10 +- .../ПраваРолей/Forms/ФормаСписка/Module.bsl | 16 +- .../ПраваРолей/ManagerModule.bsl | 5 +- .../ПравилаКонвертацииОбъектов/Form.form | 117 +- .../ПравилаКонвертацииОбъектов/Help/ru.html | 70 +- .../ПравилаКонвертацииОбъектов/Module.bsl | 332 +- .../ПравилаРегистрацииОбъектов/Form.form | 128 +- .../ПравилаРегистрацииОбъектов/Help/ru.html | 47 +- .../ПравилаРегистрацииОбъектов/Module.bsl | 234 +- .../Forms/ФормаСписка/Module.bsl | 12 +- .../ПравилаДляОбменаДанными/Help/ru.html | 59 + .../ПравилаДляОбменаДанными/ManagerModule.bsl | 255 +- .../RecordSetModule.bsl | 34 +- .../ПравилаДляОбменаДанными.mdo | 455 +- .../ManagerModule.bsl | 5 +- .../RecordSetModule.bsl | 22 +- .../РабочиеКаталогиФайлов/RecordSetModule.bsl | 5 +- .../ManagerModule.bsl | 129 + ...решенияПереходаВПривилегированныйРежим.mdo | 119 + .../РазрешенныеCOMКлассы/ManagerModule.bsl | 144 + .../РазрешенныеCOMКлассы.mdo | 173 + .../ManagerModule.bsl | 233 + .../РазрешенныеВнешниеКомпоненты.mdo | 175 + .../ManagerModule.bsl | 151 + .../РазрешенныеИнтернетРесурсы.mdo | 192 + .../ManagerModule.bsl | 184 + .../RecordSetModule.bsl | 0 .../РазрешенныеКаталогиФайловойСистемы.mdo | 168 + .../ManagerModule.bsl | 137 + ...зрешенныеПриложенияОперационнойСистемы.mdo | 138 + .../RecordSetModule.bsl | 13 + .../РежимыПодключенияВнешнихМодулей.mdo} | 38 +- .../Forms/Форма/Module.bsl | 59 +- .../РезультатыОбменаДанными/Help/ru.html | 47 +- .../РезультатыОбменаДанными/ManagerModule.bsl | 5 +- .../РейтингАктивностиОбластейДанных.mdo | 2 +- .../ManagerModule.bsl | 5 +- .../СообщенияОбменаДанными/ManagerModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../RecordSetModule.bsl | 6 +- .../Forms/ФормаЗаписи/Module.bsl | 10 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ManagerModule.bsl | 5 +- .../ManagerModule.bsl | 10 +- .../СостоянияОбменовДанными/ManagerModule.bsl | 5 +- .../RecordSetModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../СостоянияПапокПисем/ManagerModule.bsl | 10 +- .../ManagerModule.bsl | 10 +- .../ManagerModule.bsl | 4 +- .../ManagerModule.bsl | 5 +- .../RecordSetModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../Forms/ФормаЗаписи/Module.bsl | 10 +- .../Forms/ФормаСписка/Module.bsl | 16 +- .../ТаблицыГруппДоступа/ManagerModule.bsl | 10 +- .../ManagerModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../ManagerModule.bsl | 5 +- .../СведенияОРегламентномЗадании/Module.bsl | 20 +- .../Forms/ФормаОтчета/Module.bsl | 21 +- .../АнализЖурналаРегистрации/Help/ru.html | 52 +- .../ManagerModule.bsl | 10 +- .../АнализЖурналаРегистрации/ObjectModule.bsl | 15 +- .../Template.dcs | 2 +- .../Template.mxlx | 6 +- .../РасшифровкаПростыхОтветов/Module.bsl | 14 +- .../РасшифровкаТабличныхВопросов/Module.bsl | 12 +- .../АнализОпроса/Forms/ФормаОтчета/Form.form | 6 +- .../АнализОпроса/Forms/ФормаОтчета/Module.bsl | 23 +- SSL/src/Reports/АнализОпроса/ObjectModule.bsl | 17 +- .../Reports/БизнесПроцессы/ManagerModule.bsl | 25 + .../Forms/ФормаОтчета/Module.bsl | 4 +- .../ДатыЗапретаЗагрузки/ManagerModule.bsl | 150 + .../ДатыЗапретаЗагрузки/ObjectModule.bsl | 10 +- .../Forms/ФормаОтчета/Module.bsl | 4 +- .../ДатыЗапретаИзменения/ManagerModule.bsl | 150 + .../ДатыЗапретаИзменения/ObjectModule.bsl | 10 +- .../Forms/ФормаОтчета/Form.form | 710 - .../Forms/ФормаОтчета/Module.bsl | 11 - SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html | 2 +- .../Reports/ЗависшиеЗадачи/ManagerModule.bsl | 32 + .../Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo | 10 - SSL/src/Reports/Задания/ManagerModule.bsl | 31 + .../Задания/Templates/Макет/Template.dcs | 17 + .../Задачи/Forms/ФормаОтчета/Form.form | 714 - .../Задачи/Forms/ФормаОтчета/Module.bsl | 28 - SSL/src/Reports/Задачи/Help/ru.html | 2 +- SSL/src/Reports/Задачи/ManagerModule.bsl | 25 + .../Template.dcs | 1 - SSL/src/Reports/Задачи/Задачи.mdo | 10 - .../Forms/ФормаОтчета/Form.form | 710 - .../Forms/ФормаОтчета/Module.bsl | 11 - .../ЗадачиИстекающиеНаДату/Help/ru.html | 2 +- .../ЗадачиИстекающиеНаДату/ManagerModule.bsl | 22 + .../ЗадачиИстекающиеНаДату.mdo | 10 - .../ManagerModule.bsl | 340 + .../ObjectModule.bsl | 57 + .../Template.dcs | 13 + .../ПредставленияРазрешений/Template.mxlx | 1804 ++ .../ИспользуемыеВнешниеРесурсы.mdo | 29 + .../Forms/МестаИспользования/Module.bsl | 32 +- .../МестаИспользованияСсылок/Help/ru.html | 13 + .../ManagerModule.bsl | 5 - .../МестаИспользованияСсылок/ObjectModule.bsl | 10 +- .../Template.dcs | 7 +- .../МестаИспользованияСсылок.mdo | 5 + .../ПраваДоступа/Forms/ФормаОтчета/Module.bsl | 37 +- SSL/src/Reports/ПраваДоступа/Help/ru.html | 22 + .../Reports/ПраваДоступа/ManagerModule.bsl | 107 + .../Templates/Макет/Template.mxlx | 4 +- SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo | 5 + .../Forms/ФормаОтчета/Form.form | 710 - .../Forms/ФормаОтчета/Module.bsl | 11 - .../Reports/ПросроченныеЗадачи/Help/ru.html | 2 +- .../ПросроченныеЗадачи/ManagerModule.bsl | 22 + .../ПросроченныеЗадачи/ПросроченныеЗадачи.mdo | 10 - .../СведенияОПользователях/Help/ru.html | 31 + .../СведенияОПользователях/ManagerModule.bsl | 142 + .../СведенияОПользователях/ObjectModule.bsl | 208 + .../Template.dcs | 1322 ++ .../СведенияОПользователях.mdo | 28 + .../Roles/АдминистраторСистемы/Rights.rights | 733 +- SSL/src/Roles/БазовыеПрава/Rights.rights | 137 +- .../Rights.rights | 606 +- .../Rights.rights | 39 - .../Rights.rights | 39 + .../Rights.rights | 7982 ++++---- .../Rights.rights | 567 +- .../ДобавлениеИзменениеЗаданий/Rights.rights | 7718 +++---- .../ДобавлениеИзменениеОпросов/Rights.rights | 544 +- .../Rights.rights | 544 +- .../Rights.rights | 16509 --------------- ...менениеПерсональныхДанныхФизическихЛиц.mdo | 8 - .../Rights.rights | 14 +- .../Rights.rights | 544 +- .../Rights.rights | 16666 --------------- .../ДобавлениеИзменениеФизическихЛиц.mdo | 8 - .../Rights.rights | 544 +- SSL/src/Roles/ЗапускAutomation/Rights.rights | 606 +- SSL/src/Roles/ЗапускВебКлиента/Rights.rights | 606 +- .../Roles/ЗапускТолстогоКлиента/Rights.rights | 606 +- .../Roles/ЗапускТонкогоКлиента/Rights.rights | 606 +- .../ИзменениеВыполнениеЗадач/Rights.rights | 6182 +++--- .../Rights.rights | 2080 +- .../Rights.rights | 544 +- .../Rights.rights | 9575 ++++----- .../Rights.rights | 614 +- .../Rights.rights | 32 + .../Rights.rights | 603 +- .../Rights.rights | 1544 +- .../Rights.rights | 7 - SSL/src/Roles/ПолныеПрава/Rights.rights | 1219 +- .../Roles/РаботаСПапкамиФайлов/Rights.rights | 8262 ++++---- .../Rights.rights | 544 +- .../Rights.rights | 544 +- .../Rights.rights | 544 +- SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights | 3117 +-- .../Rights.rights | 2080 +- SSL/src/Roles/ЧтениеЗаданий/Rights.rights | 6182 +++--- SSL/src/Roles/ЧтениеЗадач/Rights.rights | 6182 +++--- .../ЧтениеОтветовНаВопросыАнкет/Rights.rights | 544 +- .../Rights.rights | 16648 --------------- .../ЧтениеПерсональныхДанныхФизическихЛиц.mdo | 8 - .../Roles/ЧтениеФизическихЛиц/Rights.rights | 16698 ---------------- .../ЧтениеФизическихЛиц.mdo | 8 - .../ОбновлениеАгрегатов.mdo | 2 +- .../ОбновлениеИндексаППД.mdo | 2 +- .../ОтложенноеОбновлениеИБ.mdo | 2 +- .../ПерестроениеАгрегатов.mdo | 2 +- .../СлияниеИндексаППД/СлияниеИндексаППД.mdo | 2 +- .../УстановкаПериодаРассчитанныхИтогов.mdo | 2 +- .../ConditionalAppearance.dcssca | 66 - .../Forms/ВыборВариантаОтчета/Help/ru.html | 2 +- .../Forms/ВыборВариантаОтчета/Module.bsl | 106 +- .../ConditionalAppearance.dcssca | 98 - .../Forms/СохранениеВариантаОтчета/Form.form | 4 +- .../СохранениеВариантаОтчета/Help/ru.html | 2 +- .../Forms/СохранениеВариантаОтчета/Module.bsl | 54 +- .../ManagerModule.bsl | 30 +- .../ВидимыйВариантОтчетаЦвет.mdo | 6 +- .../Администрирование/CommandInterface.cmi | 64 +- .../Администрирование/Администрирование.mdo | 6 +- .../АнализЖурналаРегистрации/Help/ru.html | 2 +- .../БазоваяФункциональность.mdo | 37 + .../БизнесПроцессыИЗадачи/Help/ru.html | 2 +- .../Subsystems/Валюты/Help/ru.html | 2 +- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 2 + .../ВерсионированиеОбъектов/Help/ru.html | 2 +- .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../ГрупповоеИзменениеОбъектов.mdo | 2 +- .../Help/ru.html | 2 +- .../ДополнительныеОтчетыИОбработки.mdo | 1 + .../Help/ru.html | 2 +- .../ЗавершениеРаботыПользователей.mdo | 3 +- .../ЗаметкиПользователя.mdo | 1 + .../Help/ru.html | 2 +- .../КалендарныеГрафики/Help/ru.html | 2 +- .../КонтактнаяИнформация/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../НастройкаПорядкаЭлементов/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/ОбменДанными.mdo | 1 + .../ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo | 1 + .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../Subsystems/ОтправкаSMS/ОтправкаSMS.mdo | 1 - .../Subsystems/Печать/Help/ru.html | 2 +- .../Subsystems/Печать/Печать.mdo | 1 + .../ПолнотекстовыйПоиск/Help/ru.html | 2 +- .../ПолучениеФайловИзИнтернета/Help/ru.html | 2 +- .../Subsystems/Пользователи/Help/ru.html | 2 +- .../Subsystems/Пользователи/Пользователи.mdo | 1 + .../ПрефиксацияОбъектов/Help/ru.html | 2 +- .../ПрисоединенныеФайлы.mdo | 1 + .../БазоваяФункциональностьВМоделиСервиса.mdo | 4 - ...ительныеОтчетыИОбработкиВМоделиСервиса.mdo | 40 - .../ОбменДаннымиВМоделиСервиса.mdo | 1 - .../РаботаВМоделиСервиса.mdo | 1 - .../РаботаСПочтовымиСообщениями/Help/ru.html | 2 +- .../РаботаСПочтовымиСообщениями.mdo | 4 +- .../Subsystems/РаботаСФайлами/Help/ru.html | 2 +- .../РегламентныеЗадания/Help/ru.html | 2 +- .../РезервноеКопированиеИБ.mdo | 1 + .../Subsystems/Свойства/Help/ru.html | 2 +- .../УправлениеДоступом/Help/ru.html | 2 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../ФизическиеЛица/ФизическиеЛица.mdo | 22 - .../СтандартныеПодсистемы.mdo | 1 - .../Forms/Дополнительно/Help/ru.html | 2 +- .../Forms/Дополнительно/Module.bsl | 6 +- .../ConditionalAppearance.dcssca | 48 - .../Forms/ЗадачиПоБизнесПроцессу/Form.form | 12 +- .../Forms/ЗадачиПоБизнесПроцессу/Module.bsl | 83 +- .../ConditionalAppearance.dcssca | 43 - .../Forms/ЗадачиПоПредмету/Form.form | 4 - .../Forms/ЗадачиПоПредмету/Module.bsl | 77 +- .../Forms/МоиЗадачи/Form.form | 4 - .../Forms/МоиЗадачи/Help/ru.html | 2 +- .../Forms/МоиЗадачи/Module.bsl | 29 +- .../Forms/МоиЗадачиДляРабочегоСтола/Form.form | 8 - .../МоиЗадачиДляРабочегоСтола/Help/ru.html | 2 +- .../МоиЗадачиДляРабочегоСтола/Module.bsl | 34 +- .../Forms/ПеренаправитьЗадачи/Help/ru.html | 2 +- .../Forms/ПеренаправитьЗадачи/Module.bsl | 21 +- .../Forms/ФормаЗадачи/Module.bsl | 30 +- .../Forms/ФормаСписка/Form.form | 101 +- .../Forms/ФормаСписка/Module.bsl | 34 +- SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html | 2 +- .../Tasks/ЗадачаИсполнителя/ManagerModule.bsl | 47 + .../Tasks/ЗадачаИсполнителя/ObjectModule.bsl | 9 +- .../ОтправкаSMSЧерезМТС/WsDefinitions.wsdl | 328 - .../ОтправкаSMSЧерезМТС.mdo | 12 - SSL/src/WebServices/Exchange/Module.bsl | 33 +- .../WebServices/Exchange_2_0_1_6/Module.bsl | 28 +- .../WebServices/MessageExchange/Module.bsl | 5 +- .../MessageExchange_2_0_1_6/Module.bsl | 5 +- .../RemoteAdministrationOfExchange/Module.bsl | 9 +- .../Module.bsl | 10 +- .../Module.bsl | 10 +- ...icationExtensionsCompatibility_1_0_0_1.mdo | 9 - .../Package.xdto | 12 - .../ApplicationExtensionsControl_1_0_1_1.mdo | 9 - .../Package.xdto | 22 - ...pplicationExtensionsManagement_1_0_1_1.mdo | 9 - .../Package.xdto | 27 - .../ApplicationPermissions_1_0_0_1.mdo | 9 + .../Package.xdto | 37 + .../XDTOPackages/V8AddinBundle/Package.xdto | 23 + .../V8AddinBundle/V8AddinBundle.mdo | 9 + 1956 files changed, 145806 insertions(+), 169327 deletions(-) delete mode 100644 SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html create mode 100644 SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl rename SSL/src/Catalogs/ВерсииФайлов/Forms/{ФормаСпискаВерсийФайла => ВерсииФайла}/Form.form (96%) rename SSL/src/Catalogs/ВерсииФайлов/Forms/{ФормаСпискаВерсийФайла => ВерсииФайла}/Module.bsl (98%) rename SSL/src/Catalogs/ВерсииФайлов/Forms/{ФормаВыбораСпособаСравненияВерсий => ВыборСпособаСравненияВерсий}/Form.form (100%) create mode 100644 SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Help/ru.html rename SSL/src/Catalogs/ВерсииФайлов/Forms/{ФормаВыбораСпособаСравненияВерсий => ВыборСпособаСравненияВерсий}/Module.bsl (89%) delete 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/ФормаЭлемента/Help/ru.html delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Module.bsl delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаЭлемента/Form.form delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl delete mode 100644 SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ВидыДокументовФизическихЛиц.mdo create mode 100644 SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl delete mode 100644 SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html create mode 100644 SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html delete mode 100644 SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html create mode 100644 SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html create mode 100644 SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html create mode 100644 SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html create mode 100644 SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/Заметки/Help/ru.html create mode 100644 SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html delete mode 100644 SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/Календари/Help/ru.html create mode 100644 SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html create mode 100644 SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/КлючевыеОперации/Help/ru.html rename SSL/src/Catalogs/НазначенияСертификатовЭП/Templates/{УдаленныйНазначенияСертификатов => УдалитьНазначенияСертификатов}/Template.txt (100%) create mode 100644 SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl delete mode 100644 SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl rename SSL/src/Catalogs/{ФизическиеЛица/ФизическиеЛица.mdo => ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo} (57%) delete mode 100644 SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html delete mode 100644 SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl delete mode 100644 SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html delete 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/ФормаВыбора/Help/ru.html create mode 100644 SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Help/ru.html delete mode 100644 SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Form.form delete mode 100644 SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Module.bsl delete mode 100644 SSL/src/Catalogs/ФизическиеЛица/Help/ru.html delete mode 100644 SSL/src/Catalogs/ФизическиеЛица/ManagerModule.bsl delete mode 100644 SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl delete mode 100644 SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/ConditionalAppearance.dcssca create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl 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 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 create mode 100644 SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/ВосстановлениеСвязиСГлавнымУзлом.mdo create mode 100644 SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html delete mode 100644 SSL/src/CommonForms/ВыборПодписей/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ВыборПрисоединенныхФайлов/Help/ru.html delete mode 100644 SSL/src/CommonForms/ВыборСертификатовШифрования/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html create mode 100644 SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html delete mode 100644 SSL/src/CommonForms/ГруппыПользователей/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ГруппыПользователей/Help/ru.html delete mode 100644 SSL/src/CommonForms/ДобавлениеПодписиИзФайла/ConditionalAppearance.dcssca delete mode 100644 SSL/src/CommonForms/МастерАнкетыПоРазделам/ConditionalAppearance.dcssca delete mode 100644 SSL/src/CommonForms/НастройкиАгентаСервиса/Form.form delete mode 100644 SSL/src/CommonForms/НастройкиАгентаСервиса/НастройкиАгентаСервиса.mdo delete mode 100644 SSL/src/CommonForms/НастройкиПравОбъектов/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html rename SSL/src/{Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи => CommonForms/ПараметрыАдминистрированияПрограммы}/Form.form (52%) create mode 100644 SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html create mode 100644 SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl rename SSL/src/CommonForms/{ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo => ПараметрыАдминистрированияПрограммы/ПараметрыАдминистрированияПрограммы.mdo} (81%) 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/ПечатьДокументов/ConditionalAppearance.dcssca delete mode 100644 SSL/src/CommonForms/ПользователиСервиса/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ПраваДоступа/Help/ru.html delete mode 100644 SSL/src/CommonForms/ПраваДоступаУпрощенно/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html delete mode 100644 SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html create mode 100644 SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html create mode 100644 SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html delete mode 100644 SSL/src/CommonForms/СтруктураПодчиненности/ConditionalAppearance.dcssca delete mode 100644 SSL/src/CommonForms/УточнениеКонтактов/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ФайлыВТоме/Help/ru.html create mode 100644 SSL/src/CommonForms/ФормаОтчета/Help/ru.html create mode 100644 SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl create mode 100644 SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo create mode 100644 SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl create mode 100644 SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.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 delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.mdo delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.mdo delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.mdo delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.mdo delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.mdo delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.mdo create mode 100644 SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl rename SSL/src/CommonModules/{ФизическиеЛица/ФизическиеЛица.mdo => ЗаметкиПользователя/ЗаметкиПользователя.mdo} (64%) 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/ОбновлениеИнформационнойБазыСлужебный/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 rename SSL/src/CommonModules/{ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo => РаботаВБезопасномРежиме/РаботаВБезопасномРежиме.mdo} (52%) create mode 100644 SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl rename SSL/src/CommonModules/{ФизическиеЛицаКлиент/ФизическиеЛицаКлиент.mdo => РаботаВБезопасномРежимеКлиент/РаботаВБезопасномРежимеКлиент.mdo} (57%) 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/РаботаВБезопасномРежимеСлужебныйПовтИсп/Module.bsl rename SSL/src/CommonModules/{ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.mdo => РаботаВБезопасномРежимеСлужебныйПовтИсп/РаботаВБезопасномРежимеСлужебныйПовтИсп.mdo} (53%) create mode 100644 SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl rename SSL/src/CommonModules/{ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo => РаботаСПочтовымиСообщениямиВызовСервера/РаботаСПочтовымиСообщениямиВызовСервера.mdo} (59%) rename SSL/src/CommonModules/{ЭлектроннаяПочта => РаботаСПочтовымиСообщениямиСлужебный}/Module.bsl (64%) rename SSL/src/CommonModules/{ЭлектроннаяПочта/ЭлектроннаяПочта.mdo => РаботаСПочтовымиСообщениямиСлужебный/РаботаСПочтовымиСообщениямиСлужебный.mdo} (66%) delete mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl delete mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo delete mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl delete mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl delete mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo delete mode 100644 SSL/src/CommonModules/ФизическиеЛица/Module.bsl delete mode 100644 SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl delete mode 100644 SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl create mode 100644 SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/Picture.png create mode 100644 SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/ПримечаниеЖурналаРегистрации.mdo create mode 100644 SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin create mode 100644 SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo create mode 100644 SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl create mode 100644 SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.mdo delete mode 100644 SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo create mode 100644 SSL/src/Constants/ГлавныйУзел/ГлавныйУзел.mdo delete mode 100644 SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo delete mode 100644 SSL/src/Constants/ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса/ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса.mdo rename SSL/src/Constants/{ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса => ИспользуютсяПрофилиБезопасности}/ValueManagerModule.bsl (52%) create mode 100644 SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo create mode 100644 SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl create mode 100644 SSL/src/Constants/КоличествоЭлементовВТранзакцииЗагрузкиДанных/КоличествоЭлементовВТранзакцииЗагрузкиДанных.mdo delete mode 100644 SSL/src/Constants/МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса/МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса.mdo delete mode 100644 SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo delete mode 100644 SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl delete mode 100644 SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo delete mode 100644 SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo create mode 100644 SSL/src/Constants/ПрофильБезопасностиИнформационнойБазы/ПрофильБезопасностиИнформационнойБазы.mdo delete mode 100644 SSL/src/Constants/РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса/РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса.mdo delete mode 100644 SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html delete mode 100644 SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html delete mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl delete mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Help/ru.html delete mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html create mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ВыборВидаОбъектов/Form.form (99%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ВыборВидаОбъектов/Module.bsl (96%) rename SSL/src/{Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла => DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы}/Attributes/Список/ExtInfo/ListSettings.dcss (100%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ВыбранныеЭлементы/Form.form (99%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ВыбранныеЭлементы/Module.bsl (91%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ДополнительныеПараметры/Form.form (100%) create mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/ДополнительныеПараметры/Module.bsl (84%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/Форма/Form.form (91%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Forms/Форма/Module.bsl (96%) create mode 100644 SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/ManagerModule.bsl (100%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/ObjectModule.bsl (96%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов => ГрупповоеИзменениеРеквизитов}/Templates/ФильтрРеквизитов/Template.txt (83%) rename SSL/src/DataProcessors/{ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo => ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo} (96%) create mode 100644 SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form create mode 100644 SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl delete mode 100644 SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html create mode 100644 SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html create mode 100644 SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.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/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form create mode 100644 SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html 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/НастройкиИспользованияПрофилейБезопасности/Help/ru.html 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/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html create mode 100644 SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl rename SSL/src/{InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ManagerModule.bsl => DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl} (100%) create mode 100644 SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo delete mode 100644 SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Help/ru.html create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Help/ru.html delete mode 100644 SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form delete mode 100644 SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Module.bsl create mode 100644 SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html delete mode 100644 SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/ConditionalAppearance.dcssca rename SSL/src/{InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка => DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей}/Form.form (51%) 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/ПоискДублей/Items/Внимание16/Picture.png create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/ДлительнаяОперация48/Picture.gif create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Информация16/Picture.png create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Информация32/Picture.png create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/МестаИспользованияНеобработанныхПиктограмма/ValuesPicture.png create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Предупреждение32/Picture.png create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl rename SSL/src/{Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка => DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора}/Form.form (51%) create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html 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/ПоискИУдалениеДублей/Help/ru.html create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl create mode 100644 SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo create mode 100644 SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl delete mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html delete mode 100644 SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl delete mode 100644 SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/ConditionalAppearance.dcssca create mode 100644 SSL/src/DefinedTypes/БезопасныйРежим/БезопасныйРежим.mdo delete mode 100644 SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/ConditionalAppearance.dcssca create mode 100644 SSL/src/Documents/Анкета/ManagerModule.bsl create mode 100644 SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl delete mode 100644 SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Enums/ОперацииСНаборамиРазрешений/ОперацииСНаборамиРазрешений.mdo delete mode 100644 SSL/src/Enums/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.mdo rename SSL/src/Enums/{ПолФизическогоЛица/ПолФизическогоЛица.mdo => РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.mdo} (51%) create mode 100644 SSL/src/Enums/СостоянияЗапросовНаИспользованиеВнешнихРесурсов/СостоянияЗапросовНаИспользованиеВнешнихРесурсов.mdo delete mode 100644 SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов.mdo delete mode 100644 SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольУдаления/ДополнительныеОтчетыИОбработкиКонтрольУдаления.mdo create mode 100644 SSL/src/FunctionalOptions/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo delete mode 100644 SSL/src/FunctionalOptions/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo delete mode 100644 SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/ConditionalAppearance.dcssca delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Attributes/Список/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Form.form delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Form.form delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Module.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl delete mode 100644 SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo create mode 100644 SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.mdo create mode 100644 SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.mdo delete mode 100644 SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/InformationRegisters/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.mdo delete mode 100644 SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.mdo create mode 100644 SSL/src/InformationRegisters/КурсыВалют/Help/ru.html delete mode 100644 SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/ConditionalAppearance.dcssca delete mode 100644 SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Commands/НомераОтсканированныхФайлов/CommandModule.bsl create mode 100644 SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Help/ru.html delete mode 100644 SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/ConditionalAppearance.dcssca create mode 100644 SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html create mode 100644 SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/РазрешенияПереходаВПривилегированныйРежим.mdo create mode 100644 SSL/src/InformationRegisters/РазрешенныеCOMКлассы/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/РазрешенныеCOMКлассы/РазрешенныеCOMКлассы.mdo create mode 100644 SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/ManagerModule.bsl create 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/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/RecordSetModule.bsl create 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/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl rename SSL/src/InformationRegisters/{ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.mdo => РежимыПодключенияВнешнихМодулей/РежимыПодключенияВнешнихМодулей.mdo} (55%) create mode 100644 SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl create mode 100644 SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl delete mode 100644 SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Form.form delete mode 100644 SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl delete mode 100644 SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form delete mode 100644 SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl delete mode 100644 SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Form.form delete mode 100644 SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl create mode 100644 SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl create mode 100644 SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl create mode 100644 SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs create mode 100644 SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx create mode 100644 SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo create mode 100644 SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html create mode 100644 SSL/src/Reports/ПраваДоступа/Help/ru.html create mode 100644 SSL/src/Reports/ПраваДоступа/ManagerModule.bsl delete mode 100644 SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Form.form delete mode 100644 SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl create mode 100644 SSL/src/Reports/СведенияОПользователях/Help/ru.html create mode 100644 SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl create mode 100644 SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl create mode 100644 SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs create mode 100644 SSL/src/Reports/СведенияОПользователях/СведенияОПользователях.mdo delete mode 100644 SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights delete mode 100644 SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц.mdo delete mode 100644 SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights delete mode 100644 SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/ДобавлениеИзменениеФизическихЛиц.mdo delete mode 100644 SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights delete mode 100644 SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/ЧтениеПерсональныхДанныхФизическихЛиц.mdo delete mode 100644 SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights delete mode 100644 SSL/src/Roles/ЧтениеФизическихЛиц/ЧтениеФизическихЛиц.mdo delete mode 100644 SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca delete mode 100644 SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo delete mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo delete mode 100644 SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/ConditionalAppearance.dcssca delete mode 100644 SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/ConditionalAppearance.dcssca delete mode 100644 SSL/src/WSReferences/ОтправкаSMSЧерезМТС/WsDefinitions.wsdl delete mode 100644 SSL/src/WSReferences/ОтправкаSMSЧерезМТС/ОтправкаSMSЧерезМТС.mdo delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/ApplicationExtensionsCompatibility_1_0_0_1.mdo delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/Package.xdto delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo delete mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/ApplicationPermissions_1_0_0_1.mdo create mode 100644 SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/V8AddinBundle/Package.xdto create mode 100644 SSL/src/XDTOPackages/V8AddinBundle/V8AddinBundle.mdo diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index d0d5d556f..df503e8e2 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -66,8 +66,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СрокНачалаИсполненияПриИзменении(Элемент) @@ -98,16 +99,13 @@ Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ПоказатьЗначение(,Объект.Предмет); - КонецЕсли; + ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполненоВыполнить(Команда) @@ -154,8 +152,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализацияФормы() @@ -208,3 +207,5 @@ БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index 0be1ddb2d..73b107884 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -90,16 +90,13 @@ Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ПоказатьЗначение(,Объект.Предмет); - КонецЕсли; + ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрытьВыполнить(Команда) @@ -219,3 +216,5 @@ БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/ConditionalAppearance.dcssca b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/ConditionalAppearance.dcssca deleted file mode 100644 index b24758491..000000000 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/ConditionalAppearance.dcssca +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - Проверяющий - - - - - Объект.НаПроверке - Equal - true - - - Объект.Проверяющий - NotFilled - - - - - ОтметкаНезаполненного - true - - - - - - - Проверяющий - - - - - OrGroup - - Объект.НаПроверке - Equal - false - - - Объект.Проверяющий - Filled - - - - - - ОтметкаНезаполненного - false - - - - diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index e157669b4..a0bb3875c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -616,7 +616,6 @@ ru Содержание - ГруппаСодержаниеExtendedTooltip 119 @@ -909,7 +908,6 @@ ru Проверка - true ГруппаПроверкаExtendedTooltip diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index c21e49634..4748dd8d5 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -5,11 +5,12 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -50,7 +51,6 @@ УстановитьДоступностьПроверяющего(ЭтотОбъект); - ИначеЕсли КонтекстВыбора = "ПроверяющийПриИзменении" Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда @@ -80,8 +80,9 @@ Оповестить("Запись_ЗадачаИсполнителя", ПараметрыЗаписи, Неопределено); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НаПроверкеПриИзменении(Элемент) @@ -94,11 +95,7 @@ Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ПоказатьЗначение(,Объект.Предмет); - КонецЕсли; + ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры @@ -106,9 +103,7 @@ Процедура ГлавнаяЗадачаНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.ГлавнаяЗадача) Тогда - ПоказатьЗначение(,Объект.ГлавнаяЗадача); - КонецЕсли; + ПоказатьЗначение(,Объект.ГлавнаяЗадача); КонецПроцедуры @@ -270,8 +265,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) @@ -302,8 +298,53 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Проверяющий.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаПроверке"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Проверяющий"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Проверяющий.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаПроверке"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Проверяющий"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь); + +КонецПроцедуры &НаСервере Процедура ИнициализацияФормы() @@ -427,3 +468,5 @@ Функция ВнешняяРольИсполнителя(Исполнитель) Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль"); КонецФункции + +#КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index 89a073125..dab482cc8 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -1106,18 +1106,18 @@ true - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска - 94 + + Ссылка + 89 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка - 96 + СсылкаРасширеннаяПодсказка + 91 Label true true @@ -1126,20 +1126,31 @@ - СписокСтрокаПоискаКонтекстноеМеню - 95 + СсылкаКонтекстноеМеню + 90 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 97 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 99 Label true @@ -1149,10 +1160,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 98 true + Список + + true + + + + СписокСостояниеПросмотра + 100 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 101 + true + ViewStatusAddition Список @@ -1161,10 +1195,10 @@ СписокУправлениеПоиском - 100 + 103 СписокУправлениеПоискомРасширеннаяПодсказка - 102 + 105 Label true true @@ -1174,7 +1208,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 101 + 104 true SearchControlAddition @@ -1274,6 +1308,9 @@ true + + Список.Ref +
true
ВЫБРАТЬ diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl index 099ea2711..48d623773 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,8 +24,9 @@ УстановитьОтборСписка(Настройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) @@ -54,8 +55,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Остановить(Команда) @@ -71,8 +73,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОтбор() @@ -123,3 +126,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Help/ru.html index 9dc8d1ef9..7bd7c15fd 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/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index 371e42010..3c3c94418 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Программный интерфейс для подсистемы бизнес-процессов и задач @@ -10,11 +9,11 @@ // Вызывается при открытии формы выполнения задачи. // // Параметры -// ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача -// ТочкаМаршрутаБизнесПроцесса – точка маршрута +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача +// ТочкаМаршрутаБизнесПроцесса - точка маршрута // // Возвращаемое значение: -// Структура – структуру с описанием формы выполнения задачи. +// Структура - структуру с описанием формы выполнения задачи. // Ключ "ИмяФормы" содержит имя формы, передаваемое в метод контекста ОткрытьФорму(). // Ключ "ПараметрыФормы" содержит параметры формы. // @@ -36,8 +35,8 @@ // Вызывается при перенаправлении задачи. // // Параметры -// ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – перенаправляемая задача. -// НоваяЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача для нового исполнителя. +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - перенаправляемая задача. +// НоваяЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача для нового исполнителя. // Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НоваяЗадачаСсылка) Экспорт @@ -53,9 +52,9 @@ // Вызывается при выполнении задачи из формы списка. // // Параметры -// ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача // БизнесПроцессСсылка - БизнесПроцессСсылка - бизнес-процесс, по которому сформирована задача ЗадачаСсылка -// ТочкаМаршрутаБизнесПроцесса – точка маршрута +// ТочкаМаршрутаБизнесПроцесса - точка маршрута // Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт @@ -78,7 +77,28 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("Исполнитель"); + Результат.Добавить("ПроверитьВыполнение"); + Результат.Добавить("Проверяющий"); + Результат.Добавить("СрокИсполнения"); + Результат.Добавить("СрокПроверки"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Устанавливает состояние элементов формы задачи Процедура УстановитьСостояниеЭлементовФормыЗадачи(Форма) Экспорт @@ -109,4 +129,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 07b7ecc71..4eaaee35e 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // СтандартныеПодсистемы.УправлениеДоступом @@ -377,8 +376,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ИзменитьПредметЗадач() @@ -491,4 +491,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ 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 1162be1b4..4adab62a2 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -1,17 +1,19 @@ - -

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

-

Реквизиты:

-

-

- - - - - -
-
  • Код числовой
  • Уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.
    -
  • Код символьный
  • Краткое наименование, используется как основное представление валюты.
    -
  • Наименование
  • Полное наименование.
    -
  • Страны и территории
  • Страны и территории, в которых данная валюта используется в качестве основной.
    -
  • Загружается из Интернета
  • Флажок того, что валюта может загружаться с сайта РБК.

     

    -

    См. также: Валюты, Валюта, Загрузка курсов валют, Общая информация о формах.

    \ No newline at end of file + +

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

    +

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

    +
    • +
      Код числовой - уникальный числовой код, принят международным стандартом, служит для идентификации валюты при загрузке курсов из сети Интернет (с сайта РБК).
      +
    • +
      Код символьный - принят международным стандартом, используется как краткое наименование и основное представление валюты.
      +
    • +
      Наименование валюты - полное наименование.
      +
    • +
      Страны и территории - указываются страны или территории, в которых данная валюта используется в качестве основной.
      +
    • +
      Загружается из сети Интернет - если флажок включен, то валюта может загружаться с сайта РБК.

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

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

    См. также: 

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl index 9cce426cd..527a594a5 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВалют &НаКлиенте Процедура СписокВалютВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -24,8 +25,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыбратьВыполнить() @@ -34,8 +36,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьТаблицуВалют() @@ -117,3 +120,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index c92f7a5ca..baeac3309 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -321,6 +321,40 @@ true
    + + Ссылка + 61 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 62 + true + + LabelField + Enter + true + Left + true + + true + true + + None ВалютыКоманднаяПанель @@ -334,32 +368,9 @@ ВалютыСтрокаПоиска - 61 - - ВалютыСтрокаПоискаРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - - ВалютыСтрокаПоискаКонтекстноеМеню - 62 - true - - Валюты - - true - - - - ВалютыСостояниеПросмотра 64 - ВалютыСостояниеПросмотраРасширеннаяПодсказка + ВалютыСтрокаПоискаРасширеннаяПодсказка 66 Label true @@ -369,10 +380,33 @@ - ВалютыСостояниеПросмотраКонтекстноеМеню + ВалютыСтрокаПоискаКонтекстноеМеню 65 true + Валюты + + true + + + + ВалютыСостояниеПросмотра + 67 + + ВалютыСостояниеПросмотраРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ВалютыСостояниеПросмотраКонтекстноеМеню + 68 + true + ViewStatusAddition Валюты @@ -381,10 +415,10 @@ ВалютыУправлениеПоиском - 67 + 70 ВалютыУправлениеПоискомРасширеннаяПодсказка - 69 + 72 Label true true @@ -394,7 +428,7 @@ ВалютыУправлениеПоискомКонтекстноеМеню - 68 + 71 true SearchControlAddition @@ -547,6 +581,9 @@ true + + Список.Ref +
    true
    ВЫБРАТЬ @@ -555,29 +592,26 @@ Валюты.Наименование, Валюты.НаименованиеПолное, КурсыВалют.Курс, - ВЫБОР - КОГДА КурсыВалют.Кратность = 1 ТОГДА - " " - Иначе - "руб. за" - Конец Как РубЗа, - ВЫБОР - КОГДА КурсыВалют.Кратность = 1 ТОГДА - " " - Иначе - КурсыВалют.Кратность - Конец Как Кратность, - ВЫБОР - КОГДА КурсыВалют.Кратность = 1 ТОГДА - " " - Иначе - Валюты.Наименование - Конец Как КраткоеНаименование + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ "руб. за" + КОНЕЦ КАК РубЗа, + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ КурсыВалют.Кратность + КОНЕЦ КАК Кратность, + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ Валюты.Наименование + КОНЕЦ КАК КраткоеНаименование, + Валюты.Ссылка ИЗ - Справочник.Валюты как Валюты -ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ - РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода) КАК КурсыВалют -ПО Валюты.Ссылка = КурсыВалют.Валюта + Справочник.Валюты КАК Валюты + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода, ) КАК КурсыВалют + ПО Валюты.Ссылка = КурсыВалют.Валюта Catalog.Валюты true true diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index 8a765e025..40103943d 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -37,8 +37,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Валюты +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВалюты &НаКлиенте Процедура ВалютыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -49,8 +50,9 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодборИзОКВ(Команда) @@ -65,8 +67,9 @@ ОткрытьФорму("Обработка.ЗагрузкаКурсовВалют.Форма", ПараметрыФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВалютыПередНачаломДобавленияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт @@ -79,3 +82,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index a0592563c..5758b7a98 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -481,8 +481,7 @@ true true false - true - true + true true @@ -769,8 +768,7 @@ true true false - true - true + true true @@ -1048,7 +1046,7 @@ true true false - true + true ru diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html index 3d3f5b0a4..628515bfb 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html @@ -1,23 +1,35 @@ - -

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

    -

    Реквизиты:

    -

    -

    - - - - - - - -
    -
  • Наименование
  • Полное наименование.
    -
  • Код числовой
  • Уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.
    -
  • Код символьный
  • Краткое наименование, используется как основное представление валюты.
    -
  • Загружается из Интернета
  • Флажок того, что валюта может загружаться с сайта РБК.
    -
  • Курс валюты зависит от курса другой валюты
  • Флажок подчиненности курса текущей валюты курсу другой валюты.
    -
  • Основная валюта
  • Валюта, на основании курса которой рассчитывается курс текущей валюты.
    -
  • Наценка
  • Коэффициент, который применяется к курсу основной валюты для вычисления курса текущей валюты.

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

     

    -

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

    \ No newline at end of file + +

    Описание свойств используемой валюты.

    +

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

    +

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

    +

    Основные сведения о валюте

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

    Параметры прописи валюты

    +

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

    +
    • Целая часть - укажите параметры склонения целой части валюты: Род и соответствующие шаблоны склонения в единственном и множественном числе. +
    • Дробная часть - укажите параметры склонения дробной части валюты: Род и соответствующие шаблоны склонения в единственном и множественном числе. +
    • Число разрядов дробной части - в случае если дробная часть в печатных формах отображается числом, то можно установить нужное количество разрядов при выводе печатных форм документов. Например, если установлено количество разрядов 1 знак, то сумма по документу будет отображена, как 150,2 евро, а если 2 знака, то – 150,20 евро. +
    • Пример прописи суммы - число, введенное в поле Сумма, будет написано по указанным параметрам прописи валюты. Используйте эту возможность для проверки параметров прописи валюты.

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

    +

    Зависимость курса валюты от курса другой валюты

    +

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

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

    Просмотр курса валюты

    +

    Нажмите Курсы валют на панели навигации валюты. Можно установить интервал дат для удобства просмотра курсов.

    +

    Ввод курса валюты вручную

    +

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

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index 5b0e4150a..13a95455a 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,8 +71,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Страница "Основные сведения" @@ -204,8 +205,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьФормуПоОбъекту() @@ -406,4 +408,4 @@ КонецФункции - +#КонецОбласти diff --git a/SSL/src/Catalogs/Валюты/Help/ru.html b/SSL/src/Catalogs/Валюты/Help/ru.html index 4110f6741..84ad359fa 100644 --- a/SSL/src/Catalogs/Валюты/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Help/ru.html @@ -1,24 +1,34 @@ - -

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

    -

    Реквизиты:

    -

    -

    - - - - -
    -
  • Код числовой
  • Уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.
    -
  • Код символьный
  • Краткое наименование, используется как основное представление валюты.
    -
  • Наименование
  • Полное наименование.
    -
  • Курс
  • Значение курса на текущую дату.

    Команды:

    -

    -

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

     

    -

    См. также: Валюта, Загрузка курсов валют, Общероссийский классификатор валют, Общая информация о формах.

    \ No newline at end of file + +

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

    +

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

    +

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

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

    Добавление валюты из Общероссийского классификатора валют (ОКВ)

    +
    • +
      Нажмите Подобрать из классификатора. (Рекомендуется для корректного ввода валюты).
      +
    • +
      Следующие поля новой валюты будут заполнены автоматически: Наименование, Символьный код, Цифровой код и флажок Загружается из интернета (если имеется возможность загружать курс этой валюты с сайта РБК).

    Ввод валюты не из классификатора (вручную)

    +

    Загрузка курсов валют

    +
    • +
      Нажмите Загрузить курсы валют для перехода к загрузке курсов валют с сайта РБК. 
      +
    • +
      Также в программе предусмотрено регламентное задание "Загрузка курсов валют" для автоматической загрузки курсов валют с сайта РБК.

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/ManagerModule.bsl b/SSL/src/Catalogs/Валюты/ManagerModule.bsl index e69de29bb..2454728b7 100644 --- a/SSL/src/Catalogs/Валюты/ManagerModule.bsl +++ b/SSL/src/Catalogs/Валюты/ManagerModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ЗагружаетсяИзИнтернета"); + Результат.Добавить("Наценка"); + Результат.Добавить("ОсновнаяВалюта"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index b8757f60e..0a1693302 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -65,4 +64,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index 76ea29a79..ded747288 100644 --- a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -156,7 +156,7 @@ - + diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form index d62cd513c..b0e683ec4 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form @@ -87,17 +87,17 @@ true
    - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 11 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 13 Label true @@ -107,20 +107,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 12 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 14 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 16 Label true @@ -130,10 +141,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 15 true + Список + + true + + + + СписокСостояниеПросмотра + 17 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 18 + true + ViewStatusAddition Список @@ -142,10 +176,10 @@ СписокУправлениеПоиском - 17 + 20 СписокУправлениеПоискомРасширеннаяПодсказка - 19 + 22 Label true true @@ -155,7 +189,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 18 + 21 true SearchControlAddition diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl index e633362d9..a9ac6b0d7 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,3 +9,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl index e86f85681..b596cee53 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,3 +14,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl index f16c0e76e..f6029f91d 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -31,3 +30,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html b/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html new file mode 100644 index 000000000..09ed12578 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html @@ -0,0 +1,9 @@ + +

    Ведение списка вариантов ответов анкет

    +

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

    +

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

    +

    Как ввести вариант ответа на вопрос

    +

    Введите один из вариантов ответа в поле Наименование.

    +

    См. также:

    + \ 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..9f6ba5772 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl @@ -0,0 +1,21 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ТребуетОткрытогоОтвета"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo b/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo index b8621ac19..ed6cd36d2 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo @@ -111,6 +111,11 @@ Use + + + ru + + Managed Use diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl index 1e8f7934e..e1265f1f2 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl index 9aa677107..b2d664b09 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(МассивВариантов, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl index 3109c384b..27f116d2e 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(МассивВариантов, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ОткрытьДиалогСбросаНастроекПользователей(МассивВариантов, ПараметрыВыполненияКоманды.Источник); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl index 38c29738b..c95b82987 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(МассивВариантов, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ОткрытьДиалогСбросаНастроекРазмещения(МассивВариантов, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form new file mode 100644 index 000000000..512486b23 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form @@ -0,0 +1,182 @@ + + + + Декорация1 + 1 + + <key>ru</key> + <value>Теперь к отчетам выводятся их <b>подробные описания</>. + +Для того чтобы включить или отключить эту возможность позже +выберите <b>Настроить</> - <b>Показывать описания к отчетам</>.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 2 + true + + true + Label + true + true + + Left + + + + Декорация2 + 8 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 9 + true + + Label + true + true + + Left + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 11 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.StandardCommand.OK + Auto + true + true + true + UserCmds + Auto + + + ФормаОтключитьСейчас + 4 + + <key>ru</key> + <value>Отключить описания</value> + + true + true + + true + + + ФормаОтключитьСейчасРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.ОтключитьСейчас + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + true + Vertical + true + true + true + auto + 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 new file mode 100644 index 000000000..cd876c9a9 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl @@ -0,0 +1,12 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОтключитьСейчас(Команда) + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("ПоказыватьПодсказки", 0); + ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(ПараметрыОбновления); + Закрыть(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/ConditionalAppearance.dcssca deleted file mode 100644 index ac31dafe0..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - ДеревоПодсистемВажность - - - - - ДеревоПодсистем.Важность - Equal - СмешаннаяВажность - - - - - ЦветТекста - style:ЗаблокированныйРеквизитЦвет - - - - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form index 277767418..acb019142 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form @@ -882,7 +882,7 @@ ru Снять флажки - 3 + 2 ru Снять флажки @@ -908,7 +908,7 @@ ru Перечитать - 4 + 3 ru Перечитать diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html index b6a810744..31695929f 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html @@ -1,3 +1,11 @@ - -

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

    -

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

    \ No newline at end of file + +

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

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

    См. также:

    +

    Работа с формами.

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index fad82705b..838ba3ea9 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -1,8 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -31,8 +32,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИзменяемыеВариантыПриИзменении(Элемент) @@ -40,8 +42,9 @@ ПоказатьРезультатВыполнения(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) @@ -53,8 +56,9 @@ ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Разместить(Команда) @@ -86,8 +90,18 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ДеревоПодсистемВажность"; + Инструкция.Отборы.Вставить("ДеревоПодсистем.Важность", Новый ПолеКомпоновкиДанных("СмешаннаяВажность")); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ЗаблокированныйРеквизитЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -289,7 +303,7 @@ КоличествоВариантов = ИзменяемыеВарианты.Количество(); - РезультатВыполнения = Новый Структура; + РезультатВыполнения = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); Если КоличествоВариантов = 0 Тогда ТекстСообщения = НСтр("ru = 'Нет прав для размещения в разделах выбранных вариантов отчетов.'"); @@ -301,13 +315,11 @@ Элементы.ДеревоПодсистем.Доступность = Истина; КонецЕсли; - ВыводПредупреждения = Новый Структура; - ВыводПредупреждения.Вставить("Использование", Истина); - ВыводПредупреждения.Вставить("Текст", ТекстСообщения); - ВыводПредупреждения.Вставить("ПутьКРеквизитуФормы", ""); - ВыводПредупреждения.Вставить("ТекстОшибок", ТекстОшибок); + ВыводПредупреждения = РезультатВыполнения.ВыводПредупреждения; + ВыводПредупреждения.Использование = Истина; + ВыводПредупреждения.Текст = ТекстСообщения; + ВыводПредупреждения.ТекстОшибок = ТекстОшибок; - РезультатВыполнения.Вставить("ВыводПредупреждения", ВыводПредупреждения); РезультатВыполнения = Новый ФиксированнаяСтруктура(РезультатВыполнения); Иначе Элементы.ДеревоПодсистем.Доступность = Истина; @@ -375,3 +387,4 @@ КонецЦикла; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl index 9a5da03e3..e7132bbf4 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,8 +24,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаСбросить(Команда) @@ -52,8 +53,9 @@ Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -110,3 +112,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index f21e6d7fd..9cc3bbd2a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -29,8 +29,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаСбросить(Команда) @@ -56,8 +57,9 @@ Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -89,3 +91,5 @@ ЕстьПользовательскиеНастройки = НЕ Запрос.Выполнить().Пустой(); Возврат ЕстьПользовательскиеНастройки; КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index f460e0071..b30107fe2 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -4,7 +4,7 @@ БыстрыеОтборы 44 - ОтборНаименование + СтрокаПоиска 60 true true @@ -12,15 +12,14 @@ true - ОтборНаименование + СтрокаПоиска - None OnChange - ОтборНаименованиеПриИзменении + СтрокаПоискаПриИзменении - ОтборНаименованиеExtendedTooltip + СтрокаПоискаРасширеннаяПодсказка 99 Label true @@ -30,7 +29,7 @@ - ОтборНаименованиеКонтекстноеМеню + СтрокаПоискаКонтекстноеМеню 61 true @@ -40,7 +39,7 @@ Left true - 31 + 37 true true false @@ -56,6 +55,33 @@ Normal + + ВыполнитьПоиск + 132 + true + true + + true + + + ВыполнитьПоискРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьПоиск + Normal + Auto + true + true + UserCmds + Auto + ОтборАвтор 58 @@ -398,7 +424,7 @@ - СправочникВариантыОтчетовСброситьНастройкиРазмещения + СброситьНастройкиРазмещения 95 true true @@ -409,7 +435,7 @@ Items.Список.CurrentData.Ref - СправочникВариантыОтчетовСброситьНастройкиРазмещенияExtendedTooltip + СброситьНастройкиРазмещенияРасширеннаяПодсказка 110 Label true @@ -605,10 +631,10 @@ ДеревоПодсистемСтрокаПоиска - 135 + 159 ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 137 + 161 Label true true @@ -618,7 +644,7 @@ ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 136 + 160 true ДеревоПодсистем @@ -628,10 +654,10 @@ ДеревоПодсистемСостояниеПросмотра - 138 + 162 ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 140 + 164 Label true true @@ -641,7 +667,7 @@ ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 139 + 163 true ViewStatusAddition @@ -652,10 +678,10 @@ ДеревоПодсистемУправлениеПоиском - 141 + 165 ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 143 + 167 Label true true @@ -665,7 +691,7 @@ ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 142 + 166 true SearchControlAddition @@ -806,20 +832,283 @@ None Copy Create - - Наименование - 4 + + Строки + 137 + + КолонкиПервойСтроки + 139 + + Наименование + 4 + true + true + + true + + + Список.Description + + + НаименованиеExtendedTooltip + 124 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + 40 + true + true + + + + Автор + 12 + true + true + + true + + + Список.Автор + + + АвторExtendedTooltip + 125 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДоступенВсемПользователям + 96 + true + true + + + Список.ДоступенВсемПользователям + + None + + ru + Доступен всем пользователям + + + ДоступенВсемПользователямExtendedTooltip + 126 + Label + true + true + + Left + + + + ДоступенВсемПользователямКонтекстноеМеню + 97 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + + CommonPicture.ВариантыОтчетовДоступныеВсемПользователям + + + + 1 + + + + + ВидимостьПоУмолчанию + 71 + true + true + + + Список.ВидимостьПоУмолчанию + + None + + ru + Видимость по умолчанию в панели отчетов + + + ВидимостьПоУмолчаниюExtendedTooltip + 127 + Label + true + true + + Left + + + + ВидимостьПоУмолчаниюКонтекстноеМеню + 72 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Колонки первой строки</value> + + + ru + + + + КолонкиПервойСтрокиРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + КолонкиВторойСтроки + 141 + + Описание + 143 + true + true + + true + + + Список.Описание + + + ОписаниеРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ОписаниеКонтекстноеМеню + 144 + true + + LabelField + Enter + true + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Колонки второй строки</value> + + + ru + + + + КолонкиВторойСтрокиРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + true true true - - Список.Description - + + <key>ru</key> + <value>Строки</value> + + + ru + Строки + - НаименованиеExtendedTooltip - 124 + СтрокиРасширеннаяПодсказка + 138 Label true true @@ -827,75 +1116,270 @@ Left - - НаименованиеКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - 40 - true - true + ColumnGroup + + Vertical + auto + true - - Автор - 12 + + ТехническаяИнформация + 148 + + ИмяОтчета + 73 + true + true + + + Список.ИмяОтчета + + + ИмяОтчетаExtendedTooltip + 128 + Label + true + true + + Left + + + + ИмяОтчетаКонтекстноеМеню + 74 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Отчет + 77 + true + true + + + Список.Отчет + + + ОтчетExtendedTooltip + 129 + Label + true + true + + Left + + + + ОтчетКонтекстноеМеню + 78 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ТипОтчета + 81 + true + true + + + Список.ТипОтчета + + + ТипОтчетаExtendedTooltip + 130 + Label + true + true + + Left + + + + ТипОтчетаКонтекстноеМеню + 82 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючВарианта + 75 + true + true + + + Список.КлючВарианта + + + КлючВариантаExtendedTooltip + 131 + Label + true + true + + Left + + + + КлючВариантаКонтекстноеМеню + 76 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 134 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 135 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НаименованияПараметровИОтборов + 150 + true + true + + + Список.НаименованияПараметровИОтборов + + + НаименованияПараметровИОтборовРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + НаименованияПараметровИОтборовКонтекстноеМеню + 151 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НаименованияПолей + 153 + true + true + + + Список.НаименованияПолей + + + НаименованияПолейРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + НаименованияПолейКонтекстноеМеню + 154 + true + + LabelField + Enter + true + Left + true + + true + true + + true true true - - Список.Автор - - - АвторExtendedTooltip - 125 - Label - true - true - - Left - - - - АвторКонтекстноеМеню - 13 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ДоступенВсемПользователям - 96 - true - true - - - Список.ДоступенВсемПользователям - - None + + <key>ru</key> + <value>Техническая информация</value> + ru - Доступен всем пользователям + - ДоступенВсемПользователямExtendedTooltip - 126 + ТехническаяИнформацияРасширеннаяПодсказка + 149 Label true true @@ -903,200 +1387,11 @@ Left - - ДоступенВсемПользователямКонтекстноеМеню - 97 - true - - PictureField - Enter - true - Left - true - - true - true - true - true - - CommonPicture.ВариантыОтчетовДоступныеВсемПользователям - - - - 1 - - - - - ВидимостьПоУмолчанию - 71 - true - true - - - Список.ВидимостьПоУмолчанию - - None - - ru - Видимость по умолчанию в панели отчетов - - - ВидимостьПоУмолчаниюExtendedTooltip - 127 - Label - true - true - - Left - - - - ВидимостьПоУмолчаниюКонтекстноеМеню - 72 - true - - CheckBoxField - Enter - true - Left - true - - - - ИмяОтчета - 73 - true - true - - - Список.ИмяОтчета - - - ИмяОтчетаExtendedTooltip - 128 - Label - true - true - - Left - - - - ИмяОтчетаКонтекстноеМеню - 74 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Отчет - 77 - true - true - - - Список.Отчет - - - ОтчетExtendedTooltip - 129 - Label - true - true - - Left - - - - ОтчетКонтекстноеМеню - 78 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ТипОтчета - 81 - true - true - - - Список.ТипОтчета - - - ТипОтчетаExtendedTooltip - 130 - Label - true - true - - Left - - - - ТипОтчетаКонтекстноеМеню - 82 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КлючВарианта - 75 - true - true - - - Список.КлючВарианта - - - КлючВариантаExtendedTooltip - 131 - Label - true - true - - Left - - - - КлючВариантаКонтекстноеМеню - 76 - true - - LabelField - Enter - true - Left - true - - true - true + ColumnGroup + + auto + true + true None @@ -1112,10 +1407,10 @@ СписокСтрокаПоиска - 154 + 178 СписокСтрокаПоискаРасширеннаяПодсказка - 156 + 180 Label true true @@ -1125,7 +1420,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 155 + 179 true Список @@ -1135,10 +1430,10 @@ СписокСостояниеПросмотра - 157 + 181 СписокСостояниеПросмотраРасширеннаяПодсказка - 159 + 183 Label true true @@ -1148,7 +1443,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 158 + 182 true ViewStatusAddition @@ -1159,10 +1454,10 @@ СписокУправлениеПоиском - 160 + 184 СписокУправлениеПоискомРасширеннаяПодсказка - 162 + 186 Label true true @@ -1172,7 +1467,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 161 + 185 true SearchControlAddition @@ -1417,10 +1712,6 @@ -1 Left
    - - OnSaveDataInSettingsAtServer - ПриСохраненииДанныхВНастройкахНаСервере - NotificationProcessing ОбработкаОповещения @@ -1429,10 +1720,6 @@ OnOpen ПриОткрытии - - OnLoadDataFromSettingsAtServer - ПриЗагрузкеДанныхИзНастроекНаСервере - OnCreateAtServer ПриСозданииНаСервере @@ -1506,7 +1793,21 @@ Варианты.КлючВарианта, Варианты.ТипОтчета, Варианты.Автор, - Варианты.Описание, + ВЫБОР + КОГДА ПОДСТРОКА(Варианты.НаименованияПараметровИОтборов, 1, 1) = "" + ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + ИНАЧЕ ВЫРАЗИТЬ(Варианты.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + КОНЕЦ КАК НаименованияПараметровИОтборов, + ВЫБОР + КОГДА ПОДСТРОКА(Варианты.НаименованияПолей, 1, 1) = "" + ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПолей КАК СТРОКА(1000)) + ИНАЧЕ ВЫРАЗИТЬ(Варианты.НаименованияПолей КАК СТРОКА(1000)) + КОНЕЦ КАК НаименованияПолей, + ВЫБОР + КОГДА ПОДСТРОКА(Варианты.Описание, 1, 1) = "" + ТОГДА ВЫРАЗИТЬ(Предопределенные.Описание КАК СТРОКА(1000)) + ИНАЧЕ ВЫРАЗИТЬ(Варианты.Описание КАК СТРОКА(1000)) + КОНЕЦ КАК Описание, ВЫБОР КОГДА Варианты.ТипОтчета = &ТипВнутренний ТОГДА Варианты.Отчет.Имя @@ -1526,20 +1827,9 @@ ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные ПО Варианты.ПредопределенныйВариант = Предопределенные.Ссылка ГДЕ - Варианты.Ссылка.Отчет В(&ОтчетыПользователя) - И НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - И (&ОтборНаименование = "" - ИЛИ Варианты.Наименование ПОДОБНО "%" + &ОтборНаименование + "%") - И (&ОтборАвтор = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - ИЛИ Варианты.Автор = &ОтборАвтор) - И ВЫБОР - КОГДА &ОтборТипОтчета = НЕОПРЕДЕЛЕНО - ТОГДА ИСТИНА - КОГДА &ОтборТипОтчета = 1 - ТОГДА Варианты.ТипОтчета = &ТипВнутренний - ИЛИ Варианты.ТипОтчета = &ТипДополнительный - ИНАЧЕ Варианты.ТипОтчета = &ОтборТипОтчета - КОНЕЦ + (&ВариантыПользователя ЕСТЬ NULL + ИЛИ Варианты.Ссылка В (&ВариантыПользователя)) + И НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) Catalog.ВариантыОтчетов true true @@ -1593,27 +1883,10 @@ - КорневаяПодсистема + СтрокаПоиска <key>ru</key> - <value>Корневая подсистема</value> - - 8 - - CatalogRef.ИдентификаторыОбъектовМетаданных - - - true - - - true - - - - ОтборНаименование - - <key>ru</key> - <value>Наименование</value> + <value>Поиск</value> 3 @@ -1627,7 +1900,7 @@ true - ОтборНаименование + СтрокаПоиска @@ -1838,6 +2111,50 @@ + + ТолькоВарианты + + <key>ru</key> + <value>Только варианты</value> + + 12 + + Boolean + String + + 1 + true + + + + true + + + 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 d11497bd8..746b63b8c 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,15 +1,15 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ВключаяПодчиненные = Истина; - //КорневаяПодсистема = Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы; ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); @@ -18,7 +18,7 @@ Если Параметры.РежимВыбора = Истина Тогда РежимРаботыФормы = "Выбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ИначеЕсли Параметры.Свойство("РазделСсылка") Тогда + ИначеЕсли Параметры.Свойство("РазделСсылка") Или Параметры.Свойство("РазделСсылка") Тогда РежимРаботыФормы = "ВсеОтчетыРаздела"; МассивОбхода = Новый Массив; МассивОбхода.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]); @@ -66,30 +66,44 @@ СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); + Параметры.Свойство("СтрокаПоиска", СтрокаПоиска); Если Параметры.Отбор.Свойство("ТипОтчета", ОтборТипОтчета) Тогда - Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); Параметры.Отбор.Удалить("ТипОтчета"); КонецЕсли; + Если Параметры.Отбор.Свойство("ТолькоВарианты") Тогда + Если Параметры.Отбор.ТолькоВарианты Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, + "КлючВарианта", + "", + ВидСравненияКомпоновкиДанных.НеРавно, + , + , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + КонецЕсли; + Параметры.Отбор.Удалить("ТолькоВарианты"); + КонецЕсли; - ОтчетыПользователя = Новый ФиксированныйМассив(ВариантыОтчетов.ОтчетыТекущегоПользователя()); - ОтключенныеВариантыПрограммы = Новый ФиксированныйМассив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + ПерсональныеНастройкиСписка = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + "Справочник.ВариантыОтчетов.ФормаСписка"); + Если ПерсональныеНастройкиСписка <> Неопределено Тогда + Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора); + КонецЕсли; - ДеревоПодсистемУстановитьПараметрыСписка(); - - Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); - Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); - - Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); - Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); - Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); + Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); + Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); ТекущийЭлемент = Элементы.Список; - // Установка отбора динамического списка. + // Пользовательский отбор по пометке удаления. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + ОбновитьСодержимоеСписка("ПриСозданииНаСервере"); + КонецПроцедуры &НаКлиенте @@ -107,77 +121,50 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - // Вызывается после загрузки данных из настроек в реквизиты формы - - ОтборНаименованиеСписокВыбора = Настройки.Получить("ОтборНаименованиеСписокВыбора"); - Если ТипЗнч(ОтборНаименованиеСписокВыбора) = Тип("Массив") Тогда - Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора); - КонецЕсли; - - Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); - Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); - Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); - //Список.Параметры.УстановитьЗначениеПараметра("ВключаяПодчиненные", ВключаяПодчиненные); -КонецПроцедуры +#КонецОбласти -&НаСервере -Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) - Настройки.Вставить("ОтборНаименованиеСписокВыбора", Элементы.ОтборНаименование.СписокВыбора.ВыгрузитьЗначения()); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборТипОтчетаПриИзменении(Элемент) - Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); + ОбновитьСодержимоеСписка(); КонецПроцедуры &НаКлиенте Процедура ОтборТипОтчетаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОтборТипОтчета = Неопределено; - Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); + ОбновитьСодержимоеСписка(); КонецПроцедуры &НаКлиенте -Процедура ОтборНаименованиеПриИзменении(Элемент) - Если ЗначениеЗаполнено(ОтборНаименование) Тогда - СписокВыбора = Элементы.ОтборНаименование.СписокВыбора; - ЭлементСписка = СписокВыбора.НайтиПоЗначению(ОтборНаименование); - Если ЭлементСписка = Неопределено Тогда - СписокВыбора.Вставить(0, ОтборНаименование); - Если СписокВыбора.Количество() > 10 Тогда - СписокВыбора.Удалить(10); - КонецЕсли; - Иначе - Индекс = СписокВыбора.Индекс(ЭлементСписка); - Если Индекс <> 0 Тогда - СписокВыбора.Сдвинуть(Индекс, -Индекс); - КонецЕсли; - КонецЕсли; - ТекущийЭлемент = Элементы.ОтборНаименование; - КонецЕсли; - - Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); +Процедура СтрокаПоискаПриИзменении(Элемент) + ОбновитьСодержимоеСписка("СтрокаПоискаПриИзменении"); КонецПроцедуры &НаКлиенте Процедура ОтборАвторПриИзменении(Элемент) - Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); + ОбновитьСодержимоеСписка(); КонецПроцедуры &НаКлиенте Процедура ВключаяПодчиненныеПриИзменении(Элемент) - //Список.Параметры.УстановитьЗначениеПараметра("ВключаяПодчиненные", ВключаяПодчиненные); ДеревоПодсистемТекущаяСтрока = -1; ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьПоиск(Команда) + ОбновитьСодержимоеСписка(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемПередНачаломИзменения(Элемент, Отказ) @@ -280,24 +267,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда СтандартнаяОбработка = Ложь; ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ЭтотОбъект); - ИначеЕсли РежимРаботыФормы = "Выбор" Тогда - // Действие не требуется. - Иначе - СтандартнаяОбработка = Ложь; - ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаОбъекта", Новый Структура("Ключ", ВыбраннаяСтрока), ЭтотОбъект, , ВариантОткрытияОкна.ОтдельноеОкно); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "Описание"; + Инструкция.Отборы.Вставить("Список.Описание", ВидСравненияКомпоновкиДанных.Заполнено); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ПоясняющийТекст); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПеретаскиваниеЗавершение(Ответ, ПараметрыРазмещения) Экспорт @@ -322,15 +315,37 @@ КонецПроцедуры -&НаКлиенте -Процедура ДеревоПодсистемОбработчикАктивизацииСтроки() - Если ДеревоПодсистемТекущаяСтрока <> Элементы.ДеревоПодсистем.ТекущаяСтрока Тогда - ДеревоПодсистемУстановитьПараметрыСписка(); - КонецЕсли; -КонецПроцедуры - &НаСервере -Процедура ДеревоПодсистемУстановитьПараметрыСписка() +Процедура ОбновитьСодержимоеСписка(Знач Событие = "") + ИзменилисьПерсональныеНастройки = Ложь; + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(СтрокаПоиска); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, СтрокаПоиска); + ИзменилисьПерсональныеНастройки = Истина; + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); + КонецЕсли; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + ИзменилисьПерсональныеНастройки = Истина; + КонецЕсли; + КонецЕсли; + ТекущийЭлемент = Элементы.СтрокаПоиска; + КонецЕсли; + + Если Событие = "СтрокаПоискаПриИзменении" И ИзменилисьПерсональныеНастройки Тогда + ПерсональныеНастройкиСписка = Новый Структура("СтрокаПоискаСписокВыбора"); + ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора = Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения(); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + "Справочник.ВариантыОтчетов.ФормаСписка", + ПерсональныеНастройкиСписка); + КонецЕсли; + ДеревоПодсистемТекущаяСтрока = Элементы.ДеревоПодсистем.ТекущаяСтрока; СтрокаДерева = ДеревоПодсистем.НайтиПоИдентификатору(ДеревоПодсистемТекущаяСтрока); @@ -340,104 +355,45 @@ ВсеПодсистемы = НЕ ЗначениеЗаполнено(СтрокаДерева.ПолноеИмя); - Фрагмент1 = "Варианты.Ссылка.Отчет В(&ОтчетыПользователя) - | И НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)"; - Фрагмент2 = "Варианты.Ссылка В(&ВариантыПользователя)"; - - Элементы.ВключаяПодчиненные.Доступность = НЕ ВсеПодсистемы; - - Если ВсеПодсистемы Тогда - - // Курсор установлен на строке дерева "Все разделы". - // В качестве основных фильтров к ДС используется 2 массива: - // - включенные отчеты - // - отключенные варианты отчетов - - Если Найти(Список.ТекстЗапроса, Фрагмент2) <> 0 Тогда - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, Фрагмент2, Фрагмент1); - КонецЕсли; - - Список.Параметры.УстановитьЗначениеПараметра("ОтчетыПользователя", ОтчетыПользователя); - Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", ОтключенныеВариантыПрограммы); - - Иначе - - // Курсор установлен на строке дерева, относящейся к конкретной подсистеме. - // В качестве основного фильтра к ДС используется 1 массив: - // - варианты отчетов, доступные в этой подсистеме текущему пользователю. - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ПредопределенныеРазмещение.Подсистема - |ПОМЕСТИТЬ втПредопределенные - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение - | ПО (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка - | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) - | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыРазмещение.Ссылка, - | ВариантыРазмещение.РазделИлиГруппа, - | ВариантыРазмещение.Использование - |ПОМЕСТИТЬ втВарианты - |ИЗ - | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - |ГДЕ - | ВариантыРазмещение.РазделИлиГруппа В(&МассивПодсистем) - | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ЕСТЬNULL(втПредопределенные.Ссылка, втВарианты.Ссылка) КАК Ссылка - |ИЗ - | втПредопределенные КАК втПредопределенные - | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты - | ПО втПредопределенные.Ссылка = втВарианты.Ссылка - | И втПредопределенные.Подсистема = втВарианты.РазделИлиГруппа - |ГДЕ - | (втВарианты.Использование = ИСТИНА - | ИЛИ втВарианты.Использование ЕСТЬ NULL )"; - - Запрос = Новый Запрос; + ПараметрыПоиска = Новый Структура; + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); + КонецЕсли; + Если ЗначениеЗаполнено(ОтборАвтор) Тогда + ПараметрыПоиска.Вставить("Автор", ОтборАвтор); + КонецЕсли; + Если Не ВсеПодсистемы Тогда + МассивПодсистем = Новый Массив; + МассивПодсистем.Добавить(СтрокаДерева.Ссылка); Если ВключаяПодчиненные Тогда - МассивПодсистем = Новый Массив; - МассивПодсистем.Добавить(СтрокаДерева.Ссылка); ДобавитьРекурсивно(МассивПодсистем, СтрокаДерева.ПолучитьЭлементы()); - Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); + КонецЕсли; + ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); + КонецЕсли; + Если ЗначениеЗаполнено(ОтборТипОтчета) Тогда + МассивТиповОтчетов = Новый Массив; + Если ОтборТипОтчета = 1 Тогда + МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний); + МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный); Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В (&МассивПодсистем)", "= &Подсистема"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В(&МассивПодсистем)", "= &Подсистема"); - Запрос.УстановитьПараметр("Подсистема", СтрокаДерева.Ссылка); + МассивТиповОтчетов.Добавить(ОтборТипОтчета); КонецЕсли; - Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); - Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ОтключенныеВариантыПрограммы); - Запрос.Текст = ТекстЗапроса; - - ВариантыПользователя = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Если Найти(Список.ТекстЗапроса, Фрагмент1) <> 0 Тогда - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, Фрагмент1, Фрагмент2); - КонецЕсли; - - Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", ВариантыПользователя); - + ПараметрыПоиска.Вставить("ТипыОтчетов", МассивТиповОтчетов); КонецЕсли; - Если Не ЗначениеЗаполнено(Список.ОсновнаяТаблица) Тогда - Список.ОсновнаяТаблица = "Справочник.ВариантыОтчетов"; - Список.ДинамическоеСчитываниеДанных = Истина; - КонецЕсли; + РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); + ВариантыПользователя = ?(РезультатПоиска = Неопределено, Null, РезультатПоиска.Ссылки); + Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", ВариантыПользователя); КонецПроцедуры +&НаКлиенте +Процедура ДеревоПодсистемОбработчикАктивизацииСтроки() + Если ДеревоПодсистемТекущаяСтрока <> Элементы.ДеревоПодсистем.ТекущаяСтрока Тогда + ОбновитьСодержимоеСписка(); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ДобавитьРекурсивно(МассивПодсистем, КоллекцияСтрокДерева) Для Каждого СтрокаДерева Из КоллекцияСтрокДерева Цикл @@ -530,9 +486,10 @@ КонецЕсли; Если ПараметрыРазмещения.Действие = "Перемещение" И Размещено > 0 Тогда - Элементы.Список.Обновить(); + ОбновитьСодержимоеСписка(); КонецЕсли; Возврат РезультатВыполнения; КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 288ed5714..0ac47429a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -533,10 +533,10 @@ ДеревоПодсистемСтрокаПоиска - 187 + 200 ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 189 + 202 Label true true @@ -546,7 +546,7 @@ ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 188 + 201 true ДеревоПодсистем @@ -556,10 +556,10 @@ ДеревоПодсистемСостояниеПросмотра - 190 + 203 ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 192 + 205 Label true true @@ -569,7 +569,7 @@ ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 191 + 204 true ViewStatusAddition @@ -580,10 +580,10 @@ ДеревоПодсистемУправлениеПоиском - 193 + 206 ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 195 + 208 Label true true @@ -593,7 +593,7 @@ ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 194 + 207 true SearchControlAddition @@ -620,7 +620,6 @@ Tree true true - 15 true true MultiRow @@ -646,6 +645,33 @@ ТехническаяИнформация 135 + + Группа1 + 188 + true + true + + true + + + Группа1РасширеннаяПодсказка + 189 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + Отчет 136 @@ -688,6 +714,47 @@ Normal + + КлючВарианта + 192 + true + true + + true + + + Объект.КлючВарианта + + + КлючВариантаРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + КлючВариантаКонтекстноеМеню + 193 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ПредопределенныйВариант 120 @@ -733,6 +800,10 @@ Размещение 122 + + <key>ru</key> + <value>Данные по размещению (без учета настроек предопределенного варианта)</value> + true true @@ -904,10 +975,10 @@ РазмещениеСтрокаПоиска - 209 + 223 РазмещениеСтрокаПоискаРасширеннаяПодсказка - 211 + 225 Label true true @@ -917,7 +988,7 @@ РазмещениеСтрокаПоискаКонтекстноеМеню - 210 + 224 true Размещение @@ -927,10 +998,10 @@ РазмещениеСостояниеПросмотра - 212 + 226 РазмещениеСостояниеПросмотраРасширеннаяПодсказка - 214 + 228 Label true true @@ -940,7 +1011,7 @@ РазмещениеСостояниеПросмотраКонтекстноеМеню - 213 + 227 true ViewStatusAddition @@ -951,10 +1022,10 @@ РазмещениеУправлениеПоиском - 215 + 229 РазмещениеУправлениеПоискомРасширеннаяПодсказка - 217 + 231 Label true true @@ -964,7 +1035,7 @@ РазмещениеУправлениеПоискомКонтекстноеМеню - 216 + 230 true SearchControlAddition @@ -1017,6 +1088,121 @@ true + + Группа2 + 190 + + НаименованияПолей + 182 + true + true + + true + + + Объект.НаименованияПолей + + Top + + НаименованияПолейРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + НаименованияПолейКонтекстноеМеню + 183 + true + + InputField + Enter + true + Left + true + + true + 3 + true + true + true + true + true + true + Normal + + + + НаименованияПараметровИОтборов + 185 + true + true + + true + + + Объект.НаименованияПараметровИОтборов + + Top + + НаименованияПараметровИОтборовРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + НаименованияПараметровИОтборовКонтекстноеМеню + 186 + true + + InputField + Enter + true + Left + true + + true + 3 + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 191 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -1374,7 +1560,6 @@ Delete DontBlock true - true true Vertical true @@ -1398,23 +1583,6 @@
    true
    true - - ЭтоНовый - - <key>ru</key> - <value>Это новый</value> - - 3 - - Boolean - - - true - - - true - - ПолныеПраваНаВарианты @@ -1728,6 +1896,10 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>AfterWriteAtServer</event> + <name>ПослеЗаписиНаСервере</name> + </handlers> <handlers> <event>OnReadAtServer</event> <name>ПриЧтенииНаСервере</name> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html index a98448d86..f25989f0d 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,30 +1,27 @@ -<!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> -<table border="0" cellspacing="4" cellpadding="0" width="700"><tbody><tr valign="top"><td width="25%"> -<li><strong>Наименование</strong></li></td> -<td>Представление варианта отчета в списках.</td></tr><tr valign="top"><td> -<li><strong>Описание</strong></li></td> -<td>Подробная информация о варианте отчета, выводится как подсказка в панелях отчетов.</td></tr><tr valign="top"><td> -<li><strong>Только для автора</strong></li></td> -<td>Доступность варианта отчета только автору или всем пользователям данного отчета.</td></tr><tr valign="top"><td> -<li><strong>Автор</strong></li></td> -<td>Автор варианта отчета.</td></tr><tr valign="top"><td> -<li><strong>По умолчанию виден в панелях отчетов всех пользователей</strong></li></td> -<td>Значение по умолчанию флажка "Видимость" для всех пользователей в панелях отчетов.</td></tr></tbody></table><h2><a name="Размещение">Таблица "Размещение":</a></h2> -<p></p> -<table border="0" cellspacing="4" cellpadding="0" width="700"><tbody><tr valign="top"><td width="25%"> -<li><strong>Использование</strong></li></td> -<td>Если выключен, то отчет не будет размещаться в группе раздела.</td></tr><tr valign="top"><td> -<li><strong>Раздел, Группа</strong></li></td> -<td> -<p>Подсистема, в которой необходимо разместить вариант отчета.<br>Подсистемы верхнего уровня - разделы, остальные - группы.<br>При размещении в разделе вариант отчета будет выводиться без группы.</p></td></tr><tr valign="top"><td> -<li><strong>Важность</strong></li></td> -<td>Способ выделения варианта отчета в группе: <br><strong>Важный</strong> – вариант отчета будет выделен жирным шрифтом.<br><strong>См. также</strong> – вариант отчета будет выведен в отдельной группе внизу панели отчетов. </td></tr></tbody></table><h2><a name="Команды">Команды:</a></h2> -<p></p> -<table border="0" cellspacing="4" cellpadding="0" width="700"><tbody><tr valign="top"><td width="25%"> -<li><strong>Просмотр</strong></li></td> -<td>Открыть отчет для формирования и просмотра.</td></tr><tr valign="top"><td> -<li><strong>Сбросить настройки пользователей</strong></li></td> -<td>Сбросить пользовательские настройки в панелях отчетов по данному варианту отчета.</td></tr></tbody></table></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.16476"></meta></head><body> +<p>Предназначен для хранения <a href="Catalog.ВариантыОтчетов/Help">вариантов отчетов</a> и настройки их размещения в командном интерфейсе.</p> +<h3><a name="Реквизиты">Сведения</a> о варианте отчета</h3> +<ul><li>Заполните <strong>Наименование</strong> варианта отчета, которое будет выводиться в списках программы и в панели отчетов. +</li><li>Напишите <strong>Описание - </strong>подробную информацию о варианте отчета, выводится как подсказка в панелях отчетов и в списках вариантов отчетов. +</li><li>Нажмите переключатель <strong>Доступен</strong> для того чтобы определить, кому будет виден данный вариант отчета: +<ul><li><strong>Только для автора</strong> - варианта отчета виден только автору, которого можно <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> из списка <a href="Catalog.Пользователи/Help">пользователей</a>. При этом имеется возможность назначить отчету другого автора, если это необходимо, например, ответственный за этот отчет поменялся. +</li><li><strong>Всем пользователям</strong> - доступность всем пользователям данного отчета. +<ul><li><strong>По умолчанию виден в панели отчетов</strong> - включите флажок, чтобы отчет был всегда виден всем пользователям в <a href="CommonForm.ПанельОтчетов/Help">панели отчетов</a>.</li></ul></li></ul></li></ul><p></p> +<h3><a name="Размещение">Размещение в панелях отчетов</a></h3> +<p>Размещение вариантов отчетов могут менять администраторы вариантов отчетов и авторы.</p> +<ul><li>Включите один или несколько флажков в колонке <strong>Раздел, группа</strong> для размещения варианта отчетов в соответствующих разделах или группах программы. При размещении в разделе вариант отчета будет выводиться в верхней части панели отчетов раздела, без размещения в группах. +</li><li> +<div>В колонке <strong>Важность</strong> выберите способ выделения варианта отчета в группе: </div> +<ul><li> +<div><strong>Важный</strong> – вариант отчета будет выделен жирным шрифтом.</div> +</li><li> +<div><strong>См. также</strong> – вариант отчета будет выведен в отдельной группе внизу панели отчетов.</div></li></ul></li></ul><p></p> +<h3><a name="Команды">Формирование отчета</a></h3> +<p>Нажмите <strong>Открыть</strong>, укажите необходимые параметры, затем нажмите <strong>Сформировать</strong>.</p> +<h3>Сброс настроек</h3> +<ul><li> +<div><strong>Все действия - Сбросить настройки размещения</strong> - сбросить настройки размещения по данному варианту отчета;</div> +</li><li> +<div><strong>Все действия - Сбросить настройки пользователей</strong> - сбросить пользовательские настройки в панелях отчетов по данному варианту отчета.</div></li></ul><h3>См. также:</h3> +<ul><li> +<div><a href="v8help://frame/form_common">Работа с формами</a></div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index e5c0b2ba9..046281383 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) @@ -30,7 +30,7 @@ Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; КонецЕсли; - Если НЕ Объект.Пользовательский Тогда + Если Не Объект.Пользовательский Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Доступен.ТолькоПросмотр = Истина; Элементы.Автор.ТолькоПросмотр = Истина; @@ -43,8 +43,8 @@ Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; КонецЕсли; - Элементы.Доступен.ТолькоПросмотр = НЕ ПолныеПраваНаВарианты; - Элементы.Автор.ТолькоПросмотр = НЕ ПолныеПраваНаВарианты; + Элементы.Доступен.ТолькоПросмотр = Не ПолныеПраваНаВарианты; + Элементы.Автор.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.ТехническаяИнформация.Видимость = ПолныеПраваНаВарианты; // Заполнение имени отчета для команды "Просмотр" @@ -63,11 +63,12 @@ Доступен = ?(Объект.ТолькоДляАвтора, "1", "2"); ВидимостьДоступность(ЭтотОбъект); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ ПустаяСтрока(ОшибкаОткрытия) Тогда + Если Не ПустаяСтрока(ОшибкаОткрытия) Тогда Если Объект.Ссылка.Пустая() Тогда Отказ = Истина; Иначе @@ -94,7 +95,7 @@ Объект.ВидимостьПоУмолчаниюПереопределена = Истина; КонецЕсли; - Если НЕ ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) = НРег(СокрЛП(СвойстваПредопределенного.Описание)) Тогда + Если Не ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) = НРег(СокрЛП(СвойстваПредопределенного.Описание)) Тогда Объект.Описание = ""; КонецЕсли; КонецЕсли; @@ -103,6 +104,11 @@ ВариантыОтчетов.ДеревоПодсистемЗаписать(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + ВидимостьДоступность(ЭтотОбъект); +КонецПроцедуры + &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ПараметрОповещения = Новый Структура("Ссылка, Наименование, Автор, Описание, ВидимостьПоУмолчанию"); @@ -110,8 +116,9 @@ Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), ПараметрОповещения, ИмяФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -127,11 +134,12 @@ &НаКлиенте Процедура ВидимостьПоУмолчаниюПриИзменении(Элемент) - Объект.ВидимостьПоУмолчаниюПереопределена = НЕ Объект.ВидимостьПоУмолчаниюПереопределена; + Объект.ВидимостьПоУмолчаниюПереопределена = Не Объект.ВидимостьПоУмолчаниюПереопределена; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) @@ -143,23 +151,32 @@ ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура ВидимостьДоступность(Форма, Изменения = "") - Если Форма.ТолькоПросмотр Тогда - Возврат; - КонецЕсли; - Объект = Форма.Объект; Элементы = Форма.Элементы; - Если Изменения = "" ИЛИ Изменения = "ТолькоДляАвтора" Тогда - Если НЕ Форма.ЭтоВнешний И НЕ Форма.Объект.ПометкаУдаления Тогда - Элементы.ВидимостьПоУмолчанию.Доступность = НЕ Объект.ТолькоДляАвтора; + Если Изменения = "" Тогда + Если Объект.КлючВарианта = "" Тогда + ПредставлениеТипа = НСтр("ru = 'Отчет'"); + Иначе + ПредставлениеТипа = НСтр("ru = 'Вариант отчета'"); + КонецЕсли; + Форма.Заголовок = Объект.Наименование + " (" + ПредставлениеТипа + ")"; + КонецЕсли; + + Если Не Форма.ТолькоПросмотр Тогда + Если Изменения = "" Или Изменения = "ТолькоДляАвтора" Тогда + Если Не Форма.ЭтоВнешний И Не Объект.ПометкаУдаления Тогда + Элементы.ВидимостьПоУмолчанию.Доступность = Не Объект.ТолькоДляАвтора; + КонецЕсли; КонецЕсли; КонецЕсли; + КонецПроцедуры &НаСервере @@ -172,12 +189,14 @@ &НаСервере Процедура ПрочитатьСвойстваПредопределенного(ПервоеЧтение) - Если НЕ ПервоеЧтение И ТипЗнч(СвойстваПредопределенного) <> Тип("ФиксированнаяСтруктура") Тогда + Если Не ПервоеЧтение И ТипЗнч(СвойстваПредопределенного) <> Тип("ФиксированнаяСтруктура") Тогда Возврат; КонецЕсли; Если ПервоеЧтение Тогда - Если Объект.Пользовательский ИЛИ Объект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний ИЛИ НЕ ЗначениеЗаполнено(Объект.ПредопределенныйВариант) Тогда + Если Объект.Пользовательский + Или Объект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний + Или Не ЗначениеЗаполнено(Объект.ПредопределенныйВариант) Тогда Возврат; КонецЕсли; @@ -198,3 +217,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index 059916d38..ecf91a96b 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,35 +1,73 @@ -<!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> -<h2><a name="Реквизиты">Колонки списка:</a></h2> -<p></p> -<table border="0" cellspacing="4" cellpadding="0" width="90%"><tbody><tr valign="top"><td width="25%"> -<li><strong>Наименование</strong></li></td> -<td>Представление варианта отчета в списках.</td></tr><tr valign="top"><td> -<li><strong>Автор</strong></li></td> -<td>Автор варианта отчета.</td></tr></tbody></table><h2>Дополнительные колонки:<br></h2>(эти колонки можно включить через "Все функции" - "Настроить форму")<br><br><table border="0" cellspacing="4" cellpadding="0" width="90%"><tbody><tr valign="top"><td width="25%"> -<li><strong>Картинка "Доступен всем пользователям"</strong></li></td> -<td>Картинка видна - вариант отчета доступен всем пользователям,<br>Картинка не видна - вариант отчета доступен только автору.</td></tr><tr valign="top"><td> -<li><strong>Флажок "Видимость по умолчанию в панели отчетов"</strong></li></td> -<td>Значение по умолчанию флажка "Видимость" для всех пользователей в панелях отчетов.</td></tr><tr valign="top"><td> -<li><strong>Имя отчета</strong></li></td> -<td>Имя, под которым отчет зарегистрирован в программе.</td></tr><tr valign="top"><td> -<li><strong>Отчет</strong></li></td> -<td>Представление отчета.</td></tr><tr valign="top"><td> -<li><strong>Тип отчета</strong></li></td> -<td><strong>Внутренний</strong>, <strong>Дополнительный</strong> или <strong>Внешний</strong>.<br>Варианты внешних отчетов не могут размещаться в панели отчетов.</td></tr><tr valign="top"><td> -<li><strong>Ключ варианта</strong></li></td> -<td> -<p>Имя предопределенного или уникальный идентификатор пользовательского варианта отчета.</p></td></tr></tbody></table><h2><a name="Команды">Команды:</a></h2> -<p></p> -<table border="0" cellspacing="4" cellpadding="0" width="90%"><tbody><tr valign="top"><td width="25%"> -<li><strong>Открыть</strong></li></td> -<td>Открыть отчет для формирования и просмотра.</td></tr><tr valign="top"><td> -<li><strong>Разместить в разделах</strong></li></td> -<td>Разместить несколько вариантов отчетов в разделах программы.</td></tr><tr valign="top"><td> -<li><strong>Сбросить настройки пользователей</strong></li></td> -<td>Сбросить пользовательские настройки выбранных вариантов отчетов: видимость и быстрый доступ.</td></tr><tr valign="top"><td> -<li><strong>Сбросить настройки размещения</strong></li></td> -<td>Восстановить исходные настройки выбранных вариантов отчетов: размещение в разделах программы, доступность и видимость по умолчанию.<br>Может выполняться только для предопределенных вариантов отчетов.</td></tr></tbody></table><p> </p> -<p>См. также: <a href="Catalog.ВариантыОтчетов.Form.ФормаЭлемента/Help">Вариант отчета</a>, <a href="v8help://frame/form_common">Общая информация о формах</a>.</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.16476"></meta></head><body> +<p>Предназначен для управления вариантами отчетов, для настройки размещения в панелях отчетов разделов программы.</p> +<p>Программа позволяет сохранять и использовать несколько вариантов одного и того же отчета. Предусмотрены предопределенные варианты отчетов. Также можно создавать свои собственные варианты отчетов, изменяя настройки существующих: <a href="v8help://mngui/reportFormMain">настройки</a> формирования и внешнего вида (состав полей, сортировки, группировки, условное оформление).</p> +<p>В программе предусмотрена возможность создавать общие варианты отчетов. Общие варианты отчетов доступны всем пользователям этого отчета.</p> +<p>В разделах программы размещены команды перехода к <a href="CommonForm.ПанельОтчетов/Help">панелям отчетов</a>, предусмотренным в этих разделах. Если отчетов много, то они распределяются по группам раздела. Для удобства работы с панелями отчетов их можно настраивать, например: скрывать редко используемые варианты отчетов, размещать часто используемые в быстром доступе. </p> +<p>Список открывается по команде <strong>Все отчеты</strong> в панели отчетов раздела программы. Состав разделов и групп в данном списке зависит от предоставленных прав и ролей. Все варианты отчетов без исключения доступны только администратору программы.</p> +<p>Администратор программы может открыть список по команде <strong>Варианты отчетов</strong> раздела <strong>Администрирование - Печатные формы, отчеты и обработки</strong>. Некоторые команды или действия, доступные для администратора, могут быть недоступны в списке <strong>Все отчеты</strong>. Об этих особенностях упоминается при описании возможностей списка.</p> +<p>Список состоит из двух частей: </p> +<ul><li>в левой части расположено дерево разделов и групп командного интерфейса программы, в которых имеются панели отчетов. +<ul><li>При перемещении по узлам дерева список автоматически фильтруется по выбранному разделу или группе. +</li><li>При помощи флажка <strong>Включая подчиненные</strong> можно показать все отчеты раздела или группы, включая варианты отчетов вложенных групп. </li></ul></li><li>В правой части размещается список отчетов. </li></ul><p>В списке выводится: </p> +<ul><li> +<div><strong>Наименование</strong> - полное наименование варианта отчета, которое выводится в списках.</div> +</li><li><strong>Автор</strong> - полное имя пользователя, который является автором варианта отчета. +</li><li><strong>Описание</strong> - подробная информация о варианте отчета.</li></ul><p>Для того чтобы добавить колонки в список, нажмите <strong>Все действия - Изменить форму</strong> (настройки сохраняются):</p> +<ul><li> +<div>Картинка <strong>Доступен всем пользователям:</strong></div> +<ul><li> +<div>видна - вариант отчета доступен всем пользователям, </div> +</li><li> +<div>не видна - вариант отчета доступен только автору.</div></li></ul></li><li>Флажок <strong>Видимость по умолчанию в панели отчетов</strong>; +</li><li><strong>Техническая информация</strong>: +<ul><li> +<div><strong>Имя отчета</strong> - имя, под которым отчет зарегистрирован в программе. </div> +</li><li> +<div><strong>Отчет</strong> - полное наименование отчета (представление). </div> +</li><li> +<div><strong>Тип отчета</strong> - существуют три типа отчетов: </div> +<ul><li> +<div><strong>Внутренний</strong> </div> +</li><li> +<div><strong>Дополнительный</strong> </div> +</li><li> +<div><strong>Внешний</strong> - варианты внешних отчетов не могут размещаться в панели отчетов.</div></li></ul></li><li> +<div><strong>Ключ варианта</strong> - имя предопределенного или уникальный идентификатор пользовательского варианта отчета. </div> +</li><li> +<div><strong>Наименования параметров и отборов</strong> - перечисляются параметры и отборы отчетов.</div> +</li><li> +<div><strong>Наименования полей</strong> - перечисляются наименования полей отчетов.</div></li></ul></li></ul><h3>Поиск</h3> +<p>Если список вариантов отчетов большой, то с помощью поиска можно быстро найти нужный вариант отчета. </p> +<ul><li>В поле <strong>Поиск</strong> наберите искомое значение, нажмите <strong>Найти</strong>. Поиск проводится в выделенном разделе (группе). +<ul><li> +<p>Отчеты можно искать по слову (части слова), также возможен поиск по нескольким словам. Поиск осуществляется: </p> +<ul><li>в наименованиях отчета; +</li><li>в описаниях варианта отчета; +</li><li>в представлениях полей варианта отчета; +</li><li>в представлениях параметров и отборов варианта отчета; +</li><li>в наименованиях пользовательских настроек варианта отчета; +</li><li>в наименованиях разделов и групп программы и панели отчетов.</li></ul></li></ul></li><li>В поле <strong>Автор</strong> можно <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong> автора варианта отчета из списка <a href="Catalog.Пользователи/Help">пользователей</a>. </li></ul><h3>Формирование отчета</h3> +<ul><li> +<div>Выделите один из вариантов отчетов, нажмите <strong>Открыть</strong>, произведите необходимые настройки, нажмите <strong>Сформировать</strong>.</div> +</li><li> +<div>В списке <strong>Все отчеты</strong> также можно воспользоваться двойным щелчком мыши на нужном варианте отчета.</div></li></ul><h3>Настройка варианта отчета</h3> +<ul><li> +<div>Выберите нужный вариант отчета, нажмите <img src="StdPicture.Change"></img> <strong>Изменить</strong>, отредактируйте нужные <a href="Catalog.ВариантыОтчетов.Form.ФормаЭлемента/Help">поля</a>.</div> +</li><li> +<div>В списке <strong>Варианты отчетов</strong>, предназначенном только для администратора, также можно воспользоваться двойным щелчком мыши на нужном варианте отчета.</div></li></ul><h3>Удаление варианта отчета</h3> +<ul><li>Пользовательский вариант отчета с помощью команды меню <strong>Все действия</strong> можно <strong>Пометить на удаление</strong>. Также можно воспользоваться клавишей <strong>Del</strong>. +</li><li>Повторно выполните эту команду, для того чтобы <strong>Снять пометку удаления</strong>.  +</li><li>Эта возможность недоступна для предопределенных вариантов отчетов.</li></ul><h3>Размещение вариантов отчетов в разделах программы </h3> +<p><a href="Catalog.ВариантыОтчетов.Form.РазмещениеВРазделах/Help">Размещение</a> варианта отчета может быть изменено автором отчета или администратором.</p> +<ul><li>Варианты отчетов можно перемещать из текущего раздела/группы в другие при помощи перетаскивания. Если при перетаскивании зажать клавишу <strong>Ctrl</strong>, то вариант отчета будет добавлен в новую группу, а также останется в текущей группе. Программа запрашивает подтверждение размещения варианта отчета. Для подтверждения нажмите <strong>Да</strong>. +</li><li> +<p>С помощью команды <strong>Все действия - Разместить в разделах</strong> можно настроить размещение сразу для нескольких вариантов отчетов, указав, в каких разделах и группах командного интерфейса программы они должны располагаться.</p> +<ul><li> +<p>Предусмотрены дополнительные возможности по настройке внешнего вида панели отчетов в программе: можно выделить тот или иной вариант отчета как важный или поместить в группу <strong>См. также</strong>.</p> +</li><li> +<p> В списке <strong>Варианты отчетов</strong>, предназначенном только для администратора, команда <strong>Разместить в разделах</strong> для удобства управления вариантами отчетов выведена в командную панель списка.</p></li></ul></li></ul><h3>Сброс настроек</h3> +<ul><li> +<div>Нажмите <strong>Все действия - Сбросить настройки размещения</strong>, для того чтобы восстановить исходные настройки выбранных вариантов отчетов: размещение в разделах программы, доступность и видимость по умолчанию. Может выполняться только для предопределенных вариантов отчетов; </div> +</li><li>Нажмите <strong>Все действия - Сбросить настройки пользователей</strong>, для того чтобы сбросить пользовательские настройки выбранных вариантов отчетов: видимость и быстрый доступ. +<div></div></li></ul><h3>См. также: </h3> +<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl new file mode 100644 index 000000000..acd890193 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl @@ -0,0 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Описание"); + Результат.Добавить("Автор"); + Результат.Добавить("ТолькоДляАвтора"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index d1cda85b8..55da50331 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ИсключаемыеРеквизиты = Новый Массив; @@ -65,13 +64,6 @@ КонецЕсли; КонецЕсли; -КонецПроцедуры - -Процедура ПриЗаписи(Отказ) - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - // Удаление из табличной части подсистем, помеченных на удаление. МассивУдаляемыхСтрок = Новый Массив; Для Каждого СтрокаРазмещения Из Размещение Цикл @@ -82,7 +74,37 @@ Для Каждого СтрокаРазмещения Из МассивУдаляемыхСтрок Цикл Размещение.Удалить(СтрокаРазмещения); КонецЦикла; + + // Заполнение реквизитов "НаименованияПолей" и "НаименованияПараметровИОтборов". + ПроиндексироватьНастройки(); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПроиндексироватьНастройки() + Если Пользовательский Или ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный Тогда + Попытка + ВариантыОтчетов.ПроиндексироватьСодержимоеСхемы(ЭтотОбъект); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось проиндексировать схему варианта ""%1"" отчета ""%2"":'"), + КлючВарианта, + Строка(Отчет)); + ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + // Для предопределенных вариантов отчетов данные хранятся в неразделенном справочнике. + Если НаименованияПолей <> "" Тогда + НаименованияПолей = ""; + КонецЕсли; + Если НаименованияПараметровИОтборов <> "" Тогда + НаименованияПараметровИОтборов = ""; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index a7ec14ae6..dff879b22 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -10,7 +10,7 @@ <name>ВариантыОтчетов</name> <synonym> <key>ru</key> - <value>Варианты отчетов</value> + <value>Отчеты</value> </synonym> <useStandardCommands>true</useStandardCommands> <inputByString>Catalog.ВариантыОтчетов.StandardAttribute.Description</inputByString> @@ -108,7 +108,7 @@ <fullTextSearch>Use</fullTextSearch> <objectPresentation> <key>ru</key> - <value>Вариант отчета</value> + <value>Отчет</value> </objectPresentation> <levelCount>2</levelCount> <foldersOnTop>true</foldersOnTop> @@ -256,7 +256,7 @@ <name>ТолькоДляАвтора</name> <synonym> <key>ru</key> - <value>Только для автора:</value> + <value>Только для автора</value> </synonym> <type> <types>Boolean</types> @@ -302,13 +302,13 @@ <key>ru</key> <value>Видимость по умолчанию переопределена</value> </synonym> + <comment>Когда Истина то вместо флажка ВидимостьПоУмолчанию используется значение аналогичного флажка предопределенного варианта отчета.</comment> <type> <types>Boolean</types> </type> <toolTip> <key>ru</key> - <value>Используется только для предопределенных вариантов отчетов. -"Да" - будет использоваться значение флажка ВидимостьПоУмолчанию предопределенного варианта отчета.</value> + <value>Служебный реквизит, который используется для предопределенных вариантов отчетов.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -334,6 +334,70 @@ <fillValue xsi:type="core:UndefinedValue"/> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="ca797560-8802-4bdc-b21f-7a7fd795beae"> + <name>ХешНастроек</name> + <synonym> + <key>ru</key> + <value>Хеш настроек</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>32</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Служебное поле. +Используется при обновлении программы.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="56242b05-d722-4d4a-82d9-517e0e169d0b"> + <name>НаименованияПолей</name> + <synonym> + <key>ru</key> + <value>Поля</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <toolTip> + <key>ru</key> + <value>Наименования полей, выведенных в отчете. +Используется при поиске.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="5504f5d1-35d8-4a47-a0e1-003fe00395c1"> + <name>НаименованияПараметровИОтборов</name> + <synonym> + <key>ru</key> + <value>Параметры и отборы</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <toolTip> + <key>ru</key> + <value>Наименования параметров и отборов отчета. +Используется при поиске.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="4eeda6df-fb48-4c88-853f-9c35e2b3a3cf"> <name>Описание</name> <synonym> @@ -618,6 +682,15 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="ed5f4a2a-7dfc-4ebf-8656-020597eb24d9"> + <name>ОписаниеНовойВозможностиПоВыводуОписаний</name> + <synonym> + <key>ru</key> + <value>Вывод описаний к отчетам</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <commands uuid="28801fba-c429-4afa-bdcd-b3ec3ec22fda"> <name>Открыть</name> <synonym> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl index f4e08a521..e5ac6e122 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl @@ -2,8 +2,16 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("Файл, УникальныйИдентификаторКарточкиФайла", - ПараметрКоманды, ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор); - ОткрытьФорму("Справочник.ВерсииФайлов.Форма.ФормаСпискаВерсийФайла", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Файл", ПараметрКоманды); + ПараметрыФормы.Вставить("УникальныйИдентификаторКарточкиФайла", + ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор); + + ОткрытьФорму( + "Справочник.ВерсииФайлов.Форма.ВерсииФайла", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form similarity index 96% rename from SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form index 07d3b84ba..392e8387b 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form @@ -37,6 +37,10 @@ <dataPath xsi:type="form:DataPath"> <segments>ДеревоВерсий.ИндексКартинкиТекущий</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Пользователь, который добавил версию файла.</value> + </toolTip> <extendedTooltip> <name>СписокИндексКартинкиExtendedTooltip</name> <id>91</id> @@ -81,6 +85,10 @@ <dataPath xsi:type="form:DataPath"> <segments>ДеревоВерсий.Автор</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Пользователь, который добавил версию файла.</value> + </toolTip> <extendedTooltip> <name>АвторExtendedTooltip</name> <id>92</id> @@ -120,10 +128,6 @@ <key>ru</key> <value>Картинка и наименование</value> - - ru - Картинка и наименование - КартинкаИНаименованиеExtendedTooltip 90 @@ -192,6 +196,10 @@ ДеревоВерсий.НомерВерсии + + ru + Номер версии файла. + НомерВерсииExtendedTooltip 94 @@ -274,6 +282,10 @@ ДеревоВерсий.ДатаСоздания + + ru + Дата добавления версии файла в базу. + ДатаСозданияExtendedTooltip 96 @@ -315,6 +327,10 @@ ДеревоВерсий.Размер + + ru + Размер данных версии файла. + РазмерExtendedTooltip 97 @@ -348,10 +364,9 @@ Ссылка 59 + true true - - true - + ДеревоВерсий.Ссылка @@ -967,44 +982,6 @@ UseIfNecessary auto true - - Список - 1 - - DynamicList - - - true - - - true - - - Список.ИндексКартинки - -
    true
    - - ВЫБРАТЬ - ВерсииФайлов.Код КАК Код, - ВерсииФайлов.ФайлХранилище, - ВерсииФайлов.Размер, - ВерсииФайлов.Комментарий, - ВерсииФайлов.Автор, - ВерсииФайлов.ДатаСоздания, - ВерсииФайлов.ПолноеНаименование, - ВерсииФайлов.ИндексКартинки, - ВерсииФайлов.ПометкаУдаления, - ВерсииФайлов.Владелец -ИЗ - Справочник.ВерсииФайлов КАК ВерсииФайлов - Catalog.ВерсииФайлов - true - true - true - true - true - -
    ДеревоВерсий @@ -1095,7 +1072,7 @@ <name>Размер</name> <title> <key>ru</key> - <value>Размер</value> + <value>Размер (байт)</value> 5 @@ -1458,5 +1435,4 @@
    - diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl similarity index 98% rename from SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl index 75cd2378e..f07f954d8 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl @@ -4,8 +4,7 @@ &НаКлиенте Перем Ссылка2; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СделатьАктивнойВыполнить() @@ -234,7 +234,6 @@ Иначе КомандаСравненияДоступна = Ложь; КонецЕсли; - Если КомандаСравненияДоступна = Истина Тогда Элементы.ФормаСравнить.Доступность = Истина; @@ -290,8 +289,9 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура СменитьАктивнуюВерсиюФайла(Версия) @@ -495,7 +495,7 @@ Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда // Первый вызов - еще не инициализирована настройка. Обработчик = Новый ОписаниеОповещения("СравнениеВерсийАвтомат", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Справочник.ВерсииФайлов.Форма.ФормаВыбораСпособаСравненияВерсий", , + ОткрытьФорму("Справочник.ВерсииФайлов.Форма.ВыборСпособаСравненияВерсий", , ЭтотОбъект, , , , Обработчик); Возврат; КонецЕсли; @@ -549,3 +549,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form similarity index 100% rename from SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Help/ru.html new file mode 100644 index 000000000..95a3e4c28 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Help/ru.html @@ -0,0 +1,7 @@ + +

    Выбор программы для сравнения версий файлов. В программе предусмотрена возможность сравнивать версии файлов формата HTML, TXT, RTF, DOC, DOCX, ODT.

    +

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

    +

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

    +

    В поле Сравнивать версии файлов при помощи выберите программу для сравнения файлов из выпадающего списка: для выбора возможны Microcoft Word или OpenOffice.org Writer.

    +

    Установка настройки по умолчанию

    +

    Для того чтобы не выбирать текстовый редактор каждый раз при сравнении версий, необходимо заполнить настройку по умолчанию. Для этого в персональных настройках программы (вкладка Работа с файлами) в поле Сравнивать версии при помощи необходимо задать текстовый редактор для сравнения версий. Для выбора возможны Microcoft Word или OpenOffice.org Writer. Эта настройка не устанавливается по умолчанию автоматически.

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Module.bsl similarity index 89% rename from SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Module.bsl index 982d0a54f..3dd4dafe4 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) @@ -25,3 +25,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/УдалитьФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/УдалитьФормаСписка/Form.form deleted file mode 100644 index 6ba55516c..000000000 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/УдалитьФормаСписка/Form.form +++ /dev/null @@ -1,54 +0,0 @@ - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - - - - 0 - Added - FormCommandBarImportant - 0 - - true - - - - 0 - Added - FormCommandBarImportant - 1 - - true - - - - 0 - Added - FormCommandBarImportant - 2 - - true - - - - - diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form index cd7cceddd..6e231f5a6 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form @@ -182,18 +182,17 @@ Normal
    - None - - СписокКоманднаяПанель - 18 - Left - true - - - СписокСтрокаПоиска + + Ссылка 32 + true + true + + + Список.Ссылка + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 34 Label true @@ -203,20 +202,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 33 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 18 + Left + true + + + СписокСтрокаПоиска 35 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 37 Label true @@ -226,10 +237,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 36 true + Список + + true + + + + СписокСостояниеПросмотра + 38 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 39 + true + ViewStatusAddition Список @@ -238,10 +272,10 @@ СписокУправлениеПоиском - 38 + 41 СписокУправлениеПоискомРасширеннаяПодсказка - 40 + 43 Label true true @@ -251,7 +285,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 39 + 42 true SearchControlAddition @@ -325,7 +359,7 @@ OnCreateAtServer ПриСозданииНаСервере
    - 70 + 80 LockOwner true true @@ -348,15 +382,19 @@ true + + Список.Ссылка +
    true
    ВЫБРАТЬ + ВерсииФайлов.Ссылка КАК Ссылка, + ВерсииФайлов.Владелец КАК Владелец, + ВерсииФайлов.ПометкаУдаления КАК ПометкаУдаления, ВерсииФайлов.НомерВерсии, ВерсииФайлов.Размер, ВерсииФайлов.Автор, - ВерсииФайлов.ДатаСоздания, - ВерсииФайлов.ПометкаУдаления, - ВерсииФайлов.Владелец + ВерсииФайлов.ДатаСоздания ИЗ Справочник.ВерсииФайлов КАК ВерсииФайлов Catalog.ВерсииФайлов diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html new file mode 100644 index 000000000..f35bf4e08 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html @@ -0,0 +1,16 @@ + +

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

    +

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

    +

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

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

    Выбор версии файла

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form index 4b02cd077..37456ab9e 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form @@ -336,6 +336,40 @@ true
    + + Ссылка + 48 + true + true + + + Список.Ссылка + + + СсылкаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 49 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -356,32 +390,9 @@ СписокСтрокаПоиска - 48 - - СписокСтрокаПоискаРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 49 - true - - Список - - true - - - - СписокСостояниеПросмотра 51 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 53 Label true @@ -391,10 +402,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 52 true + Список + + true + + + + СписокСостояниеПросмотра + 54 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 55 + true + ViewStatusAddition Список @@ -403,10 +437,10 @@ СписокУправлениеПоиском - 54 + 57 СписокУправлениеПоискомРасширеннаяПодсказка - 56 + 59 Label true true @@ -416,7 +450,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 55 + 58 true SearchControlAddition @@ -688,9 +722,13 @@ true + + Список.Ссылка +
    true
    ВЫБРАТЬ + ВерсииФайлов.Ссылка КАК Ссылка, ВерсииФайлов.НомерВерсии КАК НомерВерсии, ВерсииФайлов.ФайлХранилище, ВерсииФайлов.Размер, diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl index ddf517016..cebfd4c0f 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -39,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -78,3 +79,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form index 07ac77bc1..ef78a3e16 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form @@ -441,7 +441,7 @@ 14 <key>ru</key> - <value>Автор версии</value> + <value>Автор</value> true true @@ -608,7 +608,7 @@ 48 <key>ru</key> - <value>Дата изменения файла</value> + <value>Данные от</value> true true diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..b4af2d4de --- /dev/null +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,39 @@ + +

    Просмотр сведений о версии файла.

    +

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

    +

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

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

    Просмотр версии файла

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

    Сохранение версии файла на диск

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl index 7ca36497e..9d42eb38a 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -56,8 +56,9 @@ Оповестить("Запись_Файл", Новый Структура("Событие", "ВерсияСохранена"), Объект.Владелец); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОткрытьВыполнить() @@ -79,8 +80,9 @@ Объект.Наименование = Объект.ПолноеНаименование; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СохранитьКак(Команда) @@ -97,3 +99,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html index 08a4f0df3..898fd47d2 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html @@ -1,9 +1,33 @@ - -

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

    -

    В списке версий можно:

    -
    • открыть файл версии соответствующим приложением для просмотра (команда "Открыть карточку"); -
    • удалить ненужные версии (клавиша Del или команда "Пометить текущий элемент на удаление"); -
    • изменить активную (текущую) версию (команда "Сделать активной"); -
    • сравнить две версии (команда "Сравнить"). Сравнение версий поддерживается для файлов HTML, TXT, RTF, DOC, DOCX, ODT.

     

    -

    См. также: Файлы, Общая информация о формах.

    -

     

    \ No newline at end of file + +

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

    +

    Для просмотра списка всех версий файла откройте его карточку (в списке файлов нажмите F2 или Открыть карточку) и нажмите Версии файлов на панели навигации.

    +

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

    +

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

    +

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

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

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

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

    Просмотр версии файла

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

    Просмотр сведений о версии файла

    +

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

    +

    Замена текущей версии файла

    +

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

    +

    Сравнение двух версий файла

    +

    Выделите две версии в списке и нажмите Показать отличия для их сравнения. Сравнение версий поддерживается для следующих типов файлов:  HTML, TXT, RTF, DOC, DOCX, ODT.

    +

    Сохранение версии файла на диск

    +

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

    +

    См. также: 

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index ca3ca9b78..e0ee07093 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -15,4 +14,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index c4c9d79b4..a6b8c0e58 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -125,8 +124,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает текущее значение пометки удаления в информационной базе Функция ПометкаУдаленияВИБ() @@ -154,4 +154,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo index ce55189c0..ef1112561 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo +++ b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo @@ -150,7 +150,7 @@ ru - Автор - пользователь, создавший версию + Пользователь, который добавил версию файла. @@ -175,7 +175,7 @@ ru - Дата модификации файла - приведенная к Гринвичу (очищенная от смещения летнего времени и смещения зоны) + Дата изменения данных версии файла, приведенная к Гринвичу (очищенная от смещения летнего времени и смещения зоны). @@ -197,7 +197,7 @@ ru - Дата модификации файла - в локальном времени + Дата изменения данных версии файла (в местном времени). @@ -218,7 +218,7 @@ ru - Дата создания версии + Дата добавления версии файла в базу. @@ -311,7 +311,7 @@ ru - Номер данной версии + Номер версии файла. @@ -378,7 +378,7 @@ ru - Дополнительный путь к файлу на диске (в случае если ТипХраненияФайла - на диске) + Дополнительный путь к файлу на диске (когда файл хранится в томе) @@ -389,9 +389,8 @@ Размер ru - Размер + Размер (байт) - Размер файла версии Number @@ -400,7 +399,7 @@ ru - Размер файла версии + Размер данных версии файла. @@ -426,7 +425,7 @@ ru - Расширение файла версии + Расширение версии файла. @@ -533,7 +532,7 @@ ru - Ссылка на том (в случае если ТипХраненияФайла - на диске) + Том хранения файлов (если файл хранится в томе) @@ -734,6 +733,20 @@ Use + + ФормаЭлемента + + ru + Форма элемента + + + + ru + + + PersonalComputer + MobileDevice + ФормаСписка @@ -749,42 +762,34 @@ ru Форма выбора - PersonalComputer - MobileDevice - - - ФормаВыбораСпособаСравненияВерсий - - ru - Форма выбора способа сравнения версий - - PersonalComputer - MobileDevice - - - ФормаЭлемента - - ru - Форма элемента - + + + ru + + PersonalComputer MobileDevice - ФормаСпискаВерсийФайла + ВерсииФайла ru - Форма списка версий файла + Версии файла PersonalComputer MobileDevice - - УдалитьФормаСписка + + ВыборСпособаСравненияВерсий ru - Удалить форма списка + Выбор способа сравнения версий + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss deleted file mode 100644 index e8c18dec9..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,25 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - - РеквизитДопУпорядочивания - Asc - - - Наименование - Asc - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - Normal - 911b6018-f537-43e8-a417-da56b22f9aec - diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Module.bsl deleted file mode 100644 index 826db1058..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Module.bsl +++ /dev/null @@ -1,16 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ НАСТРОЙКИ ПОРЯДКА ЭЛЕМЕНТОВ - -&НаКлиенте -Процедура ПереместитьЭлементВверх(Команда) - - НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВверхВыполнить(Список, Элементы.Список); - -КонецПроцедуры - -&НаКлиенте -Процедура ПереместитьЭлементВниз(Команда) - - НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВнизВыполнить(Список, Элементы.Список); - -КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаЭлемента/Form.form deleted file mode 100644 index 2b3088bd1..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаЭлемента/Form.form +++ /dev/null @@ -1,80 +0,0 @@ - - - - Наименование - 1 - true - true - - true - - - Объект.Description - - - НаименованиеExtendedTooltip - 3 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 2 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - Normal - - - - ФормаКоманднаяПанель - -1 - Left - true - - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Объект - 1 - - CatalogObject.ВидыДокументовФизическихЛиц - - - true - - - true - -
    true
    - true -
    - - - - - -
    diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html deleted file mode 100644 index 1f123e498..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html +++ /dev/null @@ -1,9 +0,0 @@ - -

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

    -

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

    -

     

    -

    См. также:

    - \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl deleted file mode 100644 index f974a3401..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl +++ /dev/null @@ -1,35 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - - -#КонецЕсли - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ - -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Запрос = Новый Запрос; - - Запрос.УстановитьПараметр("СтрокаПоиска", ?(Параметры.СтрокаПоиска = Неопределено, "", Параметры.СтрокаПоиска) + "%"); - - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДокументовФизическихЛиц.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц - |ГДЕ - | НЕ ВидыДокументовФизическихЛиц.ПометкаУдаления - | И ВидыДокументовФизическихЛиц.Наименование ПОДОБНО &СтрокаПоиска - | - |УПОРЯДОЧИТЬ ПО - | ВидыДокументовФизическихЛиц.РеквизитДопУпорядочивания"; - - ДанныеВыбора = Новый СписокЗначений; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ДанныеВыбора.Добавить(Выборка.Ссылка); - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ВидыДокументовФизическихЛиц.mdo b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ВидыДокументовФизическихЛиц.mdo deleted file mode 100644 index f207d61a0..000000000 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ВидыДокументовФизическихЛиц.mdo +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - ВидыДокументовФизическихЛиц - - ru - Виды документов физических лиц - - true - Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Description - DontUse - - Use - PredefinedDataName - - Use - - - - - Use - Predefined - - Use - - - - - Use - Ref - - Use - - - - - Use - DeletionMark - - Use - - - - - Use - IsFolder - - Use - - - - - Use - Owner - true - - ShowError - Use - - - - - Use - Parent - true - - Use - - - - - Use - Description - - ru - Название документа - - - ShowError - Use - - - - - Use - Code - - Use - - - - DontUse - true - - - ru - - - Managed - Use - - ru - Вид документа физических лиц - - 2 - true - 150 - String - AsDescription - - - ВодительскоеУдостоверение - Водительское удостоверение - - - - - - ВоенныйБилет - Военный билет - - - - - - ВоенныйБилетОфицераЗапаса - Военный билет офицера запаса - - - - - - ДипломатическийПаспорт - Дипломатический паспорт гражданина РФ - - - - - - ЗагранпаспортРФ - Загранпаспорт гражданина РФ - - - - - - ЗагранпаспортСССР - Загранпаспорт гражданина СССР - - - - - - ПаспортРФ - Паспорт гражданина РФ - - - - - - ПаспортСССР - Паспорт гражданина СССР - - - - - - ПаспортМинморфлота - Паспорт Минморфлота - - - - - - ПаспортМоряка - Паспорт моряка - - - - - - СвидетельствоОРождении - Свидетельство о рождении - - - - - - УдостоверениеОфицера - Удостоверение личности офицера - - - - - - InDialog - true - BothWays - Catalog.ВидыДокументовФизическихЛиц.Form.ФормаЭлемента - Catalog.ВидыДокументовФизическихЛиц.Form.ФормаСписка - - РеквизитДопУпорядочивания - - ru - Порядок - - - Number - - 5 - - - - ru - Используется для упорядочивания (служебный) - - - - - 0 - - IndexWithAdditionalOrder - Use - - - ФормаЭлемента - - ru - Форма элемента - - PersonalComputer - MobileDevice - - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - - diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form index 11b54836d..88b794fc6 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form @@ -55,18 +55,17 @@ true
    - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -76,20 +75,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -99,10 +110,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -111,10 +145,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -124,7 +158,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition @@ -228,6 +262,9 @@ true + + Список.Ref +
    true
    Catalog.ВидыКонтактнойИнформации diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl index 24aa767ae..c80c602e5 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,3 +10,5 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Истина); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index e8e1f2f56..32510c17f 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -64,8 +64,8 @@ - Ссылка - 30 + Наименование + 37 <key>ru</key> <value>Вид контактной информации</value> @@ -75,6 +75,40 @@ <userVisible> <common>true</common> </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Description</segments> + </dataPath> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>39</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>38</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>30</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> <dataPath xsi:type="form:DataPath"> <segments>Список.Ref</segments> </dataPath> @@ -120,32 +154,9 @@ </handlers> <searchStringAddition> <name>СписокСтрокаПоиска</name> - <id>37</id> - <extendedTooltip> - <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> - <id>39</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>СписокСтрокаПоискаКонтекстноеМеню</name> - <id>38</id> - <autoFill>true</autoFill> - </contextMenu> - <source>Список</source> - <extInfo xsi:type="form:SearchStringAdditionExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - </extInfo> - </searchStringAddition> - <viewStatusAddition> - <name>СписокСостояниеПросмотра</name> <id>40</id> <extendedTooltip> - <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> <id>42</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -155,10 +166,33 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СписокСостояниеПросмотраКонтекстноеМеню</name> + <name>СписокСтрокаПоискаКонтекстноеМеню</name> <id>41</id> <autoFill>true</autoFill> </contextMenu> + <source>Список</source> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchStringAddition> + <viewStatusAddition> + <name>СписокСостояниеПросмотра</name> + <id>43</id> + <extendedTooltip> + <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <id>45</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокСостояниеПросмотраКонтекстноеМеню</name> + <id>44</id> + <autoFill>true</autoFill> + </contextMenu> <type>ViewStatusAddition</type> <source>Список</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> @@ -167,10 +201,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокУправлениеПоиском</name> - <id>43</id> + <id>46</id> <extendedTooltip> <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> - <id>45</id> + <id>48</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -180,7 +214,7 @@ </extendedTooltip> <contextMenu> <name>СписокУправлениеПоискомКонтекстноеМеню</name> - <id>44</id> + <id>47</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index a9ae22844..01f25ea50 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПереместитьЭлементВверх() @@ -15,8 +15,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -29,3 +30,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index 367138177..325d4c232 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -39,6 +39,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>Clearing</event> + <name>ТипОчистка</name> + </handlers> <width>19</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -46,7 +50,6 @@ <wrap>true</wrap> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> <backColor xsi:type="core:ColorRef"> <color>Style.ФонУправляющегоПоля</color> </backColor> @@ -965,23 +968,6 @@ <main>true</main> <savedData>true</savedData> </attributes> - <attributes> - <name>ЭтоПредопределенный</name> - <title> - <key>ru</key> - <value>Это предопределенный</value> - - 4 - - Boolean - - - true - - - true - - diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index 7e8afe0d4..ea69eec80 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -1,16 +1,37 @@ - -

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

    + +

    Описание свойств поля контактной информации.

    +

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

    +

    Какие типы контактной информации существуют в программе

    +

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

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

    Если у контактного реквизита установлен тип Адрес, становиться возможным установить реквизит «Редактировать только в диалоге». Такая настройка позволит ограничить ввод нового и редактирование существующего адреса, в справочнике‑носителе контактной информации, формой-шаблоном ввода адреса, а так же выбором адреса из адресного классификатора.  Установка реквизита Адрес только российский позволит ограничить ввод страны адреса.

    -

    См. также

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

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

    +

    Заполните необходимую информацию:

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

    Какие настройки можно использовать для полей контактной информации

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 131055788..0be3b5711 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,42 +8,33 @@ Возврат; КонецЕсли; - ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); - ЭтоПредопределенный = ОбъектНаСервере.Предопределенный; - - Если Не ЭтоПредопределенный Тогда + Если Объект.Предопределенный Тогда + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.ТолькоПросмотр = Истина; + Элементы.Тип.ТолькоПросмотр = Истина; + Элементы.Подсказка.ТолькоПросмотр = Истина; + + Иначе // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект,, НСтр("ru = 'Разрешить редактирование типа и группы'")); - КонецЕсли; - КонецЕсли; - - Если ОбъектНаСервере.ЭтоНовый() Тогда - Объект.МожноИзменятьСпособРедактирования = Истина; - Объект.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; - Иначе - Если ЭтоПредопределенный Тогда - Элементы.Наименование.ТолькоПросмотр = Истина; - Элементы.Родитель.ТолькоПросмотр = Истина; - Элементы.Тип.ТолькоПросмотр = Истина; - Элементы.Подсказка.ТолькоПросмотр = Истина; Иначе - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - Элементы.Родитель.ТолькоПросмотр = Истина; - Элементы.Тип.ТолькоПросмотр = Истина; - КонецЕсли; + Элементы.Родитель.ТолькоПросмотр = Истина; + Элементы.Тип.ТолькоПросмотр = Истина; КонецЕсли; - КонецЕсли; - Элементы.РазрешитьВводНесколькихЗначений.Доступность = ?(ОбъектНаСервере.Уровень() = 2, Ложь, Истина); + СсылкаРодителя = Объект.Родитель; + ТекущийУровень = ?(СсылкаРодителя.Пустая(), 0, СсылкаРодителя.Уровень() ); + + Элементы.РазрешитьВводНесколькихЗначений.Доступность = ?(ТекущийУровень = 1, Ложь, Истина); Если Не Объект.МожноИзменятьСпособРедактирования Тогда - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; - Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; + Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; КонецЕсли; @@ -68,7 +59,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если Не ЭтоПредопределенный Тогда + Если Не ТекущийОбъект.Предопределенный Тогда // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); @@ -85,8 +76,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТипПриИзменении(Элемент) @@ -96,6 +88,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ТипОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + &НаКлиенте Процедура АдресТолькоРоссийскийПриИзменении(Элемент) @@ -118,13 +117,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) - Если Не ЭтоПредопределенный Тогда + Если Не Объект.Предопределенный Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); @@ -133,8 +133,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ИзменитьОтображениеПриИзмененииТипа() @@ -209,3 +210,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html index 88e7af97a..e3aa91332 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html @@ -1,4 +1,10 @@ - -

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

    -

    См. также

    - \ No newline at end of file + +

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

    +

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

    +

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

    +

    Как добавить новое поле контактной информации в справочник или документ

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

    Можно ли изменить предопределенные виды контактной информации

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index eed2074e2..5a5659142 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -1,14 +1,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает описание блокируемых реквизитов -// Возвращаемое значение: массив -// Элемент массива: строка в формате -// ИмяРеквизита[;ИмяЭлементаФормы,...] -// где ИмяРеквизита - имя реквизита объекта -// ИмяЭлементаФормы - имя элемента формы, связанного с реквизитом +// +// Возвращаемое значение: +// Массив - содержит строки в формате ИмяРеквизита[;ИмяЭлементаФормы,...] +// где ИмяРеквизита - имя реквизита объекта, ИмяЭлементаФормы - имя элемента формы, связанного с реквизитом // Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт @@ -21,4 +19,20 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("*"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index c5e8edc0c..cbf37831a 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -226,8 +226,9 @@ ShowError + true - Enum.ТипыКонтактнойИнформации.EmptyRef + Enum.ТипыКонтактнойИнформации.EnumValue.Адрес Use Use @@ -290,7 +291,10 @@ - + true + + true + Use Use diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss index 61e6fb4bb..95cfbeb2c 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,10 +1,23 @@ + + false + Подготовлен + Equal + true + Подготовленные ответственным за список + Normal + Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb + e391d2e4-4713-4515-aa35-61e44224b313 + + Наименование + Asc + Normal + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index 62dd69870..03f992289 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -62,6 +62,40 @@ true
    + + СсылкаГруппы + 158 + true + true + + + ГруппыВнешнихПользователей.Ref + + + СсылкаГруппыРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + СсылкаГруппыКонтекстноеМеню + 159 + true + + LabelField + Enter + true + Left + true + + true + true + + None ГруппыВнешнихПользователейКоманднаяПанель @@ -91,10 +125,10 @@ ГруппыВнешнихПользователейСтрокаПоиска - 133 + 161 ГруппыВнешнихПользователейСтрокаПоискаРасширеннаяПодсказка - 135 + 163 Label true true @@ -104,7 +138,7 @@ ГруппыВнешнихПользователейСтрокаПоискаКонтекстноеМеню - 134 + 162 true ГруппыВнешнихПользователей @@ -114,10 +148,10 @@ ГруппыВнешнихПользователейСостояниеПросмотра - 136 + 164 ГруппыВнешнихПользователейСостояниеПросмотраРасширеннаяПодсказка - 138 + 166 Label true true @@ -127,7 +161,7 @@ ГруппыВнешнихПользователейСостояниеПросмотраКонтекстноеМеню - 137 + 165 true ViewStatusAddition @@ -138,10 +172,10 @@ ГруппыВнешнихПользователейУправлениеПоиском - 139 + 167 ГруппыВнешнихПользователейУправлениеПоискомРасширеннаяПодсказка - 141 + 169 Label true true @@ -151,7 +185,7 @@ ГруппыВнешнихПользователейУправлениеПоискомКонтекстноеМеню - 140 + 168 true SearchControlAddition @@ -414,10 +448,6 @@ Наименование 51 - - <key>ru</key> - <value>Внешний пользователь</value> - true true @@ -451,6 +481,40 @@ true + + Ссылка + 135 + true + true + + + ВнешниеПользователиСписок.Ref + + + СсылкаРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 136 + true + + LabelField + Enter + true + Left + true + + true + true + + None ВнешниеПользователиСписокКоманднаяПанель @@ -472,10 +536,10 @@ ВнешниеПользователиСписокСтрокаПоиска - 151 + 180 ВнешниеПользователиСписокСтрокаПоискаРасширеннаяПодсказка - 153 + 182 Label true true @@ -485,7 +549,7 @@ ВнешниеПользователиСписокСтрокаПоискаКонтекстноеМеню - 152 + 181 true ВнешниеПользователиСписок @@ -495,10 +559,10 @@ ВнешниеПользователиСписокСостояниеПросмотра - 154 + 183 ВнешниеПользователиСписокСостояниеПросмотраРасширеннаяПодсказка - 156 + 185 Label true true @@ -508,7 +572,7 @@ ВнешниеПользователиСписокСостояниеПросмотраКонтекстноеМеню - 155 + 184 true ViewStatusAddition @@ -519,10 +583,10 @@ ВнешниеПользователиСписокУправлениеПоиском - 157 + 186 ВнешниеПользователиСписокУправлениеПоискомРасширеннаяПодсказка - 159 + 188 Label true true @@ -532,7 +596,7 @@ ВнешниеПользователиСписокУправлениеПоискомКонтекстноеМеню - 158 + 187 true SearchControlAddition @@ -878,6 +942,7 @@ true InputField + true Auto true Left @@ -887,10 +952,6 @@ true true false - false - false - false - false true true true @@ -906,12 +967,16 @@ Selection СписокВыбранныхПользователейИГруппВыбор + + BeforeAddRow + СписокВыбранныхПользователейИГруппПередНачаломДобавления + СписокВыбранныхПользователейИГруппСтрокаПоиска - 169 + 199 СписокВыбранныхПользователейИГруппСтрокаПоискаРасширеннаяПодсказка - 171 + 201 Label true true @@ -921,7 +986,7 @@ СписокВыбранныхПользователейИГруппСтрокаПоискаКонтекстноеМеню - 170 + 200 true СписокВыбранныхПользователейИГрупп @@ -931,10 +996,10 @@ СписокВыбранныхПользователейИГруппСостояниеПросмотра - 172 + 202 СписокВыбранныхПользователейИГруппСостояниеПросмотраРасширеннаяПодсказка - 174 + 204 Label true true @@ -944,7 +1009,7 @@ СписокВыбранныхПользователейИГруппСостояниеПросмотраКонтекстноеМеню - 173 + 203 true ViewStatusAddition @@ -955,10 +1020,10 @@ СписокВыбранныхПользователейИГруппУправлениеПоиском - 175 + 205 СписокВыбранныхПользователейИГруппУправлениеПоискомРасширеннаяПодсказка - 177 + 207 Label true true @@ -968,7 +1033,7 @@ СписокВыбранныхПользователейИГруппУправлениеПоискомКонтекстноеМеню - 176 + 206 true SearchControlAddition @@ -1154,6 +1219,247 @@ Auto + + Комментарии + 148 + + КомментарийГруппы + 150 + + ЗаголовокКомментарияГруппы + 154 + + ГруппыВнешнихПользователейКомментарий + 141 + true + true + + true + + + Items.ГруппыВнешнихПользователей.CurrentData.Комментарий + + None + + ГруппыВнешнихПользователейКомментарийРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + ГруппыВнешнихПользователейКомментарийКонтекстноеМеню + 142 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ЗаголовокКомментарияГруппыРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + + Items.ГруппыВнешнихПользователей.CurrentData.Description + + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Комментарий группы</value> + + + КомментарийГруппыРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Page + + Vertical + + + + КомментарийПользователя + 152 + + ЗаголовокКомментарияПользователя + 156 + + ВнешниеПользователиСписокКомментарий + 138 + true + true + + true + + + Items.ВнешниеПользователиСписок.CurrentData.Комментарий + + None + + ВнешниеПользователиСписокКомментарийРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + ВнешниеПользователиСписокКомментарийКонтекстноеМеню + 139 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ЗаголовокКомментарияПользователяРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + + Items.ВнешниеПользователиСписок.CurrentData.Description + + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Комментарий пользователя</value> + + + КомментарийПользователяРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + + <key>ru</key> + <value>Комментарии</value> + + + КомментарииРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Pages + + Auto + + ФормаКоманднаяПанель -1 @@ -1358,6 +1664,34 @@ Auto InAdditionalSubmenu + + СведенияОВнешнихПользователях + 133 + true + true + + true + + false + + СведенияОВнешнихПользователяхРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.СведенияОВнешнихПользователях + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ПользователиИБ 6 @@ -1445,6 +1779,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1484,6 +1822,9 @@ true + + ВнешниеПользователиСписок.Ref + ВнешниеПользователиСписок.Недействителен @@ -1491,15 +1832,15 @@ ВЫБРАТЬ ВнешниеПользователи.Ссылка, + ВнешниеПользователи.Подготовлен, ВнешниеПользователи.ПометкаУдаления, - ВнешниеПользователи.Предопределенный, ВнешниеПользователи.Недействителен, + ВнешниеПользователи.Предопределенный, ВнешниеПользователи.Наименование, + ВнешниеПользователи.Комментарий, ВЫБОР КОГДА ВнешниеПользователи.ПометкаУдаления ТОГДА 6 - КОГДА ВнешниеПользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - ТОГДА 10 ИНАЧЕ 7 КОНЕЦ КАК НомерКартинки ИЗ @@ -1555,6 +1896,9 @@ ГруппыВнешнихПользователей.Parent + + ГруппыВнешнихПользователей.Ref + ГруппыВнешнихПользователей.ВсеОбъектыАвторизации @@ -1574,7 +1918,8 @@ ИНАЧЕ 9 КОНЕЦ КАК НомерКартинки, ГруппыВнешнихПользователей.ТипОбъектовАвторизации, - ГруппыВнешнихПользователей.ВсеОбъектыАвторизации + ГруппыВнешнихПользователей.ВсеОбъектыАвторизации, + ГруппыВнешнихПользователей.Комментарий ИЗ Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей ГДЕ @@ -1716,6 +2061,24 @@ true + + ИмяТекущегоЭлемента + + <key>ru</key> + <value>Имя текущего элемента</value> + + 6 + + String + + + + true + + + true + + СоздатьГруппуВнешнихПользователей @@ -1900,6 +2263,31 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СведенияОВнешнихПользователях</name> + <title> + <key>ru</key> + <value>Сведения о внешних пользователях</value> + + 9 + + ru + Сведения о внешних пользователях + + + true + + + StdPicture.Report + + + + СведенияОВнешнихПользователях + + + Auto + Auto + ВыборГруппВнешнихПользователей @@ -1911,7 +2299,7 @@ - ДоступКИнформационнойБазеРазрешен + СкрытьПользователейБезПользователяИБ Boolean diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 3812a785d..6f6447a7e 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -14,8 +14,7 @@ // ВыбранныеПользователи - Массив - массив уже выбранных пользователей. // -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -36,20 +35,12 @@ КонецЕсли; // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. - Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда - - Если Параметры.ДоступКИнформационнойБазеРазрешен = Ложь Тогда - ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; - Иначе - ВидСравненияКД = ВидСравненияКомпоновкиДанных.НеРавно; - КонецЕсли; - + Если Параметры.СкрытьПользователейБезПользователяИБ Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ВнешниеПользователиСписок, "ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), - ВидСравненияКД); - + ВидСравненияКомпоновкиДанных.НеРавно); КонецЕсли; // Скрытие переданного пользователя из формы выбора пользователей. @@ -75,11 +66,19 @@ Элементы.СоздатьВнешнегоПользователя.Видимость = Ложь; КонецЕсли; + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда + Элементы.ПользователиИБ.Видимость = Ложь; + КонецЕсли; + Элементы.СведенияОВнешнихПользователях.Видимость = Ложь; + КонецЕсли; + Если Параметры.РежимВыбора Тогда Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; + Элементы.СведенияОВнешнихПользователях.Видимость = Ложь; // Отбор не помеченных на удаление. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( @@ -93,6 +92,14 @@ // Отключение перетаскивания пользователя в формах выбора и подбора пользователей. Элементы.ВнешниеПользователиСписок.РазрешитьНачалоПеретаскивания = Ложь; + Если Параметры.Свойство("ИдентификаторыНесуществующихПользователейИБ") Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "ИдентификаторПользователяИБ", + Параметры.ИдентификаторыНесуществующихПользователейИБ, + ВидСравненияКомпоновкиДанных.ВСписке, , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + КонецЕсли; + Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. Элементы.ВнешниеПользователиСписок.МножественныйВыбор = Истина; @@ -109,7 +116,8 @@ КонецЕсли; КонецЕсли; Иначе - Элементы.ВыбратьВнешнегоПользователя.Видимость = Ложь; + Элементы.Комментарии.Видимость = Ложь; + Элементы.ВыбратьВнешнегоПользователя.Видимость = Ложь; Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = Ложь; КонецЕсли; @@ -120,6 +128,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Параметры.РежимВыбора Тогда + ПроверкаИзмененияТекущегоЭлементаФормы(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -155,8 +172,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВыбиратьИерархическиПриИзменении(Элемент) @@ -165,8 +183,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыВнешнихПользователей +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыВнешнихПользователей &НаКлиенте Процедура ГруппыВнешнихПользователейПриАктивизацииСтроки(Элемент) @@ -310,8 +329,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВнешниеПользователи +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВнешниеПользователи &НаКлиенте Процедура ВнешниеПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -321,9 +341,7 @@ Если Не ХранимыеПараметры.РасширенныйПодбор Тогда ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); - КонецЕсли; КонецПроцедуры @@ -361,8 +379,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВыбранныхПользователейИГрупп +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВыбранныхПользователейИГрупп &НаКлиенте Процедура СписокВыбранныхПользователейИГруппВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -372,8 +391,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура СписокВыбранныхПользователейИГруппПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьГруппуВнешнихПользователей(Команда) @@ -447,8 +472,20 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура СведенияОВнешнихПользователях(Команда) + + ОткрытьФорму( + "Отчет.СведенияОПользователях.ФормаОбъекта", + Новый Структура("КлючВарианта", "СведенияОВнешнихПользователях"), + ЭтотОбъект, + "СведенияОВнешнихПользователях"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьХранимыеПараметры() @@ -484,11 +521,6 @@ &НаСервере Процедура ЗаполнитьПараметрыДинамическихСписков() - ОбновитьЗначениеПараметраКомпоновкиДанных( - ВнешниеПользователиСписок, - "ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - ТипОбъектовАвторизации = Неопределено; Параметры.Свойство("ТипОбъектовАвторизации", ТипОбъектовАвторизации); @@ -565,6 +597,35 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверкаИзмененияТекущегоЭлементаФормы() + + Если ТекущийЭлемент.Имя <> ИмяТекущегоЭлемента Тогда + ПриИзмененииТекущегоЭлементаФормы(); + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + КонецЕсли; + +#Если ВебКлиент Тогда + ПодключитьОбработчикОжидания("ПроверкаИзмененияТекущегоЭлементаФормы", 0.7, Истина); +#Иначе + ПодключитьОбработчикОжидания("ПроверкаИзмененияТекущегоЭлементаФормы", 0.1, Истина); +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииТекущегоЭлементаФормы() + + Если ТекущийЭлемент.Имя = "ГруппыВнешнихПользователей" Тогда + Элементы.Комментарии.ТекущаяСтраница = Элементы.КомментарийГруппы; + + ИначеЕсли ТекущийЭлемент.Имя = "ВнешниеПользователиСписок" Тогда + Элементы.Комментарии.ТекущаяСтраница = Элементы.КомментарийПользователя; + + КонецЕсли + +КонецПроцедуры + &НаСервере Процедура УдалитьИзСпискаВыбранных(УдалитьВсех = Ложь) @@ -939,3 +1000,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index ead2d3ff6..3cab0c5ac 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -1,14 +1,14 @@ - СвязьОбработкаНесоответствия - 169 + СвойстваОбработкаНесоответствия + 228 - СвязьКартинкаПредупреждения - 170 + СвойстваКартинкаПредупреждения + 230 <key>ru</key> - <value>Связь картинка предупреждения</value> + <value>Свойства картинка предупреждения</value> true true @@ -16,7 +16,153 @@ true - СвязьКартинкаПредупрежденияExtendedTooltip + СвойстваКартинкаПредупрежденияРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + + СвойстваКартинкаПредупрежденияКонтекстноеМеню + 231 + true + + 5 + true + 2 + true + false + false + + + CommonPicture.Предупреждение32 + + + + + СвойстваПояснениеИКоманды + 250 + + СвойстваПояснениеНесоответствия + 235 + + <key>ru</key> + <value>Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: +%1. +Нажмите "Записать", чтобы устранить различия и не выводить это предупреждение.</value> + + true + true + + true + + + ru + Некоторые свойства пользователя информационной базы сохраняются в карточке внешнего пользователя. Между значениями этих свойств найдены различия. + + + СвойстваПояснениеНесоответствияРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + СвойстваПояснениеНесоответствияКонтекстноеМеню + 236 + true + + Label + true + true + false + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Свойства пояснение и команды</value> + + + СвойстваПояснениеИКомандыРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Свойства обработка несоответствия</value> + + true + + СвойстваОбработкаНесоответствияРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + + + СопоставлениеОбработкаНесоответствия + 169 + + СопоставлениеКартинкаПредупреждения + 170 + + <key>ru</key> + <value>Сопоставление картинка предупреждения</value> + + true + true + + true + + + СопоставлениеКартинкаПредупрежденияРасширеннаяПодсказка 200 Label true @@ -26,13 +172,13 @@
    - СвязьКартинкаПредупрежденияКонтекстноеМеню + СопоставлениеКартинкаПредупрежденияКонтекстноеМеню 171 true 5 true - 3 + 2 true false false @@ -43,21 +189,25 @@ - СвязьПояснениеНесоответствия + СопоставлениеПояснениеНесоответствия 172 <key>ru</key> - <value>Доступ пользователя к информационной базе (ИБ) запрещен. -Для того чтобы разрешить доступ к ИБ, включите флажок "Доступ к информационной базе разрешен". -Либо оставьте флажок выключенным, чтобы не выводить больше это предупреждение.</value> + <value>Пользователь информационной базы не найден. +Нажмите "Записать", чтобы устранить проблему и не выводить это предупреждение.</value> true true true + + ru + Пользователь информационной базы сопоставлен с этим внешним пользователем справочника, +однако его не удается найти по сохраненному идентификатору. + - СвязьПояснениеНесоответствияExtendedTooltip + СопоставлениеПояснениеНесоответствияРасширеннаяПодсказка 201 Label true @@ -67,17 +217,17 @@ - СвязьПояснениеНесоответствияКонтекстноеМеню + СопоставлениеПояснениеНесоответствияКонтекстноеМеню 173 true Label 20 true - 4 + 2 true true - true + false false Left @@ -91,11 +241,16 @@ <key>ru</key> - <value>Связь обработка несоответствия</value> + <value>Сопоставление обработка несоответствия</value> + + ru + Сопоставление обработка несоответствия + true + false - СвязьОбработкаНесоответствияExtendedTooltip + СопоставлениеОбработкаНесоответствияРасширеннаяПодсказка 199 Label true @@ -199,25 +354,106 @@ true - - ДоступКИнформационнойБазеРазрешен - 99 + + ГруппаВходВПрограммуРазрешен + 264 + + ВходВПрограммуРазрешен + 99 + true + true + + true + + + ВходВПрограммуРазрешен + + Right + + ru + Разрешить вход внешнего пользователя в программу указанными способами аутентификации. + + + OnChange + ВходВПрограммуРазрешенПриИзменении + + + ВходВПрограммуРазрешенРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + ВходВПрограммуРазрешенКонтекстноеМеню + 100 + true + + CheckBoxField + Enter + true + Left + true + + + + РекомендуетсяПроверитьНастройкиДляВхода + 269 + + <key>ru</key> + <value>Рекомендуется проверить настройки для входа</value> + + true + true + + true + + + ru + Перед разрешением входа в программу рекомендуется проверить настройки, т.к. пользователь +был введен не администратором, а ответственным за список внешних пользователей. + + Button + + РекомендуетсяПроверитьНастройкиДляВходаРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + РекомендуетсяПроверитьНастройкиДляВходаКонтекстноеМеню + 270 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - ДоступКИнформационнойБазеРазрешен - - Right - - OnChange - ДоступКИнформационнойБазеРазрешенПриИзменении - + + <key>ru</key> + <value>Группа вход в программу разрешен</value> + - ДоступКИнформационнойБазеРазрешенExtendedTooltip - 204 + ГруппаВходВПрограммуРазрешенРасширеннаяПодсказка + 265 Label true true @@ -225,17 +461,14 @@ Left - - ДоступКИнформационнойБазеРазрешенКонтекстноеМеню - 100 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Auto + true + true + Auto + Auto + СвойстваПользователяИБ @@ -243,20 +476,173 @@ ОсновныеСвойства 75 - - ПользовательИнфБазыИмя - 95 + + ИмяПереключениеОтметкиНезаполненного + 238 + + ИмяСОтметкойНезаполненного + 240 + + ПользовательИнфБазыИмя1 + 242 + true + true + + true + + + ПользовательИнфБазыИмя + + + OnChange + ПользовательИнфБазыИмяПриИзменении + + + ПользовательИнфБазыИмя1РасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ПользовательИнфБазыИмя1КонтекстноеМеню + 243 + true + + InputField + true + Enter + true + Left + true + + 26 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя с отметкой незаполненного</value> + + + ИмяСОтметкойНезаполненногоРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ИмяБезОтметкиНезаполненного + 245 + + ПользовательИнфБазыИмя2 + 247 + true + true + + true + + + ПользовательИнфБазыИмя + + + OnChange + ПользовательИнфБазыИмяПриИзменении + + + ПользовательИнфБазыИмя2РасширеннаяПодсказка + 249 + Label + true + true + + Left + + + + ПользовательИнфБазыИмя2КонтекстноеМеню + 248 + true + + InputField + Enter + true + Left + true + + 26 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя без отметки незаполненного</value> + + + ИмяБезОтметкиНезаполненногоРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true true - - ПользовательИнфБазыИмя - + + <key>ru</key> + <value>Имя (переключение отметки незаполненного)</value> + - ПользовательИнфБазыИмяExtendedTooltip - 207 + ИмяПереключениеОтметкиНезаполненногоРасширеннаяПодсказка + 239 Label true true @@ -264,25 +650,9 @@ Left - - ПользовательИнфБазыИмяКонтекстноеМеню - 96 - true - - InputField - Enter - true - Left - true - - 14 - true - true - true - true - true - true - Normal + Pages + + Auto @@ -300,12 +670,17 @@ ПользовательИнфБазыАутентификацияСтандартная Right + + ru + Способ входа в программу с помощью имени и пароля, +указанного для пользователя 1С:Предприятия. + OnChange ПользовательИнфБазыАутентификацияСтандартнаяПриИзменении - ПользовательИнфБазыАутентификацияСтандартнаяExtendedTooltip + ПользовательИнфБазыАутентификацияСтандартнаяРасширеннаяПодсказка 209 Label true @@ -444,6 +819,10 @@ ПользовательИнфБазыЗапрещеноИзменятьПароль Right + + OnChange + ПользовательИнфБазыЗапрещеноИзменятьПарольПриИзменении + ПользовательИнфБазыЗапрещеноИзменятьПарольExtendedTooltip 213 @@ -534,8 +913,18 @@ ПользовательИнфБазыАутентификацияOpenID Right + + ru + Способ входа в программу с помощью имени, указанного для пользователя 1С:Предприятия, +которое передается службе аутентификации по протоколу OpenID. +Используется только при подключении через веб-сервер (адрес службы должен быть настроен). + + + OnChange + ПользовательИнфБазыАутентификацияOpenIDПриИзменении + - ПользовательИнфБазыАутентификацияOpenIDExtendedTooltip + ПользовательИнфБазыАутентификацияOpenIDРасширеннаяПодсказка 214 Label true @@ -596,6 +985,7 @@ true true false + true true true @@ -959,10 +1349,10 @@ РолиСтрокаПоиска - 239 + 284 РолиСтрокаПоискаРасширеннаяПодсказка - 241 + 286 Label true true @@ -972,7 +1362,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 240 + 285 true Роли @@ -982,10 +1372,10 @@ РолиСостояниеПросмотра - 242 + 287 РолиСостояниеПросмотраРасширеннаяПодсказка - 244 + 289 Label true true @@ -995,7 +1385,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 243 + 288 true ViewStatusAddition @@ -1006,10 +1396,10 @@ РолиУправлениеПоиском - 245 + 290 РолиУправлениеПоискомРасширеннаяПодсказка - 247 + 292 Label true true @@ -1019,7 +1409,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 246 + 291 true SearchControlAddition @@ -1163,16 +1553,62 @@ Auto + + Комментарий + 257 + true + true + + true + + + Объект.Комментарий + + Left + + КомментарийExtendedTooltip + 259 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 258 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + true + 2 + true + false + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 Left true - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -1304,10 +1740,10 @@ true - ДоступКИнформационнойБазеРазрешен + ВходВПрограммуРазрешен <key>ru</key> - <value>Доступ к информационной базе разрешен</value> + <value>Вход в программу разрешен</value> 17 @@ -1390,23 +1826,6 @@ true - - СтарыйИдентификаторПользователяИБ - - <key>ru</key> - <value>Старый идентификатор пользователя ИБ</value> - - 28 - - UUID - - - true - - - true - - ТекущееПредставлениеОбъектаАвторизации @@ -1458,10 +1877,10 @@ </edit> </attributes> <attributes> - <name>ЕстьСвязьСНесуществующимПользователемИБ</name> + <name>ЕстьСопоставлениеСНесуществующимПользователемИБ</name> <title> <key>ru</key> - <value>Есть связь с несуществующим пользователем ИБ</value> + <value>Есть сопоставление с несуществующим пользователем ИБ</value> 9 @@ -1657,23 +2076,6 @@ ПоказатьПодсистемыРолей - - АвторизованПолноправныйПользователь - - <key>ru</key> - <value>Авторизован полноправный пользователь</value> - - 19 - - Boolean - - - true - - - true - - ЗначениеКопирования @@ -1727,6 +2129,146 @@ </edit> <savedData>true</savedData> </attributes> + <attributes> + <name>НачальноеОписаниеПользователяИБ</name> + <title> + <key>ru</key> + <value>Начальное описание пользователя ИБ</value> + + 24 + + + true + + + true + + + + ПользовательИнфБазыПолноеИмя + + <key>ru</key> + <value>Пользователь инф базы полное имя</value> + + 25 + + String + + + + true + + + true + + true + + + УровеньДоступа + + <key>ru</key> + <value>Уровень доступа</value> + + 26 + + + true + + + true + + + + ПользовательИнфБазыАутентификацияОС + + <key>ru</key> + <value>Аутентификация операционной системы</value> + + 29 + + Boolean + + + true + + + true + + true + + + ПользовательИнфБазыПользовательОС + + <key>ru</key> + <value>Пользователь</value> + + 27 + + String + + + + true + + + true + + true + + + ПользовательИнфБазыРежимЗапуска + + <key>ru</key> + <value>Режим запуска</value> + + 30 + + String + + + + true + + + true + + true + + + ПользовательИнфБазыПоказыватьВСпискеВыбора + + <key>ru</key> + <value>Показывать в списке выбора</value> + + 31 + + Boolean + + + true + + + true + + true + + + ПриЧтенииВходВПрограммуРазрешен + + <key>ru</key> + <value>При чтении вход в программу разрешен</value> + + 19 + + Boolean + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -1837,6 +2379,12 @@ <types>CatalogRef.ГруппыВнешнихПользователей</types> </valueType> </parameters> + <parameters> + <name>ИдентификаторПользователяИБ</name> + <valueType> + <types>UUID</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index fd5225672..a408b557c 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,10 +1,42 @@ -<!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> -<p>Для входа внешнего пользователя в программу нужно установить флажок <strong>Доступ к информационной базе разрешен</strong> и задать свойства: имя, пароль и другие.</p> -<p><strong>Рекомендации по созданию пароля для входа в программу.<br></strong><br>Хороший пароль должен <br>- состоять не менее чем из восьми символов, <br>- включать в себя заглавные латинские буквы<br>- включать в себя  прописные латинские буквы, <br>- цифры, <br>- символы (подчеркивание, скобки и т.д.) </p> -<p>Хороший пароль должен быть малопонятным выражением. <br><br>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. <br><br>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся <br>группы символов. <br><br>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</p> +<!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.16476"></meta></head><body> +<p>Описание свойств внешнего пользователя.</p> +<p>Для <a href="#1">ввода или редактирования</a> сведений о внешнем пользователе необходимы права администрирования или права ответственного за список <a href="Catalog.ВнешниеПользователи/Help">внешних пользователей</a>. </p> +<p><a href="#2">Вход в программу</a> разрешает только администратор. </p> +<p>Ответственный за список внешних пользователей может выполнять ограниченное ведение списка <strong>Внешние пользователи</strong>, настройку внешнего пользователя до разрешения входа в программу администратором, может использовать команду <strong>Внешний доступ</strong>, редактировать списки <strong>Внешние пользователи</strong> и <strong>Группы внешних пользователей</strong>, а также права доступа внешних пользователей.</p> +<p>В остальных случаях доступен только просмотр сведений о себе, а также возможность изменить свой <strong>Пароль</strong> (в зависимости от настроек администратора), язык программы и контактную информацию.</p> +<p>В распределенной информационной базе вход в программу настраивается отдельно для каждой из информационных баз программы.</p> +<h3>Рекомендации по созданию пароля для входа в программу</h3> +<p>Хороший пароль должен:</p> +<ul><li>быть малопонятным выражением. +</li><li>состоять не менее чем из восьми символов. +</li><li>включать в себя: +<ul><li>заглавные латинские буквы +</li><li>прописные латинские буквы +</li><li>цифры +</li><li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> +<ul><li>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. +</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="#1">Ввод внешнего пользователя</a> (при наличии права)</h3> +<p>Если внешнего пользователя вводит ответственный за список и заполняет имя для входа, тогда администратору будет показана рекомендация проверить настройки для входа. После разрешения входа, рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в программу. Для того чтобы посмотреть всех таких внешних пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>.</p> +<ul><li>Внешний пользователь связан с каким-то объектом программы (например, контрагентом, сотрудником и т.п.), указанным в поле <strong>Объект</strong>. При вводе по кнопке <strong>Внешний доступ</strong> (рекомендуется) поле <strong>Объект</strong> заполняется автоматически. +</li><li>При вводе внешнего пользователя по команде <strong>Создать</strong> из <a href="Catalog.ВнешниеПользователи/Help">списка внешних пользователей</a> необходимо заполнить поле <strong>Объект</strong> вручную. Для этого выберите список программы по команде <strong>Показать все</strong>, затем выберите в этом списке нужный объект, с которым связан внешний пользователь. +</li><li>Введите <strong>Полное имя</strong> внешнего пользователя, которое будет отображаться в программе в различных списках.  +</li><li>Флажок <strong>Недействителен</strong> по умолчанию снят для всех внешних пользователей. Но если внешний пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого внешнего пользователя нельзя выбрать, и он не отображается в списке внешних пользователей. +</li><li><strong>Имя (для входа)</strong> - короткое имя, используется для входа в программу. +</li><li><strong>Аутентификация 1С:Предприятия</strong> - по умолчанию флажок включен и активно поле для ввода пароля. +</li><li><strong>Пароль</strong> - введите пароль для входа в программу. В целях безопасности данных всегда заполняйте это поле.  +</li><li><strong>Подтверждение пароля</strong> - продублируйте пароль для контроля правильности ввода. +</li><li><strong>Пользователю запрещено изменять пароль</strong> - при необходимости запретите внешнему пользователю менять свой пароль. +</li><li><strong>Аутентификация по протоколу OpenID</strong> - включите флажок, для того чтобы разрешить внешнему пользователю использовать единую учетную запись по протоколу OpenID. При этом можно отключить флажок <strong>Аутентификация 1С: Предприятия</strong>.</li></ul><h3>Включение внешнего пользователя в группы</h3> +<p>Если в программе включено использование групп пользователей, то внешнего пользователя во время ввода можно включить в одну или несколько <a href="Catalog.ГруппыВнешнихПользователей/Help">групп</a>.</p> +<ul><li>Нажмите <strong>Группы</strong> на панели навигации, с помощью флажков выберите одну или несколько <a href="CommonForm.ГруппыПользователей/Help">групп</a>. +</li><li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа внешнего пользователя </h3> +<p>Права доступа могут также настраиваться  ответственным за список внешних пользователей, при этом часть прав доступа (административные права) для него закрыта. В зависимости от программы для настройки прав доступа предусмотрена одна из возможностей:</p> +<ul><li>Нажмите <strong>Права доступа</strong> на панели навигации, для тогочтобы включить внешнего пользователя в одну или несколько <a href="CommonForm.ПраваДоступа/Help">групп доступа</a>. Их необходимо выбрать из <a href="Catalog.ГруппыДоступа/Help">списка</a>. +</li><li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить внешнему пользователю одну или несколько ролей, которые в совокупности образуют его персональные <a href="CommonForm.ПраваДоступаУпрощенно/Help">настройки прав доступа</a>. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. Выберите нужные роли с помощью флажков.</li></ul><h3><a name="#2">Разрешение входа в программу (только для администратора)</a></h3> +<p>Для входа внешнего пользователя в программу нужно установить флажок <strong>Доступ к информационной базе разрешен</strong>. При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации.  </p> +<h3>Управление настройками внешнего пользователя</h3> +<p>Программа запоминает <a href="DataProcessor.НастройкиПользователей.Form.НастройкиПользователей/Help">настройки</a> каждого пользователя во время его работы. Для того чтобы просмотреть, скопировать или удалить настройки внешнего пользователя (удалять настройки приходится, если из-за этих неправильных настроек работать в программе становится невозможно), нажмите <strong>Настройки</strong> на панели навигации.</p> +<h3>Предупреждения программы</h3> +<p>В случае если свойства внешнего пользователя отличаются от свойств <a href="Catalog.Пользователи.Form.ПользователиИБ/Help">пользователя информационной базы</a>, то программа выводит предупреждение с перечнем этих свойств. Предлагается записать данные, для того чтобы устранить различия.</p> <h3>См. также</h3> -<ul><li><a href="Catalog.ВнешниеПользователи/Help">Общие сведения о внешних пользователях</a> -</li><li><a href="Catalog.Пользователи.Form.ПользователиИБ/Help">Пользователи информационной базы</a></li></ul></body></html> \ No newline at end of file +<ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index ef9bf2cd3..4cb735c80 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -11,20 +11,19 @@ // Заполнение вспомогательных данных. ЗапретРедактированияРолей = ПользователиСлужебный.ЗапретРедактированияРолей(); - АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); // Заполнение списка выбора языка. Если Метаданные.Языки.Количество() < 2 Тогда Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; Иначе Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить( МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); КонецЦикла; КонецЕсли; // Подготовка к интерактивным действиям с учетом сценариев открытия формы. + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); УстановитьПривилегированныйРежим(Истина); @@ -43,8 +42,24 @@ Объект.ОбъектАвторизации = Неопределено; Объект.Наименование = ""; Объект.УдалитьПароль = ""; - ПрочитатьПользователяИБ(ЗначениеЗаполнено( - Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + + Если Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Истина, Ложь) Тогда + РазрешеноКопированиеПользователяИБ = УровеньДоступа.АдминистраторСистемы; + ИначеЕсли Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Ложь, Ложь) Тогда + РазрешеноКопированиеПользователяИБ = УровеньДоступа.ПолныеПрава; + Иначе + РазрешеноКопированиеПользователяИБ = Истина; + КонецЕсли; + + Если РазрешеноКопированиеПользователяИБ Тогда + ПрочитатьПользователяИБ(ЗначениеЗаполнено( + Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + Иначе + ПрочитатьПользователяИБ(); + КонецЕсли; + Если Не УровеньДоступа.ПолныеПрава Тогда + ВходВПрограммуРазрешен = Ложь; + КонецЕсли; Иначе // Добавление элемента. Если Параметры.Свойство("ОбъектАвторизацииНовогоВнешнегоПользователя") Тогда @@ -64,16 +79,24 @@ // Чтение начальных значений свойств пользователя ИБ. ПрочитатьПользователяИБ(); + + Если Не ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда + ПользовательИнфБазыАутентификацияСтандартная = Истина; + + Если УровеньДоступа.ПолныеПрава Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; + КонецЕсли; КонецЕсли; - Если АвторизованПолноправныйПользователь + Если УровеньДоступа.ПолныеПрава И Объект.ОбъектАвторизации <> Неопределено Тогда - ДоступКИнформационнойБазеРазрешен = Истина; ПользовательИнфБазыИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( ТекущееПредставлениеОбъектаАвторизации); + + ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; - Иначе // Открытие существующего элемента. ПрочитатьПользователяИБ(); @@ -82,10 +105,37 @@ УстановитьПривилегированныйРежим(Ложь); ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина); + НачальноеОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); + + ОбщаяНастройкаФормы(Истина); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + ОбщаяНастройкаФормы(); + + ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); + +КонецПроцедуры + +&НаСервере +Процедура ОбщаяНастройкаФормы(ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) + + Если НачальноеОписаниеПользователяИБ = Неопределено Тогда + Возврат; // Вызов ПриЧтенииНаСервере до вызова ПриСозданииНаСервере. + КонецЕсли; + + Если Не ПриСозданииНаСервере Тогда + ПрочитатьПользователяИБ(); + КонецЕсли; + + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); ОпределитьДействияВФорме(); - ОпределитьНесоответствияПользователяСПользователемИБ(); + ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); // Установка постоянной доступности свойств. Элементы.СвойстваПользователяИБ.Видимость = @@ -97,42 +147,20 @@ Элементы.УстановитьРолиНепосредственно.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли) И НЕ ПользователиСлужебный.ЗапретРедактированияРолей(); - Элементы.УстановитьРолиНепосредственно.Доступность = ДействияВФорме.Роли = "Редактирование"; - - Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - Элементы.Недействителен.ТолькоПросмотр = Истина; - КонецЕсли; - - Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда - Элементы.ПользовательИнфБазыАутентификацияOpenID.Доступность = Ложь; - Элементы.ПользовательИнфБазыАутентификацияСтандартная.Доступность = Ложь; - КонецЕсли; - ОбновитьОтображаемыйТипПользователя(); - ТолькоПросмотр - = ТолькоПросмотр - ИЛИ ДействияВФорме.Роли <> "Редактирование" - И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих") - И ДействияВФорме.СвойстваЭлемента <> "Редактирование"; + ТолькоПросмотр = ТолькоПросмотр + ИЛИ ДействияВФорме.Роли <> "Редактирование" + И ДействияВФорме.СвойстваЭлемента <> "Редактирование" + И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование"; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) + Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость = + УровеньДоступа.ПолныеПрава И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; УстановитьДоступностьСвойств(); КонецПроцедуры -&НаСервере -Процедура ПриЧтенииНаСервере(ТекущийОбъект) - - ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); - -КонецПроцедуры - &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) @@ -164,36 +192,27 @@ ОбновитьОтображаемыйТипПользователя(); // Автообновление наименования внешнего пользователя. + УстановитьПривилегированныйРежим(Истина); ТекущееПредставлениеОбъектаАвторизации = Строка(ТекущийОбъект.ОбъектАвторизации); + УстановитьПривилегированныйРежим(Ложь); Объект.Наименование = ТекущееПредставлениеОбъектаАвторизации; ТекущийОбъект.Наименование = ТекущееПредставлениеОбъектаАвторизации; - // Восстановление действий в форме, если они изменены на клиенте. - ОпределитьДействияВФорме(); - - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); - Если ДоступКИнформационнойБазеРазрешен Тогда - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - Иначе - ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); + Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ТекущийОбъект.ДополнительныеСвойства.Вставить( - "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда - - ЗаполнитьЗначенияСвойств( - ТекущийОбъект, - ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ТекущийОбъект.Ссылка, - "ПометкаУдаления")); + ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ТекущийОбъект.Ссылка, "ПометкаУдаления")); КонецЕсли; ТекущийОбъект.ДополнительныеСвойства.Вставить( @@ -206,16 +225,12 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ПараметрыЗаписи.Вставить( ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); КонецЕсли; - ПрочитатьПользователяИБ(); - - ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); + ОбщаяНастройкаФормы(, ПараметрыЗаписи); КонецПроцедуры @@ -233,11 +248,11 @@ ИначеЕсли ПараметрыЗаписи.Свойство("УдаленПользовательИБ") Тогда Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтотОбъект); - ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществующимПользователемИБ") Тогда + ИначеЕсли ПараметрыЗаписи.Свойство("ОчищеноСопоставлениеСНесуществующимПользователемИБ") Тогда Оповестить( - "ОчищенаСвязьСНесуществующимПользователемИБ", - ПараметрыЗаписи.ОчищенаСвязьСНесуществующимПользователемИБ, ЭтотОбъект); + "ОчищеноСопоставлениеСНесуществующимПользователемИБ", + ПараметрыЗаписи.ОчищеноСопоставлениеСНесуществующимПользователемИБ, ЭтотОбъект); КонецЕсли; Если ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда @@ -268,17 +283,15 @@ ТекстОшибки, , "Объект.ОбъектАвторизации", , Отказ); КонецЕсли; - Если ДоступКИнформационнойБазеРазрешен Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ); ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); ТекстСообщения = ""; - Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора( , ТекстСообщения) Тогда - + Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(, ТекстСообщения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - ТекстСообщения, , "ДоступКИнформационнойБазеРазрешен", , Отказ); + ТекстСообщения, , "ВходВПрограммуРазрешен", , Отказ); КонецЕсли; КонецЕсли; @@ -291,8 +304,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОбъектАвторизацииПриИзменении(Элемент) @@ -302,34 +316,85 @@ КонецПроцедуры &НаКлиенте -Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент) +Процедура НедействителенПриИзменении(Элемент) - Если НЕ ПользовательИБСуществует - И ДоступКИнформационнойБазеРазрешен Тогда - - ПользовательИнфБазыИмя = - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( - ТекущееПредставлениеОбъектаАвторизации); + Если Объект.Недействителен Тогда + ВходВПрограммуРазрешен = Ложь; КонецЕсли; УстановитьДоступностьСвойств(); КонецПроцедуры +&НаКлиенте +Процедура ВходВПрограммуРазрешенПриИзменении(Элемент) + + Если Объект.ПометкаУдаления И ВходВПрограммуРазрешен Тогда + ВходВПрограммуРазрешен = Ложь; + ПоказатьПредупреждение(, + НСтр("ru = 'Чтобы разрешить вход в программу, требуется снять + |пометку на удаление с этого внешнего пользователя.'")); + Возврат; + КонецЕсли; + + ОбновитьИмяДляВхода(ЭтотОбъект); + + Если ВходВПрограммуРазрешен + И НЕ ПользовательИнфБазыАутентификацияOpenID + И НЕ ПользовательИнфБазыАутентификацияСтандартная Тогда + + ПользовательИнфБазыАутентификацияСтандартная = Истина; + КонецЕсли; + + УстановитьДоступностьСвойств(); + + Если Не УровеньДоступа.ПолныеПрава + И УровеньДоступа.УправлениеСписком + И Не ВходВПрограммуРазрешен Тогда + + ПоказатьПредупреждение(, + НСтр("ru = 'После записи вход в программу сможет разрешить только администратор.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыИмяПриИзменении(Элемент) + + УстановитьДоступностьСвойств(); + +КонецПроцедуры + &НаКлиенте Процедура ПользовательИнфБазыАутентификацияСтандартнаяПриИзменении(Элемент) - УстановитьДоступностьСвойств(); + АутентификацияПриИзменении(); КонецПроцедуры &НаКлиенте Процедура ПарольПриИзменении(Элемент) + УстановитьДоступностьСвойств(); + ПользовательИнфБазыПароль = Пароль; КонецПроцедуры +&НаКлиенте +Процедура ПользовательИнфБазыЗапрещеноИзменятьПарольПриИзменении(Элемент) + + УстановитьДоступностьСвойств(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыАутентификацияOpenIDПриИзменении(Элемент) + + АутентификацияПриИзменении(); + +КонецПроцедуры + &НаКлиенте Процедура УстановитьРолиНепосредственноПриИзменении(Элемент) @@ -342,8 +407,17 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -357,8 +431,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -395,52 +470,82 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьИмяДляВхода(Форма, ПриИзмененииНаименования = Ложь) + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + Если Форма.ПользовательИБСуществует Тогда + Возврат; + КонецЕсли; + + КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Форма.ТекущееПредставлениеОбъектаАвторизации); + + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда + Если Форма.ПользовательИнфБазыИмя = КраткоеИмя Тогда + Форма.ПользовательИнфБазыИмя = ""; + КонецЕсли; + Иначе + + Если ПриИзмененииНаименования + Или Не ЗначениеЗаполнено(Форма.ПользовательИнфБазыИмя) Тогда + + Форма.ПользовательИнфБазыИмя = КраткоеИмя; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура АутентификацияПриИзменении() + + УстановитьДоступностьСвойств(); + + Если ВходВПрограммуРазрешен + И НЕ ПользовательИнфБазыАутентификацияOpenID + И НЕ ПользовательИнфБазыАутентификацияСтандартная Тогда + + ВходВПрограммуРазрешен = Ложь; + КонецЕсли; + +КонецПроцедуры &НаСервере Процедура ОпределитьДействияВФорме() ДействияВФорме = Новый Структура; - // "", "Просмотр", "Редактирование". - ДействияВФорме.Вставить("Роли", ""); + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("Роли", ""); - // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих". + // "", "Просмотр", "Редактирование". ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); - // "", "Просмотр", "Редактирование". - ДействияВФорме.Вставить("СвойстваЭлемента", ""); + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("СвойстваЭлемента", "Просмотр"); - Если Пользователи.ЭтоПолноправныйПользователь() - ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда - // Администратор. - ДействияВФорме.Роли = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; - ДействияВФорме.СвойстваЭлемента = "Редактирование"; - - ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда - // Менеджер внешних пользователей. - ДействияВФорме.Роли = ""; - ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; - - ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда - // Свои свойства. - ДействияВФорме.Роли = ""; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих"; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; - Иначе - // Читатель внешних пользователей - ДействияВФорме.Роли = ""; - ДействияВФорме.СвойстваПользователяИБ = ""; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; + Если УровеньДоступа.ИзменениеТекущего Или УровеньДоступа.УправлениеСписком Тогда + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; + КонецЕсли; + + Если УровеньДоступа.УправлениеСписком Тогда + ДействияВФорме.СвойстваЭлемента = "Редактирование"; + КонецЕсли; + + Если УровеньДоступа.ПолныеПрава Тогда + ДействияВФорме.Роли = "Редактирование"; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.Ссылка) И НЕ ЗначениеЗаполнено(Объект.ОбъектАвторизации) Тогда - ДействияВФорме.СвойстваЭлемента = "Редактирование"; + ДействияВФорме.СвойстваЭлемента = "Редактирование"; КонецЕсли; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( @@ -456,14 +561,24 @@ Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; - ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда + ИначеЕсли ДействияВФорме.Роли = "Редактирование" + И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда + ДействияВФорме.Роли = "Просмотр"; КонецЕсли; - Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", + Если Найти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; + + Иначе // Поддержка обратной совместимости. + Если Найти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда + ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; + + ИначеЕсли Найти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; + КонецЕсли; КонецЕсли; Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда @@ -475,9 +590,15 @@ &НаСервере Функция ОписаниеПользователяИБ() - ПользовательИнфБазыПолноеИмя = Объект.Наименование; + Если УровеньДоступа.УправлениеСписком + И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + + ПользовательИнфБазыПолноеИмя = Объект.Наименование; + КонецЕсли; - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда + Если УровеньДоступа.АдминистраторСистемы + Или УровеньДоступа.ПолныеПрава Тогда + Результат = Пользователи.НовоеОписаниеПользователяИБ(); Пользователи.СкопироватьСвойстваПользователяИБ( Результат, @@ -486,31 +607,51 @@ "УникальныйИдентификатор, |Роли", "ПользовательИнфБазы"); - + + Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); + Иначе - // РедактированиеСвоих. Результат = Новый Структура; - Результат.Вставить("Пароль", ПользовательИнфБазыПароль); - Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + + Если УровеньДоступа.ИзменениеТекущего Тогда + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + КонецЕсли; + + Если УровеньДоступа.УправлениеСписком Тогда + Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); + Результат.Вставить("ЗапрещеноИзменятьПароль", ПользовательИнфБазыЗапрещеноИзменятьПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + Результат.Вставить("ПолноеИмя", ПользовательИнфБазыПолноеИмя); + КонецЕсли; + + Если УровеньДоступа.НастройкиДляВхода Тогда + Результат.Вставить("АутентификацияСтандартная", ПользовательИнфБазыАутентификацияСтандартная); + Результат.Вставить("Имя", ПользовательИнфБазыИмя); + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("АутентификацияOpenID", ПользовательИнфБазыАутентификацияOpenID); + КонецЕсли; КонецЕсли; Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); - Если ДействияВФорме.Роли = "Редактирование" + Если УровеньДоступа.НастройкиДляВхода + И Не ПользователиСлужебный.ЗапретРедактированияРолей() И Объект.УстановитьРолиНепосредственно Тогда ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); Результат.Вставить("Роли", ТекущиеРоли); КонецЕсли; - УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователяИБ(Истина); - - Если УровеньДоступа = "ПолныйДоступ" - ИЛИ УровеньДоступа = "УправлениеСписком" Тогда - + Если УровеньДоступа.УправлениеСписком Тогда Результат.Вставить("ПоказыватьВСпискеВыбора", Ложь); Результат.Вставить("РежимЗапуска", "Авто"); КонецЕсли; + Если УровеньДоступа.ПолныеПрава Тогда + Результат.Вставить("АутентификацияОС", Ложь); + Результат.Вставить("ПользовательОС", ""); + КонецЕсли; + Возврат Результат; КонецФункции @@ -523,16 +664,8 @@ КонецЕсли; Если Форма.ТекущееПредставлениеОбъектаАвторизации <> Строка(Объект.ОбъектАвторизации) Тогда - Форма.ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); - - Если НЕ Форма.ПользовательИБСуществует - И Форма.ДоступКИнформационнойБазеРазрешен Тогда - - Форма.ПользовательИнфБазыИмя = - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( - Форма.ТекущееПредставлениеОбъектаАвторизации); - КонецЕсли; + ОбновитьИмяДляВхода(Форма, Истина); КонецЕсли; КонецПроцедуры @@ -571,6 +704,21 @@ КонецПроцедуры +&НаСервере +Функция НачальноеОписаниеПользователяИБ() + + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + + Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + КонецЕсли; + ОписаниеПользователяИБ.Роли = Новый Массив; + + Возврат ОписаниеПользователяИБ; + +КонецФункции + &НаСервере Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь) @@ -578,14 +726,11 @@ Пароль = ""; ПодтверждениеПароля = ""; - ПрочитанныеСвойства = Неопределено; - ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - ПользовательИБСуществует = Ложь; - ДоступКИнформационнойБазеРазрешен = Ложь; - - // Заполнение начальных значений свойств пользователяИБ. - ОписаниеПользователяИБ.Роли = Новый Массив; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + ПрочитанныеСвойства = Неопределено; + ОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); + ПользовательИБСуществует = Ложь; + ВходВПрограммуРазрешен = Ложь; + ПользовательИБОсновной = Ложь; Если ПриКопированииЭлемента Тогда @@ -593,36 +738,77 @@ Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда - // Установка связи пользователем ИБ. - ДоступКИнформационнойБазеРазрешен = Истина; + // Сопоставление пользователя ИБ с пользователем в справочнике. + Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; // Копирование свойств и ролей пользователяИБ. ЗаполнитьЗначенияСвойств( ОписаниеПользователяИБ, ПрочитанныеСвойства, - "АутентификацияOpenID, - |АутентификацияСтандартная, - |ЗапрещеноИзменятьПароль, - |Язык, - |Роли"); + "ЗапрещеноИзменятьПароль, + |РежимЗапуска" + ?(Не Элементы.ПользовательИнфБазыЯзык.Видимость, "", ", + |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", + |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; Иначе Если Пользователи.ПрочитатьПользователяИБ( Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда + + ПользовательИБСуществует = Истина; + ПользовательИБОсновной = Истина; - ПользовательИБСуществует = Истина; - ДоступКИнформационнойБазеРазрешен = Истина; + ИначеЕсли Параметры.Свойство("ИдентификаторПользователяИБ") + И ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда + + Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ; + + Если Пользователи.ПрочитатьПользователяИБ( + Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда + + ПользовательИБСуществует = Истина; + Если Объект.Наименование <> ПрочитанныеСвойства.ПолноеИмя Тогда + ПрочитанныеСвойства.ПолноеИмя = Объект.Наименование; + Модифицированность = Истина; + КонецЕсли; + Если ПрочитанныеСвойства.АутентификацияОС Тогда + ПрочитанныеСвойства.АутентификацияОС = Ложь; + Модифицированность = Истина; + КонецЕсли; + Если ЗначениеЗаполнено(ПрочитанныеСвойства.ПользовательОС) Тогда + ПрочитанныеСвойства.ПользовательОС = ""; + Модифицированность = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ПользовательИБСуществует Тогда + + Если Не Элементы.ПользовательИнфБазыЯзык.Видимость Тогда + ПрочитанныеСвойства.Язык = ОписаниеПользователяИБ.Язык; + КонецЕсли; + + Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; ЗаполнитьЗначенияСвойств( ОписаниеПользователяИБ, ПрочитанныеСвойства, "Имя, + |ПолноеИмя, |АутентификацияOpenID, |АутентификацияСтандартная, + |ПоказыватьВСпискеВыбора, |ЗапрещеноИзменятьПароль, - |Язык, - |Роли"); + |АутентификацияОС, + |ПользовательОС, + |РежимЗапуска, + |РежимЗапуска" + ?(Не Элементы.ПользовательИнфБазыЯзык.Видимость, "", ", + |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", + |Роли")); Если ПрочитанныеСвойства.ПарольУстановлен Тогда Пароль = "**********"; @@ -639,30 +825,120 @@ |Роли", "ПользовательИнфБазы"); + Если ПользовательИБОсновной И Не ВходВПрограммуРазрешен Тогда + ХранимыеСвойства = ПользователиСлужебный.ХранимыеСвойстваПользователяИБ(Объект.Ссылка); + ПользовательИнфБазыАутентификацияOpenID = ХранимыеСвойства.АутентификацияOpenID; + ПользовательИнфБазыАутентификацияСтандартная = ХранимыеСвойства.АутентификацияСтандартная; + КонецЕсли; + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); + ПриЧтенииВходВПрограммуРазрешен = ВходВПрограммуРазрешен; + КонецПроцедуры &НаСервере Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено) - // Определение связи с несуществующим пользователем ИБ. - ЕстьНоваяСвязьСНесуществующимПользователемИБ = + // Проверка соответствия свойства ПолноеИмя пользователяИБ и + // реквизита Наименование внешнего пользователя. А также значений свойств по умолчанию. + + ПоказатьНесоответствие = Истина; + ПоказатьКомандыУстраненияРазличий = Ложь; + + Если НЕ ПользовательИБСуществует Тогда + ПоказатьНесоответствие = Ложь; + + ИначеЕсли Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + ПользовательИнфБазыПолноеИмя = Объект.Наименование; + ПоказатьНесоответствие = Ложь; + + ИначеЕсли УровеньДоступа.УправлениеСписком Тогда + + УточнениеСвойств = Новый Массив; + ЕстьРазличияУстранимыеБезАдминистратора = Ложь; + + Если ПользовательИнфБазыАутентификацияОС <> Ложь Тогда + УточнениеСвойств.Добавить(НСтр("ru = 'Аутентификация ОС (включена)'")); + КонецЕсли; + + Если ЗначениеЗаполнено(УточнениеСвойств) Тогда + ПоказатьКомандыУстраненияРазличий = + УровеньДоступа.НастройкиДляВхода + И ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; + КонецЕсли; + + Если ПользовательИнфБазыПолноеИмя <> Объект.Наименование Тогда + ЕстьРазличияУстранимыеБезАдминистратора = Истина; + + УточнениеПолногоИмени = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Полное имя ""%1""'"), ПользовательИнфБазыПолноеИмя); + + УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Полное имя ""%1""'"), ПользовательИнфБазыПолноеИмя)); + КонецЕсли; + + Если ПользовательИнфБазыПользовательОС <> "" Тогда + УточнениеСвойств.Добавить(НСтр("ru = 'Пользователь ОС (указан)'")); + КонецЕсли; + + Если ПользовательИнфБазыПоказыватьВСпискеВыбора Тогда + ЕстьРазличияУстранимыеБезАдминистратора = Истина; + УточнениеСвойств.Добавить(НСтр("ru = 'Показывать в списке выбора (включено)'")); + КонецЕсли; + + Если ПользовательИнфБазыРежимЗапуска <> "Авто" Тогда + ЕстьРазличияУстранимыеБезАдминистратора = Истина; + УточнениеСвойств.Добавить(НСтр("ru = 'Режим запуска (не Авто)'")); + КонецЕсли; + + Если УточнениеСвойств.Количество() > 0 Тогда + СтрокаУточненияСвойств = ""; + ТекущаяСтрока = ""; + Для каждого УточнениеСвойства Из УточнениеСвойств Цикл + Если СтрДлина(ТекущаяСтрока + УточнениеСвойства) > 90 Тогда + СтрокаУточненияСвойств = СтрокаУточненияСвойств + СокрП(ТекущаяСтрока) + ", " + Символы.ПС; + ТекущаяСтрока = ""; + КонецЕсли; + ТекущаяСтрока = ТекущаяСтрока + ?(ЗначениеЗаполнено(ТекущаяСтрока), ", ", "") + УточнениеСвойства; + КонецЦикла; + Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда + СтрокаУточненияСвойств = СтрокаУточненияСвойств + ТекущаяСтрока; + КонецЕсли; + Элементы.СвойстваПояснениеНесоответствия.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: + |%1.'"), СтрокаУточненияСвойств) + + Символы.ПС + + ?(ПоказатьКомандыУстраненияРазличий Или ЕстьРазличияУстранимыеБезАдминистратора, + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"), + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'")); + Иначе + ПоказатьНесоответствие = Ложь; + КонецЕсли; + Иначе + ПоказатьНесоответствие = Ложь; + КонецЕсли; + + Элементы.СвойстваОбработкаНесоответствия.Видимость = ПоказатьНесоответствие; + + // Определение сопоставления несуществующего пользователя ИБ с пользователем в справочнике. + ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); Если ПараметрыЗаписи <> Неопределено - И ЕстьСвязьСНесуществующимПользователемИБ - И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда + И ЕстьСопоставлениеСНесуществующимПользователемИБ + И НЕ ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ Тогда - ПараметрыЗаписи.Вставить("ОчищенаСвязьСНесуществующимПользователемИБ", Объект.Ссылка); + ПараметрыЗаписи.Вставить("ОчищеноСопоставлениеСНесуществующимПользователемИБ", Объект.Ссылка); КонецЕсли; - ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ; + ЕстьСопоставлениеСНесуществующимПользователемИБ = ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ; - Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда - // Связь не может быть изменена. - Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь; + Если УровеньДоступа.УправлениеСписком Тогда + Элементы.СопоставлениеОбработкаНесоответствия.Видимость = ЕстьСопоставлениеСНесуществующимПользователемИБ; Иначе - Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ; + // Сопоставление не может быть изменено. + Элементы.СопоставлениеОбработкаНесоответствия.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -670,61 +946,114 @@ //////////////////////////////////////////////////////////////////////////////// // Начальное заполнение, проверка заполнения, доступность свойств -&НаКлиенте +&НаСервере Процедура УстановитьДоступностьСвойств() + // Настройка возможности изменения. Элементы.ОбъектАвторизации.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование" ИЛИ ОбъектАвторизацииЗаданПриОткрытии ИЛИ ЗначениеЗаполнено(Объект.Ссылка) И ЗначениеЗаполнено(Объект.ОбъектАвторизации); - Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + Элементы.Недействителен.ТолькоПросмотр = + Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); - Элементы.СвойстваПользователяИБ.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; + Элементы.ОсновныеСвойства.ТолькоПросмотр = + Не ( ДействияВФорме.СвойстваПользователяИБ = "Редактирование" + И (УровеньДоступа.УправлениеСписком Или УровеньДоступа.ИзменениеТекущего)); + + Элементы.ВходВПрограммуРазрешен.ТолькоПросмотр = + Не ( Элементы.ОсновныеСвойства.ТолькоПросмотр = Ложь + И ( УровеньДоступа.ПолныеПрава + Или УровеньДоступа.УправлениеСписком И ПриЧтенииВходВПрограммуРазрешен)); + + Элементы.ПользовательИнфБазыИмя1.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыИмя2.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.УстановитьРолиНепосредственно.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; Элементы.Пароль.ТолькоПросмотр = - ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; + Не ( УровеньДоступа.НастройкиДляВхода + Или УровеньДоступа.ИзменениеТекущего + И Не ПользовательИнфБазыЗапрещеноИзменятьПароль); - Элементы.ПодтверждениеПароля.ТолькоПросмотр = - ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; - - Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр; ОбработатьИнтерфейсРолей( "УстановитьТолькоПросмотрРолей", ЗапретРедактированияРолей - ИЛИ ДействияВФорме.Роли <> "Редактирование" - ИЛИ НЕ Объект.УстановитьРолиНепосредственно); + Или ДействияВФорме.Роли <> "Редактирование" + Или Не Объект.УстановитьРолиНепосредственно + Или Не УровеньДоступа.НастройкиДляВхода); - Элементы.ОсновныеСвойства.Доступность = ДоступКИнформационнойБазеРазрешен; - Элементы.РедактированиеИлиПросмотрРолей.Доступность = ДоступКИнформационнойБазеРазрешен; - Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = ДоступКИнформационнойБазеРазрешен; + Элементы.Комментарий.ТолькоПросмотр = + Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); - Элементы.Пароль.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = ПользовательИнфБазыАутентификацияСтандартная; + // Настройка необходимости заполнения. + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект, Ложь) Тогда + НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; + Иначе + НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; + КонецЕсли; - Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Объект.Недействителен; + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда + Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; + КонецЕсли; + ОбновитьИмяДляВхода(ЭтотОбъект); + + // Настройка доступности связанных элементов. + Элементы.ВходВПрограммуРазрешен.Доступность = НЕ Объект.Недействителен; + Элементы.ОсновныеСвойства.Доступность = НЕ Объект.Недействителен; + Элементы.РедактированиеИлиПросмотрРолей.Доступность = НЕ Объект.Недействителен; + + Элементы.Пароль.Доступность = ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПодтверждениеПароля.Доступность = ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность + = ПользовательИнфБазыАутентификацияСтандартная; КонецПроцедуры -&НаКлиенте -Процедура НедействителенПриИзменении(Элемент) +&НаКлиентеНаСервереБезКонтекста +Функция ТребуетсяЗаписьПользователяИБ(Форма, УчитыватьСтандартноеИмя = Истина) - Если Объект.Недействителен Тогда - ДоступКИнформационнойБазеРазрешен = Ложь; + Если Форма.ДействияВФорме.СвойстваПользователяИБ <> "Редактирование" Тогда + Возврат Ложь; КонецЕсли; - УстановитьДоступностьСвойств(); + Шаблон = Форма.НачальноеОписаниеПользователяИБ; -КонецПроцедуры + ТекущееИмя = ""; + Если Не УчитыватьСтандартноеИмя Тогда + КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Форма.ТекущееПредставлениеОбъектаАвторизации); + + Если Форма.ПользовательИнфБазыИмя = КраткоеИмя Тогда + ТекущееИмя = КраткоеИмя; + КонецЕсли; + КонецЕсли; + + Если Форма.ПользовательИБСуществует + ИЛИ Форма.ВходВПрограммуРазрешен + ИЛИ Форма.ПользовательИнфБазыИмя <> ТекущееИмя + ИЛИ Форма.ПользовательИнфБазыАутентификацияСтандартная <> Шаблон.АутентификацияСтандартная + ИЛИ Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль <> Шаблон.ЗапрещеноИзменятьПароль + ИЛИ Форма.Пароль <> "" + ИЛИ Форма.ПодтверждениеПароля <> "" + ИЛИ Форма.ПользовательИнфБазыАутентификацияOpenID <> Шаблон.АутентификацияOpenID + ИЛИ Форма.ПользовательИнфБазыЯзык <> Шаблон.Язык + ИЛИ Форма.ПользовательИнфБазыРоли.Количество() <> 0 Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -742,3 +1071,5 @@ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index 873d50838..7a2cd872a 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -1,10 +1,45 @@ -<!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> -<p>Для ведения списка внешних пользователей требуются права администрирования. Ответственный за внешних пользователей может использовать команду <strong>Внешний доступ</strong>, редактировать списки <strong>Внешние пользователи</strong> и <strong>Группы внешних пользователей</strong>. Всем внешним пользователям доступен просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык программы и контактная информация.</p> -<p>Внешние пользователи могут быть отмечены как недействительные. Для того чтобы посмотреть таких внешних пользователей, можно воспользоваться командой <strong>Показывать недействительных внешних пользователей</strong> (в меню <strong>Все действия</strong> командной панели формы списка внешних пользователей).</p> -<h3>См. также</h3> -<ul><li><a href="Catalog.ВнешниеПользователи.Form.ФормаЭлемента/Help">Свойства внешнего пользователя</a> -</li><li><a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">Свойства группы внешних пользователей</a> -</li><li><a href="Catalog.Пользователи.Form.ПользователиИБ/Help">Пользователи информационной базы</a></li></ul></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.16476"></meta></head><body> +<p>Предназначен для ведения пользователей, которые работают с программой "извне". Их доступ, как правило, сильно ограничен. Внешние пользователи не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой. Например, это сотрудники в кадровой базе, покупатели в интернет-магазине, респонденты в базе для анкетирования.</p> +<p>Открыть список внешних пользователей можно из раздела <strong>Администрирование - Настройки пользователей и прав</strong>. Также можно его открыть из раздела <strong>Анкетирование</strong> (<strong>Управление доступом</strong>).</p> +<p>Внешние пользователи программы разного типа, поэтому информация о них хранится в различных списках программы.</p> +<p>Ведение списка внешних пользователей может осуществлять как администратор, так и ответственный за список внешних пользователей. </p> +<p>Вход в программу разрешает только администратор.  </p> +<p>Ответственный за список внешних пользователей (с правом добавления новых внешних пользователей) может выполнять ограниченное ведение списка внешних пользователей, настройку внешнего пользователя до разрешения входа в программу администратором. Ответственный за список может использовать команду <strong>Внешний доступ</strong>, редактировать списки <strong>Внешние пользователи</strong> и <strong>Группы внешних пользователей</strong>. </p> +<p>Внешний пользователь, которого ввел ответственный за список, получает статус <strong>Подготовлен</strong>. Администратор программы может отобрать таких пользователей по этому признаку, проверить правильность заполнения сведений и разрешить вход в программу.</p> +<p>После того как администратор разрешит вход в программу, ответственный за список более не сможет изменить настройки для входа, кроме отключения разрешения на вход в программу.</p> +<p>Всем внешним пользователям доступен просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык программы и контактная информация.</p> +<p>В распределенной информационной базе вход в программу настраивается отдельно для каждой из информационных баз программы.</p> +<h3>Ввод внешнего пользователя</h3> +<ul><li>Основной способ ввода и редактирования внешних пользователей - с помощью команды <strong>Внешний доступ</strong>, которая размещается в командной панели соответствующих списков и объектов программы. При выполнении команды сразу создается внешний пользователь, связанный с этим объектом, или открывается существующий внешний пользователь. +</li><li>Также можно ввести <a href="Catalog.ВнешниеПользователи.Form.ФормаЭлемента/Help">внешнего пользователя</a> в списке. Нажмите <strong>Создать</strong>. В этом случае необходимо самостоятельно заполнить <strong>Объект</strong>, с которым связан этот внешний пользователь.</li></ul><h3>Доступные действия</h3> +<ul><li>Внешние пользователи могут быть отмечены как недействительные. Для того чтобы посмотреть таких внешних пользователей, нажмите <strong>Все действия - Показывать недействительных внешних пользователей</strong>. +</li><li>Для контроля правильности ввода или в случае некорректного ввода внешних пользователей по команде <strong>Все действия - Пользователи информационной базы</strong> можно перейти к контролю записей и синхронизации списка внешних пользователей со списком <a href="Catalog.Пользователи.Form.ПользователиИБ/Help">пользователей информационной базы</a>. </li></ul><h3>Группировка внешних пользователей</h3> +<p>В случае если в программе разрешено использовать группы пользователей, список состоит из двух частей: в левой части необходимое количество групп, в правой - список внешних пользователей. При выборе группы в правой части отображаются внешние пользователи, входящие в группу.</p> +<p>Если в программе много внешних пользователей, список можно сгруппировать, например, по видам отношений с ними: партнеры, контрагенты и т.д. </p> +<p>Один и тот же внешний пользователь может одновременно входить в разные <a href="Catalog.ГруппыВнешнихПользователей/Help">группы</a>. Включить внешнего пользователя в группы можно несколькими способами:</p> +<ul><li>При вводе внешнего пользователя в списке можно сначала выбрать группу, затем нажать кнопку <strong>Создать</strong>. +</li><li>Для добавления в группу большого числа внешних пользователей можно открыть окно группы и нажать <strong>Подобрать</strong>. При этом для подбора используется <a href="#S">список</a> <strong>Внешние пользователи</strong>, состоящий из трех частей. +</li><li>Выделить внешнего пользователя в списке, с помощью команды меню <strong>Все действия - Назначить группы</strong> включить его в одну или несколько групп. Также можно найти эту  команду в контекстном меню по правой кнопке мыши. +</li><li>Перетащить одного или нескольких внешних пользователей мышью в нужную группу. Для использования этой возможности флажок <strong>Показывать внешних пользователей дочерних групп</strong> необходимо отключить.</li></ul><h3>Ввод группы внешних пользователей</h3> +<ul><li>Нажмите  <img src="StdPicture.CreateFolder"></img> <strong>Создать группу</strong>, введите необходимые <a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">поля</a>. +</li><li>Также можно воспользоваться командой <strong>Создать</strong> контекстного меню по правой кнопке мыши в левой части списка.</li></ul><h3>Включение группы внешних пользователей в другую группу</h3> +<ul><li> +<div>Выберите группу в левой части списка, воспользуйтесь командой контекстного меню по правой кнопке мыши <strong>Переместить в группу</strong>. </div> +</li><li> +<div>Выберите группу для перемещения.</div></li></ul><h3>Просмотр внешних пользователей дочерних групп</h3> +<ul><li>Для того чтобы увидеть всех внешних пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать внешних пользователей дочерних групп</strong> в нижней части списка. По умолчанию флажок включен.</li></ul><h3><a name="#S">Подбор участников групп</a>ы внешних пользователей</h3> +<p>В случае если из списка внешних пользователей производится подбор участников группы, он состоит из трех частей.  Слева в верхней части списка отображаются группы, в нижней части внешние пользователи выбранной группы. В правой части списка отображаются выбранные пользователи.</p> +<ul><li> +<div>Для удобства подбора в верхней левой части списка показаны уже имеющиеся группы внешних пользователей. Выбрав нужную группу (или группу <strong>Все внешние пользователи</strong>), можно просмотреть пользователей этой группы в нижней левой части списка.</div> +</li><li> +<div>Выделите одного или нескольких пользователей в левой нижней части списка, с помощью стрелки переместите в правую часть <strong>Выбранные пользователи</strong>.  Также можно перенести внешнего пользователя из левой нижней части в правую с помощью двойного щелчка мышью.</div> +</li><li> +<div>Для того чтобы отменить свой выбор, уберите одного или нескольких ненужных пользователей из правой части списка аналогичными действиями. </div> +</li><li> +<div>С помощью двойной стрелки << можно убрать из <strong>Выбранных</strong> сразу всех внешних пользователей. </div> +</li><li> +<div>Программа ведет подсчет выбранных внешних пользователей.</div></li></ul><h3>Просмотр отчета Сведения о внешних пользователях</h3> +<p>Отчет позволяет выполнить анализ настроек для входа (свойств пользователя ИБ) совместно с остальными свойствами внешнего пользователя в справочнике. Включает 3 варианта отчета - о пользователях, внешних пользователях и всех пользователях программы.</p> +<ul><li> +<div>Нажмите <strong>Все действия - Сведения о пользователях</strong>, сформируйте <a href="Report.СведенияОПользователях/Help">отчет</a>.</div></li></ul><h3>См. также   </h3> +<ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index 801a25ee9..d3ece6d30 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -9,21 +8,22 @@ Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; + НеРедактируемыеРеквизиты.Добавить("ОбъектАвторизации"); + НеРедактируемыеРеквизиты.Добавить("УстановитьРолиНепосредственно"); НеРедактируемыеРеквизиты.Добавить("ИдентификаторПользователяИБ"); НеРедактируемыеРеквизиты.Добавить("ИдентификаторПользователяСервиса"); - НеРедактируемыеРеквизиты.Добавить("Недействителен"); - НеРедактируемыеРеквизиты.Добавить("ОбъектАвторизации"); + НеРедактируемыеРеквизиты.Добавить("СвойстваПользователяИБ"); НеРедактируемыеРеквизиты.Добавить("УдалитьПароль"); - НеРедактируемыеРеквизиты.Добавить("УстановитьРолиНепосредственно"); Возврат НеРедактируемыеРеквизиты; КонецФункции +#КонецОбласти + #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -58,7 +58,7 @@ "ОбъектАвторизацииНовогоВнешнегоПользователя", Параметры.ОбъектАвторизации); Иначе ОписаниеОшибкиКакПредупреждения = - НСтр("ru = 'Доступ к информационной базе запрещен и не предоставлялся.'"); + НСтр("ru = 'Разрешение на вход в программу не предоставлялось.'"); ВызватьИсключение ОписаниеОшибкиКакПредупреждения; КонецЕсли; @@ -67,3 +67,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index e426e2b92..a2bb7161d 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,23 +1,26 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. - // Используются в обработчике события ПриЗаписи. - -Перем СтарыйОбъектАвторизации; // Значений объекта авторизации до изменения. - // Используются в обработчике события ПриЗаписи. - -Перем ЭтоНовый; // Показывает, что был записан новый объект. - // Используются в обработчике события ПриЗаписи. - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Программный интерфейс объекта реализован через ДополнительныеСвойства: // // ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ + +Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. + // Используются в обработчике события ПриЗаписи. + +Перем ЭтоНовый; // Показывает, что был записан новый объект. + // Используются в обработчике события ПриЗаписи. + +Перем СтарыйОбъектАвторизации; // Значений объекта авторизации до изменения. + // Используются в обработчике события ПриЗаписи. + +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -113,7 +116,7 @@ Возврат; КонецЕсли; - ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбмененДанными(); + ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными(); КонецПроцедуры @@ -123,13 +126,16 @@ ИдентификаторПользователяИБ = Неопределено; ИдентификаторПользователяСервиса = Неопределено; + Подготовлен = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -Процедура ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбмененДанными() Экспорт +#Область СлужебныеПроцедурыИФункции + +// Только для внутреннего использования +Процедура ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными() Экспорт // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, // кроме того, вход под этим пользователем ИБ приведет к ошибке. @@ -143,4 +149,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index eed574e8e..ce023f2ea 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -123,44 +123,6 @@ <defaultObjectForm>Catalog.ВнешниеПользователи.Form.ФормаЭлемента</defaultObjectForm> <defaultListForm>Catalog.ВнешниеПользователи.Form.ФормаСписка</defaultListForm> <defaultChoiceForm>Catalog.ВнешниеПользователи.Form.ФормаСписка</defaultChoiceForm> - <attributes uuid="433a114f-3198-4ef6-bbf8-ce9b54fdb736"> - <name>ИдентификаторПользователяИБ</name> - <synonym> - <key>ru</key> - <value>Идентификатор пользователя ИБ</value> - </synonym> - <comment>Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ</comment> - <type> - <types>UUID</types> - </type> - <toolTip> - <key>ru</key> - <value>Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы.</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="02ac711c-e38e-422e-ac28-ba1b298df9cc"> - <name>ИдентификаторПользователяСервиса</name> - <synonym> - <key>ru</key> - <value>Идентификатор пользователя сервиса</value> - </synonym> - <type> - <types>UUID</types> - </type> - <toolTip> - <key>ru</key> - <value>Уникальный идентификатор пользователя сервиса, через который установлена связь элемента справочника с пользователем сервиса.</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <indexing>Index</indexing> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="b729d739-5249-4765-85ee-fd792bb22911"> <name>Недействителен</name> <synonym> @@ -172,7 +134,8 @@ </type> <toolTip> <key>ru</key> - <value>Внешний пользователь недействителен</value> + <value>Внешний пользователь недействителен, оставлен для истории, +его не требуется выбирать в документах и других местах.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -188,7 +151,10 @@ <value>Объект</value> </synonym> <type> - <types>CatalogRef.ФизическиеЛица</types> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> </type> <toolTip> <key>ru</key> @@ -201,6 +167,123 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="d431d1e2-13dc-495c-9de1-b5ec872eceed"> + <name>УстановитьРолиНепосредственно</name> + <synonym> + <key>ru</key> + <value>Установить роли непосредственно</value> + </synonym> + <comment>Используется, если не встроена подсистема "Управление доступом"</comment> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Установить роли непосредственно без использования ролей, заданных в группах внешних пользователей</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="e8bec681-d269-41ba-9184-556cbcc27d74"> + <name>Комментарий</name> + <synonym> + <key>ru</key> + <value>Комментарий</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <toolTip> + <key>ru</key> + <value>Произвольная строка</value> + </toolTip> + <multiLine>true</multiLine> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="b8aaef91-f72c-4127-a494-771c13694ca4"> + <name>Подготовлен</name> + <synonym> + <key>ru</key> + <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"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="433a114f-3198-4ef6-bbf8-ce9b54fdb736"> + <name>ИдентификаторПользователяИБ</name> + <synonym> + <key>ru</key> + <value>Идентификатор пользователя ИБ</value> + </synonym> + <type> + <types>UUID</types> + </type> + <toolTip> + <key>ru</key> + <value>Уникальный идентификатор пользователя информационной базы, с которым сопоставлен этот элемент справочника.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="02ac711c-e38e-422e-ac28-ba1b298df9cc"> + <name>ИдентификаторПользователяСервиса</name> + <synonym> + <key>ru</key> + <value>Идентификатор пользователя сервиса</value> + </synonym> + <type> + <types>UUID</types> + </type> + <toolTip> + <key>ru</key> + <value>Уникальный идентификатор пользователя сервиса, с которым сопоставлен этот элемент справочника.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="3e090261-4aa2-4ece-9f77-62df83c890b3"> + <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"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="bbfd9834-12b4-49ca-bdae-5c94efa80482"> <name>УдалитьПароль</name> <synonym> @@ -223,26 +306,6 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="d431d1e2-13dc-495c-9de1-b5ec872eceed"> - <name>УстановитьРолиНепосредственно</name> - <synonym> - <key>ru</key> - <value>Установить роли непосредственно</value> - </synonym> - <comment>Используется, если не встроена подсистема "Управление доступом"</comment> - <type> - <types>Boolean</types> - </type> - <toolTip> - <key>ru</key> - <value>Установить роли непосредственно без использования ролей, заданных в группах внешних пользователей</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> <forms uuid="9dc3a563-11bb-40a7-8431-c1d4367ccbaf"> <name>ФормаЭлемента</name> <synonym> @@ -274,9 +337,6 @@ </synonym> <comment>Внешний пользователь объекта авторизации</comment> <group>FormCommandBarImportant</group> - <commandParameterType> - <types>CatalogRef.ФизическиеЛица</types> - </commandParameterType> <representation>Auto</representation> </commands> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl new file mode 100644 index 000000000..f1939cab7 --- /dev/null +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Обязательный"); + Результат.Добавить("ВысотаЭлементаФормулировкиВопроса"); + Результат.Добавить("Заметки"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl new file mode 100644 index 000000000..6b0f37643 --- /dev/null +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form index 7f23a616f..a2a1f600c 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form @@ -98,18 +98,17 @@ <textSize>Normal</textSize> </extInfo> </items> - <commandBarLocation>None</commandBarLocation> - <autoCommandBar> - <name>СписокКоманднаяПанель</name> - <id>3</id> - <horizontalAlign>Left</horizontalAlign> - <autoFill>true</autoFill> - </autoCommandBar> - <searchStringAddition> - <name>СписокСтрокаПоиска</name> + <items xsi:type="form:FormField"> + <name>Ссылка</name> <id>11</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> <extendedTooltip> - <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> + <name>СсылкаРасширеннаяПодсказка</name> <id>13</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -119,20 +118,32 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СписокСтрокаПоискаКонтекстноеМеню</name> + <name>СсылкаКонтекстноеМеню</name> <id>12</id> <autoFill>true</autoFill> </contextMenu> - <source>Список</source> - <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <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> - </searchStringAddition> - <viewStatusAddition> - <name>СписокСостояниеПросмотра</name> + </items> + <commandBarLocation>None</commandBarLocation> + <autoCommandBar> + <name>СписокКоманднаяПанель</name> + <id>3</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <searchStringAddition> + <name>СписокСтрокаПоиска</name> <id>14</id> <extendedTooltip> - <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> <id>16</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -142,10 +153,33 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СписокСостояниеПросмотраКонтекстноеМеню</name> + <name>СписокСтрокаПоискаКонтекстноеМеню</name> <id>15</id> <autoFill>true</autoFill> </contextMenu> + <source>Список</source> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchStringAddition> + <viewStatusAddition> + <name>СписокСостояниеПросмотра</name> + <id>17</id> + <extendedTooltip> + <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <id>19</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>ViewStatusAddition</type> <source>Список</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> @@ -154,10 +188,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокУправлениеПоиском</name> - <id>17</id> + <id>20</id> <extendedTooltip> <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> - <id>19</id> + <id>22</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -167,7 +201,7 @@ </extendedTooltip> <contextMenu> <name>СписокУправлениеПоискомКонтекстноеМеню</name> - <id>18</id> + <id>21</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -264,6 +298,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 94f6c5c57..91f767caa 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -39,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьПорядокГруппыВсеВнешниеПользователи(Список) @@ -66,3 +67,5 @@ ЭлементПорядка.Использование = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index 923a2b141..000000000 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,28 +0,0 @@ -<?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:use>false</dcscor:use> - <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:Color">web:Gray</dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 8377e4579..ba8275923 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -1742,7 +1742,7 @@ <key>ru</key> <value>Только выбранные роли</value> - 3 + 2 ru Показать только выбранные роли @@ -1768,7 +1768,7 @@ ru Исключить роли - 5 + 3 ru Исключить роли @@ -1794,7 +1794,7 @@ ru Включить роли - 6 + 4 ru Включить роли @@ -1820,7 +1820,7 @@ ru По подсистемам - 2 + 5 ru Группировать список ролей по подсистемам @@ -1846,7 +1846,7 @@ ru Показывать недействительных пользователей - 4 + 6 ru Показывать недействительных пользователей diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index c05c31be2..5e76e1840 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,27 @@ - -

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

    -

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

    -

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

    -

    См. также

    -

     

    \ No newline at end of file + +

    Группа внешних пользователей

    +

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

    +

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

    +

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

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

    Права доступа группы внешних пользователей

    +

    В зависимости от состава программы настраиваются одним из способов:

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

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 094b6270e..d756c5e22 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -169,8 +171,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СоставУчастниковПриИзменении(Элемент) @@ -251,8 +254,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -266,8 +270,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Состав +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСостав &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -304,8 +309,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодобратьВнешнихПользователей(Команда) @@ -356,8 +362,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставВнешнийПользователь.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Состав.Недействителен"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); + +КонецПроцедуры &НаКлиенте Процедура ПредставлениеТипаОбъектовАвторизацииЗавершениеВыбора(ВыбранныйЭлемент, Неопределен) Экспорт @@ -678,3 +706,5 @@ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index ec744cbaf..944323338 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html @@ -1,17 +1,22 @@ - -

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

    -

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

    -

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

    -

    Группы формируются по используемому функционалу прикладного решения:

    + +

    Предназначен для ведения групп внешних пользователей.

    +

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

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

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

    +

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

    +

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

    +

    Группировка внешних пользователей

    +

    Группы внешних пользователей могут формироваться, например, в зависимости от принадлежности к объектам программы:

    • Контрагенты
      • Доверенные партнеры
      • Основные покупатели
      • Основные поставщики -
      • Участники опроса
    • Физические лица

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

    -

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

    -

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

    -

    См. также

    - \ No newline at end of file +
  • Участники опроса
  • Физические лица.
  • Можно создать группы внешних пользователей, которые будут включать участников одного типа, например, респондентов. Так удобнее настраивать права доступа.

    +

    Ввод группы

    +

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl index bda4e2bd5..65054b0ad 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -17,4 +16,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index b3ef38b55..ebd7f3381 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -18,8 +18,7 @@ Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -328,4 +327,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo index db6d60c65..34fd41035 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo @@ -172,7 +172,10 @@ В качестве типа используется пустая ссылка - CatalogRef.ФизическиеЛица + String + + 10 + ru diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl index b0376dad3..de609bdf8 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -129,8 +129,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыДоступа &НаКлиенте Процедура ГруппыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -141,8 +142,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -151,8 +153,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПриВыборе() @@ -173,3 +176,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html new file mode 100644 index 000000000..234f2ecb9 --- /dev/null +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html @@ -0,0 +1,9 @@ + +

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

    +

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

    +

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

    +

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

    +

    Ввод папки групп доступа

    +
    • Нажмите  Создать группу, введите наименование папки.

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html new file mode 100644 index 000000000..a504049e3 --- /dev/null +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html @@ -0,0 +1,11 @@ + +

    Описание свойств папки групп доступа.

    +

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

    +

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

    +

    Ввод папки групп доступа

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index 98b51043c..e5d74cebc 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -52,3 +52,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index b98fd4b69..c182b7929 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -139,6 +139,40 @@ Normal
    + + Ссылка + 37 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -164,32 +198,9 @@ СписокСтрокаПоиска - 37 - - СписокСтрокаПоискаРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 38 - true - - Список - - true - - - - СписокСостояниеПросмотра 40 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 42 Label true @@ -199,10 +210,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 41 true + Список + + true + + + + СписокСостояниеПросмотра + 43 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 44 + true + ViewStatusAddition Список @@ -211,10 +245,10 @@ СписокУправлениеПоиском - 43 + 46 СписокУправлениеПоискомРасширеннаяПодсказка - 45 + 48 Label true true @@ -224,7 +258,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 44 + 47 true SearchControlAddition diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html index f17e84d61..5c116d699 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,6 +1,18 @@ - -

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

    -

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

    -

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

    -

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

    -

     

    \ No newline at end of file + +

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

    +

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

    +

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

    +

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

    +

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

    +

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

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

    Ввод группы доступа

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

    Ввод папки групп доступа

    +

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

    +
    • Нажмите , введите Наименование папки.

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index 84479dda3..c5dbe23b7 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -90,8 +90,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) @@ -171,3 +172,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index 6a53236dd..000000000 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - ВидыДоступаВидДоступа - - - ВидыДоступаИспользование - - - - - Объект.ВидыДоступа.ИспользуетсяВПрограмме - Equal - false - - - - - ЦветТекста - web:Gray - - - false - Видимость - false - - - false - Отображать - false - - - - diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index 899ead2fd..1288efef4 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -2741,7 +2741,7 @@ ru Подобрать - 3 + 1 ru Подобрать участников группы доступа @@ -2764,7 +2764,7 @@ ru Показывать неиспользуемые виды доступа - 1 + 2 ru Показывать неиспользуемые виды доступа diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html index 552c348b6..7860d773e 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -1,8 +1,42 @@ - -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Подробнее см. справка по группам доступа.

    \ No newline at end of file + +

    Описание свойств группы доступа

    +

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

    +

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

    +

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

    +

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

    +

    Ввод группы доступа

    +

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

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

    Участники

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

    Ограничения доступа

    +

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

    +

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

    +

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

    +

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

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

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

        +
      • +

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 7debdea0e..bb7a5096b 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,9 +16,9 @@ СправочникВнешниеПользователиДоступен = ПравоДоступа( "Просмотр", Метаданные.Справочники.ВнешниеПользователи); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи"), "Пользователи"); + СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи")); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи"), "ВнешниеПользователи"); + СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); // Заполнение списка выбора типа пользователей. ЗаполнитьСписокТиповПользователей(); @@ -77,7 +77,32 @@ , КодВозвратаДиалога.Нет); Иначе - ПриОткрытииПродолжение(Отказ); + Если ОтветНаВопросПриОткрытииФормы = "ОбновитьСоставВидовДоступа" Тогда + ОтветНаВопросПриОткрытииФормы = ""; + ОбновитьСоставВидовДоступа(); + ИзменилсяСоставВидовДоступаПриЧтении = Ложь; + + ИначеЕсли НЕ ТолькоПросмотр И ИзменилсяСоставВидовДоступаПриЧтении Тогда + + Отказ = Истина; + ПоказатьВопрос( + Новый ОписаниеОповещения("ПриОткрытииПослеПодтвержденияОбновленияВидовДоступа", ЭтотОбъект), + НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа. + | + |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); + + ИначеЕсли НЕ ТолькоПросмотр + И НЕ ЗначениеЗаполнено(Объект.Ссылка) + И ТипЗнч(ВладелецФормы) = Тип("ТаблицаФормы") + И ВладелецФормы.Родитель.Параметры.Свойство("Профиль") Тогда + + Если ЗначениеЗаполнено(ВладелецФормы.Родитель.Параметры.Профиль) Тогда + Объект.Профиль = ВладелецФормы.Родитель.Параметры.Профиль; + КонецЕсли; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -228,15 +253,16 @@ Для каждого ТекущаяСтрока Из ДеревоПользователейСтроки Цикл НомерСтроки = ДеревоПользователейСтроки.Индекс(ТекущаяСтрока); + Участник = ТекущаяСтрока.Пользователь; // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Пользователь) Тогда + Если НЕ ЗначениеЗаполнено(Участник) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "ПользователиГруппы[%1].Пользователь", - НСтр("ru = 'Пользователь не выбран.'"), + УточнитьСообщение(НСтр("ru = 'Пользователь не выбран.'"), Участник), "ПользователиГруппы", НомерСтроки, - НСтр("ru = 'Пользователь в строке %1 не выбран.'")); + УточнитьСообщение(НСтр("ru = 'Пользователь в строке %1 не выбран.'"), Участник)); Продолжить; КонецЕсли; @@ -247,27 +273,27 @@ Если НайденныеЗначения.Количество() > 1 Тогда Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Пользователь повторяется.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь в строке %1 повторяется.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Пользователь ""%2"" повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь ""%2"" в строке %1 повторяется.'"); ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь повторяется.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 повторяется.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь ""%2"" повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь ""%2"" в строке %1 повторяется.'"); ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей повторяется.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 повторяется.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей ""%2"" повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей ""%2"" в строке %1 повторяется.'"); Иначе - ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей повторяется.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 повторяется.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей ""%2"" повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей ""%2"" в строке %1 повторяется.'"); КонецЕсли; ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "ПользователиГруппы[%1].Пользователь", - ТекстДляОднойОшибки, + УточнитьСообщение(ТекстДляОднойОшибки, Участник), "ПользователиГруппы", НомерСтроки, - ТекстДляНесколькихОшибок); + УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); КонецЕсли; // Проверка наличия только пользователей в предопределенной группе Администраторы. @@ -275,23 +301,23 @@ И ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь недопустим в предопределенной группе доступа Администраторы.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 недопустим в предопределенной группе доступа Администраторы.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь ""%2"" недопустим в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь ""%2"" в строке %1 недопустим в предопределенной группе доступа Администраторы.'"); ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей недопустима в предопределенной группе доступа Администраторы.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей ""%2"" недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей ""%2"" в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); Иначе - ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей недопустима в предопределенной группе доступа Администраторы.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей ""%2"" недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей ""%2"" в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); КонецЕсли; ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "ПользователиГруппы[%1].Пользователь", - ТекстДляОднойОшибки, + УточнитьСообщение(ТекстДляОднойОшибки, Участник), "ПользователиГруппы", НомерСтроки, - ТекстДляНесколькихОшибок); + УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); КонецЕсли; Если Объект.ТипПользователей <> Неопределено Тогда @@ -302,15 +328,15 @@ Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда Если ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Пользователь недопустим для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь в строке %1 недопустим для указанного типа участников.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Пользователь ""%2"" недопустим для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); КонецЕсли; ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда Если ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей недопустима для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 недопустима для указанного типа участников.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей ""%2"" недопустима для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); КонецЕсли; Иначе ОписаниеТипаОбъектаАвторизации = ТипыОбъектовАвторизацииПользователей.Найти( @@ -321,8 +347,8 @@ Если ОписаниеТипаОбъектаАвторизации = Неопределено ИЛИ ТипЗнч(Объект.ТипПользователей) <> ТипЗнч(ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации) Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь недопустим для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 недопустим для указанного типа участников.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь ""%2"" недопустим для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); КонецЕсли; Иначе // Группа внешних пользователей. @@ -332,8 +358,8 @@ ИЛИ ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации <> Неопределено И ТипЗнч(Объект.ТипПользователей) <> ТипЗнч(ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации) Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей недопустима для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 недопустима для указанного типа участников.'"); + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей ""%2"" недопустима для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -341,10 +367,10 @@ Если ЗначениеЗаполнено(ТекстДляОднойОшибки) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "ПользователиГруппы[%1].Пользователь", - ТекстДляОднойОшибки, + УточнитьСообщение(ТекстДляОднойОшибки, Участник), "ПользователиГруппы", НомерСтроки, - ТекстДляНесколькихОшибок); + УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); КонецЕсли; КонецЕсли; @@ -387,8 +413,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПрофильПриИзменении(Элемент) @@ -424,8 +451,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Пользователи +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователи &НаКлиенте Процедура ПользователиПриИзменении(Элемент) @@ -580,7 +608,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПользовательПриИзменении(Элемент) @@ -646,8 +673,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -709,8 +737,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -736,7 +765,6 @@ КонецПроцедуры - &НаКлиенте Процедура ЗначениеДоступаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -777,8 +805,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Подобрать(Команда) @@ -795,8 +824,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Продолжение обработчика события ПриОткрытии &НаКлиенте @@ -812,32 +842,6 @@ КонецПроцедуры -// Продолжение обработчика события ПриОткрытии -&НаКлиенте -Процедура ПриОткрытииПродолжение(Отказ) Экспорт - - Если ОтветНаВопросПриОткрытииФормы = "ОбновитьСоставВидовДоступа" Тогда - ОтветНаВопросПриОткрытииФормы = ""; - ОбновитьСоставВидовДоступа(); - ИзменилсяСоставВидовДоступаПриЧтении = Ложь; - - ИначеЕсли НЕ ТолькоПросмотр И ИзменилсяСоставВидовДоступаПриЧтении Тогда - - Отказ = Истина; - ПоказатьВопрос( - Новый ОписаниеОповещения("ПриОткрытииПослеПодтвержденияОбновленияВидовДоступа", ЭтотОбъект), - НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа. - | - |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Нет); - Иначе - ПриОткрытииЗавершение(); - КонецЕсли; - -КонецПроцедуры - // Продолжение обработчика события ПриОткрытии &НаКлиенте Процедура ПриОткрытииПослеПодтвержденияОбновленияВидовДоступа(Ответ, Неопределен) Экспорт @@ -852,22 +856,6 @@ КонецПроцедуры -// Продолжение обработчика события ПриОткрытии -&НаКлиенте -Процедура ПриОткрытииЗавершение() Экспорт - - Если НЕ ТолькоПросмотр - И НЕ ЗначениеЗаполнено(Объект.Ссылка) - И ТипЗнч(ВладелецФормы) = Тип("ТаблицаФормы") - И ВладелецФормы.Родитель.Параметры.Свойство("Профиль") Тогда - - Если ЗначениеЗаполнено(ВладелецФормы.Родитель.Параметры.Профиль) Тогда - Объект.Профиль = ВладелецФормы.Родитель.Параметры.Профиль; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Продолжение обработчика события ПередЗаписью &НаКлиенте Процедура ПередЗаписьюПродолжение(НовыйПарольПользователяСервиса, ПараметрыЗаписи) Экспорт @@ -891,7 +879,6 @@ КонецПроцедуры - // Продолжение обработчика события ПредставлениеТипаПользователейНачалоВыбора &НаКлиенте Процедура ПредставлениеТипаПользователейНачалоВыбораЗавершение(ВыбранныйЭлемент, Неопределен) Экспорт @@ -967,13 +954,12 @@ Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; - Элементы.Профиль.Видимость = Ложь; + Элементы.Профиль.ТолькоПросмотр = Истина; Элементы.ПредставлениеТипаПользователей.ТолькоПросмотр = Истина; - Элементы.Доступ.Видимость = Ложь; - Элементы.ПользователиИДоступ.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - Элементы.Ответственный.Видимость = Ложь; - Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = Ложь; - Элементы.Описание.Видимость = Ложь; + Элементы.Доступ.ТолькоПросмотр = Истина; + Элементы.Ответственный.ТолькоПросмотр = Истина; + Элементы.ОтветственныйЗаПерсональнуюГруппу.ТолькоПросмотр = Истина; + Элементы.Описание.ТолькоПросмотр = Истина; КонецЕсли; Иначе Элементы.Наименование.ТолькоПросмотр = Истина; @@ -1287,7 +1273,6 @@ КонецПроцедуры - &НаКлиенте Процедура ВыбратьПодобратьПользователей(Подобрать) @@ -1363,7 +1348,6 @@ КонецПроцедуры - &НаСервере Функция ВыбранныеУчастникиГруппыДоступа() @@ -1545,3 +1529,12 @@ ТекущийОбъект.ЗначенияДоступа.Загрузить(РезультатыЗапросов[2].Выгрузить()); КонецПроцедуры + +&НаСервере +Функция УточнитьСообщение(Строка, Значение) + + Возврат СтрЗаменить(Строка, "%2", Значение); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html index 330891784..316713c9c 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html @@ -1,12 +1,17 @@ - -

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

    -

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

    + +

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

    +

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

    +

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

    +

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

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

    -

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

    -

    Особенности использования групп доступа

    -

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

    +

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

    +

    Состав ролей пользователя

    +

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

    +

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

    +

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

    Группа доступа для администрирования

    -

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

    +

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

    +

    Предупреждение

    +

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

    См. также

    - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index a628e8200..99eb92945 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -19,8 +18,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Устанавливает пометку удаления группам доступа, если установлена // пометка удаления у профиля группы доступа. Требуется, например, @@ -212,6 +212,33 @@ КонецФункции +// Только для внутреннего использования. +Процедура ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных) Экспорт + + Если ЭлементДанных.ИмяПредопределенныхДанных <> "Администраторы" Тогда + Возврат; + КонецЕсли; + + ЭлементДанных.Пользователи.Очистить(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администраторы"); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступаПользователи.Пользователь + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | ГруппыДоступаПользователи.Ссылка.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если ЭлементДанных.Пользователи.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда + ЭлементДанных.Пользователи.Добавить().Пользователь = Выборка.Пользователь; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -223,4 +250,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index 90bdc904d..d5e949ce0 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -9,20 +9,11 @@ Перем СтарыеУчастники; // Участники группы доступа до изменения // для использования в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда - Если ЗначениеЗаполнено(ОбменДанными.Отправитель) Тогда - ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(); - КонецЕсли; - Возврат; - КонецЕсли; - - Если ДополнительныеСвойства.Свойство("НезависимоеИзменениеОбъекта") - И ПривилегированныйРежим() Тогда Возврат; КонецЕсли; @@ -125,11 +116,6 @@ Возврат; КонецЕсли; - Если ДополнительныеСвойства.Свойство("НезависимоеИзменениеОбъекта") - И ПривилегированныйРежим() Тогда - Возврат; - КонецЕсли; - Если ЭтоГруппа Тогда Возврат; КонецЕсли; @@ -265,21 +251,6 @@ КонецПроцедуры -Процедура ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы() - - Если Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - - // Состав участников группы доступа Администраторы - // настраивается отдельно в каждой информационной базе. - - ЭтотОбъект.Пользователи.Очистить(); - - Для каждого Строка Из Ссылка.Пользователи Цикл - ЭтотОбъект.Пользователи.Добавить().Пользователь = Строка.Пользователь; - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo index 01a44251e..fb847a642 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo +++ b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo @@ -170,7 +170,6 @@ В качестве типа используется пустая ссылка - CatalogRef.ФизическиеЛица CatalogRef.Пользователи @@ -420,20 +419,6 @@ Use - - ФормаСписка - - ru - Форма списка - - - - ru - - - PersonalComputer - MobileDevice - ФормаЭлемента @@ -454,6 +439,25 @@ ru Форма группы + + + ru + + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + + + ru + + PersonalComputer MobileDevice @@ -463,6 +467,11 @@ ru Форма выбора группы + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl index 60e34f69c..24557291d 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -9,11 +8,11 @@ Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; - Результат.Добавить("РольИсполнителя"); - Результат.Добавить("ОсновнойОбъектАдресации"); - Результат.Добавить("ДополнительныйОбъектАдресации"); + Результат.Добавить("*"); Возврат Результат; КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl index fca2d452a..71c9bc9a1 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl @@ -19,7 +19,7 @@ Наименование = Наименование + ", " + Строка(ДополнительныйОбъектАдресации); КонецЕсли; Иначе - Наименование = "<Без ролевой адресации>"; + Наименование = НСтр("ru = 'Без ролевой адресации'"); КонецЕсли; // Проверка дубля. @@ -40,10 +40,10 @@ Если НЕ Запрос.Выполнить().Пустой() Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уже есть группа исполнителей задач для которой - |Роль исполнителя = ""%1"" - |Основной объект адресации = ""%2"" - |Дополнительный объект адресации = ""%3""'"), + НСтр("ru = 'Уже есть группа исполнителей задач, для которой заданы + |роль исполнителя ""%1"", + |дсновной объект адресации ""%2"" и + |дополнительный объект адресации ""%3""'"), Строка(РольИсполнителя), Строка(ОсновнойОбъектАдресации), Строка(ДополнительныйОбъектАдресации))); diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form index 7c0cc9400..e6486e4fa 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form @@ -101,18 +101,17 @@ Normal
    - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 11 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 13 Label true @@ -122,20 +121,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 12 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра +
    + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 14 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 16 Label true @@ -145,10 +156,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 15 true + Список + + true + + + + СписокСостояниеПросмотра + 17 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 18 + true + ViewStatusAddition Список @@ -157,10 +191,10 @@ СписокУправлениеПоиском - 17 + 20 СписокУправлениеПоискомРасширеннаяПодсказка - 19 + 22 Label true true @@ -170,7 +204,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 18 + 21 true SearchControlAddition @@ -267,6 +301,9 @@ true + + Список.Ref +
    true
    ВЫБРАТЬ diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index a836e32ee..f4ae4406f 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -39,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьПорядокГруппыВсеПользователи(Список) @@ -66,3 +67,5 @@ ЭлементПорядка.Использование = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index 3ec264f2a..000000000 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - Пользователь - - - - - Объект.Состав.Недействителен - Equal - true - - - - - ЦветТекста - web:Gray - - - - diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index f8a5a9c94..0c2d81fa0 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,6 +1,22 @@ - -

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

    -

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

    -

    См. также

    - \ No newline at end of file + +

    Группа пользователей

    +

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

    +

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

    +

    Ввод группы пользователей

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

    Права доступа группы пользователей

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

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl index 5989692ef..8eb06ae1b 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -31,8 +33,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -54,8 +57,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Состав +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСостав &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -85,8 +89,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодобратьПользователей(Команда) @@ -109,8 +114,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Пользователь.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Состав.Недействителен"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); + +КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбораПользователя(ВыбранноеЗначение) @@ -192,3 +219,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html index 5dedb0817..1dcb2b2dc 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html @@ -1,8 +1,16 @@ - -

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

    -

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

    -

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

    -

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

    + +

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

    +

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

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

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

    +

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

    +

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

    +

    Группировка пользователей

    +

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

    • Предприятие
      • @@ -40,8 +48,7 @@
        Руководители производства
    • Руководители предприятия
    • -
      Группа общей инвентаризации

     

    -

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

    +
    Группа общей инвентаризации

    Ввод группы пользователей

    +

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

    См. также

    -

     

    \ No newline at end of file +

     

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index bbb5c6f0b..ba76b00f2 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,6 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. @@ -11,8 +10,7 @@ Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -146,4 +144,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index 96c638e9a..99559068f 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +20,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВсеПользователи +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВсеПользователи &НаКлиенте Процедура ВсеПользователиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -41,8 +42,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиКороткогоСписка +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиКороткогоСписка &НаКлиенте Процедура ПользователиКороткогоСпискаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -62,8 +64,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УбратьДоступККомандеУВсехПользователей(Команда) @@ -130,8 +133,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьТаблицуПользователейСКороткимСписком() @@ -169,3 +173,5 @@ Приемник.Сортировать("Пользователь Возр"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl index 499d6f0ad..44b3a6981 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -41,8 +41,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -59,3 +60,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index 4ec0d27d1..000000000 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Список - - - - - Список.Публикация - Equal - Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - false - Шрифт - - - - - - - - Список - - - - - Список.Публикация - Equal - Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена - - - - - ЦветТекста - style:НедоступныеДанныеЦвет - - - false - Шрифт - - - - - diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index d154bbb06..ac7b56d8d 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -141,7 +141,7 @@ КнопкиДобавления 26 - ФормаСоздать + Создать 27 true true @@ -149,7 +149,7 @@ true - ФормаСоздатьExtendedTooltip + СоздатьРасширеннаяПодсказка 37 Label true @@ -167,7 +167,7 @@ Auto - ФормаСоздатьГруппу + СоздатьГруппу 28 true true @@ -175,7 +175,7 @@ true - ФормаСоздатьГруппуExtendedTooltip + СоздатьГруппуРасширеннаяПодсказка 38 Label true @@ -193,15 +193,13 @@ Auto - ФормаСкопировать + Скопировать 29 true true - - true - + - ФормаСкопироватьExtendedTooltip + СкопироватьРасширеннаяПодсказка 39 Label true @@ -273,6 +271,85 @@ Form
    + + ЗагрузитьИзФайла + 56 + true + true + + true + + + ЗагрузитьИзФайлаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.ЗагрузитьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьВФайл + 58 + true + true + + true + + + ВыгрузитьВФайлРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Command.ВыгрузитьВФайл + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьВыделенные + 62 + true + true + + true + + + ИзменитьВыделенныеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Справка 31 @@ -556,6 +633,40 @@ true + + Ссылка + 49 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 50 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокКоманднаяПанель 3 @@ -563,10 +674,10 @@ СписокСтрокаПоиска - 51 + 66 СписокСтрокаПоискаРасширеннаяПодсказка - 53 + 68 Label true true @@ -576,7 +687,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 52 + 67 true Список @@ -586,10 +697,10 @@ СписокСостояниеПросмотра - 54 + 69 СписокСостояниеПросмотраРасширеннаяПодсказка - 56 + 71 Label true true @@ -599,7 +710,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 55 + 70 true ViewStatusAddition @@ -610,10 +721,10 @@ СписокУправлениеПоиском - 57 + 72 СписокУправлениеПоискомРасширеннаяПодсказка - 59 + 74 Label true true @@ -623,7 +734,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 58 + 73 true SearchControlAddition @@ -645,6 +756,84 @@ СписокКонтекстноеМеню 2 + + ЗагрузитьИзФайлаСписок + 54 + true + true + + true + + + ЗагрузитьИзФайлаСписокРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.ЗагрузитьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьВФайлСписок + 52 + true + true + + true + + + ВыгрузитьВФайлСписокРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.ВыгрузитьВФайл + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьВыделенныеСписок + 60 + true + true + + true + + + ИзменитьВыделенныеСписокРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + true Tree @@ -701,6 +890,7 @@ OnCreateAtServer ПриСозданииНаСервере + 100 DontBlock Use true @@ -725,9 +915,21 @@ true + + Список.IsFolder + + + Список.Ref + Список.ИмяОбъекта + + Список.ИмяФайла + + + Список.ЭтоОтчет +
    true
    ВЫБРАТЬ @@ -738,7 +940,14 @@ Таблица.Ответственный, Таблица.Публикация, Таблица.Вид, - Таблица.ИмяОбъекта + Таблица.ИмяОбъекта, + Таблица.ЭтоГруппа, + ВЫБОР + КОГДА Таблица.Вид В (&ВидыДопОтчетов) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК ЭтоОтчет, + Таблица.ИмяФайла ИЗ Справочник.ДополнительныеОтчетыИОбработки КАК Таблица ГДЕ @@ -806,6 +1015,76 @@ ВидОтбор + + ВыгрузитьВФайл + + <key>ru</key> + <value>Выгрузить в файл...</value> + + 1 + + ru + Выгрузить обработку (отчет) в файл на компьютер + + + true + + + + ВыгрузитьВФайл + + + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме + Picture + Auto + Auto + + + ЗагрузитьИзФайла + + <key>ru</key> + <value>Загрузить из файла...</value> + + 2 + + ru + Загрузить обработку (отчет) из файла на компьютере + + + true + + + + ЗагрузитьФайлОбработкиОтчета + + + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме + Picture + Auto + Auto + + + ИзменитьВыделенные + + <key>ru</key> + <value>Изменить выделенные...</value> + + 3 + + ru + Изменить выделенные объекты + + + true + + + + ИзменитьВыделенные + + + Auto + Auto + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index cd98b5d8a..6e8ea29f4 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -70,6 +72,11 @@ Элементы.КнопкиДобавления.Видимость = ДополнительныеОтчетыИОбработки.ПравоДобавления(); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + Элементы.ИзменитьВыделенные.Видимость = Ложь; + Элементы.ИзменитьВыделенныеСписок.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -80,8 +87,9 @@ Список.Параметры.УстановитьЗначениеПараметра("ВидОтбор", ВидОтбор); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПубликацияОтборПриИзменении(Элемент) @@ -99,3 +107,104 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыгрузитьВФайл(Команда) + ДанныеСтроки = Элементы.Список.ТекущиеДанные; + Если ДанныеСтроки = Неопределено Или Не ВыбранЭлемент(ДанныеСтроки) Тогда + Возврат; + КонецЕсли; + + ПараметрыВыгрузки = Новый Структура; + ПараметрыВыгрузки.Вставить("Ссылка", ДанныеСтроки.Ссылка); + ПараметрыВыгрузки.Вставить("ЭтоОтчет", ДанныеСтроки.ЭтоОтчет); + ПараметрыВыгрузки.Вставить("ИмяФайла", ДанныеСтроки.ИмяФайла); + ДополнительныеОтчетыИОбработкиКлиент.ВыгрузитьВФайл(ПараметрыВыгрузки); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьФайлОбработкиОтчета(Команда) + ДанныеСтроки = Элементы.Список.ТекущиеДанные; + Если ДанныеСтроки = Неопределено Или Не ВыбранЭлемент(ДанныеСтроки) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", ДанныеСтроки.Ссылка); + ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаОбъекта", ПараметрыФормы); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьВыделенные(Команда) + МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); + МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция ВыбранЭлемент(ДанныеСтроки) + Если ТипЗнч(ДанныеСтроки.Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для указанного объекта. + |Выберите дополнительный отчет или обработку.'")); + Возврат Ложь; + КонецЕсли; + Если ДанныеСтроки.ЭтоГруппа Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для группы. + |Выберите дополнительный отчет или обработку.'")); + Возврат Ложь; + КонецЕсли; + Возврат Истина; +КонецФункции + +&НаКлиенте +Процедура ЗагрузитьФайлОбработкиОтчетаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = "ФайлЗагружен" Тогда + ПоказатьЗначение(,Элементы.Список.ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Публикация"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Публикация"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index 2ece65cde..000000000 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - ОбъектКомандыРегламентноеЗаданиеИспользование - - - ОбъектКомандыРегламентноеЗаданиеПредставление - - - - - Объект.Команды.РегламентноеЗаданиеРазрешено - Equal - false - - - - - false - Доступность - false - - - ТолькоПросмотр - true - - - - diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 4fbb4d601..fa8c1b5eb 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -324,26 +324,620 @@ - СтраницыВариантыКоманды + СтраницыВариантыКомандыРазрешения 80 СтраницаРазрешения - 169 - - Разрешения - 170 + 259 + + ГруппаБезопасныйРежимСРазрешениями + 287 + + ДекорацияБезопасныйРежимСРазрешениямиПиктограмма + 267 + + <key>ru</key> + <value>Декорация безопасный режим с разрешениями пиктограмма</value> + + true + true + + true + + + ДекорацияБезопасныйРежимСРазрешениямиПиктограммаРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + ДекорацияБезопасныйРежимСРазрешениямиПиктограммаКонтекстноеМеню + 268 + true + + 2 + true + 1 + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + + + + СтраницыБезопасныйРежимСРазрешениями + 263 + + СтраницаПерсональныйПрофильБезопасности + 289 + + ДекорацияПерсональныйПрофильБезопасностиНадпись + 295 + + <key>ru</key> + <value>Дополнительный отчет или обработка будет подключаться к программе с использованием "персонального" +профиля безопасности %1, в котором будут разрешены только следующие операции:</value> + + true + true + + true + + + ДекорацияПерсональныйПрофильБезопасностиНадписьРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + + ДекорацияПерсональныйПрофильБезопасностиНадписьКонтекстноеМеню + 296 + true + + Label + true + true + true + true + + Style.FieldSelectionBackColor + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница персональный профиль безопасности</value> + + + ru + Страница персональный профиль безопасности + + + СтраницаПерсональныйПрофильБезопасностиРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаНебезопасныйРежимСРазрешениями + 293 + + ДекорацияНебезопасныйРежимНадпись + 298 + + <key>ru</key> + <value>Дополнительный отчет или обработка будет подключаться к программе без установки безопасного режима, +т.к. для корректной работы дополнительного отчета или обработки требуется выполнение следующих операций +с внешними ресурсами:</value> + + true + true + + true + + + ДекорацияНебезопасныйРежимНадписьРасширеннаяПодсказка + 300 + Label + true + true + + Left + + + + ДекорацияНебезопасныйРежимНадписьКонтекстноеМеню + 299 + true + + Label + true + true + true + true + + Style.SpecialTextColor + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница небезопасный режим с разрешениями</value> + + + ru + Страница небезопасный режим с разрешениями + + + СтраницаНебезопасныйРежимСРазрешениямиРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаБезопасныйРежимСРазрешениями + 291 + + ДекорацияБезопасныйРежимСРазрешениямиНадпись + 301 + + <key>ru</key> + <value>Дополнительный отчет или обработка будет подключаться к программе в безопасном режиме с предоставлением +дополнительных разрешений:</value> + + true + true + + true + + + ДекорацияБезопасныйРежимСРазрешениямиНадписьРасширеннаяПодсказка + 303 + Label + true + true + + Left + + + + ДекорацияБезопасныйРежимСРазрешениямиНадписьКонтекстноеМеню + 302 + true + + Label + true + true + true + true + + Style.FieldSelectionBackColor + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница безопасный режим с разрешениями</value> + + + ru + Страница безопасный режим с разрешениями + + + СтраницаБезопасныйРежимСРазрешениямиРасширеннаяПодсказка + 292 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы безопасный режим с разрешениями</value> + + + ru + Страницы безопасный режим с разрешениями + + + СтраницыБезопасныйРежимСРазрешениямиРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + Pages + + Auto + + true true true - - ПредставлениеРазрешений - - None + + <key>ru</key> + <value>Группа безопасный режим с разрешениями</value> + + + ru + Группа безопасный режим с разрешениями + - РазрешенияExtendedTooltip - 188 + ГруппаБезопасныйРежимСРазрешениямиРасширеннаяПодсказка + 288 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаСтраницыРежимыСовместимостиРазрешений + 261 + + СтраницаРазрешенияВерсия_2_1_3 + 169 + + Разрешения + 170 + true + true + + true + + + ПредставлениеРазрешений_2_1_3 + + None + + РазрешенияExtendedTooltip + 188 + Label + true + true + + Left + + + + РазрешенияКонтекстноеМеню + 171 + true + + HTMLDocumentField + Enter + true + Left + true + + + OnClick + РазрешенияПриНажатии + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Разрешения (режим совместимости разрешений "Версия 2.1.3")</value> + + + ru + Страница разрешения версия 2 1 3 + + + СтраницаРазрешенияВерсия_2_1_3РасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаРазрешенияВерсия_2_2_2 + 250 + + ПредставлениеРазрешений_2_2_2 + 252 + true + true + + true + + + ПредставлениеРазрешений_2_2_2 + + None + + ПредставлениеРазрешений_2_2_2РасширеннаяПодсказка + 254 + Label + true + true + + Left + + + + ПредставлениеРазрешений_2_2_2КонтекстноеМеню + 253 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 80 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Разрешения (режим совместимости разрешений "Версия 2.2.3")</value> + + + ru + Страница разрешения версия 2 2 2 + + + СтраницаРазрешенияВерсия_2_2_2РасширеннаяПодсказка + 251 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы режимы совместимости разрешений</value> + + + ru + Группа страницы режимы совместимости разрешений + + + ГруппаСтраницыРежимыСовместимостиРазрешенийРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаВключениеПрофилейБезопасности + 304 + + ДекорацияВключениеПрофилейБезопасностиНадпись + 306 + + <key>ru</key> + <value>Для того, чтобы "изолировать" возможность обращения к внешних ресурсам из кода дополнительного отчета +или обработки только вышеперчисленными операциями, требуется<link int://sp-on> включить использование профилей</> <link int://sp-on>безопасности</>. +При этом для дополинтельного отчета или обработки будет создан "персональный" профиль безопасности, содержащий +разрешения только на выполнение явно одобренных операций и подключение дополнительного отчета или обработке к +программе без установки безопасного режима больше не будет требоваться.</value> + + true + true + + true + + + ДекорацияВключениеПрофилейБезопасностиНадписьРасширеннаяПодсказка + 308 + Label + true + true + + Left + + + + ДекорацияВключениеПрофилейБезопасностиНадписьКонтекстноеМеню + 307 + true + + true + Label + true + true + true + true + + + URLProcessing + ДекорацияВключениеПрофилейБезопасностиНадписьОбработкаНавигационнойСсылки + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа включение профилей безопасности</value> + + + ru + Группа включение профилей безопасности + + + ГруппаВключениеПрофилейБезопасностиРасширеннаяПодсказка + 305 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДекормацияРазрешенияСмТакже + 311 + + <key>ru</key> + <value>Подробно о режимах подключения дополнительных отчетов и обработок см. информацию в справке к форме.</value> + + true + true + + true + + + ДекормацияРазрешенияСмТакжеРасширеннаяПодсказка + 313 Label true true @@ -352,26 +946,15 @@ - РазрешенияКонтекстноеМеню - 171 + ДекормацияРазрешенияСмТакжеКонтекстноеМеню + 312 true - HTMLDocumentField - Enter - true - Left - true - - - OnClick - РазрешенияПриНажатии - - 50 - true - 10 - true - true - true + Label + true + true + + Left true @@ -388,8 +971,8 @@ Страница разрешения - СтраницаРазрешенияExtendedTooltip - 187 + СтраницаРазрешенияРасширеннаяПодсказка + 260 Label true true @@ -455,16 +1038,16 @@ - Записать - 87 + КомандаЗаписатьДляВариантовОтчетов + 248 true true true - ЗаписатьExtendedTooltip - 193 + КомандаЗаписатьДляВариантовОтчетовРасширеннаяПодсказка + 249 Label true true @@ -473,7 +1056,7 @@ UsualButton - Form.StandardCommand.Write + Form.Command.КомандаЗаписать Normal PictureAndText true @@ -802,10 +1385,10 @@ ВариантыДополнительногоОтчетаСтрокаПоиска - 246 + 321 ВариантыДополнительногоОтчетаСтрокаПоискаРасширеннаяПодсказка - 248 + 323 Label true true @@ -815,7 +1398,7 @@ ВариантыДополнительногоОтчетаСтрокаПоискаКонтекстноеМеню - 247 + 322 true ВариантыДополнительногоОтчета @@ -825,10 +1408,10 @@ ВариантыДополнительногоОтчетаСостояниеПросмотра - 249 + 324 ВариантыДополнительногоОтчетаСостояниеПросмотраРасширеннаяПодсказка - 251 + 326 Label true true @@ -838,7 +1421,7 @@ ВариантыДополнительногоОтчетаСостояниеПросмотраКонтекстноеМеню - 250 + 325 true ViewStatusAddition @@ -849,10 +1432,10 @@ ВариантыДополнительногоОтчетаУправлениеПоиском - 252 + 327 ВариантыДополнительногоОтчетаУправлениеПоискомРасширеннаяПодсказка - 254 + 329 Label true true @@ -862,7 +1445,7 @@ ВариантыДополнительногоОтчетаУправлениеПоискомКонтекстноеМеню - 253 + 328 true SearchControlAddition @@ -1244,6 +1827,10 @@ Объект.Команды.БыстрыйДоступПредставление + + ru + Пользователи, которым выведена команда. + ОбъектКомандыБыстрыйДоступПредставлениеExtendedTooltip 215 @@ -1296,6 +1883,10 @@ Объект.Команды.РегламентноеЗаданиеИспользование None + + ru + Выполнять команду по расписанию + OnChange ОбъектКомандыРегламентноеЗаданиеИспользованиеПриИзменении @@ -1336,6 +1927,10 @@ Объект.Команды.РегламентноеЗаданиеПредставление + + ru + Расписание выполнения команды. + ОбъектКомандыРегламентноеЗаданиеПредставлениеExtendedTooltip 217 @@ -1393,10 +1988,10 @@ ОбъектКомандыСтрокаПоиска - 265 + 340 ОбъектКомандыСтрокаПоискаРасширеннаяПодсказка - 267 + 342 Label true true @@ -1406,7 +2001,7 @@ ОбъектКомандыСтрокаПоискаКонтекстноеМеню - 266 + 341 true ОбъектКоманды @@ -1416,10 +2011,10 @@ ОбъектКомандыСостояниеПросмотра - 268 + 343 ОбъектКомандыСостояниеПросмотраРасширеннаяПодсказка - 270 + 345 Label true true @@ -1429,7 +2024,7 @@ ОбъектКомандыСостояниеПросмотраКонтекстноеМеню - 269 + 344 true ViewStatusAddition @@ -1440,10 +2035,10 @@ ОбъектКомандыУправлениеПоиском - 271 + 346 ОбъектКомандыУправлениеПоискомРасширеннаяПодсказка - 273 + 348 Label true true @@ -1453,7 +2048,7 @@ ОбъектКомандыУправлениеПоискомКонтекстноеМеню - 272 + 347 true SearchControlAddition @@ -1588,15 +2183,15 @@ <key>ru</key> - <value>Варианты, Команды</value> + <value>Варианты, Команды, Разрешения</value> ru - Страницы варианты команды + Страницы варианты команды разрешения true - СтраницыВариантыКомандыExtendedTooltip + СтраницыВариантыКомандыРазрешенияРасширеннаяПодсказка 186 Label true @@ -1613,21 +2208,25 @@ ГруппаДополнительнаяИнформация - 33 + 309 - ГруппаБезТекста - 40 + ГруппаБезопасныйРежимГлобальный + 273 - ПустаяДекорация - 41 + ДекорацияБезопасныйРежимГлобальныйПиктограмма + 275 + + <key>ru</key> + <value>Декорация безопасный режим ложь пиктограмма</value> + true true true - ПустаяДекорацияExtendedTooltip - 220 + ДекорацияБезопасныйРежимГлобальныйПиктограммаРасширеннаяПодсказка + 277 Label true true @@ -1636,16 +2235,194 @@ - ПустаяДекорацияКонтекстноеМеню - 42 + ДекорацияБезопасныйРежимГлобальныйПиктограммаКонтекстноеМеню + 276 true - Label + 2 true + 2 true - true - - Left + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + + + + СтраницыБезопасныйРежимГлобальный + 278 + + СтраницаБезопасныйРежимЛожь + 280 + + ДекорацияБезопасныйРежимЛожьНадпись + 270 + + <key>ru</key> + <value>Дополнительный отчет или обработка будет подключаться к программе без установки безопасного режима! +Подробно о режимах подключения дополнительных отчетов и обработок к программе см. информацию в справке к форме.</value> + + true + true + + true + + + ДекорацияБезопасныйРежимЛожьНадписьРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + + ДекорацияБезопасныйРежимЛожьНадписьКонтекстноеМеню + 271 + true + + Label + true + true + true + + Style.SpecialTextColor + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница безопасный режим ложь</value> + + + ru + Страница безопасный режим ложь + + + СтраницаБезопасныйРежимЛожьРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаБезопасныйРежимИстина + 282 + + ДекорацияБезопасныйРежимИстинаНадпись + 284 + + <key>ru</key> + <value>Дополнительный отчет или обработка будет подключаться к программе с установкой безопасного режима. +Подробно о режимах подключения дополнительных отчетов и обработок см. информацию в справке к форме.</value> + + true + true + + true + + + ДекорацияБезопасныйРежимИстинаНадписьРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + ДекорацияБезопасныйРежимИстинаНадписьКонтекстноеМеню + 285 + true + + Label + true + true + true + + Style.FieldSelectionBackColor + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница безопасный режим истина</value> + + + ru + Страница безопасный режим истина + + + СтраницаБезопасныйРежимИстинаРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы безопасный режим глобальный</value> + + + ru + Страницы безопасный режим глобальный + + + СтраницыБезопасныйРежимГлобальныйРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + Pages + + Auto true @@ -1655,15 +2432,15 @@ <key>ru</key> - <value>Группа без текста</value> + <value>Группа безопасный режим глобальный</value> ru - Группа без текста + Группа безопасный режим глобальный - ГруппаБезТекстаExtendedTooltip - 219 + ГруппаБезопасныйРежимГлобальныйРасширеннаяПодсказка + 274 Label true true @@ -1671,374 +2448,13 @@ Left - Page - - Vertical - auto - - - - ГруппаПредупреждениеОбработки - 34 - - ПредупреждениеОбработкиОНебезопасномРежиме - 36 - - <key>ru</key> - <value>Внимание! Обработка требует разрешить использование в небезопасном режиме. -Более подробно о небезопасном режиме см. информацию в справке к форме.</value> - - true - true - - true - - - ПредупреждениеОбработкиОНебезопасномРежимеExtendedTooltip - 222 - Label - true - true - - Left - - - - ПредупреждениеОбработкиОНебезопасномРежимеКонтекстноеМеню - 37 - true - - Label - true - true - true - - 255 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа предупреждение обработки</value> - - - ru - Группа предупреждение обработки - - - ГруппаПредупреждениеОбработкиExtendedTooltip - 221 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ГруппаПредупреждениеОтчета - 105 - - ПредупреждениеОтчетаОНебезопасномРежиме - 106 - - <key>ru</key> - <value>Внимание! Отчет требует разрешить использование в небезопасном режиме. -Более подробно о небезопасном режиме см. информацию в справке к форме.</value> - - true - true - - true - - - ПредупреждениеОтчетаОНебезопасномРежимеExtendedTooltip - 224 - Label - true - true - - Left - - - - ПредупреждениеОтчетаОНебезопасномРежимеКонтекстноеМеню - 107 - true - - Label - true - true - true - - 255 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа предупреждение</value> - - - ru - Группа предупреждение - - - ГруппаПредупреждениеОтчетаExtendedTooltip - 223 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ГруппаИнформацияОбработки - 35 - - ИнформацияОбработкиОБезопасномРежиме - 38 - - <key>ru</key> - <value>Обработка используется в безопасном режиме</value> - - true - true - - true - - - ИнформацияОбработкиОБезопасномРежимеExtendedTooltip - 226 - Label - true - true - - Left - - - - ИнформацияОбработкиОБезопасномРежимеКонтекстноеМеню - 39 - true - - Label - true - true - true - - 64 - 125 - 30 - - - Right - - - - ИнформацияОбработкиОРазрешениях - 172 - - <key>ru</key> - <value>(с предоставлением дополнительных разрешений)</value> - - true - true - - true - - - ИнформацияОбработкиОРазрешенияхExtendedTooltip - 227 - Label - true - true - - Left - - - - ИнформацияОбработкиОРазрешенияхКонтекстноеМеню - 173 - true - - Label - true - true - true - - 64 - 125 - 30 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа информация обработки</value> - - - ru - Группа информация обработки - - - ГруппаИнформацияОбработкиExtendedTooltip - 225 - Label - true - true - - Left - - - Page - - auto - - - - ГруппаИнформацияОтчета - 108 - - ИнформацияОтчетаОБезопасномРежиме - 109 - - <key>ru</key> - <value>Отчет используется в безопасном режиме</value> - - true - true - - true - - - ИнформацияОтчетаОБезопасномРежимеExtendedTooltip - 229 - Label - true - true - - Left - - - - ИнформацияОтчетаОБезопасномРежимеКонтекстноеМеню - 110 - true - - Label - true - true - true - - 64 - 125 - 30 - - - Right - - - - ИнформацияОтчетаОРазрешениях - 174 - - <key>ru</key> - <value>(с предоставлением дополнительных разрешений)</value> - - true - true - - true - - - ИнформацияОтчетаОРазрешенияхExtendedTooltip - 230 - Label - true - true - - Left - - - - ИнформацияОтчетаОРазрешенияхКонтекстноеМеню - 175 - true - - Label - true - true - true - - 64 - 125 - 30 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа информация отчета</value> - - - ru - Группа информация отчета - - - ГруппаИнформацияОтчетаExtendedTooltip - 228 - Label - true - true - - Left - - - Page - - auto + UsualGroup + + Auto + true + true + Auto + Auto true @@ -2054,10 +2470,9 @@ ru Группа дополнительная информация - true - ГруппаДополнительнаяИнформацияExtendedTooltip - 218 + ГруппаДополнительнаяИнформацияРасширеннаяПодсказка + 310 Label true true @@ -2065,8 +2480,13 @@ Left - Pages - + UsualGroup + + Vertical + Auto + true + true + Auto Auto @@ -2496,7 +2916,59 @@ ФормаКоманднаяПанель -1 - ЗагрузитьФайлОбработкиОтчета + КомандаЗаписатьИЗакрыть + 240 + true + true + + true + + + КомандаЗаписатьИЗакрытьРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + Form.Command.КомандаЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + КомандаЗаписать + 242 + true + true + + true + + + КомандаЗаписатьРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Command.КомандаЗаписать + Normal + Auto + true + true + UserCmds + Auto + + + ЗагрузитьИзФайла 10 true true @@ -2505,7 +2977,7 @@ false - ЗагрузитьФайлОбработкиОтчетаExtendedTooltip + ЗагрузитьИзФайлаРасширеннаяПодсказка 176 Label true @@ -2514,7 +2986,7 @@ Left - Form.Command.ЗагрузитьФайлОбработкиОтчета + Form.Command.ЗагрузитьИзФайла Normal PictureAndText true @@ -2523,7 +2995,7 @@ Auto - СохранитьФайлОбработкиОтчета + ВыгрузитьВФайл 11 true true @@ -2532,7 +3004,7 @@ false - СохранитьФайлОбработкиОтчетаExtendedTooltip + ВыгрузитьВФайлРасширеннаяПодсказка 177 Label true @@ -2541,7 +3013,7 @@ Left - Form.Command.ВыгрузитьФайлОбработкиОтчета + Form.Command.ВыгрузитьВФайл Normal PictureAndText true @@ -2549,8 +3021,113 @@ UserCmds Auto + + КомандыФормы + 255 + + ФормаЗаписатьИЗакрыть + 244 + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 246 + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + ru + Команды формы + + + КомандыФормыРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 257 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true ChoiceProcessing @@ -2698,7 +3275,9 @@ true - + + true + ЭтоНовый @@ -2997,10 +3576,10 @@ - ПредставлениеРазрешений + ПредставлениеРазрешений_2_1_3 <key>ru</key> - <value>Представление разрешений</value> + <value>Представление разрешений 2 1 3</value> 12 @@ -3033,12 +3612,12 @@ - ДиалогЗагрузкиНовогоПройден + ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии <key>ru</key> - <value>Диалог загрузки нового пройден</value> + <value>Показать диалог загрузки из файла при открытии</value> - 14 + 15 Boolean @@ -3049,8 +3628,26 @@ true + + ПредставлениеРазрешений_2_2_2 + + <key>ru</key> + <value>Представление разрешений 2 2 2</value> + + 14 + + SpreadsheetDocument + + + true + + + true + + + - ЗагрузитьФайлОбработкиОтчета + ЗагрузитьИзФайла <key>ru</key> <value>Загрузить из файла...</value> @@ -3065,7 +3662,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ЗагрузитьФайлОбработкиОтчета</name> + <name>ЗагрузитьИзФайла</name> </handler> </action> <representation>Picture</representation> @@ -3073,7 +3670,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ВыгрузитьФайлОбработкиОтчета</name> + <name>ВыгрузитьВФайл</name> <title> <key>ru</key> <value>Выгрузить в файл...</value> @@ -3088,7 +3685,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ВыгрузитьФайлОбработкиОтчета</name> + <name>ВыгрузитьВФайл</name> </handler> </action> <representation>Picture</representation> @@ -3101,7 +3698,7 @@ <key>ru</key> <value>Настроить быстрый доступ...</value> - 6 + 3 ru @@ -3145,7 +3742,7 @@ ru Открыть... - 7 + 5 ru Открыть вариант дополнительного отчета @@ -3171,7 +3768,7 @@ ru Разместить в разделах... - 8 + 6 ru Разместить в разделах @@ -3187,6 +3784,59 @@ Auto Auto + + КомандаЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 7 + + ru + Записать объект и закрыть форму + + + true + + + StdPicture.WriteAndClose + + + + КомандаЗаписатьИЗакрыть + + + Text + Auto + Auto + + + КомандаЗаписать + + <key>ru</key> + <value>Записать</value> + + 8 + + ru + Записать объект + + + true + + Ctrl+S + + StdPicture.Write + + + + КомандаЗаписать + + + Picture + Auto + Auto + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 07af07be4..6351df1dd 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -1,14 +1,41 @@ - -

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

    -

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

    -

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

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

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

    + +

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

    +

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

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

    Какие основные сведения необходимо заполнить

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

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

      +
      • +
        используется - обработка доступна для использования;
      • -
        режим отладки — обработка доступна для использования только пользователю с ролью "Добавление и изменение дополнительных обработок" или ролью "Полные права".

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

      -

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

      -

      Подробнее о безопасном режиме работы см. документацию по платформе 1С:Предприятие.

      \ No newline at end of file +
      +
      режим отладки - обработка доступна для использования только пользователю с ролью "Добавление и изменение дополнительных обработок" или ролью "Полные права" (в списке отображается красным цветом);
      +
    • +
      отключена - обработка недоступна для использования, в списке становится неактивной. Такая возможность удобна, если нужно прекратить использование обработки на время, но не удалять ее, в этом случае все настройки сохраняются и при переводе в другой режим обработка начинает выполняться как раньше.
    +
  • +
    Группа - включите дополнительную обработку или отчет в одну из групп в списке. Группы помогают упорядочить дополнительные отчеты и обработки.
    +
  • +
    Ответственный - выберите пользователя, который будет отслеживать состояние дополнительного отчета или обработки, обновлять и т.п. По умолчанию "Администратор".
    +
  • +
    Комментарий - введите подробное описание.
  • Какие действия возможны при регистрации дополнительных отчетов и обработок

    +

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

    +

    Безопасный режим работы

    +

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

    +

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

    +

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

    +

    Подробнее о безопасном режиме и профилях безопасности см. документацию по платформе 1С:Предприятие.

    +

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

    +

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

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

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

    +

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

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

    Для каждой команды можно указать:

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

    См. также:

    +

    Внешние отчеты и обработки

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 49eb20bf2..28df447f2 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1,12 +1,11 @@ &НаКлиенте Перем КлиентскийКэш; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -30,20 +29,25 @@ Элементы.ДополнительнаяИнформация.Видимость = ОтображениеРасширеннойИнформации; // Ограничение возможности загрузки обработки из файла / сохранения в файл - Элементы.ЗагрузитьФайлОбработкиОтчета.Видимость = + Элементы.ЗагрузитьИзФайла.Видимость = ДополнительныеОтчетыИОбработки.ВозможнаЗагрузкаОбработкиИзФайла(Объект.Ссылка); - Элементы.СохранитьФайлОбработкиОтчета.Видимость = + Элементы.ВыгрузитьВФайл.Видимость = ДополнительныеОтчетыИОбработки.ВозможнаВыгрузкаОбработкиВФайл(Объект.Ссылка); - + ВидДополнительнаяОбработка = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка; ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет; - РегистрацияОбработки = Ложь; + Параметры.Свойство("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии); Если ЭтоНовый Тогда Объект.ИспользоватьДляФормыОбъекта = Истина; Объект.ИспользоватьДляФормыСписка = Истина; + ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Истина; + КонецЕсли; + + Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Не Элементы.ЗагрузитьИзФайла.Видимость Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для загрузки дополнительных отчетов и обработок'"); КонецЕсли; ЗаполнитьКоманды(); @@ -61,8 +65,8 @@ КлиентскийКэш = Новый Структура; - Если ЭтоНовый И Не ДиалогЗагрузкиНовогоПройден Тогда - ПодключитьОбработчикОжидания("ПоказатьДиалогВыбораНовогоФайла", 0.1, Истина); + Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда + ПодключитьОбработчикОжидания("ОбновлениеИзФайлаЗапуск", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -153,11 +157,9 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если РегистрацияОбработки И ДополнительныеОтчетыИОбработки.ВозможнаЗагрузкаОбработкиИзФайла(Объект.Ссылка) Тогда ДвоичныеДанныеОбработки = ПолучитьИзВременногоХранилища(АдресДанныхОбработки); ТекущийОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанныеОбработки, Новый СжатиеДанных(9)); - РегистрацияОбработки = Ложь; КонецЕсли; Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда @@ -168,22 +170,28 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("БыстрыйДоступ", БыстрыйДоступ.Выгрузить()); - ТекущийОбъект.Разрешения.Загрузить( - ПолучитьИзВременногоХранилища(АдресРазрешений)); - + ТекущийОбъект.Разрешения.Загрузить(ПолучитьИзВременногоХранилища(АдресРазрешений)); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ОшибкаПодключения") Тогда - Сообщить(ТекущийОбъект.ДополнительныеСвойства.ОшибкаПодключения); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекущийОбъект.ДополнительныеСвойства.ОшибкаПодключения; + Сообщение.Сообщить(); КонецЕсли; ЭтоНовый = Ложь; + Если РегистрацияОбработки Тогда + ОбновитьПовторноИспользуемыеЗначения(); + РегистрацияОбработки = Ложь; + КонецЕсли; + ЗаполнитьКоманды(); УстановитьВидимостьДоступность(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -243,8 +251,30 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Объект.Команды +&НаКлиенте +Процедура ДекорацияВключениеПрофилейБезопасностиНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если НавигационнаяСсылка = "int://sp-on" Тогда + + ОткрытьФорму( + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкиИспользованияПрофилейБезопасности", + , + , + , + , + , + , + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + + СтандартнаяОбработка = Ложь; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОбъектКоманды &НаКлиенте Процедура ОбъектКомандыБыстрыйДоступПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -292,47 +322,32 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте -Процедура ЗагрузитьФайлОбработкиОтчета(Команда) - - ПоказатьДиалогВыбораНовогоФайла(); - +Процедура КомандаЗаписатьИЗакрыть(Команда) + ЗаписатьНаКлиенте(Истина); КонецПроцедуры &НаКлиенте -Процедура ВыгрузитьФайлОбработкиОтчета(Команда) - - Оповещение = Новый ОписаниеОповещения("ВыгрузитьФайлОбработкиОтчетаЗавершение", ЭтотОбъект); - ТекстСообщения = НСтр("ru = 'Для выгрузки внешней обработки (отчета) в файл рекомендуется установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); - +Процедура КомандаЗаписать(Команда) + ЗаписатьНаКлиенте(Ложь); КонецПроцедуры &НаКлиенте -Процедура ВыгрузитьФайлОбработкиОтчетаЗавершение(Результат, Параметры) Экспорт - - Если Не ПодключитьРасширениеРаботыСФайлами() Тогда - ПолучитьФайл(АдресДанныхОбработки, Объект.ИмяФайла, Истина); - Возврат; - КонецЕсли; - - ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогСохраненияФайла.ПолноеИмяФайла = Объект.ИмяФайла; - ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); - ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 1, 2); - ДиалогСохраненияФайла.МножественныйВыбор = Ложь; - ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); - - Если ДиалогСохраненияФайла.Выбрать() Тогда - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(, АдресДанныхОбработки)); - ПолученныеФайлы = Новый Массив; - ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, ДиалогСохраненияФайла.ПолноеИмяФайла, Ложь); - КонецЕсли; - +Процедура ЗагрузитьИзФайла(Команда) + ОбновлениеИзФайлаЗапуск(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьВФайл(Команда) + ПараметрыВыгрузки = Новый Структура; + ПараметрыВыгрузки.Вставить("ЭтоОтчет", Объект.Вид = ВидОтчет Или Объект.Вид = ВидДополнительныйОтчет); + ПараметрыВыгрузки.Вставить("ИмяФайла", Объект.ИмяФайла); + ПараметрыВыгрузки.Вставить("АдресДанныхОбработки", АдресДанныхОбработки); + ДополнительныеОтчетыИОбработкиКлиент.ВыгрузитьВФайл(ПараметрыВыгрузки); КонецПроцедуры &НаКлиенте @@ -387,44 +402,124 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбъектКомандыРегламентноеЗаданиеИспользование.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбъектКомандыРегламентноеЗаданиеПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Команды.РегламентноеЗаданиеРазрешено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Клиент &НаКлиенте -Процедура ПоказатьДиалогВыбораНовогоФайла() - Обработчик = Новый ОписаниеОповещения("ОбработкаРезультатаВыбораНовогоФайла", ЭтотОбъект); +Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи) + Запросы = ЗапросыОбновленияРазрешений(); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, Новый ОписаниеОповещения("ПродолжитьЗаписьНаКлиенте", ЭтотОбъект, ЗакрытьПослеЗаписи)); +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьЗаписьНаКлиенте(Результат, ЗакрытьПослеЗаписи) Экспорт - ПараметрыДиалога = Новый Структура; - ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); - ПараметрыДиалога.Вставить("Фильтр", ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения()); - ПараметрыДиалога.Вставить("ИндексФильтра", ?(Объект.Ссылка.Пустая(), 0, ?(Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет, 1, 2))); - ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл внешнего отчета или обработки'")); + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("РегистрацияОбработки", РегистрацияОбработки); + ПараметрыЗаписи.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи); + + Успех = Записать(ПараметрыЗаписи); + Если Не Успех Тогда + Возврат; + КонецЕсли; + + Если ПараметрыЗаписи.РегистрацияОбработки Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиентеЗавершение", ЭтотОбъект, ПараметрыЗаписи); + ТекстПредупреждения = НСтр("ru = 'Для применения изменений в открытых окнах + |необходимо их закрыть и открыть заново.'"); + ПоказатьПредупреждение(Обработчик, ТекстПредупреждения); + Иначе + ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЗапросыОбновленияРазрешений() + + Возврат ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ЗапросыРазрешенийДополнительнойОбработки( + Объект, ПолучитьТаблицуРазрешений()); + +КонецФункции + +&НаКлиенте +Процедура ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи) Экспорт + Если ПараметрыЗаписи.ЗакрытьПослеЗаписи И Открыта() Тогда + Закрыть(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновлениеИзФайлаЗапуск() + ПараметрыРегистрации = Новый Структура; + ПараметрыРегистрации.Вставить("Успех", Ложь); + ПараметрыРегистрации.Вставить("АдресДанныхОбработки", АдресДанныхОбработки); + ПараметрыРегистрации.Вставить("ОбработчикРезультата", Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект)); + Обработчик = Новый ОписаниеОповещения("ОбновлениеИзФайлаПослеВыбораФайла", ЭтотОбъект, ПараметрыРегистрации); + + ПараметрыДиалога = Новый Структура("Режим, Фильтр, ИндексФильтра, Заголовок"); + ПараметрыДиалога.Режим = РежимДиалогаВыбораФайла.Открытие; + ПараметрыДиалога.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + Если Объект.Ссылка.Пустая() Тогда + ПараметрыДиалога.ИндексФильтра = 0; + ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета или обработки'"); + ИначеЕсли Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет Тогда + ПараметрыДиалога.ИндексФильтра = 1; + ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета'"); + Иначе + ПараметрыДиалога.ИндексФильтра = 2; + ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешней обработки'"); + КонецЕсли; ДополнительныеОтчетыИОбработкиКлиент.ПоказатьПомещениеФайла(Обработчик, УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); КонецПроцедуры &НаКлиенте -Процедура ОбработкаРезультатаВыбораНовогоФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ОбновлениеИзФайлаПослеВыбораФайла(ПомещенныеФайлы, ПараметрыРегистрации) Экспорт Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда - Если ЭтоНовый И Открыта() Тогда - Закрыть(); - КонецЕсли; + ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); Возврат; КонецЕсли; - АдресДанныхОбработки = ПомещенныеФайлы[0].Хранение; - ВыбранноеИмяФайла = ПомещенныеФайлы[0].Имя; + ОписаниеФайла = ПомещенныеФайлы[0]; - ПараметрыРегистрации = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьКонфликтующие, Конфликтующие, АдресДанныхОбработки"); - ПараметрыРегистрации.ИмяФайла = ""; - ПараметрыРегистрации.ЭтоОтчет = Неопределено; + Ключи = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьПубликацию, ОтключатьКонфликтующие, Конфликтующие"); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыРегистрации, Ключи, Ложь); + + ПараметрыРегистрации.ОтключатьПубликацию = Ложь; ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь; ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВыбранноеИмяФайла, "\"); + МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОписаниеФайла.Имя, "\"); ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница()); РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3)); @@ -433,182 +528,177 @@ ИначеЕсли РасширениеФайла = "EPF" Тогда ПараметрыРегистрации.ЭтоОтчет = Ложь; Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'")); + ПараметрыРегистрации.Успех = Ложь; + ДополнительныеОтчетыИОбработкиКлиент.ВернутьРезультатПослеПоказаПредупреждения( + НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'"), + ПараметрыРегистрации.ОбработчикРезультата, + ПараметрыРегистрации); Возврат; КонецЕсли; - ПараметрыРегистрации.АдресДанныхОбработки = АдресДанныхОбработки; + ПараметрыРегистрации.АдресДанныхОбработки = ОписаниеФайла.Хранение; - ЗарегистрироватьНаКлиенте(ПараметрыРегистрации); + ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); КонецПроцедуры &НаКлиенте -Процедура ЗарегистрироватьНаКлиенте(ПараметрыРегистрации) +Процедура ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации) + // Подготовка к вызову сервера. + ОбработчикРезультата = ПараметрыРегистрации.ОбработчикРезультата; + ПараметрыРегистрации.Удалить("ОбработчикРезультата"); + // Вызов сервера. + ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации); + // Отмена изменений. + ПараметрыРегистрации.Вставить("ОбработчикРезультата", ОбработчикРезультата); - РезультатРегистрации = ЗарегистрироватьНаСервере(ПараметрыРегистрации); - - Если ПараметрыРегистрации.ОтключатьКонфликтующие = Истина Тогда - + Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда // Отключается несколько объектов, потому динамические списки надо обновить ОповеститьОбИзменении(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")); - КонецЕсли; // Обработка результата работы сервера - Если РезультатРегистрации.Успешно = Истина Тогда - - Модифицированность = Истина; + Если ПараметрыРегистрации.Успех Тогда ОповещениеЗаголовок = ?(ПараметрыРегистрации.ЭтоОтчет, НСтр("ru = 'Файл внешнего отчета загружен'"), НСтр("ru = 'Файл внешней обработки загружен'")); ОповещениеСсылка = ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка)); ОповещениеТекст = ПараметрыРегистрации.ИмяФайла; ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); - - Если Не Открыта() Тогда - ДиалогЗагрузкиНовогоПройден = Истина; - Открыть(); - КонецЕсли; - + ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); Иначе - // Разбор причины отказа загрузки обработки и отображение информации пользователю - Если РезультатРегистрации.ИмяОбъектаЗанято = Истина Тогда - ПоказатьКонфликтыВозникшиеПриЗагрузке(ПараметрыРегистрации, РезультатРегистрации); + Если ПараметрыРегистрации.ИмяОбъектаЗанято Тогда + ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации); Иначе - ПоказатьПредупреждение(, РезультатРегистрации.КраткоеПредставлениеОшибки); + ДополнительныеОтчетыИОбработкиКлиент.ВернутьРезультатПослеПоказаПредупреждения( + ПараметрыРегистрации.КраткоеПредставлениеОшибки, + ПараметрыРегистрации.ОбработчикРезультата, + ПараметрыРегистрации); КонецЕсли; - КонецЕсли; - КонецПроцедуры &НаКлиенте -Процедура ПоказатьКонфликтыВозникшиеПриЗагрузке(ПараметрыРегистрации, РезультатРегистрации) - - // Представление занявших объектов - КоличествоКонфликтующих = РезультатРегистрации.Конфликтующие.Количество(); - ПредставлениеЗанявших = ""; - Для Каждого ЭлементСписка Из РезультатРегистрации.Конфликтующие Цикл - ПредставлениеЗанявших = ПредставлениеЗанявших - + ?(ПредставлениеЗанявших = "", "", ", ") - + СокрЛП(ЭлементСписка.Представление); - Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда - ПредставлениеЗанявших = Лев(ПредставлениеЗанявших, 70) + "... "; - Прервать; - КонецЕсли; - КонецЦикла; - - Если КоличествоКонфликтующих > 1 Тогда +Процедура ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации) + Если ПараметрыРегистрации.КоличествоКонфликтующих > 1 Тогда Если ПараметрыРегистрации.ЭтоОтчет Тогда ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешнего отчета'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""%1"" уже занято другими дополнительными отчетами (%2): - |%3. + ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" уже занято другими дополнительными отчетами ([Count]): + |[List]. | |Выберите: - |1. ""Продолжить"" - выполнить загрузку, отключив публикацию этого отчета. - |2. ""Отключить конфликтующие"" - выполнить загрузку, отключив публикацию всех других конфликтующих отчетов. - |3. ""Открыть список"" - отменить загрузку и открыть список конфликтующих отчетов.'"); - ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить конфликтующие отчеты'"); + |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этого отчета. + |2. ""[Disable]"" - выполнить загрузку, отключив публикацию всех других конфликтующих отчетов. + |3. ""[Open]"" - отменить загрузку и открыть список конфликтующих отчетов.'"); Иначе ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешней обработки'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""%1"" уже занято другими дополнительными обработками (%2): - |%3. + ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" уже занято другими дополнительными обработками ([Count]): + |[List]. | |Выберите: - |1. ""Продолжить"" - выполнить загрузку, отключив публикацию этой обработки. - |2. ""Отключить конфликтующие"" - выполнить загрузку, отключив публикацию всех других конфликтующих обработок. - |3. ""Открыть список"" - отменить загрузку и открыть список конфликтующих обработок.'"); - ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить конфликтующие обработки'"); + |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этой обработки. + |2. ""[Disable]"" - выполнить загрузку, отключив публикацию всех других конфликтующих обработок. + |3. ""[Open]"" - отменить загрузку и открыть список конфликтующих обработок.'"); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, КоличествоКонфликтующих, РезультатРегистрации.ИмяОбъекта, ПредставлениеЗанявших); - ПредставлениеКнопкиОткрыть = НСтр("ru = 'Открыть список'"); + ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить конфликтующие'"); + ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и показать список'"); Иначе Если ПараметрыРегистрации.ЭтоОтчет Тогда ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешнего отчета'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""%1"" уже занято другим дополнительным отчетом: - |%2. + ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" уже занято другим дополнительным отчетом: + |[List]. | |Выберите: - |1. ""Продолжить"" - выполнить загрузку, отключив публикацию этого отчета. - |2. ""Отключить другой отчет"" - выполнить загрузку, отключив публикацию другого отчета. - |3. ""Отменить и открыть"" - отменить загрузку и открыть карточку другого отчета.'"); + |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этого отчета. + |2. ""[Disable]"" - выполнить загрузку, отключив публикацию другого отчета. + |3. ""[Open]"" - отменить загрузку и открыть карточку другого отчета.'"); ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другой отчет'"); Иначе ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешней обработки'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""%1"" уже занято другой дополнительной обработкой: - |%2. + ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" уже занято другой дополнительной обработкой: + |[List]. | |Выберите: - |1. ""Продолжить"" - выполнить загрузку, отключив публикацию этой обработки. - |2. ""Отключить другую обработку"" - выполнить загрузку, отключив публикацию другой обработки. - |3. ""Отменить и открыть"" - отменить загрузку и открыть карточку другой обработку.'"); + |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этой обработки. + |2. ""[Disable]"" - выполнить загрузку, отключив публикацию другой обработки. + |3. ""[Open]"" - отменить загрузку и открыть карточку другой обработку.'"); ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другую обработку'"); КонецЕсли; ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и открыть'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, РезультатРегистрации.ИмяОбъекта, ПредставлениеЗанявших); КонецЕсли; + ПредставлениеКнопкиПродолжить = НСтр("ru = 'В режиме отладки'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Name]", ПараметрыРегистрации.ИмяОбъекта); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Count]", ПараметрыРегистрации.КоличествоКонфликтующих); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[List]", ПараметрыРегистрации.ПредставлениеЗанявших); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Disable]", ПредставлениеКнопкиОтключить); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Open]", ПредставлениеКнопкиОткрыть); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Continue]", ПредставлениеКнопкиПродолжить); КнопкиВопроса = Новый СписокЗначений; - КнопкиВопроса.Добавить("ПродолжитьБезПубликации", НСтр("ru = 'Продолжить'")); + КнопкиВопроса.Добавить("ПродолжитьБезПубликации", ПредставлениеКнопкиПродолжить); КнопкиВопроса.Добавить("ОтключитьКонфликтующие", ПредставлениеКнопкиОтключить); - КнопкиВопроса.Добавить("ОтменитьИОткрыть", НСтр("ru = 'Открыть список'")); + КнопкиВопроса.Добавить("ОтменитьИОткрыть", ПредставлениеКнопкиОткрыть); КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена); - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПараметрыРегистрации", ПараметрыРегистрации); - ДополнительныеПараметры.Вставить("РезультатРегистрации", РезультатРегистрации); - ДополнительныеПараметры.Вставить("КоличествоКонфликтующих", КоличествоКонфликтующих); - Обработчик = Новый ОписаниеОповещения("ПоказатьКонфликтыВозникшиеПриЗагрузкеЗавершение", ЭтотОбъект, ДополнительныеПараметры); + Обработчик = Новый ОписаниеОповещения("ОбновлениеИзФайлаРазрешениеКонфликтов", ЭтотОбъект, ПараметрыРегистрации); ПоказатьВопрос(Обработчик, ТекстВопроса, КнопкиВопроса, , "ПродолжитьБезПубликации", ЗаголовокВопроса); - КонецПроцедуры &НаКлиенте -Процедура ПоказатьКонфликтыВозникшиеПриЗагрузкеЗавершение(Ответ, ДополнительныеПараметры) Экспорт - ПараметрыРегистрации = ДополнительныеПараметры.ПараметрыРегистрации; - РезультатРегистрации = ДополнительныеПараметры.РезультатРегистрации; - +Процедура ОбновлениеИзФайлаРазрешениеКонфликтов(Ответ, ПараметрыРегистрации) Экспорт Если Ответ = "ПродолжитьБезПубликации" Тогда - - // Продолжить. - Объект.Публикация = ДополнительныеОтчетыИОбработкиВызовСервера.ВидПубликацииДляКонфликтующихОбработок(); - // Повторный вызов сервера (публикация в режиме отладки) и обработка результата. - ЗарегистрироватьНаКлиенте(ПараметрыРегистрации); - + ПараметрыРегистрации.ОтключатьПубликацию = Истина; + ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); ИначеЕсли Ответ = "ОтключитьКонфликтующие" Тогда - - // Отключить конфликтующие. - ПараметрыРегистрации.ОтключатьКонфликтующие = Истина; - ПараметрыРегистрации.Конфликтующие = РезультатРегистрации.Конфликтующие; - // Повторный вызов сервера (с переводом конфликтующих в режим отладки) и обработка результата. - ЗарегистрироватьНаКлиенте(ПараметрыРегистрации); - + ПараметрыРегистрации.ОтключатьКонфликтующие = Истина; + ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); ИначеЕсли Ответ = "ОтменитьИОткрыть" Тогда - - Если ЭтоНовый И РезультатРегистрации.СтароеИмяОбъекта = РезультатРегистрации.ИмяОбъекта Тогда + // Отмена и показ конфликтующих. + // Список показывается когда конфликтует более одного элемента. + ПоказатьСписок = (ПараметрыРегистрации.КоличествоКонфликтующих > 1); + Если ПараметрыРегистрации.СтароеИмяОбъекта = ПараметрыРегистрации.ИмяОбъекта И Не ЭтоНовый Тогда + // Или текущий элемент уже записан с конфликтующим именем. // В списке будут два элемента - текущий и конфликтующий. // Это позволит принять решение о том, какой из них отключать. ПоказатьСписок = Истина; - Иначе - ПоказатьСписок = (ДополнительныеПараметры.КоличествоКонфликтующих > 1); КонецЕсли; - Если ПоказатьСписок Тогда // Форма списка с отбором по конфликтующим - ЗаголовокФормы = НСтр("ru = 'Дополнительные отчеты и обработки с внутреннем именем ""%1""'"); - ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%1", РезультатРегистрации.ИмяОбъекта); - ПараметрыФормы = Новый Структура("Отбор, Заголовок, Отображение"); - ПараметрыФормы.Отбор = Новый Структура("ИмяОбъекта, ЭтоГруппа", РезультатРегистрации.ИмяОбъекта, Ложь); - ПараметрыФормы.Заголовок = ЗаголовокФормы; - ПараметрыФормы.Отображение = "Список"; - ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка", ПараметрыФормы, , Истина); + ФормаИмя = "Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка"; + ФормаЗаголовок = НСтр("ru = 'Дополнительные отчеты и обработки с внутреннем именем ""%1""'"); + ФормаЗаголовок = СтрЗаменить(ФормаЗаголовок, "%1", ПараметрыРегистрации.ИмяОбъекта); + ФормаПараметры = Новый Структура; + ФормаПараметры.Вставить("Отбор", Новый Структура); + ФормаПараметры.Отбор.Вставить("ИмяОбъекта", ПараметрыРегистрации.ИмяОбъекта); + ФормаПараметры.Отбор.Вставить("ЭтоГруппа", Ложь); + ФормаПараметры.Вставить("Заголовок", ФормаЗаголовок); + ФормаПараметры.Вставить("Отображение", "Список"); Иначе // Форма элемента - ПоказатьЗначение(, РезультатРегистрации.Конфликтующие[0].Значение); + ФормаИмя = "Справочник.ДополнительныеОтчетыИОбработки.ФормаОбъекта"; + ФормаПараметры = Новый Структура; + ФормаПараметры.Вставить("Ключ", ПараметрыРегистрации.Конфликтующие[0].Значение); КонецЕсли; - + ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + ОткрытьФорму(ФормаИмя, ФормаПараметры, Неопределено, Истина); + Иначе // Отмена. + ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновлениеИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт + Если Результат.Успех = Ложь Тогда + Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Открыта() Тогда + Закрыть(); + КонецЕсли; + ИначеЕсли Результат.Успех = Истина Тогда + Если Не Открыта() Тогда + Открыть(); + КонецЕсли; + Модифицированность = Истина; + РегистрацияОбработки = Истина; + АдресДанныхОбработки = Результат.АдресДанныхОбработки; КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -793,24 +883,38 @@ // Вызов сервера, Сервер &НаСервере -Функция ЗарегистрироватьНаСервере(ПараметрыРегистрации) - +Процедура ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации) ОбъектСправочника = РеквизитФормыВЗначение("Объект"); КомандыСохраненные = ОбъектСправочника.Команды.Выгрузить(); + РезультатРегистрации = ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОбъектСправочника, ПараметрыРегистрации); + АдресРазрешений = ПоместитьВоВременноеХранилище(ОбъектСправочника.Разрешения.Выгрузить(), ЭтотОбъект.УникальныйИдентификатор); ЗначениеВРеквизитФормы(ОбъектСправочника, "Объект"); - Если РезультатРегистрации.Успешно Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыРегистрации, РезультатРегистрации, Истина); + + Если ПараметрыРегистрации.Успех Тогда ЗаполнитьКоманды(КомандыСохраненные); - РегистрацияОбработки = РезультатРегистрации.Успешно; + ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда + // Представление занявших объектов. + ПредставлениеЗанявших = ""; + Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл + ПредставлениеЗанявших = ПредставлениеЗанявших + + ?(ПредставлениеЗанявших = "", "", ", ") + + СокрЛП(ЭлементСписка.Представление); + Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда + ПредставлениеЗанявших = Лев(ПредставлениеЗанявших, 70) + "... "; + Прервать; + КонецЕсли; + КонецЦикла; + ПараметрыРегистрации.Вставить("ПредставлениеЗанявших", ПредставлениеЗанявших); + // Количество занявших объектов. + ПараметрыРегистрации.Вставить("КоличествоКонфликтующих", ПараметрыРегистрации.Конфликтующие.Количество()); КонецЕсли; УстановитьВидимостьДоступность(Истина); - - Возврат РезультатРегистрации; - -КонецФункции +КонецПроцедуры &НаСервере Функция ПодготовитьПараметрыФормыВыборОбъектовМетаданных() @@ -879,14 +983,11 @@ КоличествоВариантов = ВариантыДополнительногоОтчета.Количество(); КоличествоКоманд = Объект.Команды.Количество(); - КоличествоРазрешений = ПолучитьТаблицуРазрешений().Количество(); КоличествоВидимыхЗакладок = 0; - КоличествоЗакладокБезРазрешений = 0; Если Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов Тогда КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1; - КоличествоЗакладокБезРазрешений = КоличествоЗакладокБезРазрешений + 1; Элементы.СтраницыВарианты.Видимость = Истина; @@ -912,7 +1013,7 @@ Иначе КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1; - КоличествоЗакладокБезРазрешений = КоличествоЗакладокБезРазрешений + 1; + Элементы.СтраницаКоманды.Видимость = Истина; Элементы.СтраницаКоманды.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Команды (%1)'"), @@ -920,20 +1021,94 @@ КонецЕсли; - Если КоличествоРазрешений = 0 Тогда - Элементы.СтраницаРазрешения.Видимость = Ложь; - Элементы.СтраницаРазрешения.Заголовок = НСтр("ru = 'Разрешения'"); + КоличествоРазрешений = ПолучитьТаблицуРазрешений().Количество(); + РежимСовместимостиРазрешений = Объект.РежимСовместимостиРазрешений; + + Если РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда + БезопасныйРежим = Объект.БезопасныйРежим; + Если БезопасныйРежим И КоличествоРазрешений > 0 И ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + Если ЭтоНовый Тогда + БезопасныйРежим = ""; + Иначе + БезопасныйРежим = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка); + КонецЕсли; + КонецЕсли; Иначе + Если КоличествоРазрешений = 0 Тогда + БезопасныйРежим = Истина; + Иначе + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + Если ЭтоНовый Тогда + БезопасныйРежим = ""; + Иначе + БезопасныйРежим = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка); + КонецЕсли; + Иначе + БезопасныйРежим = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если КоличествоРазрешений = 0 Тогда + + Элементы.СтраницаРазрешения.Видимость = Ложь; + Элементы.ГруппаБезопасныйРежимГлобальный.Видимость = Истина; + + Если БезопасныйРежим = Истина Тогда + Элементы.СтраницыБезопасныйРежимГлобальный.ТекущаяСтраница = Элементы.СтраницаБезопасныйРежимИстина; + ИначеЕсли БезопасныйРежим = Ложь Тогда + Элементы.СтраницыБезопасныйРежимГлобальный.ТекущаяСтраница = Элементы.СтраницаБезопасныйРежимЛожь; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 не является корректным режимом подключения для дополнительных отчетов и обработок, не требующих разрешений на использование профилей безопасности!'"), + БезопасныйРежим); + КонецЕсли; + + Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Ложь; + + Иначе + КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1; - ОднаИзЗакладокРазрешения = Истина; + Элементы.СтраницаРазрешения.Видимость = Истина; Элементы.СтраницаРазрешения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Разрешения (%1)'"), Формат(КоличествоРазрешений, "ЧГ=")); + + Элементы.ГруппаБезопасныйРежимГлобальный.Видимость = Ложь; + + Если РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда + Элементы.ГруппаСтраницыРежимыСовместимостиРазрешений.ТекущаяСтраница = Элементы.СтраницаРазрешенияВерсия_2_1_3; + Иначе + Элементы.ГруппаСтраницыРежимыСовместимостиРазрешений.ТекущаяСтраница = Элементы.СтраницаРазрешенияВерсия_2_2_2; + КонецЕсли; + + Если БезопасныйРежим = Истина Тогда + Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаБезопасныйРежимСРазрешениями; + ИначеЕсли БезопасныйРежим = Ложь Тогда + Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаНебезопасныйРежимСРазрешениями; + ИначеЕсли ТипЗнч(БезопасныйРежим) = Тип("Строка") Тогда + Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаПерсональныйПрофильБезопасности; + Элементы.ДекорацияПерсональныйПрофильБезопасностиНадпись.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дополнительный отчет или обработка будет подключаться к программе с использованием ""персонального"" + |профиля безопасности %1, в котором будут разрешены только следующие операции:'"), БезопасныйРежим); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 не является корректным режимом подключения для дополнительных отчетов и обработок, требующих разрешений на использование профилей безопасности!'"), + БезопасныйРежим); + КонецЕсли; + + Если БезопасныйРежим = Ложь И Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И РаботаВБезопасномРежимеСлужебный.ДоступнаНастройкаПрофилейБезопасности() Тогда + Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Истина; + Иначе + Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Ложь; + КонецЕсли; + СформироватьСписокРазрешений(); + КонецЕсли; - Элементы.СтраницыВариантыКоманды.ОтображениеСтраниц = ОтображениеСтраницФормы[?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")]; + Элементы.СтраницыВариантыКомандыРазрешения.ОтображениеСтраниц = ОтображениеСтраницФормы[?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")]; Если ЭтоГлобальнаяОбработка Тогда Если Объект.Разделы.Количество() = 0 Тогда @@ -970,18 +1145,6 @@ Элементы.НазначениеКоманд.Видимость = НЕ ЭтоГлобальнаяОбработка; Элементы.ТипыФорм.Видимость = НЕ ЭтоГлобальнаяОбработка; - Если Объект.БезопасныйРежим Тогда - - Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = ?(ЭтоОтчет, Элементы.ГруппаИнформацияОтчета, Элементы.ГруппаИнформацияОбработки); - Элементы.ИнформацияОбработкиОРазрешениях.Видимость = (КоличествоРазрешений > 0); - Элементы.ИнформацияОтчетаОРазрешениях.Видимость = (КоличествоРазрешений > 0); - - Иначе - - Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = ?(ЭтоОтчет, Элементы.ГруппаПредупреждениеОтчета, Элементы.ГруппаПредупреждениеОбработки); - - КонецЕсли; - Если ЭтоНовый Тогда Заголовок = ?(ЭтоОтчет, НСтр("ru = 'Дополнительный отчет (создание)'"), НСтр("ru = 'Дополнительная обработка (создание)'")); Иначе @@ -1019,7 +1182,7 @@ СтрокаРазрешения = ТаблицаРазрешений.Найти(ВидРазрешения, "ВидРазрешения"); Если СтрокаРазрешения <> Неопределено Тогда ПараметрыРазрешения = СтрокаРазрешения.Параметры.Получить(); - ПредставлениеРазрешений = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьПодробноеОписаниеРазрешения( + ПредставлениеРазрешений_2_1_3 = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьПодробноеОписаниеРазрешения( ВидРазрешения, ПараметрыРазрешения); КонецЕсли; @@ -1028,8 +1191,13 @@ &НаСервере Процедура СформироватьСписокРазрешений() - ПредставлениеРазрешений = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьПредставлениеРазрешений( - ПолучитьТаблицуРазрешений()); + Если Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда + ПредставлениеРазрешений_2_1_3 = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьПредставлениеРазрешений( + ПолучитьТаблицуРазрешений()); + ИначеЕсли Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2 Тогда + ПредставлениеРазрешений_2_2_2 = РаботаВБезопасномРежимеСлужебный.ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов( + ПолучитьТаблицыРазрешений()); + КонецЕсли; КонецПроцедуры @@ -1104,7 +1272,9 @@ ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Объект.Ссылка); Исключение ТекстОшибки = НСтр("ru = 'Не удалось получить список вариантов отчета из-за ошибки, возникшей при подключении этого отчета:'"); - Сообщить(ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтатусСообщения.Важное); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Сообщение.Сообщить(); Возврат; КонецПопытки; @@ -1172,3 +1342,41 @@ КонецФункции +&НаСервере +Функция ПолучитьТаблицыРазрешений() + + Менеджеры = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.МенеджерыРегистровРазрешений(); + Результат = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицыРазрешений(); + + ИсходнаяТаблица = ПолучитьТаблицуРазрешений(); + Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл + + Набор = Неопределено; + Для Каждого Менеджер Из Менеджеры Цикл + Если Менеджер.ТипXDTOПредставленияРазрешений().Имя = СтрокаИсходнойТаблицы.ВидРазрешения Тогда + XDTOПредставления = Новый Массив(); + XDTOПредставления.Добавить(СтрокаИсходнойТаблицы.Параметры.Получить()); + Набор = Менеджер.НаборЗаписейИзXDTOПредставления(XDTOПредставления, Истина, Объект.Ссылка, Ложь); + КонецЕсли; + КонецЦикла; + + Если Набор = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Неизвестный вид разрешения!'"); + КонецЕсли; + + ТаблицаРезультата = Результат[СтрокаИсходнойТаблицы.ВидРазрешения]; + + Для Каждого СтрокаНабора Из Набор Цикл + + РазрешениеРезультата = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(РазрешениеРезультата, СтрокаНабора); + + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index ba9310120..6bb965b84 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,3 +1,30 @@ - -

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

    -

    Как разработать дополнительный отчет или обработку см. на сайте ИТС в разделе "Разработка и администрирование" - "Стандартные библиотеки" - "Библиотека стандартных подсистем" - "3 Настройка и использование подсистем при разработке конфигурации" - "3.13 Дополнительные отчеты и обработки" - "Использование при разработке конфигурации".

    \ No newline at end of file + +

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

    +

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

    +

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

    +

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

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

    Какие дополнительные сведения можно добавить в список

    +
    • +
      Имя объекта - включает вид и другие сведения. Заполняется разработчиком, в программе проставляется по умолчанию.

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

    +

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

    +

    Как сгруппировать дополнительные отчеты и обработки

    +

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

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

    Как отобрать нужные дополнительные отчеты и обработки

    +

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

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

    См. также:

    +

    Работа с формами

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl index e69de29bb..8823cc5d6 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl @@ -0,0 +1,20 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ИспользоватьДляФормыОбъекта"); + Результат.Добавить("ИспользоватьДляФормыСписка"); + Результат.Добавить("Ответственный"); + Результат.Добавить("Публикация"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index da0e6250a..704e0e271 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -2,9 +2,7 @@ Перем УстанавливатьПривилегированныйРежим, ЭтоГлобальнаяОбработка; - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоГруппа Тогда @@ -81,7 +79,7 @@ КонецПроцедуры Процедура ПередЗаписью(Отказ) - // Вызывается непосредственно до записи объекта в базу данных + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -89,6 +87,9 @@ Возврат; КонецЕсли; + // Вызывается непосредственно до записи объекта в базу данных + ДополнительныеОтчетыИОбработки.ПередЗаписьюДополнительнойОбработки(ЭтотОбъект, Отказ); + Если ЭтоНовый() И НЕ ДополнительныеОтчетыИОбработки.ПравоДобавления(ЭтотОбъект) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для добавления дополнительных отчетов или обработок.'"); КонецЕсли; @@ -151,6 +152,8 @@ Процедура ПередУдалением(Отказ) // Вызывается непосредственно перед удалением объекта из базы данных + ДополнительныеОтчетыИОбработки.ПередУдалениемДополнительнойОбработки(ЭтотОбъект, Отказ); + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -163,8 +166,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ЭтоГлобальнаяОбработка() @@ -431,4 +435,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index cb5bf9a3d..64a00f719 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -395,13 +395,10 @@ ru Использует хранилище вариантов + Когда Истина то дополнительный отчет подключен к хранилищу вариантов "ХранилищеВариантовОтчетов". Boolean - - ru - Истина когда внешний отчет подключен к хранилищу вариантов "ХранилищеВариантовОтчетов". - @@ -409,6 +406,21 @@ Use Use + + РежимСовместимостиРазрешений + + ru + Режим совместимости разрешений + + + EnumRef.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок + + + + + Use + Use + diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl index 7f4c75d18..bd0b7d45a 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,3 +23,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html index d684331f0..947e77b14 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html @@ -1,6 +1,6 @@ - +

    Закладка взаимодействий

    -

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

    +

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

    Что необходимо указать в данной форме?

    Что необходимо указать в данной форме?

    • Наименование - краткое описание назначение закладки. diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl index 1769a4cb4..f3e1988f8 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,7 +7,6 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Если Объект.Ссылка.Пустая() Тогда @@ -36,8 +34,9 @@ Оповестить("Запись_ЗакладкиВзаимодействий", ПараметрыЗаписи, Объект.Ссылка); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) @@ -55,3 +54,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl new file mode 100644 index 000000000..f7a1473ef --- /dev/null +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl @@ -0,0 +1,22 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Наименование"); + Результат.Добавить("КомпоновщикНастроек"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl index 07aa67b50..dcfc4b62d 100644 --- a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl +++ b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Справочник.Заметки.Форма.ВсеЗаметки", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html new file mode 100644 index 000000000..fabf649b5 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html @@ -0,0 +1,21 @@ + +

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

      +

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

      +

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

      +

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

      +

      Какие сведения о заметках выводятся в списке

      +
      • Тема - заголовок заметки. +
      • Предмет - документ или другой объект программы, по поводу которого вводилась заметка. +
      • Дата изменения - дата и время записи заметки.

      Как ввести новую заметку

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

      Как сгруппировать заметки

      +

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

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

      Как отобрать нужные заметки

      +

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

      +

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

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl index 84806c3d4..91c77f8ca 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,8 +30,9 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ФильтрПоПредметуПриИзменении(Элемент) @@ -53,8 +54,9 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьСписокВыбораФильтраПоПредмету() @@ -87,3 +89,4 @@ Конецпроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html new file mode 100644 index 000000000..4178019b8 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html @@ -0,0 +1,21 @@ + +

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

      +

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

      +

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

      +

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

      +

      Какие сведения выводятся в списке

      +

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

      +
      • +
        Тема - заголовок заметки
        +
      • +
        Автор - все видят только свои заметки. Только администратор может просмотреть заметки всех авторов.

      Как ввести заметку по поводу данного объекта программы

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

      Какие еще действия возможны в списке

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

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

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

      См. также

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl index 9eb9184dd..9b997ebe4 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,8 +23,9 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоказыватьЗаметкиДругихПользователейПриИзменении(Элемент) @@ -36,11 +37,14 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьЗаметку(Команда) ПараметрыФормы = Новый Структура("Предмет", Предмет); ОткрытьФорму("Справочник.Заметки.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html new file mode 100644 index 000000000..25e1beda3 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html @@ -0,0 +1,7 @@ + +

      Список размещается на рабочем столе программы.

      +

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

      +

      Как ввести заметку

      +

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

      +

      Как просмотреть все заметки

      +

      Нажмите одноименную команду на панели навигации  раздела Органайзер.

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl index 2caa7c04f..dd9dbe5be 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,3 +14,5 @@ Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html new file mode 100644 index 000000000..46642f4f9 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html @@ -0,0 +1,12 @@ + +

      Ввод сведений о группе заметок

      +

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

      +

      Как ввести группу заметок

      +

      Группировать заметки можно по предметам, по поводу которых они введены, или по темам.

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl index 20efd083c..2348d7f2b 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,3 +12,5 @@ Объект.Автор = Пользователи.ТекущийПользователь(); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..082b47480 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,22 @@ + +

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

      +

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

      +

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

      +

      Как ввести заметку

      +

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

      +

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

      +

      Напишите текст заметки. Для редактирования текста заметки предусмотрены стандартные команды форматирования. Текст можно оформить двумя способами:

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

      Какие действия возможны с заметкой

      +

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

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

      См. также:

      +

      Работа с формами.

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index 0a1f34721..f0dd236e9 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -52,8 +52,9 @@ Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПредметНажатие(Элемент) @@ -65,8 +66,9 @@ ПоказатьЗначение(,Объект.Автор); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьВидимость() @@ -80,5 +82,4 @@ Элементы.КоманднаяПанельРедактирования.Видимость = ОткрытаАвтором; КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Help/ru.html new file mode 100644 index 000000000..749729089 --- /dev/null +++ b/SSL/src/Catalogs/Заметки/Help/ru.html @@ -0,0 +1,22 @@ + +

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

      +

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

      +

      Какие сведения выводятся в списке заметок

      +

      В список выводятся все поля заметок:

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/ManagerModule.bsl b/SSL/src/Catalogs/Заметки/ManagerModule.bsl index e69de29bb..b922d4562 100644 --- a/SSL/src/Catalogs/Заметки/ManagerModule.bsl +++ b/SSL/src/Catalogs/Заметки/ManagerModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ДляРабочегоСтола"); + Результат.Добавить("Предмет"); + Результат.Добавить("Пометка"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Заметки.mdo b/SSL/src/Catalogs/Заметки/Заметки.mdo index 3c55720e1..51cee4d84 100644 --- a/SSL/src/Catalogs/Заметки/Заметки.mdo +++ b/SSL/src/Catalogs/Заметки/Заметки.mdo @@ -109,6 +109,11 @@ Use + + + ru + + Managed Use @@ -307,6 +312,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice @@ -316,6 +326,11 @@ ru Все заметки + + + ru + + PersonalComputer MobileDevice @@ -325,6 +340,11 @@ ru Заметки + + + ru + + PersonalComputer MobileDevice @@ -335,6 +355,11 @@ Мои заметки Для рабочего стола + + + ru + + PersonalComputer MobileDevice @@ -344,6 +369,11 @@ ru Форма группы + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl new file mode 100644 index 000000000..6b0f37643 --- /dev/null +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index 8640e1d0d..2e6a3a677 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,8 +29,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьЗаголовок() @@ -65,3 +65,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form index 92812e8c3..c78d5a5f7 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form @@ -179,6 +179,40 @@ true + + Ссылка + 38 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 39 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -196,32 +230,9 @@ СписокСтрокаПоиска - 39 - - СписокСтрокаПоискаРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 40 - true - - Список - - true - - - - СписокСостояниеПросмотра 42 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 44 Label true @@ -231,10 +242,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 43 true + Список + + true + + + + СписокСостояниеПросмотра + 45 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 46 + true + ViewStatusAddition Список @@ -243,10 +277,10 @@ СписокУправлениеПоиском - 45 + 48 СписокУправлениеПоискомРасширеннаяПодсказка - 47 + 50 Label true true @@ -256,7 +290,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 46 + 49 true SearchControlAddition diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index 71e5e84a3..b3b2bdebc 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -68,8 +67,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СвойствоПриИзменении(Элемент) @@ -78,8 +78,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -115,8 +116,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьПорядокЗначенийПоСвойствам(Список) @@ -252,3 +254,5 @@ Элементы.Список.Шапка = Элементы.Владелец.Видимость Или Элементы.Вес.Видимость; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index 634296829..a124fd62c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,15 +21,7 @@ Если ТипЗнч(Параметры.ПоказатьВес) = Тип("Булево") Тогда ПоказатьВес = Параметры.ПоказатьВес; Иначе - РеквизитыСвойства = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( - Объект.Владелец, "ДополнительныеЗначенияСВесом, ВладелецДополнительныхЗначений"); - - Если ЗначениеЗаполнено(РеквизитыСвойства.ВладелецДополнительныхЗначений) Тогда - ПоказатьВес = ОбщегоНазначения.ПолучитьЗначениеРеквизита( - РеквизитыСвойства.ВладелецДополнительныхЗначений, "ДополнительныеЗначенияСВесом"); - Иначе - ПоказатьВес = РеквизитыСвойства.ДополнительныеЗначенияСВесом; - КонецЕсли; + ПоказатьВес = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Владелец, "ДополнительныеЗначенияСВесом"); КонецЕсли; Если ПоказатьВес = Истина Тогда @@ -75,8 +66,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьЗаголовок() @@ -110,3 +102,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html index a3647efcb..59510dc74 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html @@ -1,4 +1,14 @@ - -

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

      -

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

      -

       

      \ No newline at end of file + +

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

      +

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

      +

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

      +

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

      +

      Ввод значений

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

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

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

      +

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

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

      См. также

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl index 2732b6327..e6c5601e2 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -16,4 +15,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl index e69de29bb..29df69db0 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl @@ -0,0 +1,36 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Владелец) Тогда + ВладелецДополнительныхЗначений = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Владелец, + "ВладелецДополнительныхЗначений"); + + Если ЗначениеЗаполнено(ВладелецДополнительныхЗначений) Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дополнительные значения для свойства ""%1"", созданного + |по образцу свойства ""%2"" нужно создавать для свойства-образца.'"), + Владелец, + ВладелецДополнительныхЗначений); + + Если ЭтоНовый() Тогда + ВызватьИсключение ОписаниеОшибки; + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ОписаниеОшибки; + Сообщение.Сообщить(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form index 10c2a3d4a..8006c9ce1 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form @@ -175,6 +175,40 @@ true + + Ссылка + 37 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -188,32 +222,9 @@ СписокСтрокаПоиска - 38 - - СписокСтрокаПоискаРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 39 - true - - Список - - true - - - - СписокСостояниеПросмотра 41 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 43 Label true @@ -223,10 +234,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 42 true + Список + + true + + + + СписокСостояниеПросмотра + 44 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 45 + true + ViewStatusAddition Список @@ -235,10 +269,10 @@ СписокУправлениеПоиском - 44 + 47 СписокУправлениеПоискомРасширеннаяПодсказка - 46 + 49 Label true true @@ -248,7 +282,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 45 + 48 true SearchControlAddition diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl index feb9f6cbc..022cabe77 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -50,8 +49,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СвойствоПриИзменении(Элемент) @@ -60,8 +60,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -74,8 +75,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьПорядокЗначенийПоСвойствам(Список) @@ -197,3 +199,5 @@ Элементы.Список.Шапка = Элементы.Владелец.Видимость Или Элементы.Вес.Видимость; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index a051daa66..d2c8edf91 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,15 +21,7 @@ Если ТипЗнч(Параметры.ПоказатьВес) = Тип("Булево") Тогда ПоказатьВес = Параметры.ПоказатьВес; Иначе - РеквизитыСвойства = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( - Объект.Владелец, "ДополнительныеЗначенияСВесом, ВладелецДополнительныхЗначений"); - - Если ЗначениеЗаполнено(РеквизитыСвойства.ВладелецДополнительныхЗначений) Тогда - ПоказатьВес = ОбщегоНазначения.ПолучитьЗначениеРеквизита( - РеквизитыСвойства.ВладелецДополнительныхЗначений, "ДополнительныеЗначенияСВесом"); - Иначе - ПоказатьВес = РеквизитыСвойства.ДополнительныеЗначенияСВесом; - КонецЕсли; + ПоказатьВес = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Владелец, "ДополнительныеЗначенияСВесом"); КонецЕсли; Если ПоказатьВес = Истина Тогда @@ -75,8 +66,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьЗаголовок() @@ -110,3 +102,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html index cf394ed4b..0e92b79c3 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html @@ -1,4 +1,12 @@ - -

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

      -

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

      -

       

      \ No newline at end of file + +

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

      +

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

      +

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

      +

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

      +

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

      +

      Ввод значений

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

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

      См. также

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl index 2732b6327..e6c5601e2 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -16,4 +15,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl index e69de29bb..29df69db0 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl @@ -0,0 +1,36 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Владелец) Тогда + ВладелецДополнительныхЗначений = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Владелец, + "ВладелецДополнительныхЗначений"); + + Если ЗначениеЗаполнено(ВладелецДополнительныхЗначений) Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дополнительные значения для свойства ""%1"", созданного + |по образцу свойства ""%2"" нужно создавать для свойства-образца.'"), + Владелец, + ВладелецДополнительныхЗначений); + + Если ЭтоНовый() Тогда + ВызватьИсключение ОписаниеОшибки; + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ОписаниеОшибки; + Сообщение.Сообщить(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form index 11272f30f..d332df222 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -88,6 +88,40 @@ true + + Ссылка + 18 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -100,32 +134,9 @@ СписокСтрокаПоиска - 18 - - СписокСтрокаПоискаРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 19 - true - - Список - - true - - - - СписокСостояниеПросмотра 21 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 23 Label true @@ -135,10 +146,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 22 true + Список + + true + + + + СписокСостояниеПросмотра + 24 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 25 + true + ViewStatusAddition Список @@ -147,10 +181,10 @@ СписокУправлениеПоиском - 24 + 27 СписокУправлениеПоискомРасширеннаяПодсказка - 26 + 29 Label true true @@ -160,7 +194,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 25 + 28 true SearchControlAddition @@ -266,6 +300,9 @@ Список.Parent + + Список.Ref + Список.ПометкаБудущегоУдаления diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl index 27837329e..a6676d053 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,8 +22,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -59,8 +60,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УпорядочитьИОформитьСписок() @@ -117,3 +119,5 @@ ЭлементОформляемогоПоля.Использование = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..4b3df4672 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,9 @@ + +

      Просмотр свойств идентификатора объекта метаданных.

      +

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

      +

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

      +
      • Представление; +
      • Имя; +
      • Синоним; +
      • Полное имя; +
      • Полный синоним.

       

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl index 77b0c2e32..6831af456 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,8 +24,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -51,8 +52,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьСвойстваИдентификатора() @@ -60,3 +62,5 @@ Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(Объект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html new file mode 100644 index 000000000..4400afdf7 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html @@ -0,0 +1,7 @@ + +

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

      +

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

      +

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

      +

      Нажмите  для просмотра подробных сведений об идентификаторе выбранного объекта.

      +

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index c77ed1331..020594c76 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура обновляет данные справочника по метаданным конфигурации. // @@ -67,8 +66,21 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает Истина, если проверка, обновление и замена дублей заверешена. +Функция ДанныеОбновлены() Экспорт + + Отказ = Ложь; + + СтандартныеПодсистемыСервер.ПроверитьОбновлениеПараметровРаботыПрограммы( + "ПараметрыБазовойФункциональности", "ИдентификаторыОбъектовМетаданных", Отказ); + + Возврат Не Отказ; + +КонецФункции // Процедура обновляет данные справочника по метаданным конфигурации. // @@ -95,22 +107,20 @@ // значение Истина, если кэш идентификаторов объектов метаданных // в константе ПараметрыБазовойФункциональности нужно обновить. // -// СписокНовыхОбъектовМетаданных - Строка (возвращаемое значение) - содержит полные имена -// объектов метаданных, которые добавлены или требуется добавить. +// СписокКритичныхИзменений - Строка (возвращаемое значение) - содержит полные имена +// объектов метаданных, которые добавлены или требуется добавить, +// а также объектов метаданных, полные имена которых изменены или требуется изменить. // Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь, ТолькоПроверка = Ложь, ЕстьКритичныеИзменения = Ложь, - ТребуетсяОбновитьКэш = Ложь, СписокНовыхОбъектовМетаданных = "") Экспорт + ТребуетсяОбновитьКэш = Ложь, СписокКритичныхИзменений = "") Экспорт ПроверкаИспользования(); УстановитьПривилегированныйРежим(Истина); - Если НЕ ТолькоПроверка Тогда - ЗаменаДублейПодчиненногоУзлаНайденныхПриЗагрузке(); - КонецЕсли; + ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке(ТолькоПроверка, ЕстьИзменения); - СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); - СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(); СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); // Найден - состояние, когда для объекта метаданных найден идентификатор. @@ -136,113 +146,34 @@ Попытка Блокировка.Заблокировать(); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Идентификаторы.Ссылка, - | Идентификаторы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, - | Идентификаторы.Родитель, - | Идентификаторы.ПометкаУдаления, - | Идентификаторы.Предопределенный КАК Предопределенный, - | Идентификаторы.Наименование, - | Идентификаторы.ПорядокКоллекции, - | Идентификаторы.Имя, - | Идентификаторы.Синоним, - | Идентификаторы.ПолноеИмя, - | Идентификаторы.ПолныйСиноним, - | Идентификаторы.БезДанных, - | Идентификаторы.ЗначениеПустойСсылки, - | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; - Выгрузка = Запрос.Выполнить().Выгрузить(); - Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); - Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); - Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево")); - Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); + Выгрузка = ВыгрузкаВсехИдентификаторов(); + Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); Выгрузка.Колонки.Добавить("ОбъектМетаданных"); - - // Упорядочение иденитификаторов перед обработкой. - Для каждого Строка Из Выгрузка Цикл - Если ТипЗнч(Строка.ХранилищеКлюча) = Тип("ХранилищеЗначения") Тогда - Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить(); - Иначе - Строка.КлючОбъектаМетаданных = Неопределено; - КонецЕсли; - - Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено - ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено"); - КонецЦикла; - Выгрузка.Сортировать("Предопределенный УБЫВ, - |ПометкаУдаления ВОЗР, - |БезКлючаОбъектаМетаданных ВОЗР"); - Выгрузка.Индексы.Добавить("ПолноеИмя"); + Выгрузка.Колонки.Удалить("НоваяСсылка"); Если НЕ ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда // Переименование полных имен перед обработкой (для РИБ только в главном узле). - ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных); - - Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл - ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя); - ЭтоПодсистема = ВРег(Лев(ОписаниеПереименования.СтароеПолноеИмя, 11)) = ВРег("Подсистема."); - - Для каждого Строка Из Выгрузка Цикл - - Если Строка.Предопределенный Тогда - Продолжить; - КонецЕсли; - - Если ЭтоПодсистема Тогда - Если ВРег(Лев(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени)) - = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда - - Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя - + Сред(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени + 1); - КонецЕсли; - Иначе - Если ВРег(Строка.ПолноеИмя) = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда - Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - КонецЦикла; + ПереименоватьПолныеИмена(Выгрузка); КонецЕсли; + СписокПереименованийОбъектовМетаданных = ""; ЕстьТекущиеКритичныеИзменения = Ложь; // Обработка идентификаторов объектов метаданных. Для каждого Свойства Из Выгрузка Цикл // Проверка и обновление свойств идентификаторов коллекций объектов метаданных. - СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти( - Свойства.Ссылка, "ИдентификаторКоллекции"); - - Если СвойстваКоллекции <> Неопределено Тогда - ПроверитьОбновитьСвойстваКоллекции(Свойства, СвойстваКоллекции); + Если Свойства.ЭтоКоллекция Тогда + ПроверитьОбновитьСвойстваКоллекции(Свойства); Продолжить; КонецЕсли; - Если Свойства.Предопределенный Тогда - ИмяПредопределенногоИдентификатора = Свойства.ИмяПредопределенныхДанных; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике ""Идентификаторы объектов метаданных"" - |для предопределенного элемента - |с именем ""%1"" - |и представлением ""%2"" - |не найдено типа объектов метаданных. - | - |Для разработчика: следует удалить предопределенный элемент.'"), - ИмяПредопределенногоИдентификатора, - Строка(Свойства.Ссылка)); - КонецЕсли; - КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда // Если объект метаданных без ключа, то его можно найти только по полному имени. - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); + ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); Иначе // Если объект метаданных удалялся с целью реструктуризации, тогда // старый идентификатор нужно использовать для нового объекта метаданных, @@ -250,7 +181,7 @@ Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда - НовыйОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); + НовыйОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); Если НовыйОбъектМетаданных <> Неопределено Тогда ОбъектМетаданных = НовыйОбъектМетаданных; КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора. @@ -261,30 +192,34 @@ // Если объект метаданных найден по ключу или полному имени, // тогда нужно подготовить строку свойств объекта метаданных. Если ОбъектМетаданных <> Неопределено Тогда - Свойства.ОбъектМетаданных = ОбъектМетаданных; СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); + Если СвойстваОбъекта = Неопределено Тогда + ОбъектМетаданных = Неопределено; + Иначе + Свойства.ОбъектМетаданных = ОбъектМетаданных; + КонецЕсли; КонецЕсли; Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда // Если объект метаданных не найден или найден повторно // тогда идентификатор требуется пометить на удаление. СвойстваОбновлены = Ложь; - ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены); + ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены, ЕстьУдаленные); Если СвойстваОбновлены Тогда Свойства.Обновлен = Истина; - ЕстьУдаленные = Истина; КонецЕсли; Иначе // Обновление свойств существующих объектов метаданных, если изменились. СвойстваОбъекта.Найден = Истина; - Если Свойства.Наименование <> СвойстваОбъекта.Наименование - ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции - ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя - ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним - ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя - ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним - ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных - ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки + Если Свойства.Наименование <> СвойстваОбъекта.Наименование + ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции + ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя + ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним + ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя + ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним + ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных + ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки + ИЛИ Свойства.ИмяПредопределенныхДанных <> "" ИЛИ Свойства.ПометкаУдаления ИЛИ КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных @@ -293,11 +228,16 @@ Если ВРег(Свойства.ПолноеИмя) <> ВРег(СвойстваОбъекта.ПолноеИмя) Тогда ЕстьТекущиеКритичныеИзменения = Истина; ЕстьКритичныеИзменения = Истина; + СписокПереименованийОбъектовМетаданных = СписокПереименованийОбъектовМетаданных + + ?(ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных), "," + Символы.ПС, "") + + Свойства.ПолноеИмя + " -> " + СвойстваОбъекта.ПолноеИмя; КонецЕсли; // Установка новых свойств идентификатора объекта метаданных. ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); + Свойства.ИмяПредопределенныхДанных = ""; + Если КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда @@ -311,13 +251,14 @@ КонецЕсли; КонецЦикла; + СписокНовыхОбъектовМетаданных = ""; + // Добавление идентификаторов новых объектов метаданных. Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл Свойства = Выгрузка.Добавить(); ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); Свойства.ЭтоНовый = Истина; Свойства.Ссылка = ПолучитьСсылку(); - Свойства.Предопределенный = Ложь; Свойства.ПометкаУдаления = Ложь; Свойства.ОбъектМетаданных = СвойстваОбъекта.ОбъектМетаданных; Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя); @@ -328,6 +269,17 @@ + СвойстваОбъекта.ПолноеИмя; КонецЦикла; + СписокКритичныхИзменений = ""; + Если ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных) Тогда + СписокКритичныхИзменений = НСтр("ru = 'Переименование идентификаторов объектов метаданных СтароеПолноеИмя -> НовоеПолноеИмя:'") + + Символы.ПС + СписокПереименованийОбъектовМетаданных + Символы.ПС + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных) Тогда + СписокКритичныхИзменений = СписокКритичныхИзменений + + НСтр("ru = 'Добавление новых идентификаторов объектов метаданных:'") + + Символы.ПС + СписокНовыхОбъектовМетаданных + Символы.ПС; + КонецЕсли; + Если НЕ (ТолькоПроверка ИЛИ МонопольныйРежим()) Тогда // Если кэш нужно обновить, тогда тоже нужен монопольный режим. ТребуетсяОбновитьТекущийКэш = Ложь; @@ -355,7 +307,7 @@ // Обновление родителей идентификаторов объектов метаданных. Для каждого Свойства Из Выгрузка Цикл - Если НЕ Свойства.Предопределенный Тогда + Если НЕ Свойства.ЭтоКоллекция Тогда СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); НовыйРодитель = ПустаяСсылка(); @@ -403,6 +355,17 @@ ОбновитьКэшИдентификаторов(Выгрузка, ЕстьИзменения, ТолькоПроверка); + Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Идентификаторы объектов метаданных.Выполнены критичные изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + , + СписокКритичныхИзменений, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -423,7 +386,6 @@ УстановитьМонопольныйРежим(Ложь); КонецЕсли; - КонецПроцедуры // Возвращает реквизиты справочника, которые образуют естественный ключ @@ -442,6 +404,243 @@ КонецФункции +// Только для внутреннего использования. +// +// Параметры: +// Объекты - Массив - значения типа СправочникОбъект.ИдентификаторыОбъектовМетаданных, +// которые требуется загрузить. +// +Процедура ЗагрузитьДанныеВПодчиненныйУзел(Объекты) Экспорт + + ПроверкаИспользования(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // В модели сервиса не поддерживается. + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ИдентификаторыОбъектовМетаданных"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + СнятьМонопольныйРежим = Ложь; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + // Подготовка исходной таблицы с учетом переименования для поиска дублей. + Выгрузка = ВыгрузкаВсехИдентификаторов(); + Выгрузка.Колонки.Добавить("ДубльОбновлен", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("ПолноеИмяНижнийРегистр", Новый ОписаниеТипов("Строка")); + + // Отбор только тех из загружаемых объектов, которые отличаются от существующих. + ТаблицаЗагружаемых = Новый ТаблицаЗначений; + ТаблицаЗагружаемых.Колонки.Добавить("Объект"); + ТаблицаЗагружаемых.Колонки.Добавить("Ссылка"); + ТаблицаЗагружаемых.Колонки.Добавить("ОбъектМетаданныхПоКлючу"); + ТаблицаЗагружаемых.Колонки.Добавить("ОбъектМетаданныхПоПолномуИмени"); + ТаблицаЗагружаемых.Колонки.Добавить("Совпадает", Новый ОписаниеТипов("Булево")); + + Для каждого Объект Из Объекты Цикл + СвойстваЗагружаемого = ТаблицаЗагружаемых.Добавить(); + СвойстваЗагружаемого.Объект = Объект; + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + СвойстваЗагружаемого.Ссылка = Объект.Ссылка; + Иначе + СвойстваЗагружаемого.Ссылка = Объект.ПолучитьСсылкуНового(); + Если Не ЗначениеЗаполнено(СвойстваЗагружаемого.Ссылка) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка загрузки идентификаторов объектов метаданных. + |Невозможно загрузить новый элемент у которого не указана ссылка нового: + |""%1"".'"), + Объект.ПолноеИмя); + КонецЕсли; + КонецЕсли; + + // Предварительная обработка. + + Если Не ЭтоКоллекция(СвойстваЗагружаемого.Ссылка) Тогда + СвойстваЗагружаемого.ОбъектМетаданныхПоКлючу = ОбъектМетаданныхПоКлючу( + Объект.КлючОбъектаМетаданных.Получить()); + + СвойстваЗагружаемого.ОбъектМетаданныхПоПолномуИмени = + МетаданныеНайтиПоПолномуИмени(Объект.ПолноеИмя); + + Если СвойстваЗагружаемого.ОбъектМетаданныхПоКлючу = Неопределено + И СвойстваЗагружаемого.ОбъектМетаданныхПоПолномуИмени = Неопределено + И Объект.ПометкаУдаления <> Истина Тогда + // Если по какой-то причине загружаемый объект не найден в метаданных, + // его следует пометить на удаление. + Объект.ПометкаУдаления = Истина; + КонецЕсли; + КонецЕсли; + + Если Объект.ПометкаУдаления Тогда + // Для помеченных на удаление недопустимо корректное полное имя, + // поэтому для надежного обеспечения этого условия, процедура обновления + // свойств помеченного дополнительно применяется перед загрузкой. + ОбновитьСвойстваПомеченногоНаУдаление(Объект); + КонецЕсли; + + Свойства = Выгрузка.Найти(СвойстваЗагружаемого.Ссылка, "Ссылка"); + Если Свойства <> Неопределено + И Свойства.Наименование = Объект.Наименование + И Свойства.Родитель = Объект.Родитель + И Свойства.ПорядокКоллекции = Объект.ПорядокКоллекции + И Свойства.Имя = Объект.Имя + И Свойства.Синоним = Объект.Синоним + И Свойства.ПолноеИмя = Объект.ПолноеИмя + И Свойства.ПолныйСиноним = Объект.ПолныйСиноним + И Свойства.БезДанных = Объект.БезДанных + И Свойства.ЗначениеПустойСсылки = Объект.ЗначениеПустойСсылки + И Свойства.ИмяПредопределенныхДанных = Объект.ИмяПредопределенныхДанных + И Свойства.ПометкаУдаления = Объект.ПометкаУдаления + И КлючиОбъектовМетаданныхСовпадают(Свойства, Объект) Тогда + + СвойстваЗагружаемого.Совпадает = Истина; + КонецЕсли; + + Если Свойства <> Неопределено Тогда + Выгрузка.Удалить(Свойства); // Загружаемые не нужно переименовывать. + КонецЕсли; + КонецЦикла; + ТаблицаЗагружаемых.Индексы.Добавить("Ссылка"); + + // Переименование существующих элементов (без загружаемых) для поиска дублей. + + ПереименоватьПолныеИмена(Выгрузка); + Для каждого Строка Из Выгрузка Цикл + Строка.ПолноеИмяНижнийРегистр = НРег(Строка.ПолноеИмя); + КонецЦикла; + Выгрузка.Индексы.Добавить("КлючОбъектаМетаданных"); + Выгрузка.Индексы.Добавить("ПолноеИмяНижнийРегистр"); + + // Подготовка загружаемых объектов и дублей в существующих. + + ОбъектыДляЗаписи = Новый Массив; + ПолныеИменаЗагружаемых = Новый Соответствие; + КлючиЗагружаемых = Новый Соответствие; + + Для каждого СвойстваЗагружаемого Из ТаблицаЗагружаемых Цикл + Объект = СвойстваЗагружаемого.Объект; + Ссылка = СвойстваЗагружаемого.Ссылка; + + Если СвойстваЗагружаемого.Совпадает Тогда + Продолжить; // Точно совпадающие объекты не требуется загружать. + КонецЕсли; + + Если ЭтоКоллекция(Ссылка) Тогда + ОбъектыДляЗаписи.Добавить(Объект); + Продолжить; + КонецЕсли; + + // Проверка отсутствия дублей среди загружаемых элементов. + + Если ПолныеИменаЗагружаемых.Получить(НРег(Объект.ПолноеИмя)) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка загрузки идентификаторов объектов метаданных. + |Невозможно загрузить два элемента у которых совпадает полное имя: + |""%1"".'"), + Объект.ПолноеИмя); + КонецЕсли; + ПолныеИменаЗагружаемых.Вставить(НРег(Объект.ПолноеИмя)); + + КлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить(); + Если ТипЗнч(КлючОбъектаМетаданных) = Тип("Тип") + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + + Если КлючиЗагружаемых.Получить(КлючОбъектаМетаданных) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка загрузки идентификаторов объектов метаданных. + |Невозможно загрузить два элемента у которых совпадает ключ объекта метаданных: + |""%1"".'"), + Строка(КлючОбъектаМетаданных)); + КонецЕсли; + КлючиЗагружаемых.Вставить(КлючОбъектаМетаданных); + + Если СвойстваЗагружаемого.ОбъектМетаданныхПоКлючу <> СвойстваЗагружаемого.ОбъектМетаданныхПоПолномуИмени Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка загрузки идентификаторов объектов метаданных. + |Невозможно загрузить элемент у которого ключ объекта метаданных + |""%1"" не соответствует полному имени ""%2"".'"), + Строка(КлючОбъектаМетаданных), Объект.ПолноеИмя); + КонецЕсли; + + Если Не Объект.ПометкаУдаления Тогда + // Определение дублей среди существующих объектов метаданных по ключу. + Строки = Выгрузка.НайтиСтроки(Новый Структура("КлючОбъектаМетаданных", КлючОбъектаМетаданных)); + Для каждого Строка Из Строки Цикл + + Если Строка.Ссылка <> Ссылка + И ТаблицаЗагружаемых.Найти(Строка.Ссылка, "Ссылка") = Неопределено Тогда + + ОбновитьСвойстваПомеченногоНаУдаление(Строка); + Строка.НоваяСсылка = Ссылка; + Строка.ДубльОбновлен = Истина; + // Замена новых ссылок на дубль на новую ссылку заданную для дубля (если есть). + СтарыеДубли = Выгрузка.НайтиСтроки(Новый Структура("НоваяСсылка", Строка.Ссылка)); + Для каждого СтарыйДубль Из СтарыеДубли Цикл + ОбновитьСвойстваПомеченногоНаУдаление(СтарыйДубль); + СтарыйДубль.НоваяСсылка = Ссылка; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если Не Объект.ПометкаУдаления Тогда + // Определение дублей среди существующих объектов метаданных по полному имени. + Строки = Выгрузка.НайтиСтроки(Новый Структура("ПолноеИмяНижнийРегистр", НРег(Объект.ПолноеИмя))); + Для каждого Строка Из Строки Цикл + + Если Строка.Ссылка <> Ссылка + И ТаблицаЗагружаемых.Найти(Строка.Ссылка, "Ссылка") = Неопределено Тогда + + ОбновитьСвойстваПомеченногоНаУдаление(Строка); + Строка.НоваяСсылка = Ссылка; + Строка.ДубльОбновлен = Истина; + // Замена новых ссылок на дубль на новую ссылку заданную для дубля (если есть). + СтарыеДубли = Выгрузка.НайтиСтроки(Новый Структура("НоваяСсылка", Строка.Ссылка)); + Для каждого СтарыйДубль Из СтарыеДубли Цикл + ОбновитьСвойстваПомеченногоНаУдаление(СтарыйДубль); + СтарыйДубль.НоваяСсылка = Ссылка; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОбъектыДляЗаписи.Добавить(Объект); + КонецЦикла; + + // Обновление дублей. + Строки = Выгрузка.НайтиСтроки(Новый Структура("ДубльОбновлен", Истина)); + Для каждого Свойства Из Строки Цикл + ОбъектДубля = Свойства.Ссылка.ПолучитьОбъект(); + ЗаполнитьЗначенияСвойств(ОбъектДубля, Свойства); + ОбъектДубля.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); + ОбъектДубля.ОбменДанными.Загрузка = Истина; + ОбъектДубля.Записать(); + КонецЦикла; + + // Загрузка объектов. + Для каждого Объект Из ОбъектыДляЗаписи Цикл + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + // Только для внутреннего использования. Процедура ПроверкаИспользования() Экспорт @@ -450,10 +649,28 @@ НСтр("ru = 'Справочник ""Идентификаторы объектов метаданных"" не используется.'"); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + + Если СтандартныеПодсистемыСервер.ПланыОбменаМенеджер().ГлавныйУзел() = Неопределено + И ЗначениеЗаполнено(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Константа.ГлавныйУзел").Получить()) Тогда + + ВызватьИсключение + НСтр("ru = 'Справочник ""Идентификаторы объектов метаданных"" не может использоваться + |в информационной базе с неподтвержденной отменой главного узла. + | + |Для восстановления связи с главным узлом запустите 1C:Предприятие и + |нажмите кнопку Восстановить или программно установите главный узел, + |сохраненный в константе Главный узел. + | + |Для подтверждения отмены связи с главным узлом запустите 1C:Предприятие и + |нажмите кнопку Отключить или программно очистите константу Главный узел.'"); + КонецЕсли; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) Экспорт @@ -474,11 +691,13 @@ КонецЕсли; Иначе // Ключ не задан, поиск объекта метаданных по полному имени - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваИдентификатора.ПолноеИмя); + ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(СвойстваИдентификатора.ПолноеИмя); Если ОбъектМетаданных = Неопределено Тогда // Возможно задана коллекция - СвойстваКоллекций = СвойстваКоллекцийОбъектовМетаданных(); - Строка = СвойстваКоллекций.Найти(СвойстваИдентификатора.Ссылка, "ИдентификаторКоллекции"); + + Строка = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных().Найти( + СвойстваИдентификатора.Ссылка, "ИдентификаторКоллекции"); + Если Строка <> Неопределено Тогда ОбъектМетаданных = Метаданные[Строка.Имя]; РезультатПроверки.НеСоответствует = Строка.Имя <> СвойстваИдентификатора.ПолноеИмя; @@ -536,7 +755,7 @@ ЗаполнитьЗначенияСвойств(Объект, СтарыеЗначения); КонецЕсли; - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(ПолноеИмя); Если ОбъектМетаданных = Неопределено Тогда Объект.ПометкаУдаления = Истина; @@ -558,12 +777,11 @@ ПозицияТочки = Найти(ПолноеИмя, "."); ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки -1); - СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа); - Строки = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор); - СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных.Скопировать(Строки); + Строки = СвойстваКоллекций.НайтиСтроки(Отбор); - СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекций.Скопировать(Строки)); СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ПолноеИмя, "ПолноеИмя"); ЗаполнитьЗначенияСвойств(Объект, СвойстваОбъекта); @@ -584,15 +802,15 @@ // Только для внутреннего использования. Функция ЗапрещеноИзменятьПолноеИмя(Объект) Экспорт - Если Объект.Предопределенный Тогда + Если ЭтоКоллекция(Объект.Ссылка) Тогда Возврат Истина; КонецЕсли; ПозицияТочки = Найти(Объект.ПолноеИмя, "."); ИмяБазовогоТипа = Лев(Объект.ПолноеИмя, ПозицияТочки -1); - СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); - СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле"); + СвойстваКоллекции = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( + ).Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле"); Если СвойстваКоллекции <> Неопределено И НЕ СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда @@ -605,110 +823,7 @@ КонецФункции // Только для внутреннего использования. -Процедура ОбработкаДублейПодчиненногоУзлаПриЗагрузкеНового(Объект) Экспорт - - ПроверкаИспользования(); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // В модели сервиса не поддерживается. - Возврат; - КонецЕсли; - - Если Объект.ПометкаУдаления Тогда - ПолноеИмяОбъекта = Сред(Объект.ПолноеИмя, 3); - Если Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта) <> Неопределено Тогда - Возврат; - КонецЕсли; - Иначе - ПолноеИмяОбъекта = Объект.ПолноеИмя; - КонецЕсли; - - Если Объект.ЭтоНовый() Тогда - НоваяСсылка = Объект.ПолучитьСсылкуНового(); - Если НЕ ЗначениеЗаполнено(НоваяСсылка) Тогда - Возврат; - КонецЕсли; - Иначе - НоваяСсылка = Объект.Ссылка; - КонецЕсли; - - ЕстьКлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить() <> Тип("Неопределено"); - ТаблицаПереименования = СтандартныеПодсистемыПовтИсп.ТаблицаПереименованияДляТекущейВерсии(); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НоваяСсылка", НоваяСсылка); - Запрос.Текст = - "ВЫБРАТЬ - | Идентификаторы.Ссылка КАК Ссылка, - | Идентификаторы.ПолноеИмя, - | Идентификаторы.КлючОбъектаМетаданных - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы - |ГДЕ - | Идентификаторы.Ссылка <> &НоваяСсылка - | И Идентификаторы.ПометкаУдаления = ЛОЖЬ"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОбъектМетаданных = ОбъектМетаданныхПоКлючу(Выборка.КлючОбъектаМетаданных.Получить()); - ВыполнитьПереименование = Ложь; - Если Объект.ПометкаУдаления Тогда - Если ОбъектМетаданных <> Неопределено Тогда - Продолжить; - КонецЕсли; - ПолноеИмя = Выборка.ПолноеИмя; - ВыполнитьПереименование = Истина; - Иначе - Если ЕстьКлючОбъектаМетаданных Тогда - Если ОбъектМетаданных = Неопределено Тогда - Продолжить; - КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Иначе - ПолноеИмя = Выборка.ПолноеИмя; - ВыполнитьПереименование = Истина; - КонецЕсли; - КонецЕсли; - Если ВыполнитьПереименование Тогда - Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл - Если ПолноеИмя = ОписаниеПереименования.СтароеПолноеИмя Тогда - ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ВРег(ПолноеИмя) <> ВРег(ПолноеИмяОбъекта) Тогда - Продолжить; - КонецЕсли; - // Найден дубль, созданный в подчиненном узле. - ОбъектДубля = Выборка.Ссылка.ПолучитьОбъект(); - ОбновитьСвойстваПомеченногоНаУдаление(ОбъектДубля); - ОбъектДубля.НоваяСсылка = НоваяСсылка; - ОбъектДубля.ОбменДанными.Загрузка = Истина; - ОбъектДубля.Записать(); - - // Замена новых ссылок на дубль на новую ссылку заданную для дубля (если есть). - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НоваяСсылка", ОбъектДубля.Ссылка); - Запрос.Текст = - "ВЫБРАТЬ - | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных - |ГДЕ - | ИдентификаторыОбъектовМетаданных.НоваяСсылка = &НоваяСсылка"; - НайденныеЭлементы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Для каждого НайденныйЭлемент Из НайденныеЭлементы Цикл - ОбъектЭлемента = НайденныйЭлемент.ПолучитьОбъект(); - ОбъектЭлемента.НоваяСсылка = НоваяСсылка; - ОбъектЭлемента.ОбменДанными.Загрузка = Истина; - ОбъектЭлемента.Записать(); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Только для внутреннего использования. -Функция ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных) Экспорт +Функция ТаблицаПереименованияДляТекущейВерсии() Экспорт ТаблицаПереименования = Новый ТаблицаЗначений; ТаблицаПереименования.Колонки.Добавить("ПорядокБиблиотеки", Новый ОписаниеТипов("Число")); @@ -723,7 +838,9 @@ КоллекцииБезКлюча = Новый Соответствие; Отбор = Новый Структура("БезКлючаОбъектаМетаданных", Истина); - КоллекцииБезКлючаОбъектаМетаданных = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор); + + КоллекцииБезКлючаОбъектаМетаданных = + СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных().НайтиСтроки(Отбор); Для каждого Строка Из КоллекцииБезКлючаОбъектаМетаданных Цикл КоллекцииБезКлюча.Вставить(ВРег(Строка.ИмяВЕдЧисле), Строка.ИмяВЕдЧисле); @@ -757,7 +874,7 @@ КонецФункции -// Только для внутреннего использования. +// Только для внутреннего использования Функция СвойстваКоллекцийОбъектовМетаданных() Экспорт СвойстваКоллекцийОбъектовМетаданных = Новый ТаблицаЗначений; @@ -769,9 +886,19 @@ СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ИдентификаторКоллекции", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(36))); + + // Константы + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "627a6fb8-872a-11e3-bb87-005056c00008"; + Строка.Имя = "Константы"; + Строка.Синоним = НСтр("ru = 'Константы'"); + Строка.ИмяВЕдЧисле = "Константа"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Константа'"); // Подсистемы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "cdf5ac50-08e8-46af-9a80-4e63fd4a88ff"; Строка.Имя = "Подсистемы"; Строка.Синоним = НСтр("ru = 'Подсистемы'"); Строка.ИмяВЕдЧисле = "Подсистема"; @@ -781,6 +908,7 @@ // Роли Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "115c4f55-9c20-4e86-a6d0-d0167ec053a1"; Строка.Имя = "Роли"; Строка.Синоним = НСтр("ru = 'Роли'"); Строка.ИмяВЕдЧисле = "Роль"; @@ -790,6 +918,7 @@ // ПланыОбмена Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "269651e0-4b06-4f9d-aaab-a8d2b6bc6077"; Строка.Имя = "ПланыОбмена"; Строка.Синоним = НСтр("ru = 'Планы обмена'"); Строка.ИмяВЕдЧисле = "ПланОбмена"; @@ -797,6 +926,7 @@ // Справочники Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "ede89702-30f5-4a2a-8e81-c3a823b7e161"; Строка.Имя = "Справочники"; Строка.Синоним = НСтр("ru = 'Справочники'"); Строка.ИмяВЕдЧисле = "Справочник"; @@ -804,6 +934,7 @@ // Документы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "96c6ab56-0375-40d5-99a2-b83efa3dac8b"; Строка.Имя = "Документы"; Строка.Синоним = НСтр("ru = 'Документы'"); Строка.ИмяВЕдЧисле = "Документ"; @@ -811,6 +942,7 @@ // ЖурналыДокументов Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "07938234-e29b-4cff-961a-9af07a4c6185"; Строка.Имя = "ЖурналыДокументов"; Строка.Синоним = НСтр("ru = 'Журналы документов'"); Строка.ИмяВЕдЧисле = "ЖурналДокументов"; @@ -819,6 +951,7 @@ // Отчеты Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "706cf832-0ae5-45b5-8a4a-1f251d054f3b"; Строка.Имя = "Отчеты"; Строка.Синоним = НСтр("ru = 'Отчеты'"); Строка.ИмяВЕдЧисле = "Отчет"; @@ -827,6 +960,7 @@ // Обработки Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "ae480426-487e-40b2-98ba-d207777449f3"; Строка.Имя = "Обработки"; Строка.Синоним = НСтр("ru = 'Обработки'"); Строка.ИмяВЕдЧисле = "Обработка"; @@ -835,6 +969,7 @@ // ПланыВидовХарактеристик Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "8b5649b9-cdd1-4698-9aac-12ba146835c4"; Строка.Имя = "ПланыВидовХарактеристик"; Строка.Синоним = НСтр("ru = 'Планы видов характеристик'"); Строка.ИмяВЕдЧисле = "ПланВидовХарактеристик"; @@ -842,6 +977,7 @@ // ПланыСчетов Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "4295af27-543f-4373-bcfc-c0ace9b7620c"; Строка.Имя = "ПланыСчетов"; Строка.Синоним = НСтр("ru = 'Планы счетов'"); Строка.ИмяВЕдЧисле = "ПланСчетов"; @@ -849,6 +985,7 @@ // ПланыВидовРасчета Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "fca3e7e1-1bf1-49c8-9921-aafb4e787c75"; Строка.Имя = "ПланыВидовРасчета"; Строка.Синоним = НСтр("ru = 'Планы видов расчета'"); Строка.ИмяВЕдЧисле = "ПланВидовРасчета"; @@ -856,6 +993,7 @@ // РегистрыСведений Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "d7ecc1e9-c068-44dd-83c2-1323ec52dbbb"; Строка.Имя = "РегистрыСведений"; Строка.Синоним = НСтр("ru = 'Регистры сведений'"); Строка.ИмяВЕдЧисле = "РегистрСведений"; @@ -863,6 +1001,7 @@ // РегистрыНакопления Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "74083488-b01e-4441-84a6-c386ce88cdb5"; Строка.Имя = "РегистрыНакопления"; Строка.Синоним = НСтр("ru = 'Регистры накопления'"); Строка.ИмяВЕдЧисле = "РегистрНакопления"; @@ -870,6 +1009,7 @@ // РегистрыБухгалтерии Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "9a0d75ff-0eda-454e-b2b7-d2412ffdff18"; Строка.Имя = "РегистрыБухгалтерии"; Строка.Синоним = НСтр("ru = 'Регистры бухгалтерии'"); Строка.ИмяВЕдЧисле = "РегистрБухгалтерии"; @@ -877,6 +1017,7 @@ // РегистрыРасчета Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "f330686a-0acf-4e26-9cda-108f1404687d"; Строка.Имя = "РегистрыРасчета"; Строка.Синоним = НСтр("ru = 'Регистры расчета'"); Строка.ИмяВЕдЧисле = "РегистрРасчета"; @@ -884,6 +1025,7 @@ // БизнесПроцессы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "a8cdd0e0-c27f-4bf0-9718-10ec054dc468"; Строка.Имя = "БизнесПроцессы"; Строка.Синоним = НСтр("ru = 'Бизнес-процессы'"); Строка.ИмяВЕдЧисле = "БизнесПроцесс"; @@ -891,27 +1033,15 @@ // Задачи Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Идентификатор = "8d9153ad-7cea-4e25-9542-a557ee59fd16"; Строка.Имя = "Задачи"; Строка.Синоним = НСтр("ru = 'Задачи'"); Строка.ИмяВЕдЧисле = "Задача"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'"); - // Заполнение дополнительных свойств. - СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); - Для каждого Строка Из СвойстваКоллекцийОбъектовМетаданных Цикл - Попытка - Строка.ИдентификаторКоллекции = СправочникМенеджер[Строка.Имя]; - Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден идентификатор типа объектов метаданных - |""%1"". - | - |Для разработчика: следует добавить предопределенный элемент в - |Справочник ""Идентификаторы объектов метаданных"".'"), - Строка.Имя); - КонецПопытки; - Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка); + Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка); + Строка.ИдентификаторКоллекции = ПолучитьСсылку(Новый УникальныйИдентификатор(Строка.Идентификатор)); КонецЦикла; СвойстваКоллекцийОбъектовМетаданных.Индексы.Добавить("ИдентификаторКоллекции"); @@ -920,8 +1050,110 @@ КонецФункции +// Только для внутреннего использования +Функция ЭтоКоллекция(Ссылка) Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( + ).Найти(Ссылка, "ИдентификаторКоллекции") <> Неопределено; + +КонецФункции -Процедура ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены = Ложь) + +Функция ВыгрузкаВсехИдентификаторов() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | Идентификаторы.Родитель, + | Идентификаторы.ПометкаУдаления, + | Идентификаторы.Наименование, + | Идентификаторы.ПорядокКоллекции, + | Идентификаторы.Имя, + | Идентификаторы.Синоним, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.ПолныйСиноним, + | Идентификаторы.БезДанных, + | Идентификаторы.ЗначениеПустойСсылки, + | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча, + | Идентификаторы.НоваяСсылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); + Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("ЭтоКоллекция", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево")); + + // Упорядочение иденитификаторов перед обработкой. + Для каждого Строка Из Выгрузка Цикл + Если ТипЗнч(Строка.ХранилищеКлюча) = Тип("ХранилищеЗначения") Тогда + Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить(); + Иначе + Строка.КлючОбъектаМетаданных = Неопределено; + КонецЕсли; + + Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено + ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено"); + КонецЦикла; + + Выгрузка.Индексы.Добавить("Ссылка"); + Выгрузка.Индексы.Добавить("ПолноеИмя"); + + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); + + Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл + Строка = Выгрузка.Найти(СвойстваКоллекции.ИдентификаторКоллекции, "Ссылка"); + Если Строка = Неопределено Тогда + Строка = Выгрузка.Добавить(); + Строка.Ссылка = СвойстваКоллекции.ИдентификаторКоллекции; + Строка.ЭтоНовый = Истина; + КонецЕсли; + Строка.ЭтоКоллекция = Истина; + КонецЦикла; + + Выгрузка.Сортировать("ЭтоКоллекция УБЫВ, + |ПометкаУдаления ВОЗР, + |БезКлючаОбъектаМетаданных ВОЗР"); + + Возврат Выгрузка; + +КонецФункции + +Процедура ПереименоватьПолныеИмена(Выгрузка) + + ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(); + + Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл + ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя); + ЭтоПодсистема = ВРег(Лев(ОписаниеПереименования.СтароеПолноеИмя, 11)) = ВРег("Подсистема."); + + Для каждого Строка Из Выгрузка Цикл + + Если Строка.ЭтоКоллекция Тогда + Продолжить; + КонецЕсли; + + Если ЭтоПодсистема Тогда + Если ВРег(Лев(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени)) + = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда + + Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя + + Сред(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени + 1); + КонецЕсли; + Иначе + Если ВРег(Строка.ПолноеИмя) = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда + Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены = Ложь, ЕстьУдаленные = Ложь) Если ТипЗнч(Свойства.КлючОбъектаМетаданных) = Тип("ХранилищеЗначения") Тогда КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных.Получить(); @@ -936,16 +1168,21 @@ ИЛИ Лев(Свойства.Синоним, 1) <> "?" ИЛИ Лев(Свойства.ПолноеИмя, 1) <> "?" ИЛИ Лев(Свойства.ПолныйСиноним, 1) <> "?" + ИЛИ Найти(Свойства.ПолноеИмя, "(") = 0 ИЛИ Свойства.ЗначениеПустойСсылки <> Неопределено ИЛИ КлючОбъектаМетаданных <> Неопределено Тогда + Если НЕ Свойства.ПометкаУдаления Или Лев(Свойства.ПолноеИмя, 1) <> "?" Тогда + ЕстьУдаленные = Истина; + КонецЕсли; + // Установка новых свойств идентификатора объекта метаданных. Свойства.ПометкаУдаления = Истина; Свойства.Родитель = ПустаяСсылка(); Свойства.Наименование = ВставитьЗнакВопроса(Свойства.Наименование); Свойства.Имя = ВставитьЗнакВопроса(Свойства.Имя); Свойства.Синоним = ВставитьЗнакВопроса(Свойства.Синоним); - Свойства.ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя); + Свойства.ПолноеИмя = УникальноеПолноеИмя(Свойства); Свойства.ПолныйСиноним = ВставитьЗнакВопроса(Свойства.ПолныйСиноним); Свойства.ЗначениеПустойСсылки = Неопределено; Если ТипЗнч(Свойства.КлючОбъектаМетаданных) = Тип("ХранилищеЗначения") Тогда @@ -958,30 +1195,38 @@ КонецПроцедуры -Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства, Знач НовыеСвойства) +Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства) + + НовыеСвойства = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( + ).Найти(ТекущиеСвойства.Ссылка, "ИдентификаторКоллекции"); НаименованиеКоллекции = НовыеСвойства.Синоним; - Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции - ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции - ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя - ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним - ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя - ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним - ИЛИ ТекущиеСвойства.БезДанных <> Ложь - ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено - ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных <> Неопределено Тогда + Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции + ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции + ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.БезДанных <> Ложь + ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено + ИЛИ ТекущиеСвойства.ИмяПредопределенныхДанных <> "" + ИЛИ ТекущиеСвойства.ПометкаУдаления <> Ложь + ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных <> Неопределено Тогда // Установка новых свойств. - ТекущиеСвойства.Наименование = НаименованиеКоллекции; - ТекущиеСвойства.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции; - ТекущиеСвойства.Имя = НовыеСвойства.Имя; - ТекущиеСвойства.Синоним = НовыеСвойства.Синоним; - ТекущиеСвойства.ПолноеИмя = НовыеСвойства.Имя; - ТекущиеСвойства.ПолныйСиноним = НовыеСвойства.Синоним; - ТекущиеСвойства.БезДанных = Ложь; - ТекущиеСвойства.ЗначениеПустойСсылки = Неопределено; - ТекущиеСвойства.КлючОбъектаМетаданных = Неопределено; + ТекущиеСвойства.Наименование = НаименованиеКоллекции; + ТекущиеСвойства.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции; + ТекущиеСвойства.Имя = НовыеСвойства.Имя; + ТекущиеСвойства.Синоним = НовыеСвойства.Синоним; + ТекущиеСвойства.ПолноеИмя = НовыеСвойства.Имя; + ТекущиеСвойства.ПолныйСиноним = НовыеСвойства.Синоним; + ТекущиеСвойства.БезДанных = Ложь; + ТекущиеСвойства.ЗначениеПустойСсылки = Неопределено; + ТекущиеСвойства.ИмяПредопределенныхДанных = ""; + ТекущиеСвойства.ПометкаУдаления = Ложь; + ТекущиеСвойства.КлючОбъектаМетаданных = Неопределено; + ТекущиеСвойства.Обновлен = Истина; КонецЕсли; @@ -997,6 +1242,9 @@ Если ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + ИначеЕсли ВРег(КлассОМ) = ВРег("Константа") Тогда + Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя)); + ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); @@ -1045,6 +1293,12 @@ КонецФункции +Функция КлючиОбъектовМетаданныхСовпадают(Свойства, Объект) + + Возврат Свойства.КлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить(); + +КонецФункции + Функция ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных) ОбъектМетаданных = Неопределено; @@ -1057,7 +1311,7 @@ КонецФункции -Функция СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных) +Функция СвойстваОбъектовМетаданных(СвойстваКоллекций = Неопределено) СвойстваОбъектовМетаданных = Новый ТаблицаЗначений; СвойстваОбъектовМетаданных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); @@ -1073,7 +1327,11 @@ СвойстваОбъектовМетаданных.Колонки.Добавить("ЗначениеПустойСсылки"); СвойстваОбъектовМетаданных.Колонки.Добавить("ОбъектМетаданных"); - Для каждого СвойстваКоллекции Из СвойстваКоллекцийОбъектовМетаданных Цикл + Если СвойстваКоллекций = Неопределено Тогда + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); + КонецЕсли; + + Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных); КонецЦикла; @@ -1092,9 +1350,13 @@ Для каждого ОбъектМетаданных Из КолекцияОбъектовМетаданных Цикл ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Подсистема") <> 0 Тогда + МетаданныеНайтиПоПолномуИмени(ПолноеИмя); + КонецЕсли; Если НЕ СвойстваКоллекции.БезДанных - И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 Тогда + И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 + И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда ЗначениеПустойСсылки = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).ПустаяСсылка(); Иначе @@ -1159,6 +1421,18 @@ КонецФункции +Функция УникальноеПолноеИмя(Свойства) + + ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя); + + Если Найти(ПолноеИмя, "(") = 0 Тогда + ПолноеИмя = ПолноеИмя + " (" + Строка(Свойства.Ссылка.УникальныйИдентификатор())+ ")"; + КонецЕсли; + + Возврат ПолноеИмя; + +КонецФункции + Процедура ОбновитьКэшИдентификаторов(Выгрузка, ЕстьИзменения, ТолькоПроверка); // Обновление параметра работы программы ИдентификаторыОбъектовМетаданных, @@ -1178,7 +1452,9 @@ // Параметры для быстрого поиска идентификатора. ПоПолнымИменам.Вставить(Свойства.ПолноеИмя, Свойства.Ссылка); - Если НЕ Свойства.БезДанных Тогда + Если НЕ Свойства.БезДанных + И НЕ Метаданные.Константы.Содержит(Свойства.ОбъектМетаданных) Тогда + ТипСсылки = СтандартныеПодсистемыСервер.ТипСсылкиИлиКлючаЗаписиОбъектаМетаданных( Свойства.ОбъектМетаданных); @@ -1237,10 +1513,78 @@ КонецПроцедуры +Функция МетаданныеНайтиПоПолномуИмени(ПолноеИмя) + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + + Если ОбъектМетаданных = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ВРег(ОбъектМетаданных.ПолноеИмя()) <> ВРег(ПолноеИмя) Тогда + + Если СтрЧислоВхождений(ВРег(ПолноеИмя), ВРег("Подсистема.")) > 1 Тогда + Подсистема = НайтиПодсистемуПоПолномуИмени(ПолноеИмя); + Если Подсистема = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при поиске дочерней подсистемы по полному имени (при поиске ""%1"" была найдена ""%2""). + |Не следует называть подсистемы одинаково, либо использовать более новую версию платформы.'"), + ПолноеИмя, + ОбъектМетаданных.ПолноеИмя()); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при поиске объекта метаданных по полному имени (при поиске ""%1"" был найден ""%2"").'"), + ПолноеИмя, + ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + КонецЕсли; + + Возврат ОбъектМетаданных; + +КонецФункции + +Функция НайтиПодсистемуПоПолномуИмени(ПолноеИмя, КоллекцияПодсистемы = Неопределено) + + Если КоллекцияПодсистемы = Неопределено Тогда + КоллекцияПодсистемы = Метаданные.Подсистемы; + КонецЕсли; + + ОстатокИмени = Сред(ПолноеИмя, СтрДлина("Подсистема.") + 1); + Позиция = Найти(ВРег(ОстатокИмени), ВРег("Подсистема.")); + Если Позиция > 0 Тогда + ИмяПодсистемы = Лев(ОстатокИмени, Позиция - 2); + ОстатокИмени = Сред(ПолноеИмя, Позиция + СтрДлина("Подсистема.")); + Иначе + ИмяПодсистемы = ОстатокИмени; + ОстатокИмени = Неопределено; + КонецЕсли; + + НайденнаяПодсистема = Неопределено; + Для каждого Подсистема Из КоллекцияПодсистемы Цикл + Если ВРег(Подсистема.Имя) = ВРег(ИмяПодсистемы) Тогда + НайденнаяПодсистема = Подсистема; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НайденнаяПодсистема = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ОстатокИмени = Неопределено Тогда + Возврат НайденнаяПодсистема; + КонецЕсли; + + Возврат НайтиПодсистемуПоПолномуИмени(ОстатокИмени, НайденнаяПодсистема.Подсистемы); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции замены идентификатора в базе данных -Процедура ЗаменаДублейПодчиненногоУзлаНайденныхПриЗагрузке() +Процедура ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке(ТолькоПроверка, ЕстьИзменения) Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // В модели сервиса не поддерживается. @@ -1267,6 +1611,11 @@ Возврат; КонецЕсли; + Если ТолькоПроверка Тогда + ЕстьИзменения = Истина; + Возврат; + КонецЕсли; + Если МонопольныйРежим() Тогда СнятьМонопольныйРежим = Ложь; Иначе @@ -1630,7 +1979,8 @@ ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда - Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент); + ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + СтрокаТаблицы.Метаданные.ПолноеИмя()).Установить(ПравильныйЭлемент); ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда @@ -1656,7 +2006,6 @@ НаборЗаписей.ОбменДанными.Загрузка = Истина; КонецЕсли; - Если Не ВыполнятьВТранзакции Тогда НачатьТранзакцию(); КонецЕсли; @@ -1746,4 +2095,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl index 2901136fa..06fda95e7 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий // Предотвращает недопустимое изменение идентификаторов объектов метаданных. // Выполняет обработку дублей подчиненного узла распределенной информационной базы. @@ -19,9 +18,6 @@ КонецЦикла; Если ОбменДанными.Загрузка Тогда - Если ДополнительныеСвойства.Свойство("ЗагрузкаПараметровРаботыПрограммы") Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ОбработкаДублейПодчиненногоУзлаПриЗагрузкеНового(ЭтотОбъект); - КонецЕсли; Возврат; КонецЕсли; @@ -57,13 +53,17 @@ Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Если ЭтоНовый() Тогда + Если ЭтоНовый() + И Не Справочники.ИдентификаторыОбъектовМетаданных.ЭтоКоллекция(ПолучитьСсылкуНового()) Тогда + ВызватьИсключениеПоОшибке( НСтр("ru = 'Добавление новых элементов может быть выполнено |только в главном узле распределенной информационной базы.'")); КонецЕсли; - Если НЕ ПометкаУдаления Тогда + Если Не ПометкаУдаления + И Не Справочники.ИдентификаторыОбъектовМетаданных.ЭтоКоллекция(Ссылка) Тогда + Если ВРег(ПолноеИмя) <> ВРег(ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ПолноеИмя")) Тогда ВызватьИсключениеПоОшибке( НСтр("ru = 'Изменение реквизита ""Полное имя"" может быть выполнено @@ -79,6 +79,11 @@ Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + // Отключение механизма регистрации объектов. + // Ссылки идентификаторов удаляются независимо во всех узлах + // через механизм пометки удаления и удаления помеченных объектов. + ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -103,4 +108,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index 10d1fa4c3..8204c110a 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -113,6 +113,11 @@ Use + + + ru + + Managed ru @@ -130,110 +135,6 @@ String Variable AsDescription - - - Документы - - - - - - ЖурналыДокументов - - - - - - ПланыОбмена - - - - - - Подсистемы - - - - - - РегистрыНакопления - - - - - - РегистрыСведений - - - - - - Роли - - - - - - Справочники - - - - - - Отчеты - - - - - - Обработки - - - - - - ПланыВидовХарактеристик - - - - - - ПланыСчетов - - - - - - ПланыВидовРасчета - - - - - - РегистрыБухгалтерии - - - - - - РегистрыРасчета - - - - - - БизнесПроцессы - - - - - - Задачи - - - - - InDialog BothWays Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаЭлемента @@ -271,6 +172,7 @@ ru Имя + Например, "ОбъектыАдресацииЗадач" String @@ -279,8 +181,7 @@ ru - Имя объекта метаданных, -например, "ОбъектыАдресацииЗадач" + Имя объекта метаданных @@ -317,6 +218,7 @@ ru Полное имя + Например, "ПланВидовХарактеристик.ОбъектыАдресацииЗадач" String @@ -325,8 +227,7 @@ ru - Полное имя объекта метаданных, -например, "ПланВидовХарактеристик.ОбъектыАдресацииЗадач" + Полное имя объекта метаданных @@ -450,6 +351,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl index bc154f77e..4032a9946 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,8 +25,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -57,8 +58,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Функция РасписаниеДня() @@ -116,4 +118,6 @@ Модифицированность = Ложь; ОповеститьОВыборе(Новый Структура("РасписаниеРаботы", РасписаниеДня)); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index df16af177..070590f11 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -13,6 +13,40 @@ true None + + Ссылка + 27 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 28 + true + + LabelField + Enter + true + Left + true + + true + true + + Наименование 4 @@ -203,10 +237,10 @@
      СписокСтрокаПоиска - 27 + 32 СписокСтрокаПоискаРасширеннаяПодсказка - 29 + 34 Label true true @@ -216,7 +250,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 28 + 33 true Список @@ -226,10 +260,10 @@ СписокСостояниеПросмотра - 30 + 35 СписокСостояниеПросмотраРасширеннаяПодсказка - 32 + 37 Label true true @@ -239,7 +273,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 31 + 36 true ViewStatusAddition @@ -250,10 +284,10 @@ СписокУправлениеПоиском - 33 + 38 СписокУправлениеПоискомРасширеннаяПодсказка - 35 + 40 Label true true @@ -263,7 +297,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 34 + 39 true SearchControlAddition @@ -329,6 +363,32 @@ ФормаКоманднаяПанель -1 + + СписокИзменитьВыделенные + 30 + true + true + + true + + + СписокИзменитьВыделенныеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -359,6 +419,9 @@ true + + Список.Ref + Список.ТребуетЗаполнения @@ -441,6 +504,28 @@ 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 38a706a61..a432556cd 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,3 +19,15 @@ РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИзменитьВыделенные(Команда) + МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); + МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index f057d4de3..000000000 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - ШаблонЗаполненияПредставлениеРасписания - - - - - Объект.ШаблонЗаполнения.ПредставлениеРасписания - NotFilled - - - Объект.ШаблонЗаполнения.ДеньВключенВГрафик - Equal - true - - - - - Текст - Заполнить расписание - - - - - - - ШаблонЗаполненияНомерСтроки - - - - - Объект.СпособЗаполнения - Equal - Перечисление.СпособыЗаполненияГрафикаРаботы.ПоНеделям - - - - - Видимость - false - - - - - - - ЗаполненностьИнформационныйТекст - - - - - ТребуетЗаполнения - Equal - true - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - - - - - РезультатЗаполненияИнформационныйТекст - - - - - OrGroup - - РезультатЗаполненПоШаблону - Equal - false - - - РучноеРедактирование - Equal - true - - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - - - - - РасписаниеПредпраздничногоДня - - - - - РасписаниеПредпраздничногоДня - NotFilled - - - Объект.УчитыватьПраздники - Equal - true - - - - - Текст - Заполнить расписание - - - - diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..f01194021 --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,41 @@ + +

      Сведения о графике работы

      +

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

      +

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

      +

      Как ввести новый график работы

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

      Как просмотреть новый график работы

      +

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

      +

      Особенности заполнения недельного графика работы

      +

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

      +

      Для составления такого графика выберите Способ заполнения "По неделям", заполните Расписание работы для рабочих дней недели.

      +

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

      +

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

      +

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

      +

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

      +
      • +
        Выберите Способ заполнения "По циклам".
        +
      • +
        Укажите длину цикла, например, 5 дней.
        +
      • +
        Укажите начало цикла, например, начиная с 03.01.2014. По умолчанию цикл начинается с начала периода заполнения графика (т.е. с 01.01.2014) , при необходимости можно указать другое число.
        +
      • +
        Составьте Шаблон заполнения, введите Расписание работы для рабочих дней цикла.

      См. также:

      +

      Работа с формами

      +

       

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 1f4743663..83e3b6c8a 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -1,11 +1,12 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -164,8 +165,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаполнитьПоШаблону(Команда) @@ -225,7 +227,7 @@ Процедура ДатаНачалаПриИзменении(Элемент) Если Объект.ДатаНачала < Дата(1900, 1, 1) Тогда - Объект.ДатаНачала = НачалоГода(ТекущаяДата()); + Объект.ДатаНачала = НачалоГода(ОбщегоНазначенияКлиент.ДатаСеанса()); КонецЕсли; КонецПроцедуры @@ -234,7 +236,7 @@ Процедура ДатаОтсчетаПриИзменении(Элемент) Если Объект.ДатаОтсчета < Дата(1900, 1, 1) Тогда - Объект.ДатаОтсчета = НачалоГода(ТекущаяДата()); + Объект.ДатаОтсчета = НачалоГода(ОбщегоНазначенияКлиент.ДатаСеанса()); КонецЕсли; СформироватьШаблонЗаполнения(Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, ДлинаЦикла, Объект.ДатаОтсчета); @@ -404,8 +406,102 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ШаблонЗаполненияПредставлениеРасписания.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ШаблонЗаполнения.ПредставлениеРасписания"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ШаблонЗаполнения.ДеньВключенВГрафик"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Заполнить расписание'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ШаблонЗаполненияНомерСтроки.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособЗаполнения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Перечисления.СпособыЗаполненияГрафикаРаботы.ПоНеделям; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаполненностьИнформационныйТекст.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТребуетЗаполнения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РезультатЗаполненияИнформационныйТекст.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РезультатЗаполненПоШаблону"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РучноеРедактирование"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РасписаниеПредпраздничногоДня.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РасписаниеПредпраздничногоДня"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.УчитыватьПраздники"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Заполнить расписание'")); + +КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЭлементыНастройкиЗаполнения(Форма) @@ -565,7 +661,12 @@ НСтр("ru = 'График работы заполнен до %1'"), Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); Иначе - КонецГоризонтаПланирования = ДобавитьМесяц(ТекущаяДата(), Форма.Объект.ГоризонтПланирования); + #Если Клиент Тогда + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + #Иначе + ТекущаяДата = ТекущаяДатаСеанса(); + #КонецЕсли + КонецГоризонтаПланирования = ДобавитьМесяц(ТекущаяДата, Форма.Объект.ГоризонтПланирования); Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'График работы заполнен до %1, с учетом горизонта планирования график должен быть заполнен до %2'"), Формат(Форма.ДатаЗаполненности, "ДЛФ=D"), @@ -856,4 +957,6 @@ УстановитьСнятьМодифицированностьРезультата(ЭтотОбъект, Ложь); Элементы.ГрафикРаботы.Обновить(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Help/ru.html b/SSL/src/Catalogs/Календари/Help/ru.html new file mode 100644 index 000000000..bd5daea7e --- /dev/null +++ b/SSL/src/Catalogs/Календари/Help/ru.html @@ -0,0 +1,28 @@ + +

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

      +

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

      +

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

      +

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

      +

      Как настроить графики работы

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

      Какие сведения о графиках работы выводятся в списке

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

      Как ввести новый график работы

      +

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

      +

      Как сгруппировать графики работы

      +

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

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

      См. также:

      +

      Работа с формами

      +

       

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index d5862f659..888b5e33a 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции // Функция читает данные графика работы из регистра // @@ -134,9 +133,16 @@ Пока ДатаОбхода <= КонецГода Цикл СтрокаНабораДни = СтрокиНабораДни[ДатаОбхода]; Если СтрокаНабораДни <> Неопределено Тогда + // День включен в график КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода + 1; - СтрокаНабораДни.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода; + Иначе + // День не включен в график + СтрокаНабораДни = НаборДни.Добавить(); + СтрокаНабораДни.Календарь = ГрафикРаботы; + СтрокаНабораДни.Год = Год; + СтрокаНабораДни.ДатаГрафика = ДатаОбхода; КонецЕсли; + СтрокаНабораДни.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода; ДатаОбхода = ДатаОбхода + 86400; КонецЦикла; @@ -510,4 +516,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/ObjectModule.bsl b/SSL/src/Catalogs/Календари/ObjectModule.bsl index 3c5c132fd..8cb49f509 100644 --- a/SSL/src/Catalogs/Календари/ObjectModule.bsl +++ b/SSL/src/Catalogs/Календари/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -52,4 +50,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo index 9a5e68415..c2677be99 100644 --- a/SSL/src/Catalogs/Календари/Календари.mdo +++ b/SSL/src/Catalogs/Календари/Календари.mdo @@ -106,6 +106,11 @@ Use + + + ru + + Managed Use @@ -146,25 +151,6 @@ Use Use - - УдалитьВидКалендаря - - ru - Удалить вид календаря - - - EnumRef.УдалитьВидыКалендарей - - - ru - Вид заполнения календаря (не используется) - - - - - Use - Use - СпособЗаполнения @@ -338,6 +324,25 @@ Use Use + + УдалитьВидКалендаря + + ru + (Не используется) вид календаря + + + EnumRef.УдалитьВидыКалендарей + + + ru + Вид заполнения календаря (не используется) + + + + + Use + Use + @@ -492,6 +497,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html new file mode 100644 index 000000000..050c72122 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html @@ -0,0 +1,14 @@ + +

      Загрузка классификатора банков РФ

      +
      • +
        Выберите источник для загрузки классификатора банков:
        +
        • +

          с сайта агенства "РосбизнесКонсалтинг" (при работе в веб-клиенте возможна загрузка только с сайта РБК);

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

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

      • +

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

        +
      • +

        После успешной загрузки нажмите Закрыть.

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

      +

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl index 8b73aea72..3f05de952 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ПараметрыОбработчикаОжидания; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -48,8 +47,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантЗагрузкиПриИзменении(Элемент) @@ -81,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Далее(Команда) @@ -131,8 +132,9 @@ Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -423,3 +425,5 @@ Функция ТекстЗагрузкаЗапрещена() Возврат НСтр("ru = 'Загрузка классификатора банков в разделенном режиме запрещена.'"); КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form index 6d0f8e59c..33a445b6e 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form @@ -259,18 +259,17 @@ true - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 30 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 32 Label true @@ -280,20 +279,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 31 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 33 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 35 Label true @@ -303,10 +314,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 34 true + Список + + true + + + + СписокСостояниеПросмотра + 36 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 37 + true + ViewStatusAddition Список @@ -315,10 +349,10 @@ СписокУправлениеПоиском - 36 + 39 СписокУправлениеПоискомРасширеннаяПодсказка - 38 + 41 Label true true @@ -328,7 +362,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 37 + 40 true SearchControlAddition @@ -474,6 +508,9 @@ true + + Список.Ref +
      true
      Catalog.КлассификаторБанковРФ diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl index 10cde5fc8..d6846aa5e 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,8 +23,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) @@ -36,8 +37,9 @@ ПереключитьВидимостьНедействующихБанков(Не Элементы.ФормаПоказыватьНедействующиеБанки.Пометка); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПереключитьВидимостьНедействующихБанков(Видимость) @@ -48,3 +50,5 @@ Список, "ДеятельностьПрекращена", Ложь, , , Не Видимость); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form index bc10e6804..ee56fe2fe 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form @@ -231,18 +231,17 @@ Normal - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 24 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 26 Label true @@ -252,20 +251,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 25 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 27 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 29 Label true @@ -275,10 +286,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 28 true + Список + + true + + + + СписокСостояниеПросмотра + 30 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 31 + true + ViewStatusAddition Список @@ -287,10 +321,10 @@ СписокУправлениеПоиском - 30 + 33 СписокУправлениеПоискомРасширеннаяПодсказка - 32 + 35 Label true true @@ -300,7 +334,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 31 + 34 true SearchControlAddition @@ -427,6 +461,9 @@ Список.Недействителен + + Список.Ref +
      true
      Catalog.КлассификаторБанковРФ diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl index 6b3346328..62b1fa5aa 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,11 +21,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) ПараметрыФормы = Новый Структура("ОткрытиеИзСписка"); ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..6cc50fe80 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,18 @@ + +

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

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl index 06a44845e..e3276b7db 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -31,4 +30,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html index 5917d6b9f..634c61b4b 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html @@ -1,42 +1,29 @@ - -

      В классификаторе банков РФ хранятся сведения о банках: БИК, корреспондентский счет, данные о местонахождении, телефоны для связи с сотрудниками, почтовый адрес банка. Эти сведения используются при заполнении реквизитов банковских счетов и в других объектах программы.

      -

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

      -

      Следует иметь ввиду, что сведения об адресах и телефонах банков загружаются только с диска 1С:ИТС.

      -

      Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания Загрузка классификатора банков РФ с сайта РБК.

      -

      Реквизиты:

      - - - - - - - - - - - - - - -
      -

      БИК

      -

      БИК банка (Строка)

      -

      -

      Наименование

      -

      Наименование банка (Строка)

      -

      -

      Группа банков

      -

      Группа банков (Банки)

      -

      -

      Корреспондентский счет

      -

      Корреспондентский счет банка (Строка)

      -

      -

      Город

      -

      Город банка (Строка)

      -

      -

      Адрес

      -

      Адрес банка (Строка)

      -

      -

      Телефоны

      -

      Телефоны банка (Строка)

      -

       

      \ No newline at end of file + +

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

      +

      Банки, деятельность которых прекращена, в списке становятся неактивными.

      +

      В классификаторе выводится:

      +
      • +
        Наименование банка - полное наименование банка;
        +
      • +
        БИК - БИК банка;
        +
      • +
        Корр. счет - корреспондентский счет;
        +
      • +
        Город - город, в котором находится банк;
        +
      • +
        Адрес - полный адрес банка.

      Следует иметь в виду, что сведения об адресах и телефонах банков загружаются только с диска 1С:ИТС.

      +

      Группировка банков

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

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

      +

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

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

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

        +
      • +
        Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания "Загрузка классификатора банков".

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl index 144cba291..c1c326f68 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl @@ -1,5 +1,25 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("*"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + // Возвращает реквизиты справочника, которые образуют естественный ключ // для элементов справочника. // @@ -15,5 +35,7 @@ Возврат Результат; КонецФункции + +#КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo index de52f3a43..e917d19f0 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo @@ -269,6 +269,11 @@ ru Загрузка классификатора + + + ru + + PersonalComputer MobileDevice @@ -296,6 +301,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl index 331dee0cc..a83c915ec 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,10 +14,18 @@ ВидСравненияКомпоновкиДанных.НеВСписке ); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, + "ПометкаУдаления", + Ложь, + ВидСравненияКомпоновкиДанных.Равно + ); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -35,3 +43,5 @@ ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl index 5de196e8e..18c147dd9 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -7,10 +7,15 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "Ссылка", Справочники.КлючевыеОперации.ОбщаяПроизводительностьСистемы, - ВидСравненияКомпоновкиДанных.НеРавно, , , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + ЭлементОбщаяПроизводительность = ОценкаПроизводительностиСлужебный.ПолучитьЭлементОбщаяПроизводительностьСистемы(); + Если ЗначениеЗаполнено(ЭлементОбщаяПроизводительность) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", ЭлементОбщаяПроизводительность, + ВидСравненияКомпоновкиДанных.НеРавно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form index 85645885c..82143627b 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,47 @@ + + Название + 15 + true + true + + true + + + Объект.Имя + + + НазваниеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + НазваниеКонтекстноеМеню + 16 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + Наименование 3 diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..78f668cdf --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,12 @@ + +

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

      +

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

      +

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

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

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

      +

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

      +

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

      +

      См. также:

      +

      Работа с формами.

      \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl index 9f616eeb7..fc1de3fd3 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -/////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,11 +8,12 @@ Возврат; КонецЕсли; - Если Объект.Ссылка = Справочники.КлючевыеОперации.ОбщаяПроизводительностьСистемы Тогда + ЭлементОбщаяПроизводительность = ОценкаПроизводительностиСлужебный.ПолучитьЭлементОбщаяПроизводительностьСистемы(); + Если Объект.Ссылка = ЭлементОбщаяПроизводительность Тогда Отказ = Истина; Возврат; КонецЕсли; КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html new file mode 100644 index 000000000..d3cb99e36 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html @@ -0,0 +1,15 @@ + +

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

      +

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

      +

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

      +

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

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

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

      +

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

      +

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

      +

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

      +

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

      +

      См. также:

      +

      Работа с формами.

      \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo index d5a6386ca..4749164a5 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo +++ b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo @@ -92,8 +92,18 @@ Use + + + ru + + + Catalog.КлючевыеОперации.Attribute.Имя Managed Use + + ru + Ключевая операция + 2 true 50 @@ -115,6 +125,29 @@ Catalog.КлючевыеОперации.Form.ФормаЭлемента Catalog.КлючевыеОперации.Form.ФормаСписка Catalog.КлючевыеОперации.Form.ФормаВыбора + + Имя + + ru + Имя + + + String + + 100 + + + + ru + Название ключевой операции + + + + + Index + Use + Use + МинимальноДопустимыйУровень @@ -126,7 +159,7 @@ ru - Минимально допустимый уровень + Минимально допустимый уровень уровня производительности @@ -190,6 +223,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form index c086fdc26..a3d7caeb0 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form @@ -64,17 +64,17 @@ Normal
      - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -84,20 +84,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -107,10 +118,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -119,10 +153,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -132,7 +166,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition @@ -223,6 +257,9 @@ true + + Список.Ref +
      true
      Catalog.НаборыДополнительныхРеквизитовИСведений diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl index acc78502e..2c7bb213f 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,3 +25,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index 16f91ee19..cbe62b90d 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -595,6 +595,40 @@ Normal + + Ссылка + 139 + true + true + + + НаборыСвойств.Ref + + + СсылкаРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 140 + true + + LabelField + Enter + true + Left + true + + true + true + + НаборыСвойствКоманднаяПанель 3 @@ -610,10 +644,10 @@ НаборыСвойствСтрокаПоиска - 140 + 146 НаборыСвойствСтрокаПоискаРасширеннаяПодсказка - 142 + 148 Label true true @@ -623,7 +657,7 @@ НаборыСвойствСтрокаПоискаКонтекстноеМеню - 141 + 147 true НаборыСвойств @@ -633,10 +667,10 @@ НаборыСвойствСостояниеПросмотра - 143 + 149 НаборыСвойствСостояниеПросмотраРасширеннаяПодсказка - 145 + 151 Label true true @@ -646,7 +680,7 @@ НаборыСвойствСостояниеПросмотраКонтекстноеМеню - 144 + 150 true ViewStatusAddition @@ -657,10 +691,10 @@ НаборыСвойствУправлениеПоиском - 146 + 152 НаборыСвойствУправлениеПоискомРасширеннаяПодсказка - 148 + 154 Label true true @@ -670,7 +704,7 @@ НаборыСвойствУправлениеПоискомКонтекстноеМеню - 147 + 153 true SearchControlAddition @@ -951,6 +985,45 @@ true + + СвойстваСсылка + 142 + true + true + + + Свойства.Свойство + + + СвойстваСсылкаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + СвойстваСсылкаКонтекстноеМеню + 143 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + СвойстваКоманднаяПанель 40 @@ -978,10 +1051,10 @@ СвойстваСтрокаПоиска - 158 + 165 СвойстваСтрокаПоискаРасширеннаяПодсказка - 160 + 167 Label true true @@ -991,7 +1064,7 @@ СвойстваСтрокаПоискаКонтекстноеМеню - 159 + 166 true Свойства @@ -1001,10 +1074,10 @@ СвойстваСостояниеПросмотра - 161 + 168 СвойстваСостояниеПросмотраРасширеннаяПодсказка - 163 + 170 Label true true @@ -1014,7 +1087,7 @@ СвойстваСостояниеПросмотраКонтекстноеМеню - 162 + 169 true ViewStatusAddition @@ -1025,10 +1098,10 @@ СвойстваУправлениеПоиском - 164 + 171 СвойстваУправлениеПоискомРасширеннаяПодсказка - 166 + 173 Label true true @@ -1038,7 +1111,7 @@ СвойстваУправлениеПоискомКонтекстноеМеню - 165 + 172 true SearchControlAddition @@ -1544,7 +1617,7 @@ Свойство <key>ru</key> - <value>Свойство</value> + <value>Ссылка</value> 5 diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index 3b4ec9d7c..26d9f26a7 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -1,10 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -57,8 +56,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ЭтоНаборыДополнительныхСведенийПриИзменении(Элемент) @@ -67,8 +67,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НаборыСвойств +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНаборыСвойств &НаКлиенте Процедура НаборыСвойствПриАктивизацииСтроки(Элемент) @@ -84,8 +85,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Свойства +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСвойства &НаКлиенте Процедура СвойстваПриАктивизацииСтроки(Элемент) @@ -154,8 +156,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Создать(Команда = Неопределено) @@ -205,7 +208,6 @@ КонецПроцедуры - &НаКлиенте Процедура Изменить(Команда = Неопределено) @@ -239,7 +241,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПереместитьВверх(Команда) @@ -254,8 +255,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОформитьНаборыИСвойства() @@ -1096,3 +1098,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl index f4485449c..5ed0f94c0 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -34,3 +33,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index a6c7c1389..e2bf34444 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -1,9 +1,37 @@ - -

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

      -

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

      -

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

      -

      Примечание:

      -
      -

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

      -

      См. также:

      - \ No newline at end of file + +

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

      +

      Администратор программы может настроить наборы дополнительных свойств для определенных объектов программы. Способ хранения дополнительного свойства в программе и место размещения в окне объекта программы зависит от типа свойства: дополнительный реквизит или сведение.

      +

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

      +

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

      +

      Какие сведения выводятся в списке

      +

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

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

      Как назначить новый дополнительный реквизит (сведение) списку или документу

      +

      В зависимости от настройки может быть два способа ввода новых реквизитов (сведений):

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

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

      +

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

      +
      • +
        Выберите набор Общий.
        +
      • +
        Нажмите Создать или Добавить - Новый.

      Как добавить дополнительные реквизиты (сведения) по образцу

      +

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

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

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

      +

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

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

      Особенности удаления дополнительных реквизитов (сведений):

      +

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

      +

      См. также:

      +
    • \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 99a234dc6..07b528931 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -14,8 +13,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Обновляет состав наименований предопределенных наборов в // параметрах дополнительных реквизитов и сведений. @@ -112,4 +112,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl index ffffa95d1..0e5cc0136 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -77,4 +76,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/НазначенияСертификатовЭП/Templates/УдаленныйНазначенияСертификатов/Template.txt b/SSL/src/Catalogs/НазначенияСертификатовЭП/Templates/УдалитьНазначенияСертификатов/Template.txt similarity index 100% rename from SSL/src/Catalogs/НазначенияСертификатовЭП/Templates/УдаленныйНазначенияСертификатов/Template.txt rename to SSL/src/Catalogs/НазначенияСертификатовЭП/Templates/УдалитьНазначенияСертификатов/Template.txt diff --git a/SSL/src/Catalogs/НазначенияСертификатовЭП/НазначенияСертификатовЭП.mdo b/SSL/src/Catalogs/НазначенияСертификатовЭП/НазначенияСертификатовЭП.mdo index f2aa589a6..832ebfbd7 100644 --- a/SSL/src/Catalogs/НазначенияСертификатовЭП/НазначенияСертификатовЭП.mdo +++ b/SSL/src/Catalogs/НазначенияСертификатовЭП/НазначенияСертификатовЭП.mdo @@ -135,10 +135,10 @@ TextDocument - УдаленныйНазначенияСертификатов + УдалитьНазначенияСертификатов ru - Удаленный назначения сертификатов + Удалить назначения сертификатов TextDocument diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl index a3315196b..57685d18d 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -97,3 +97,5 @@ КонецФункции // Конец СтандартныеПодсистемы.КонтактнаяИнформация + +#КонецОбласти diff --git a/SSL/src/Catalogs/Организации/ManagerModule.bsl b/SSL/src/Catalogs/Организации/ManagerModule.bsl index 821667c7b..61831675e 100644 --- a/SSL/src/Catalogs/Организации/ManagerModule.bsl +++ b/SSL/src/Catalogs/Организации/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов @@ -12,9 +11,11 @@ Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; - Результат.Добавить("Префикс"); - Возврат Результат; + Результат.Добавить("Префикс"); + Результат.Добавить("КонтактнаяИнформация.*"); + + Возврат Результат КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -25,7 +26,7 @@ // то будет возвращена ссылка на нее, иначе будет возвращена пустая ссылка. // // Возвращаемое значение: -// СправочникСсылка.Организации - ссылка на организацию +// СправочникСсылка.Организации - ссылка на организацию // Функция ОрганизацияПоУмолчанию() Экспорт @@ -54,7 +55,7 @@ // Не учитывает предопределенные и помеченные на удаление элементы. // // Возвращаемое значение: -// Число - количество организаций +// Число - количество организаций // Функция КоличествоОрганизаций() Экспорт @@ -82,8 +83,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Вызывается при переходе на версию БСП 2.2.1.12 // @@ -98,4 +100,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form index 7678d6277..863bd341c 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form @@ -60,17 +60,17 @@ true - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -80,20 +80,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -103,10 +114,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -115,10 +149,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -128,7 +162,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition @@ -239,6 +273,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl index 8ee6d9d25..64bcf6ce1 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,3 +13,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..aabebf7a0 --- /dev/null +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,15 @@ + +

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

      +

      Сведения о папке

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

      Права доступа к папке

      +

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

      +

      Быстрый переход к списку файлов

      +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 76279eb7b..6ce7f823b 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -75,8 +75,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РодительПриИзменении(Элемент) @@ -111,7 +112,7 @@ Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяКаталога = ДиалогОткрытияФайла.Каталог; - ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога); // Создать каталог для файлов Попытка @@ -166,9 +167,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОткрытьСписокПапокИФайлов(Команда) @@ -189,8 +190,9 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьПолныйПуть() @@ -245,7 +247,6 @@ КонецПроцедуры - // СтандартныеПодсистемы.Свойства &НаСервере @@ -256,3 +257,5 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html index c86efc0b9..4f0b212c1 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html @@ -1,7 +1,12 @@ - +

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

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

       

      -

      Папкам можно назначать различные права доступа (команда "Права доступа" в карточке папки).

      -

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

      \ No newline at end of file +
    • по типам файлов (например, "Договоры", "Приказы", "Служебные записки");  +
    • по уровню доступа (например, "Общие", "Конфиденциальные").

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

    +

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

    +

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

    +

    Выбор папки

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 946a2754e..0a990b198 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -17,4 +16,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 39c34bb18..b6759f3c2 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -72,7 +71,7 @@ // Добавляем слэш в конце, если его нет РабочийКаталогРодителяПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - РабочийКаталогРодителяПапки, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогРодителяПапки); РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки + ТекущаяПапка.Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); @@ -131,7 +130,7 @@ // Добавляем слэш в конце, если его нет РабочийКаталогПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - РабочийКаталогПапки, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогПапки); РабочийКаталогПапки = РабочийКаталогПапки + Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); @@ -159,4 +158,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo index 51c98cc5c..6a180b221 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo +++ b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo @@ -114,33 +114,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ПапкиФайлов -1 -1 Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ПапкиФайлов -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 @@ -345,6 +345,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form index f73d4db39..2fed81232 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form @@ -50,17 +50,17 @@ true
    - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -70,20 +70,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра +
    + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -93,10 +104,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -105,10 +139,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -118,7 +152,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl index 421fa17ba..e8270d6ec 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -28,3 +27,5 @@ ВидСравненияКомпоновкиДанных.Равно, , Ложь); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html index 0326101fd..f008b360c 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 094795dae..a03790499 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -38,3 +37,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl new file mode 100644 index 000000000..4759c709c --- /dev/null +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Код"); + Результат.Добавить("Наименование"); + Результат.Добавить("ПредопределеннаяПапка"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/ConditionalAppearance.dcssca b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/ConditionalAppearance.dcssca deleted file mode 100644 index c54f61fe6..000000000 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/ConditionalAppearance.dcssca +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - ПолноеИмя - - - Имя - - - АутентификацияСтандартная - - - АутентификацияОС - - - ПользовательОС - - - - - ПользователиИнфБазы.КодПроблемы - Equal - 0 - - - - - ЦветТекста - style:SpecialTextColor - - - - - - - ПолноеИмя - - - - - ПользователиИнфБазы.КодПроблемы - Equal - 1 - - - - - ЦветТекста - style:SpecialTextColor - - - - - - - ПолноеИмя - - - Имя - - - АутентификацияСтандартная - - - АутентификацияОС - - - ПользовательОС - - - - - ПользователиИнфБазы.КодПроблемы - Equal - 3 - - - - - ЦветТекста - web:LightSlateGray - - - - - - - ПолноеИмя - - - Имя - - - АутентификацияСтандартная - - - АутентификацияОС - - - ПользовательОС - - - - - ПользователиИнфБазы.ПометкаУдаления - Equal - true - - - - - ЦветТекста - web:LightSlateGray - - - - diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form index 5ac94a14a..597fbccb9 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form @@ -1,131 +1,24 @@ - - Предупреждение - 27 - - КартинкаПредупреждение - 25 - - <key>ru</key> - <value>Картинка предупреждение</value> - - true - true - - true - - - КартинкаПредупреждениеExtendedTooltip - 52 - Label - true - true - - Left - - - - КартинкаПредупреждениеКонтекстноеМеню - 26 - true - - 4 - true - 2 - true - false - - - CommonPicture.Предупреждение32 - - - - - ТекстПредупреждения - 28 - - <key>ru</key> - <value>Некоторые пользователи информационной базы не записаны в справочник -или их полное имя не совпадает с записанным.</value> - - true - true - - true - - - ТекстПредупрежденияExtendedTooltip - 53 - Label - true - true - - Left - - - - ТекстПредупрежденияКонтекстноеМеню - 29 - true - - Label - true - true - false - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Предупреждение</value> - - 3 - false - - ПредупреждениеExtendedTooltip - 51 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - ПредставлениеОтбора - 22 + ПоказатьТолькоОбработанныеВКонфигураторе + 91 true true true - ПредставлениеОтбора + ПоказатьТолькоОбработанныеВКонфигураторе + Right OnChange - ПредставлениеОтбораПриИзменении + ПоказатьТолькоОбработанныеВКонфигуратореПриИзменении - ПредставлениеОтбораExtendedTooltip - 54 + ПоказатьТолькоОбработанныеВКонфигуратореРасширеннаяПодсказка + 93 Label true true @@ -134,91 +27,31 @@ - ПредставлениеОтбораКонтекстноеМеню - 23 + ПоказатьТолькоОбработанныеВКонфигуратореКонтекстноеМеню + 92 true - InputField + CheckBoxField Enter true Left true - - - StartChoice - ПредставлениеОтбораНачалоВыбора - - 50 - true - true - false - true - true - true - true - - - ru - Все - - - Все - - - - - ru - Добавленные, измененные или удаленные с помощью Конфигуратора - - - НеправильноЗаписанные - - - - - ru - Без пользователя информационной базы - - - БезПользователяИБ - - - - - ru - Пользователи - - - Пользователи - - - - - ru - Внешние пользователи - - - ВнешниеПользователи - - - Normal - + КоманднаяПанель 49 - ПользователиИнфБазыИзменить - 18 + ПользователиИнфБазыСопоставить + 94 true true true - false - ПользователиИнфБазыИзменитьExtendedTooltip - 56 + ПользователиИнфБазыСопоставитьРасширеннаяПодсказка + 95 Label true true @@ -226,7 +59,7 @@ Left - Form.Command.Изменить + Form.Command.Сопоставить Normal Auto true @@ -235,17 +68,16 @@ Auto - ПользователиИнфБазыУдалить - 40 + ПользователиИнфБазыСопоставитьСНовым + 98 true - false + true true - false - ПользователиИнфБазыУдалитьExtendedTooltip - 57 + ПользователиИнфБазыСопоставитьСНовымРасширеннаяПодсказка + 99 Label true true @@ -253,7 +85,7 @@ Left - Form.Item.ПользователиИнфБазы.StandardCommand.Delete + Form.Command.СопоставитьСНовым Normal Auto true @@ -262,17 +94,16 @@ Auto - ПользователиИнфБазыОбновить - 31 + ПользователиИнфБазыОтменитьСопоставление + 102 true true true - false - ПользователиИнфБазыОбновитьExtendedTooltip - 58 + ПользователиИнфБазыОтменитьСопоставлениеРасширеннаяПодсказка + 103 Label true true @@ -280,7 +111,7 @@ Left - Form.Command.Обновить + Form.Command.ОтменитьСопоставление Normal Auto true @@ -343,8 +174,8 @@ Auto - ПользователиИнфБазыСортироватьПоВозрастанию - 33 + ПользователиИнфБазыОбновить + 31 true true @@ -352,8 +183,8 @@ false - ПользователиИнфБазыСортироватьПоВозрастаниюExtendedTooltip - 61 + ПользователиИнфБазыОбновитьExtendedTooltip + 58 Label true true @@ -361,27 +192,26 @@ Left - Form.Item.ПользователиИнфБазы.StandardCommand.SortListAsc + Form.Command.Обновить Normal Auto true true UserCmds Auto - InCommandBarAndInAdditionalSubmenu - ПользователиИнфБазыСортироватьПоУбыванию - 34 + ПользователиИнфБазыУдалить + 40 true - true + false true false - ПользователиИнфБазыСортироватьПоУбываниюExtendedTooltip - 62 + ПользователиИнфБазыУдалитьExtendedTooltip + 57 Label true true @@ -389,14 +219,65 @@ Left - Form.Item.ПользователиИнфБазы.StandardCommand.SortListDesc + Form.Item.ПользователиИнфБазы.StandardCommand.Delete + Normal + PictureAndText + true + true + UserCmds + Auto + + + ПользователиИнфБазыПерейтиКПользователю + 96 + true + true + + true + + + ПользователиИнфБазыПерейтиКПользователюРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Form.Command.ПерейтиКПользователю + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыВывестиСписок + 120 + true + true + + true + + + ПользователиИнфБазыВывестиСписокРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.OutputList Normal Auto true true UserCmds Auto - InCommandBarAndInAdditionalSubmenu true true @@ -443,11 +324,11 @@ Add Change Copy - CopyToClipboard EndEdit MoveDown MoveUp - OutputList + SortListAsc + SortListDesc ПолноеИмя 6 @@ -551,7 +432,8 @@ ru - Аутентификация 1С:Предприятия + Способ входа в программу с помощью имени и пароля, +указанного для пользователя 1С:Предприятия. АутентификацияСтандартнаяExtendedTooltip @@ -568,17 +450,72 @@ 11 true - CheckBoxField + LabelField true Center Auto true Left true - + + true + true + + ru + БЛ=; БИ=Да + + + + + АутентификацияOpenID + 88 + true + true + + true + + + ПользователиИнфБазы.АутентификацияOpenID + + + ru + Способ входа в программу с помощью имени, указанного для пользователя 1С:Предприятия, +которое передается службе аутентификации по протоколу OpenID. +Используется только при подключении через веб-сервер (адрес службы должен быть настроен). + + + АутентификацияOpenIDРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + АутентификацияOpenIDКонтекстноеМеню + 89 + true + + LabelField + true + Center + Auto + true + Left + true + + true + true + + ru + БЛ=; БИ=Да + + - ПользователиИнфБазыГруппа1 + ПользователиИнфБазыНастройкиАутентификацияОС 50 АутентификацияОС @@ -593,7 +530,9 @@ ru - Аутентификация операционной системы + Способ входа в программу с помощью имени и пароля, +указанного для пользователя операционной системы, +связанного с пользователем 1С:Предприятия. АутентификацияОСExtendedTooltip @@ -610,14 +549,16 @@ 13 true - CheckBoxField + LabelField true - Center Auto true Left true - + + true + true + ПользовательОС @@ -649,18 +590,14 @@ 15 true - InputField + LabelField true Auto Left true - + true true - true - true - true - Normal true @@ -668,8 +605,12 @@ true + + <key>ru</key> + <value>Пользователи инф базы настройки аутентификация ОС</value> + - ПользователиИнфБазыГруппа1ExtendedTooltip + ПользователиИнфБазыНастройкиАутентификацияОСРасширеннаяПодсказка 70 Label true @@ -686,17 +627,17 @@ - ЭтоПользователь - 37 + СопоставленСВнешнимПользователем + 115 true true - ПользователиИнфБазы.ЭтоПользователь + ПользователиИнфБазы.СопоставленСВнешнимПользователем - ЭтоПользовательExtendedTooltip - 73 + СопоставленСВнешнимПользователемРасширеннаяПодсказка + 117 Label true true @@ -705,99 +646,38 @@ - ЭтоПользовательКонтекстноеМеню - 38 + СопоставленСВнешнимПользователемКонтекстноеМеню + 116 true - CheckBoxField + LabelField + true + Center Auto true Left true - - - - ЭтоВнешнийПользователь - 35 - true - true - - - ПользователиИнфБазы.ЭтоВнешнийПользователь - - - ЭтоВнешнийПользовательExtendedTooltip - 74 - Label + true true - - Left - - - - ЭтоВнешнийПользовательКонтекстноеМеню - 36 - true - - CheckBoxField - Auto - true - Left - true - - - - Ссылка - 44 - true - true - - - ПользователиИнфБазы.Ссылка - - - СсылкаExtendedTooltip - 75 - Label - true - true - - Left - - - - СсылкаКонтекстноеМеню - 45 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + + ru + БЛ=; БИ=Да + - ПометкаУдаления - 42 + ДобавленВКонфигураторе + 106 true true - ПользователиИнфБазы.ПометкаУдаления + ПользователиИнфБазы.ДобавленВКонфигураторе - ПометкаУдаленияExtendedTooltip - 76 + ДобавленВКонфигуратореРасширеннаяПодсказка + 108 Label true true @@ -806,16 +686,105 @@ - ПометкаУдаленияКонтекстноеМеню - 43 + ДобавленВКонфигуратореКонтекстноеМеню + 107 true - CheckBoxField + LabelField + true + Center Auto true Left true - + + true + true + + ru + БЛ=; БИ=Да + + + + + ИзмененВКонфигураторе + 109 + true + true + + + ПользователиИнфБазы.ИзмененВКонфигураторе + + + ИзмененВКонфигуратореРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ИзмененВКонфигуратореКонтекстноеМеню + 110 + true + + LabelField + true + Center + Auto + true + Left + true + + true + true + + ru + БЛ=; БИ=Да + + + + + УдаленВКонфигураторе + 112 + true + true + + + ПользователиИнфБазы.УдаленВКонфигураторе + + + УдаленВКонфигуратореРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + УдаленВКонфигуратореКонтекстноеМеню + 113 + true + + LabelField + true + Center + Auto + true + Left + true + + true + true + + ru + БЛ=; БИ=Да + + None @@ -824,10 +793,6 @@ Left true - - Selection - ПользователиИнфБазыВыбор - BeforeDeleteRow ПользователиИнфБазыПередУдалением @@ -838,10 +803,10 @@ ПользователиИнфБазыСтрокаПоиска - 78 + 123 ПользователиИнфБазыСтрокаПоискаРасширеннаяПодсказка - 80 + 125 Label true true @@ -851,7 +816,7 @@ ПользователиИнфБазыСтрокаПоискаКонтекстноеМеню - 79 + 124 true ПользователиИнфБазы @@ -861,10 +826,10 @@ ПользователиИнфБазыСостояниеПросмотра - 81 + 126 ПользователиИнфБазыСостояниеПросмотраРасширеннаяПодсказка - 83 + 128 Label true true @@ -874,7 +839,7 @@ ПользователиИнфБазыСостояниеПросмотраКонтекстноеМеню - 82 + 127 true ViewStatusAddition @@ -885,10 +850,10 @@ ПользователиИнфБазыУправлениеПоиском - 84 + 129 ПользователиИнфБазыУправлениеПоискомРасширеннаяПодсказка - 86 + 131 Label true true @@ -898,7 +863,7 @@ ПользователиИнфБазыУправлениеПоискомКонтекстноеМеню - 85 + 130 true SearchControlAddition @@ -921,17 +886,16 @@ ПользователиИнфБазыКонтекстноеМеню 2 - КонтекстноеМенюПользователиИнфБазыИзменить - 48 + ПользователиИнфБазыКонтекстноеМенюПерейтиКПользователю + 104 true true true - false - КонтекстноеМенюПользователиИнфБазыИзменитьExtendedTooltip - 63 + ПользователиИнфБазыКонтекстноеМенюПерейтиКПользователюРасширеннаяПодсказка + 105 Label true true @@ -939,7 +903,7 @@ Left - Form.Command.Изменить + Form.Command.ПерейтиКПользователю Normal Auto true @@ -948,7 +912,7 @@ Auto - КонтекстноеМенюПользователиИнфБазыОбновить + ПользователиИнфБазыКонтекстноеМенюОбновить 39 true true @@ -957,7 +921,7 @@ false - КонтекстноеМенюПользователиИнфБазыОбновитьExtendedTooltip + ПользователиИнфБазыКонтекстноеМенюОбновитьРасширеннаяПодсказка 64 Label true @@ -975,17 +939,16 @@ Auto - КонтекстноеМенюПользователиИнфБазыУдалить - 41 + ПользователиИнфБазыКонтекстноеМенюВывестиСписок + 118 true - false + true true - false - КонтекстноеМенюПользователиИнфБазыУдалитьExtendedTooltip - 65 + ПользователиИнфБазыКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 119 Label true true @@ -993,7 +956,7 @@ Left - Form.Item.ПользователиИнфБазы.StandardCommand.Delete + Form.Item.ПользователиИнфБазы.StandardCommand.OutputList Normal Auto true @@ -1001,7 +964,6 @@ UserCmds Auto - true true true @@ -1026,9 +988,6 @@ ПользователиИнфБазы.Картинка - - CommonPicture.СостоянияПользователей - None None None @@ -1121,7 +1080,7 @@ Имя <key>ru</key> - <value>Имя</value> + <value>Имя (для входа)</value> 3 @@ -1187,27 +1146,6 @@ true - - КодПроблемы - - <key>ru</key> - <value>Код проблемы</value> - - 8 - - Number - - 1 - true - - - - true - - - true - - ИдентификаторПользователяИБ @@ -1244,27 +1182,10 @@ </edit> </columns> <columns> - <name>ПометкаУдаления</name> + <name>СопоставленСВнешнимПользователем</name> <title> <key>ru</key> - <value>Пометка удаления</value> - - 10 - - Boolean - - - true - - - true - - - - ЭтоВнешнийПользователь - - <key>ru</key> - <value>Это внешний пользователь</value> + <value>Сопоставлен с внешним пользователем</value> 11 @@ -1278,10 +1199,61 @@ - ЭтоПользователь + АутентификацияOpenID <key>ru</key> - <value>Это пользователь</value> + <value>Аутентификация OpenID</value> + + 14 + + Boolean + + + true + + + true + + + + ДобавленВКонфигураторе + + <key>ru</key> + <value>Добавлен в конфигураторе</value> + + 8 + + Boolean + + + true + + + true + + + + ИзмененВКонфигураторе + + <key>ru</key> + <value>Изменен в конфигураторе</value> + + 10 + + Boolean + + + true + + + true + + + + УдаленВКонфигураторе + + <key>ru</key> + <value>Удален в конфигураторе</value> 12 @@ -1296,15 +1268,14 @@ - ПредставлениеОтбора + ТипыПользователей <key>ru</key> - <value>Показывать</value> + <value>Типы пользователей</value> - 3 + 5 - String - + ValueList true @@ -1312,17 +1283,39 @@ true + + + - Отбор + ИдентификаторыНесуществующихПользователейИБ <key>ru</key> - <value>Отбор</value> + <value>Идентификаторы несуществующих пользователей ИБ</value> - 4 + 6 - String - + ValueList + + + true + + + true + + + + + + + ПоказатьТолькоОбработанныеВКонфигураторе + + <key>ru</key> + <value>Показать только добавленные, измененные или удаленные с помощью конфигуратора</value> + + 7 + + Boolean true @@ -1337,7 +1330,7 @@ ru Обновить - 5 + 1 ru Обновить @@ -1358,26 +1351,92 @@ Auto - Изменить + Сопоставить <key>ru</key> - <value>Изменить</value> + <value>Сопоставить</value> - 1 + 2 ru - Изменить + Сопоставить с существующим пользователем в справочнике + + + true + + + + Сопоставить + + + Auto + Auto + + + СопоставитьСНовым + + <key>ru</key> + <value>Сопоставить с новым</value> + + 3 + + ru + Сопоставить с новым пользователем в справочнике + + + true + + + + СопоставитьСНовым + + + Auto + Auto + + + ПерейтиКПользователю + + <key>ru</key> + <value>Перейти к пользователю</value> + + 4 + + ru + Перейти к сопоставленному пользователю в справочнике true - F2 - StdPicture.Change + CommonPicture.СостояниеПользователя02 - Изменить + ПерейтиКПользователю + + + TextPicture + Auto + Auto + + + ОтменитьСопоставление + + <key>ru</key> + <value>Отменить сопоставление</value> + + 5 + + ru + Отменить сопоставление с пользователем в справочнике + + + true + + + + ОтменитьСопоставление Auto diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html index 74c5ad56c..35c6a6f4d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html @@ -1,8 +1,51 @@ - -

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

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

     

    -

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

    \ No newline at end of file + +

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

    +

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

    +

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

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

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

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

    Дополнительно выводится (по команде Все действия - Изменить форму):

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

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

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

    Сопоставление пользователей

    +

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

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

    Просмотр сопоставленного пользователя

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl index 195b42c56..10809de4d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -14,23 +16,14 @@ Пользователи.НайтиНеоднозначныхПользователейИБ(); - Отбор = "Все"; - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора[0].Представление; - - Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - Элементы.ПредставлениеОтбора.СписокВыбора.Удалить(Элементы.ПредставлениеОтбора.СписокВыбора[4]); - Элементы.ПредставлениеОтбора.СписокВыбора.Удалить(Элементы.ПредставлениеОтбора.СписокВыбора[3]); - - ИначеЕсли Параметры.Отбор = "Пользователи" Тогда - Отбор = "Пользователи"; - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора[3].Представление; - - ИначеЕсли Параметры.Отбор = "ВнешниеПользователи" Тогда - Отбор = "ВнешниеПользователи"; - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора[4].Представление; + ТипыПользователей.Добавить(Тип("СправочникСсылка.Пользователи")); + Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + ТипыПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); КонецЕсли; - ЗаполнитьПользователейИБ(Истина); + ПоказатьТолькоОбработанныеВКонфигураторе = Истина; + + ЗаполнитьПользователейИБ(); КонецПроцедуры @@ -40,87 +33,54 @@ Если ИмяСобытия = "ДобавленПользовательИБ" ИЛИ ИмяСобытия = "ИзмененПользовательИБ" ИЛИ ИмяСобытия = "УдаленПользовательИБ" - ИЛИ ИмяСобытия = "ОчищенаСвязьСНесуществующимПользователемИБ" Тогда + ИЛИ ИмяСобытия = "ОчищеноСопоставлениеСНесуществующимПользователемИБ" Тогда ЗаполнитьПользователейИБ(); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ПредставлениеОтбораПриИзменении(Элемент) - - Если НЕ ЗначениеЗаполнено(ПредставлениеОтбора) Тогда - - Отбор = "Все"; - - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению( - Отбор).Представление; - - КонецЕсли; +Процедура ПоказатьТолькоОбработанныеВКонфигуратореПриИзменении(Элемент) ЗаполнитьПользователейИБ(); КонецПроцедуры -&НаКлиенте -Процедура ПредставлениеОтбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ПоказатьВыборИзСписка( - Новый ОписаниеОповещения("ПредставлениеОтбораЗавершениеВыбора", ЭтотОбъект), - Элемент.СписокВыбора, - Элемент, - Элемент.СписокВыбора.НайтиПоЗначению(Отбор)); - -КонецПроцедуры +#КонецОбласти -&НаКлиенте -Процедура ПредставлениеОтбораЗавершениеВыбора(ВыбранныйЭлемент, Неопределен) Экспорт - - Если ВыбранныйЭлемент <> Неопределено Тогда - - Отбор = ВыбранныйЭлемент.Значение; - ПредставлениеОтбора = ВыбранныйЭлемент.Представление; - - ПредставлениеОтбораПриИзменении(Элементы.ПредставлениеОтбора); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиИнфБазы - -// Описание значений поля КодПроблемы: -// 0 - пользовательИБ не записан в справочник, -// 1 - ПолноеИмя отличается от Наименования, -// 2 - пользовательИБ не найден, -// 3 - пользовательИБ пустой УИД, -// 4 - все в порядке. -// -// Описание отображения значений поля КодПроблемы: -// для кодов 0,1 красная подсветка, -// для кодов 2,3 серая подсветка. - -&НаКлиенте -Процедура ПользователиИнфБазыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьПользователяПоСсылке(); - -КонецПроцедуры +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиИнфБазы &НаКлиенте Процедура ПользователиИнфБазыПриАктивизацииСтроки(Элемент) - МожноУдалить = Элементы.ПользователиИнфБазы.ТекущиеДанные <> Неопределено - И Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0; + ТекущиеДанные = Элементы.ПользователиИнфБазы.ТекущиеДанные; - Элементы.ПользователиИнфБазыУдалить.Доступность = МожноУдалить; - Элементы.КонтекстноеМенюПользователиИнфБазыУдалить.Доступность = МожноУдалить; + Если ТекущиеДанные = Неопределено Тогда + МожноУдалить = Ложь; + МожноСопоставить = Ложь; + МожноПерейтиКПользователю = Ложь; + МожноОтменитьСопоставление = Ложь; + Иначе + МожноУдалить = Не ЗначениеЗаполнено(ТекущиеДанные.Ссылка); + МожноСопоставить = Не ЗначениеЗаполнено(ТекущиеДанные.Ссылка); + МожноПерейтиКПользователю = ЗначениеЗаполнено(ТекущиеДанные.Ссылка); + МожноОтменитьСопоставление = ЗначениеЗаполнено(ТекущиеДанные.Ссылка); + КонецЕсли; + + Элементы.ПользователиИнфБазыУдалить.Доступность = МожноУдалить; + + Элементы.ПользователиИнфБазыПерейтиКПользователю.Доступность = МожноПерейтиКПользователю; + Элементы.ПользователиИнфБазыКонтекстноеМенюПерейтиКПользователю.Доступность = МожноПерейтиКПользователю; + + Элементы.ПользователиИнфБазыСопоставить.Доступность = МожноСопоставить; + Элементы.ПользователиИнфБазыСопоставитьСНовым.Доступность = МожноСопоставить; + + Элементы.ПользователиИнфБазыОтменитьСопоставление.Доступность = МожноОтменитьСопоставление; КонецПроцедуры @@ -129,21 +89,15 @@ Отказ = Истина; - Если Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0 Тогда - УдалитьТекущегоПользователяИБ(); + Если Не ЗначениеЗаполнено(Элементы.ПользователиИнфБазы.ТекущиеДанные.Ссылка) Тогда + УдалитьТекущегоПользователяИБ(Истина); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти -&НаКлиенте -Процедура Изменить(Команда) - - ОткрытьПользователяПоСсылке(); - -КонецПроцедуры +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -152,25 +106,193 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура Сопоставить(Команда) + + СопоставитьПользователяИБ(); + +КонецПроцедуры + +&НаКлиенте +Процедура СопоставитьСНовым(Команда) + + СопоставитьПользователяИБ(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКПользователю(Команда) + + ОткрытьПользователяПоСсылке(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьСопоставление(Команда) + + Если Элементы.ПользователиИнфБазы.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("ОтменитьСопоставление", НСтр("ru = 'Отменить сопоставление'")); + Кнопки.Добавить("ОставитьСопоставление", НСтр("ru = 'Оставить сопоставление'")); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ОтменитьСопоставлениеПродолжение", ЭтотОбъект), + НСтр("ru = 'Отмена сопоставления пользователя информационной базы с пользователем в справочнике. + | + |Отмена сопоставления требуется крайне редко - только если сопоставление было выполнено некорректно, например, + |при обновлении информационной базы, поэтому не рекомендуется отменять сопоставление по любой другой причине.'"), + Кнопки, + , + "ОставитьСопоставление"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере -Процедура ЗаполнитьПользователейИБ(ПриСозданииФормы = Ложь) +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолноеИмя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Имя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияСтандартная.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияОС.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользовательОС.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияOpenID.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиИнфБазы.ДобавленВКонфигураторе"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолноеИмя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Имя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияСтандартная.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияОС.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользовательОС.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияOpenID.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиИнфБазы.ИзмененВКонфигураторе"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиИнфБазы.УдаленВКонфигураторе"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Имя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияСтандартная.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияОС.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияOpenID.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиИнфБазы.УдаленВКонфигураторе"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Нет данных>'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "Л=ru; БЛ=Нет; БИ=Да"); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АутентификацияОС.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиИнфБазы.ПользовательОС"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "Л=ru; БЛ=; БИ=Да"); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПользователейИБ() + + ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + Если Элементы.ПользователиИнфБазы.ТекущаяСтрока <> Неопределено Тогда + Строка = ПользователиИнфБазы.НайтиПоИдентификатору(Элементы.ПользователиИнфБазы.ТекущаяСтрока); + Иначе + Строка = Неопределено; + КонецЕсли; + + ТекущийИдентификаторПользователяИБ = + ?(Строка = Неопределено, ПустойУникальныйИдентификатор, Строка.ИдентификаторПользователяИБ); ПользователиИнфБазы.Очистить(); - ЕстьНеправильноЗаписанные = Ложь; + ИдентификаторыНесуществующихПользователейИБ.Очистить(); + ИдентификаторыНесуществующихПользователейИБ.Добавить(ПустойУникальныйИдентификатор); - Запрос = Новый Запрос( + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); + Запрос.Текст = "ВЫБРАТЬ - | Пользователи.Ссылка, - | Пользователи.Наименование, + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.Наименование КАК ПолноеИмя, | Пользователи.ИдентификаторПользователяИБ, - | Пользователи.ПометкаУдаления, - | ЛОЖЬ КАК ЭтоВнешнийПользователь, - | ИСТИНА КАК ЭтоПользователь + | ЛОЖЬ КАК ЭтоВнешнийПользователь |ИЗ | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор | |ОБЪЕДИНИТЬ ВСЕ | @@ -178,155 +300,79 @@ | ВнешниеПользователи.Ссылка, | ВнешниеПользователи.Наименование, | ВнешниеПользователи.ИдентификаторПользователяИБ, - | ВнешниеПользователи.ПометкаУдаления, - | ИСТИНА, - | ЛОЖЬ + | ИСТИНА |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи"); + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - Выборка = Запрос.Выполнить().Выбрать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Пока Выборка.Следующий() Цикл - - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - Выборка.ИдентификаторПользователяИБ); - - НоваяСтрока = ПользователиИнфБазы.Добавить(); - - НоваяСтрока.КодПроблемы = 4; - НоваяСтрока.Ссылка = Выборка.Ссылка; - НоваяСтрока.ПолноеИмя = Выборка.Наименование; - НоваяСтрока.ПометкаУдаления = Выборка.ПометкаУдаления; - НоваяСтрока.ЭтоПользователь = Выборка.ЭтоПользователь; - НоваяСтрока.ЭтоВнешнийПользователь = Выборка.ЭтоВнешнийПользователь; - - Если ПользовательИБ = Неопределено Тогда - НоваяСтрока.КодПроблемы = ?(ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ), 2, 3); - - ЕстьНеправильноЗаписанные - = ЕстьНеправильноЗаписанные - ИЛИ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ); - Иначе - НоваяСтрока.Имя = ПользовательИБ.Имя; - НоваяСтрока.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; - НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС; - НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС; - НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - - Если Выборка.Наименование <> ПользовательИБ.ПолноеИмя Тогда - // Рассогласование по полному имени. - НоваяСтрока.КодПроблемы = 1; - ЕстьНеправильноЗаписанные = Истина; - КонецЕсли; - КонецЕсли; - - НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию( - НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Выборка.ЭтоВнешнийПользователь); - - КонецЦикла; + Выгрузка = Запрос.Выполнить().Выгрузить(); + Выгрузка.Индексы.Добавить("ИдентификаторПользователяИБ"); + Выгрузка.Колонки.Добавить("Сопоставлен", Новый ОписаниеТипов("Булево")); ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); Для Каждого ПользовательИБ Из ПользователиИБ Цикл + СвойстваПользовательИБ = Пользователи.НовоеОписаниеПользователяИБ(); + Пользователи.ПрочитатьПользователяИБ(ПользовательИБ.УникальныйИдентификатор, СвойстваПользовательИБ); - ОтборСтрок = Новый Структура; - ОтборСтрок.Вставить("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - Если ПользователиИнфБазы.НайтиСтроки(ОтборСтрок).Количество() = 0 Тогда - // Пользователя ИБ нет в справочнике. - НоваяСтрока = ПользователиИнфБазы.Добавить(); - НоваяСтрока.КодПроблемы = 0; - НоваяСтрока.ПолноеИмя = ПользовательИБ.ПолноеИмя; - НоваяСтрока.Имя = ПользовательИБ.Имя; - НоваяСтрока.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; - НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС; - НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС; - НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию( - НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Ложь); + ИзмененВКонфигураторе = Ложь; + Строка = Выгрузка.Найти(СвойстваПользовательИБ.УникальныйИдентификатор, "ИдентификаторПользователяИБ"); + + Если Строка <> Неопределено Тогда + Строка.Сопоставлен = Истина; + Если Строка.ПолноеИмя <> СвойстваПользовательИБ.ПолноеИмя Тогда + ИзмененВКонфигураторе = Истина; + КонецЕсли; + КонецЕсли; + + Если ПоказатьТолькоОбработанныеВКонфигураторе + И Строка <> Неопределено + И Не ИзмененВКонфигураторе Тогда - ЕстьНеправильноЗаписанные = Истина; + Продолжить; + КонецЕсли; + + НоваяСтрока = ПользователиИнфБазы.Добавить(); + НоваяСтрока.ПолноеИмя = СвойстваПользовательИБ.ПолноеИмя; + НоваяСтрока.Имя = СвойстваПользовательИБ.Имя; + НоваяСтрока.АутентификацияСтандартная = СвойстваПользовательИБ.АутентификацияСтандартная; + НоваяСтрока.АутентификацияОС = СвойстваПользовательИБ.АутентификацияОС; + НоваяСтрока.ИдентификаторПользователяИБ = СвойстваПользовательИБ.УникальныйИдентификатор; + НоваяСтрока.ПользовательОС = СвойстваПользовательИБ.ПользовательОС; + НоваяСтрока.АутентификацияOpenID = СвойстваПользовательИБ.АутентификацияOpenID; + + Если Строка = Неопределено Тогда + // Пользователя ИБ нет в справочнике. + НоваяСтрока.ДобавленВКонфигураторе = Истина; + Иначе + НоваяСтрока.Ссылка = Строка.Ссылка; + НоваяСтрока.СопоставленСВнешнимПользователем = Строка.ЭтоВнешнийПользователь; + + НоваяСтрока.ИзмененВКонфигураторе = ИзмененВКонфигураторе; КонецЕсли; КонецЦикла; - Если ПриСозданииФормы И ЕстьНеправильноЗаписанные Тогда - Отбор = "НеправильноЗаписанные"; - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора[1].Представление; - КонецЕсли; - - УдаляемыеСтроки = Новый Массив; - Если Отбор = "Пользователи" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки( - Новый Структура("ЭтоПользователь", Ложь))); - - ИначеЕсли Отбор = "ВнешниеПользователи" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки( - Новый Структура("ЭтоВнешнийПользователь", Ложь))); - - ИначеЕсли Отбор = "НеправильноЗаписанные" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 3))); - - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 4))); - - ИначеЕсли Отбор = "БезПользователяИБ" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 0))); - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 1))); - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 4))); - КонецЕсли; - - Для каждого Строки Из УдаляемыеСтроки Цикл - Для каждого Строка Из Строки Цикл - ПользователиИнфБазы.Удалить(ПользователиИнфБазы.Индекс(Строка)); - КонецЦикла; + Отбор = Новый Структура("Сопоставлен", Ложь); + Строки = Выгрузка.НайтиСтроки(Отбор); + Для каждого Строка Из Строки Цикл + НоваяСтрока = ПользователиИнфБазы.Добавить(); + НоваяСтрока.ПолноеИмя = Строка.ПолноеИмя; + НоваяСтрока.Ссылка = Строка.Ссылка; + НоваяСтрока.СопоставленСВнешнимПользователем = Строка.ЭтоВнешнийПользователь; + НоваяСтрока.УдаленВКонфигураторе = Истина; + ИдентификаторыНесуществующихПользователейИБ.Добавить(Строка.ИдентификаторПользователяИБ); КонецЦикла; - ПользователиИнфБазы.Сортировать("ПометкаУдаления Возр, КодПроблемы Возр"); - - Элементы.Предупреждение.Видимость = ЕстьНеправильноЗаписанные; + Отбор = Новый Структура("ИдентификаторПользователяИБ", ТекущийИдентификаторПользователяИБ); + Строки = ПользователиИнфБазы.НайтиСтроки(Отбор); + Если Строки.Количество() > 0 Тогда + Элементы.ПользователиИнфБазы.ТекущаяСтрока = Строки[0].ПолучитьИдентификатор(); + КонецЕсли; КонецПроцедуры -&НаСервере -Функция ПолучитьНомерКартинкиПоСостоянию(Знач КодПроблемы, - Знач ПометкаУдаления, - Знач ЭтоВнешнийПользователь) - - НомерКартинки = -1; - - Если КодПроблемы = 1 ИЛИ КодПроблемы = 0 Тогда - НомерКартинки = 5; - КонецЕсли; - - Если ПометкаУдаления Тогда - Если КодПроблемы = 2 ИЛИ КодПроблемы = 3 ИЛИ КодПроблемы = 4 Тогда - НомерКартинки = 0; - КонецЕсли; - Иначе - Если КодПроблемы = 4 Тогда - НомерКартинки = 1; - ИначеЕсли КодПроблемы = 2 ИЛИ КодПроблемы = 3 Тогда - НомерКартинки = 4; - КонецЕсли; - КонецЕсли; - - Если НомерКартинки >= 0 И ЭтоВнешнийПользователь Тогда - НомерКартинки = НомерКартинки + 6; - КонецЕсли; - - Возврат НомерКартинки; - -КонецФункции - &НаСервере Процедура УдалитьПользователяИБ(ИдентификаторПользователяИБ, Отказ) @@ -346,26 +392,18 @@ Возврат; КонецЕсли; - Если ТекущиеДанные.КодПроблемы = 0 Тогда - ПоказатьПредупреждение( - Новый ОписаниеОповещения("УдалитьТекущегоПользователяИБ", ЭтотОбъект, Истина), - НСтр("ru = 'Данному пользователю информационной базы не сопоставлен элемент справочника. - | - |Для создания пользователя информационной базы, - |связанного с пользователем или внешним пользователем применяйте флажок - |""Доступ к информационной базе разрешен"" в соответствующей форме элемента.'")); - Иначе + Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда ОткрытьФорму( - ?( ТекущиеДанные.ЭтоВнешнийПользователь, - "Справочник.ВнешниеПользователи.ФормаОбъекта", - "Справочник.Пользователи.ФормаОбъекта"), + ?(ТекущиеДанные.СопоставленСВнешнимПользователем, + "Справочник.ВнешниеПользователи.ФормаОбъекта", + "Справочник.Пользователи.ФормаОбъекта"), Новый Структура("Ключ", ТекущиеДанные.Ссылка)); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура УдалитьТекущегоПользователяИБ(УдалитьСтроку = Ложь) Экспорт +Процедура УдалитьТекущегоПользователяИБ(УдалитьСтроку = Ложь) ПоказатьВопрос( Новый ОписаниеОповещения("УдалитьТекущегоПользователяИБЗавершение", ЭтотОбъект, УдалитьСтроку), @@ -378,15 +416,95 @@ Процедура УдалитьТекущегоПользователяИБЗавершение(Ответ, УдалитьСтроку) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда - Отказ = Ложь; УдалитьПользователяИБ( Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ, Отказ); - Если НЕ Отказ Тогда + Если Не Отказ И УдалитьСтроку Тогда ПользователиИнфБазы.Удалить(Элементы.ПользователиИнфБазы.ТекущиеДанные); КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура СопоставитьПользователяИБ(СНовым = Ложь) + + Если ТипыПользователей.Количество() > 1 Тогда + ТипыПользователей.ПоказатьВыборЭлемента( + Новый ОписаниеОповещения("СопоставитьПользователяИБДляТипаЭлемента", ЭтотОбъект, СНовым), + НСтр("ru = 'Выбор типа данных'"), + ТипыПользователей[0]); + Иначе + СопоставитьПользователяИБДляТипаЭлемента(ТипыПользователей[0], СНовым); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СопоставитьПользователяИБДляТипаЭлемента(ЭлементСписка, СНовым) Экспорт + + Если ЭлементСписка = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяСправочника = ?(ЭлементСписка.Значение = Тип("СправочникСсылка.Пользователи"), "Пользователи", "ВнешниеПользователи"); + + Если Не СНовым Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ИдентификаторыНесуществующихПользователейИБ", ИдентификаторыНесуществующихПользователейИБ); + + ОткрытьФорму("Справочник." + ИмяСправочника + ".ФормаВыбора", ПараметрыФормы,,,,, + Новый ОписаниеОповещения("СопоставитьПользователяИБСЭлементом", ЭтотОбъект, ИмяСправочника)); + Иначе + СопоставитьПользователяИБСЭлементом("Новый", ИмяСправочника); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СопоставитьПользователяИБСЭлементом(Элемент, ИмяСправочника) Экспорт + + Если Не ЗначениеЗаполнено(Элемент) И Элемент <> "Новый" Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + + Если Элемент <> "Новый" Тогда + ПараметрыФормы.Вставить("Ключ", Элемент); + КонецЕсли; + + ПараметрыФормы.Вставить("ИдентификаторПользователяИБ", + Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ); + + ОткрытьФорму("Справочник." + ИмяСправочника + ".ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьСопоставлениеПродолжение(Ответ, Неопределен) Экспорт + + Если Ответ = "ОтменитьСопоставление" Тогда + ОтменитьСопоставлениеНаСервере(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтменитьСопоставлениеНаСервере() + + ТекущаяСтрока = ПользователиИнфБазы.НайтиПоИдентификатору( + Элементы.ПользователиИнфБазы.ТекущаяСтрока); + + Объект = ТекущаяСтрока.Ссылка.ПолучитьОбъект(); + Объект.ИдентификаторПользователяИБ = Неопределено; + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + ЗаполнитьПользователейИБ(); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html index c98fe893d..fd5def6c9 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html @@ -1,6 +1,14 @@ - -

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

    -

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

    -

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

    -

     

    -

     

    \ No newline at end of file + +

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

    +

    Эта возможность позволяет пользователю входить в программу с регистрацией ОС.

    +

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

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

    Выбор пользователя

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

    См. также:

    +

     

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl index 04f973c23..104cd1826 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -14,11 +14,13 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаДоменов +#Область ОбработчикиСобытийЭлементовШапкиФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДоменов &НаКлиенте Процедура ТаблицаДоменовПриАктивизацииСтроки(Элемент) @@ -45,8 +47,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПользователей +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПользователей &НаКлиенте Процедура ТаблицаПользователейДоменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -55,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -77,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗаполнитьСписокДоменов() @@ -104,3 +109,5 @@ ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss index 61e6fb4bb..fd8e073b5 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,10 +1,23 @@ + + false + Подготовлен + Equal + true + Подготовленные ответственным за список + Normal + Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb + 73ec9c65-83f1-4821-af16-5dcbfa3cd980 + + Наименование + Asc + Normal + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index 2b72049ba..ff0fe79c3 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -62,6 +62,40 @@ true
    + + СсылкаГруппы + 153 + true + true + + + ГруппыПользователей.Ref + + + СсылкаГруппыРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + СсылкаГруппыКонтекстноеМеню + 154 + true + + LabelField + Enter + true + Left + true + + true + true + + None ГруппыПользователейКоманднаяПанель @@ -91,10 +125,10 @@ ГруппыПользователейСтрокаПоиска - 132 + 156 ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка - 134 + 158 Label true true @@ -104,7 +138,7 @@ ГруппыПользователейСтрокаПоискаКонтекстноеМеню - 133 + 157 true ГруппыПользователей @@ -114,10 +148,10 @@ ГруппыПользователейСостояниеПросмотра - 135 + 159 ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка - 137 + 161 Label true true @@ -127,7 +161,7 @@ ГруппыПользователейСостояниеПросмотраКонтекстноеМеню - 136 + 160 true ViewStatusAddition @@ -138,10 +172,10 @@ ГруппыПользователейУправлениеПоиском - 138 + 162 ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка - 140 + 164 Label true true @@ -151,7 +185,7 @@ ГруппыПользователейУправлениеПоискомКонтекстноеМеню - 139 + 163 true SearchControlAddition @@ -413,10 +447,6 @@ Наименование 51 - - <key>ru</key> - <value>Пользователь</value> - true true @@ -450,6 +480,40 @@ true + + Ссылка + 134 + true + true + + + ПользователиСписок.Ref + + + СсылкаРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 135 + true + + LabelField + Enter + true + Left + true + + true + true + + None ПользователиСписокКоманднаяПанель @@ -471,10 +535,10 @@ ПользователиСписокСтрокаПоиска - 150 + 175 ПользователиСписокСтрокаПоискаРасширеннаяПодсказка - 152 + 177 Label true true @@ -484,7 +548,7 @@ ПользователиСписокСтрокаПоискаКонтекстноеМеню - 151 + 176 true ПользователиСписок @@ -494,10 +558,10 @@ ПользователиСписокСостояниеПросмотра - 153 + 178 ПользователиСписокСостояниеПросмотраРасширеннаяПодсказка - 155 + 180 Label true true @@ -507,7 +571,7 @@ ПользователиСписокСостояниеПросмотраКонтекстноеМеню - 154 + 179 true ViewStatusAddition @@ -518,10 +582,10 @@ ПользователиСписокУправлениеПоиском - 156 + 181 ПользователиСписокУправлениеПоискомРасширеннаяПодсказка - 158 + 183 Label true true @@ -531,7 +595,7 @@ ПользователиСписокУправлениеПоискомКонтекстноеМеню - 157 + 182 true SearchControlAddition @@ -877,6 +941,7 @@ true InputField + true Auto true Left @@ -886,10 +951,6 @@ true true false - false - false - false - false true true true @@ -905,12 +966,16 @@ Selection СписокВыбранныхПользователейИГруппВыбор + + BeforeAddRow + СписокВыбранныхПользователейИГруппПередНачаломДобавления + СписокВыбранныхПользователейИГруппСтрокаПоиска - 168 + 194 СписокВыбранныхПользователейИГруппСтрокаПоискаРасширеннаяПодсказка - 170 + 196 Label true true @@ -920,7 +985,7 @@ СписокВыбранныхПользователейИГруппСтрокаПоискаКонтекстноеМеню - 169 + 195 true СписокВыбранныхПользователейИГрупп @@ -930,10 +995,10 @@ СписокВыбранныхПользователейИГруппСостояниеПросмотра - 171 + 197 СписокВыбранныхПользователейИГруппСостояниеПросмотраРасширеннаяПодсказка - 173 + 199 Label true true @@ -943,7 +1008,7 @@ СписокВыбранныхПользователейИГруппСостояниеПросмотраКонтекстноеМеню - 172 + 198 true ViewStatusAddition @@ -954,10 +1019,10 @@ СписокВыбранныхПользователейИГруппУправлениеПоиском - 174 + 200 СписокВыбранныхПользователейИГруппУправлениеПоискомРасширеннаяПодсказка - 176 + 202 Label true true @@ -967,7 +1032,7 @@ СписокВыбранныхПользователейИГруппУправлениеПоискомКонтекстноеМеню - 175 + 201 true SearchControlAddition @@ -1153,6 +1218,247 @@ Auto + + Комментарии + 137 + + КомментарийГруппы + 139 + + ЗаголовокКомментарияГруппы + 141 + + ГруппыПользователейКомментарий + 143 + true + true + + true + + + Items.ГруппыПользователей.CurrentData.Комментарий + + None + + ГруппыПользователейКомментарийРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ГруппыПользователейКомментарийКонтекстноеМеню + 144 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ЗаголовокКомментарияГруппыРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + + Items.ГруппыПользователей.CurrentData.Description + + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Комментарий группы</value> + + + КомментарийГруппыРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Page + + Vertical + + + + КомментарийПользователя + 146 + + ЗаголовокКомментарияПользователя + 148 + + ПользователиСписокКомментарий + 150 + true + true + + true + + + Items.ПользователиСписок.CurrentData.Комментарий + + None + + ПользователиСписокКомментарийРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ПользователиСписокКомментарийКонтекстноеМеню + 151 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ЗаголовокКомментарияПользователяРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + + Items.ПользователиСписок.CurrentData.Description + + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Комментарий пользователя</value> + + + КомментарийПользователяРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + + <key>ru</key> + <value>Комментарии</value> + + + КомментарииРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Pages + + Auto + + ФормаКоманднаяПанель -1 @@ -1357,6 +1663,33 @@ Auto InAdditionalSubmenu + + СведенияОПользователях + 132 + true + true + + true + + + СведенияОПользователяхРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Form.Command.СведенияОПользователях + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ПользователиИБ 6 @@ -1365,7 +1698,6 @@ true - false ПользователиИБExtendedTooltip 106 @@ -1444,6 +1776,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1483,21 +1819,27 @@ true + + ПользователиСписок.Ref + + + ПользователиСписок.Недействителен +
    true
    ВЫБРАТЬ Пользователи.Ссылка, + Пользователи.Подготовлен, Пользователи.ПометкаУдаления, Пользователи.Недействителен, Пользователи.Наименование, + Пользователи.Служебный, + Пользователи.Комментарий, ВЫБОР КОГДА Пользователи.ПометкаУдаления ТОГДА 0 - КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - ТОГДА 4 ИНАЧЕ 1 - КОНЕЦ КАК НомерКартинки, - Пользователи.Служебный + КОНЕЦ КАК НомерКартинки ИЗ Справочник.Пользователи КАК Пользователи ГДЕ @@ -1549,6 +1891,9 @@ ГруппыПользователей.Parent + + ГруппыПользователей.Ref + ВЫБРАТЬ СправочникГруппыПользователей.Ссылка, @@ -1560,7 +1905,8 @@ КОГДА СправочникГруппыПользователей.ПометкаУдаления ТОГДА 2 ИНАЧЕ 3 - КОНЕЦ КАК НомерКартинки + КОНЕЦ КАК НомерКартинки, + СправочникГруппыПользователей.Комментарий ИЗ Справочник.ГруппыПользователей КАК СправочникГруппыПользователей Catalog.ГруппыПользователей @@ -1678,6 +2024,24 @@ true + + ИмяТекущегоЭлемента + + <key>ru</key> + <value>Имя текущего элемента</value> + + 6 + + String + + + + true + + + true + + СоздатьГруппуПользователей @@ -1863,6 +2227,31 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СведенияОПользователях</name> + <title> + <key>ru</key> + <value>Сведения о пользователях</value> + + 9 + + ru + Сведения о пользователях + + + true + + + StdPicture.Report + + + + СведенияОПользователях + + + Auto + Auto + ВыборГруппПользователей @@ -1874,7 +2263,7 @@ - ДоступКИнформационнойБазеРазрешен + СкрытьПользователейБезПользователяИБ Boolean diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 480633c4f..ab96d5b39 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -14,8 +14,7 @@ // ВыбранныеПользователи - Массив - массив уже выбранных пользователей. // -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,7 +31,6 @@ ВыбиратьИерархически = Истина; ЗаполнитьХранимыеПараметры(); - ЗаполнитьПараметрыДинамическихСписков(); Если Параметры.РежимВыбора Тогда КлючНазначенияИспользования = "ВыборПодбор"; @@ -40,20 +38,12 @@ КонецЕсли; // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. - Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда - - Если Параметры.ДоступКИнформационнойБазеРазрешен = Ложь Тогда - ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; - Иначе - ВидСравненияКД = ВидСравненияКомпоновкиДанных.НеРавно; - КонецЕсли; - + Если Параметры.СкрытьПользователейБезПользователяИБ Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ПользователиСписок, "ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), - ВидСравненияКД); - + ВидСравненияКомпоновкиДанных.НеРавно); КонецЕсли; // Скрытие служебных пользователей. @@ -85,11 +75,19 @@ Элементы.СоздатьПользователя.Видимость = Ложь; КонецЕсли; + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда + Элементы.ПользователиИБ.Видимость = Ложь; + КонецЕсли; + Элементы.СведенияОПользователях.Видимость = Ложь; + КонецЕсли; + Если Параметры.РежимВыбора Тогда Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; + Элементы.СведенияОПользователях.Видимость = Ложь; // Отбор не помеченных на удаление. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( @@ -101,6 +99,14 @@ // Отключение перетаскивания пользователя в формах выбора и подбора пользователей. Элементы.ПользователиСписок.РазрешитьНачалоПеретаскивания = Ложь; + Если Параметры.Свойство("ИдентификаторыНесуществующихПользователейИБ") Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "ИдентификаторПользователяИБ", + Параметры.ИдентификаторыНесуществующихПользователейИБ, + ВидСравненияКомпоновкиДанных.ВСписке, , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + КонецЕсли; + Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. Элементы.ПользователиСписок.МножественныйВыбор = Истина; @@ -117,6 +123,7 @@ КонецЕсли; КонецЕсли; Иначе + Элементы.Комментарии.Видимость = Ложь; Элементы.ВыбратьПользователя.Видимость = Ложь; Элементы.ВыбратьГруппуПользователей.Видимость = Ложь; КонецЕсли; @@ -128,6 +135,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Параметры.РежимВыбора Тогда + ПроверкаИзмененияТекущегоЭлементаФормы(); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -161,8 +177,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВыбиратьИерархическиПриИзменении(Элемент) @@ -171,8 +188,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыПользователей +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыПользователей &НаКлиенте Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) @@ -189,9 +207,7 @@ Если Не ХранимыеПараметры.РасширенныйПодбор Тогда ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); - КонецЕсли; КонецПроцедуры @@ -301,8 +317,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиСписок +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиСписок &НаКлиенте Процедура ПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -312,9 +329,7 @@ Если Не ХранимыеПараметры.РасширенныйПодбор Тогда ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); - КонецЕсли; КонецПроцедуры @@ -344,8 +359,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВыбранныхПользователейИГрупп +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВыбранныхПользователейИГрупп &НаКлиенте Процедура СписокВыбранныхПользователейИГруппВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -355,8 +371,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура СписокВыбранныхПользователейИГруппПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьГруппуПользователей(Команда) @@ -395,7 +417,7 @@ МассивПользователей = РезультатВыбора(); ОповеститьОВыборе(МассивПользователей); СписокВыбранныхПользователейИзменен = Ложь; - Закрыть(); + Закрыть(МассивПользователей); КонецЕсли; КонецПроцедуры @@ -430,8 +452,20 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура СведенияОПользователях(Команда) + + ОткрытьФорму( + "Отчет.СведенияОПользователях.ФормаОбъекта", + Новый Структура("КлючВарианта", "СведенияОПользователях"), + ЭтотОбъект, + "СведенияОПользователях"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьХранимыеПараметры() @@ -441,16 +475,6 @@ КонецПроцедуры -&НаСервере -Процедура ЗаполнитьПараметрыДинамическихСписков() - - ОбновитьЗначениеПараметраКомпоновкиДанных( - ПользователиСписок, - "ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - -КонецПроцедуры - &НаСервере Процедура ОформитьИСкрытьНедействительныхПользователей() @@ -502,6 +526,35 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверкаИзмененияТекущегоЭлементаФормы() + + Если ТекущийЭлемент.Имя <> ИмяТекущегоЭлемента Тогда + ПриИзмененииТекущегоЭлементаФормы(); + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + КонецЕсли; + +#Если ВебКлиент Тогда + ПодключитьОбработчикОжидания("ПроверкаИзмененияТекущегоЭлементаФормы", 0.7, Истина); +#Иначе + ПодключитьОбработчикОжидания("ПроверкаИзмененияТекущегоЭлементаФормы", 0.1, Истина); +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииТекущегоЭлементаФормы() + + Если ТекущийЭлемент.Имя = "ГруппыПользователей" Тогда + Элементы.Комментарии.ТекущаяСтраница = Элементы.КомментарийГруппы; + + ИначеЕсли ТекущийЭлемент.Имя = "ПользователиСписок" Тогда + Элементы.Комментарии.ТекущаяСтраница = Элементы.КомментарийПользователя; + + КонецЕсли + +КонецПроцедуры + &НаСервере Процедура УдалитьИзСпискаВыбранных(УдалитьВсех = Ложь) @@ -836,6 +889,4 @@ КонецПроцедуры - - - +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index cf3116a6c..000000000 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - РолиПометка - - - - - AndGroup - - Роли.Имя - Equal - ПолныеПрава - - - ЗапретИзмененияАдминистративногоДоступа - Equal - true - - - - - - Доступность - false - - - - - - - РолиПометка - - - РолиСиноним - - - - - AndGroup - - Роли.Имя - Equal - ПолныеПрава - - - ЗапретИзмененияАдминистративногоДоступа - Equal - true - - - - - - ЦветФона - style:НедоступныеДанныеЦвет - - - false - Доступность - false - - - - diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index e620e0482..a3bde7085 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -34,14 +34,14 @@
    - ПолноеИмяОбработкаНесоответствия + СвойстваОбработкаНесоответствия 164 - ПолноеИмяКартинкаПредупреждения + СвойстваКартинкаПредупреждения 165 <key>ru</key> - <value>Полное имя картинка предупреждения</value> + <value>Свойства картинка предупреждения</value> true true @@ -49,7 +49,7 @@ true - ПолноеИмяКартинкаПредупрежденияExtendedTooltip + СвойстваКартинкаПредупрежденияРасширеннаяПодсказка 209 Label true @@ -59,13 +59,13 @@ - ПолноеИмяКартинкаПредупрежденияКонтекстноеМеню + СвойстваКартинкаПредупрежденияКонтекстноеМеню 166 true 5 true - 3 + 2 true false false @@ -76,24 +76,28 @@ - ПолноеИмяПояснениеИКоманда + СвойстваПояснениеИКоманды 167 - ПолноеИмяПояснениеНесоответствия + СвойстваПояснениеНесоответствия 168 <key>ru</key> - <value>Полное имя пользователя информационной базы -%1 -отличается от значения в поле Полное имя.</value> + <value>Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: +%1. +Нажмите "Записать", чтобы устранить различия и не выводить это предупреждение.</value> true true true + + ru + Некоторые свойства пользователя информационной базы сохраняются в карточке пользователя. Между значениями этих свойств найдены различия. + - ПолноеИмяПояснениеНесоответствияExtendedTooltip + СвойстваПояснениеНесоответствияРасширеннаяПодсказка 211 Label true @@ -103,7 +107,7 @@ - ПолноеИмяПояснениеНесоответствияКонтекстноеМеню + СвойстваПояснениеНесоответствияКонтекстноеМеню 169 true @@ -113,21 +117,83 @@ false Left - Center + Top - - ПолноеИмяВыполнитьСинхронизацию - 170 + + СвойстваКомандыУстраненияРазличий + 263 + + ЗаполнитьИзПользователяИБ + 170 + true + true + + true + + false + + ЗаполнитьИзПользователяИБРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗаполнитьИзПользователяИБ + Normal + Auto + true + true + UserCmds + Auto + + + Записать + 261 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.Write + Normal + PictureAndText + 10 + true + true + UserCmds + + StdPicture.Write + + Auto + true true true - false + + <key>ru</key> + <value>Свойства команды устранения различий</value> + - ПолноеИмяВыполнитьСинхронизациюExtendedTooltip - 212 + СвойстваКомандыУстраненияРазличийРасширеннаяПодсказка + 264 Label true true @@ -135,14 +201,14 @@ Left - UsualButton - Form.Command.ЗаполнитьПолноеИмяПоПользователюИБ - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + true + true + Auto + Auto + true true @@ -151,10 +217,10 @@ <key>ru</key> - <value>Полное имя пояснение и команда</value> + <value>Свойства пояснение и команды</value> - ПолноеИмяПояснениеИКомандаExtendedTooltip + СвойстваПояснениеИКомандыРасширеннаяПодсказка 210 Label true @@ -180,11 +246,15 @@ <key>ru</key> - <value>Полное имя обработка несоответствия</value> + <value>Свойства обработка несоответствия</value> + + ru + Свойства обработка несоответствия + true - ПолноеИмяОбработкаНесоответствияExtendedTooltip + СвойстваОбработкаНесоответствияРасширеннаяПодсказка 208 Label true @@ -204,14 +274,14 @@ - СвязьОбработкаНесоответствия + СопоставлениеОбработкаНесоответствия 171 - СвязьКартинкаПредупреждения + СопоставлениеКартинкаПредупреждения 172 <key>ru</key> - <value>Связь картинка предупреждения</value> + <value>Сопоставление картинка предупреждения</value> true true @@ -219,7 +289,7 @@ true - СвязьКартинкаПредупрежденияExtendedTooltip + СопоставлениеКартинкаПредупрежденияРасширеннаяПодсказка 214 Label true @@ -229,7 +299,7 @@ - СвязьКартинкаПредупрежденияКонтекстноеМеню + СопоставлениеКартинкаПредупрежденияКонтекстноеМеню 173 true @@ -246,21 +316,25 @@ - СвязьПояснениеНесоответствия + СопоставлениеПояснениеНесоответствия 175 <key>ru</key> - <value>Доступ пользователя к информационной базе (ИБ) запрещен. -Для того чтобы разрешить доступ к ИБ, включите флажок "Доступ к информационной базе разрешен". -Либо оставьте флажок выключенным, чтобы не выводить больше это предупреждение.</value> + <value>Пользователь информационной базы не найден. +Нажмите "Записать", чтобы устранить проблему и не выводить это предупреждение.</value> true true true + + ru + Пользователь информационной базы сопоставлен с этим пользователем справочника, +однако его не удается найти по сохраненному идентификатору. + - СвязьПояснениеНесоответствияExtendedTooltip + СопоставлениеПояснениеНесоответствияРасширеннаяПодсказка 215 Label true @@ -270,21 +344,20 @@ - СвязьПояснениеНесоответствияКонтекстноеМеню + СопоставлениеПояснениеНесоответствияКонтекстноеМеню 176 true Label 20 true - 4 + 2 true true - true false Left - Top + Center true @@ -294,11 +367,15 @@ <key>ru</key> - <value>Связь обработка несоответствия</value> + <value>Сопоставление обработка несоответствия</value> + + ru + Сопоставление обработка несоответствия + true - СвязьОбработкаНесоответствияExtendedTooltip + СопоставлениеОбработкаНесоответствияРасширеннаяПодсказка 213 Label true @@ -379,7 +456,7 @@ Right OnChange - ДействителенПриИзменении + НедействителенПриИзменении НедействителенExtendedTooltip @@ -403,25 +480,106 @@ true - - ДоступКИнформационнойБазеРазрешен - 99 + + ГруппаВходВПрограммуРазрешен + 265 + + ВходВПрограммуРазрешен + 99 + true + true + + true + + + ВходВПрограммуРазрешен + + Right + + ru + Разрешить вход пользователя в программу указанными способами аутентификации. + + + OnChange + ВходВПрограммуРазрешенПриИзменении + + + ВходВПрограммуРазрешенРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + + ВходВПрограммуРазрешенКонтекстноеМеню + 100 + true + + CheckBoxField + Enter + true + Left + true + + + + РекомендуетсяПроверитьНастройкиДляВхода + 267 + + <key>ru</key> + <value>Рекомендуется проверить настройки для входа</value> + + true + true + + true + + + ru + Перед разрешением входа в программу рекомендуется проверить настройки, т.к. пользователь +был введен не администратором, а ответственным за список пользователей. + + Button + + РекомендуетсяПроверитьНастройкиДляВходаРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + РекомендуетсяПроверитьНастройкиДляВходаКонтекстноеМеню + 268 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - ДоступКИнформационнойБазеРазрешен - - Right - - OnChange - ДоступКИнформационнойБазеРазрешенПриИзменении - + + <key>ru</key> + <value>Группа вход в программу разрешен</value> + - ДоступКИнформационнойБазеРазрешенExtendedTooltip - 218 + ГруппаВходВПрограммуРазрешенРасширеннаяПодсказка + 266 Label true true @@ -429,17 +587,14 @@ Left - - ДоступКИнформационнойБазеРазрешенКонтекстноеМеню - 100 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Auto + true + true + Auto + Auto + Страницы @@ -450,24 +605,173 @@ ОсновныеСвойства 75 - - ПользовательИнфБазыИмя - 95 + + ИмяПереключениеОтметкиНезаполненного + 249 + + ИмяСОтметкойНезаполненного + 251 + + ПользовательИнфБазыИмя1 + 95 + true + true + + true + + + ПользовательИнфБазыИмя + + + OnChange + ПользовательИнфБазыИмяПриИзменении + + + ПользовательИнфБазыИмя1РасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + ПользовательИнфБазыИмя1КонтекстноеМеню + 96 + true + + InputField + true + Enter + true + Left + true + + 26 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя с отметкой незаполненного</value> + + + ИмяСОтметкойНезаполненногоРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ИмяБезОтметкиНезаполненного + 253 + + ПользовательИнфБазыИмя2 + 255 + true + true + + true + + + ПользовательИнфБазыИмя + + + OnChange + ПользовательИнфБазыИмяПриИзменении + + + ПользовательИнфБазыИмя2РасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + ПользовательИнфБазыИмя2КонтекстноеМеню + 256 + true + + InputField + Enter + true + Left + true + + 26 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя без отметки незаполненного</value> + + + ИмяБезОтметкиНезаполненногоРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true true - - ПользовательИнфБазыИмя - - - OnChange - ПользовательИнфБазыИмяПриИзменении - + + <key>ru</key> + <value>Имя (переключение отметки незаполненного)</value> + - ПользовательИнфБазыИмяExtendedTooltip - 222 + ИмяПереключениеОтметкиНезаполненногоРасширеннаяПодсказка + 250 Label true true @@ -475,26 +779,9 @@ Left - - ПользовательИнфБазыИмяКонтекстноеМеню - 96 - true - - InputField - Enter - true - Left - true - - 26 - true - true - true - true - true - true - true - Normal + Pages + + Auto @@ -512,12 +799,17 @@ ПользовательИнфБазыАутентификацияСтандартная Right + + ru + Способ входа в программу с помощью имени и пароля, +указанного для пользователя 1С:Предприятия. + OnChange ПользовательИнфБазыАутентификацияСтандартнаяПриИзменении - ПользовательИнфБазыАутентификацияСтандартнаяExtendedTooltip + ПользовательИнфБазыАутентификацияСтандартнаяРасширеннаяПодсказка 224 Label true @@ -656,6 +948,10 @@ ПользовательИнфБазыПоказыватьВСпискеВыбора Right + + OnChange + ПользовательИнфБазыПоказыватьВСпискеВыбораПриИзменении + ПользовательИнфБазыПоказыватьВСпискеВыбораExtendedTooltip 228 @@ -691,6 +987,10 @@ ПользовательИнфБазыЗапрещеноИзменятьПароль Right + + OnChange + ПользовательИнфБазыЗапрещеноИзменятьПарольПриИзменении + ПользовательИнфБазыЗапрещеноИзменятьПарольExtendedTooltip 229 @@ -781,8 +1081,18 @@ ПользовательИнфБазыАутентификацияOpenID Right + + ru + Способ входа в программу с помощью имени, указанного для пользователя 1С:Предприятия, +которое передается службе аутентификации по протоколу OpenID. +Используется только при подключении через веб-сервер (адрес службы должен быть настроен). + + + OnChange + ПользовательИнфБазыАутентификацияOpenIDПриИзменении + - ПользовательИнфБазыАутентификацияOpenIDExtendedTooltip + ПользовательИнфБазыАутентификацияOpenIDРасширеннаяПодсказка 230 Label true @@ -818,12 +1128,18 @@ ПользовательИнфБазыАутентификацияОС Right + + ru + Способ входа в программу с помощью имени и пароля, +указанного для пользователя операционной системы, +связанного с пользователем 1С:Предприятия. + OnChange ПользовательИнфБазыАутентификацияОСПриИзменении - ПользовательИнфБазыАутентификацияОСExtendedTooltip + ПользовательИнфБазыАутентификацияОСРасширеннаяПодсказка 232 Label true @@ -895,6 +1211,10 @@ ПользовательИнфБазыПользовательОС Left + + OnChange + ПользовательИнфБазыПользовательОСПриИзменении + ПользовательИнфБазыПользовательОСExtendedTooltip 235 @@ -1055,6 +1375,10 @@ ПользовательИнфБазыРежимЗапуска + + OnChange + ПользовательИнфБазыРежимЗапускаПриИзменении + ПользовательИнфБазыРежимЗапускаExtendedTooltip 238 @@ -1409,10 +1733,10 @@
    РолиСтрокаПоиска - 263 + 285 РолиСтрокаПоискаРасширеннаяПодсказка - 265 + 287 Label true true @@ -1422,7 +1746,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 264 + 286 true Роли @@ -1432,10 +1756,10 @@ РолиСостояниеПросмотра - 266 + 288 РолиСостояниеПросмотраРасширеннаяПодсказка - 268 + 290 Label true true @@ -1445,7 +1769,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 267 + 289 true ViewStatusAddition @@ -1456,10 +1780,10 @@ РолиУправлениеПоиском - 269 + 291 РолиУправлениеПоискомРасширеннаяПодсказка - 271 + 293 Label true true @@ -1469,7 +1793,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 270 + 292 true SearchControlAddition @@ -1629,6 +1953,56 @@ Auto + + Комментарий + 258 + true + true + + true + + + Объект.Комментарий + + Left + + КомментарийExtendedTooltip + 260 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 259 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + true + 2 + true + false + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 @@ -1842,10 +2216,10 @@ true - ДоступКИнформационнойБазеРазрешен + ВходВПрограммуРазрешен <key>ru</key> - <value>Доступ к информационной базе разрешен</value> + <value>Вход в программу разрешен</value> 17 @@ -1866,7 +2240,10 @@ Пользователь инф базы полное имя 14 - + + String + + true @@ -1944,10 +2321,10 @@ - ЕстьСвязьСНесуществующимПользователемИБ + ЕстьСопоставлениеСНесуществующимПользователемИБ <key>ru</key> - <value>Есть связь с несуществующим пользователем ИБ</value> + <value>Есть сопоставление с несуществующим пользователем ИБ</value> 18 @@ -2126,23 +2503,6 @@ ПоказатьПодсистемыРолей - - АвторизованПолноправныйПользователь - - <key>ru</key> - <value>Авторизован полноправный пользователь</value> - - 24 - - Boolean - - - true - - - true - - ПользовательИнфБазыРежимЗапуска @@ -2297,13 +2657,60 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НачальноеОписаниеПользователяИБ</name> + <title> + <key>ru</key> + <value>Начальное описание пользователя ИБ</value> + + 31 + + + true + + + true + + + + УровеньДоступа + + <key>ru</key> + <value>Уровень доступа</value> + + 32 + + + true + + + true + + + + ПриЧтенииВходВПрограммуРазрешен + + <key>ru</key> + <value>При чтении вход в программу разрешен</value> + + 24 + + Boolean + + + true + + + true + + ПоказатьТолькоВыбранныеРоли <key>ru</key> <value>Только выбранные роли</value> - 3 + 1 ru Показать только выбранные роли @@ -2329,7 +2736,7 @@ ru Исключить роли - 5 + 2 ru Исключить роли @@ -2355,7 +2762,7 @@ ru Включить роли - 6 + 3 ru Включить роли @@ -2376,15 +2783,15 @@ Auto - ЗаполнитьПолноеИмяПоПользователюИБ + ЗаполнитьИзПользователяИБ <key>ru</key> - <value>Заполнить полное имя по пользователю ИБ</value> + <value>Заполнить из пользователя ИБ</value> - 1 + 4 ru - Заполнить полное имя по имени пользователя информационной базы + Заполнить значения из свойств пользователя информационной базы true @@ -2394,7 +2801,7 @@ - ЗаполнитьПолноеИмяПоПользователюИБ + ЗаполнитьИзПользователяИБ TextPicture @@ -2408,7 +2815,7 @@ ru По подсистемам - 2 + 5 ru Группировать список ролей по подсистемам diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index 5e961c52b..ba62ddc00 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,9 +1,50 @@ - -

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

    -

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

    -

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

    -

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

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

    -

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

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

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

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

    -

    См. также

    - \ No newline at end of file + +

    Описание свойств пользователя.

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Рекомендации по созданию пароля для входа в программу

    +

    Хороший пароль должен:

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

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

    +
    • Примеры хороших паролей:
      “nj7{jhjibq*Gfhjkm,
      F5”njnGhkmNj;t{HI. +
    • Примеры неудачных паролей:
      Иванов,
      qwerty,
      12345678,
      123123123.

    Ввод пользователя (при наличии права)

    +

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

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

      Адреса, телефоны

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

    Включение пользователя в группы

    +

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

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

    Права доступа пользователя 

    +

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

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

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

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

    Управление настройками пользователя

    +

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

    +

    Предупреждения программы

    +

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

    +

    См. также

    +
  • \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 3c0e4f5cf..92d5ee095 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -25,30 +27,17 @@ Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Видимость = Ложь; Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь; Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Видимость = Ложь; - Элементы.СвойстваАутентификацииОС.Видимость = Ложь; + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Видимость = Ложь; + Элементы.СвойстваАутентификацииОС.Видимость = Ложь; Элементы.ПользовательИнфБазыРежимЗапуска.Видимость = Ложь; КонецЕсли; - Если Объект.Служебный Тогда - ТолькоПросмотр = Истина; + Если ПользователиСлужебный.ЭтоУчебнаяПлатформа() Тогда + Элементы.СвойстваАутентификацииОС.ТолькоПросмотр = Истина; КонецЕсли; // Заполнение вспомогательных данных. - АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); - - // Заполнение списка выбора языка. - Если Метаданные.Языки.Количество() < 2 Тогда - Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; - Иначе - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - - Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить( - МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); - КонецЦикла; - КонецЕсли; - // Заполнение списка выбора режимов запуска. Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска); @@ -57,8 +46,19 @@ КонецЦикла; Элементы.ПользовательИнфБазыРежимЗапуска.СписокВыбора.СортироватьПоПредставлению(); - // Подготовка к интерактивным действиям с учетом сценариев открытия формы. + // Заполнение списка выбора языка. + Если Метаданные.Языки.Количество() < 2 Тогда + Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; + Иначе + Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл + Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить( + МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); + КонецЦикла; + КонецЕсли; + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); + + // Подготовка к интерактивным действиям с учетом сценариев открытия формы. УстановитьПривилегированныйРежим(Истина); Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда @@ -71,20 +71,42 @@ // Копирование элемента. ЗначениеКопирования = Параметры.ЗначениеКопирования; Объект.Наименование = ""; - ПрочитатьПользователяИБ( - ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + + Если Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Истина, Ложь) Тогда + РазрешеноКопированиеПользователяИБ = УровеньДоступа.АдминистраторСистемы; + ИначеЕсли Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Ложь, Ложь) Тогда + РазрешеноКопированиеПользователяИБ = УровеньДоступа.ПолныеПрава; + Иначе + РазрешеноКопированиеПользователяИБ = Истина; + КонецЕсли; + + Если РазрешеноКопированиеПользователяИБ Тогда + ПрочитатьПользователяИБ( + ЗначениеЗаполнено(ЗначениеКопирования.ИдентификаторПользователяИБ)); + Иначе + ПрочитатьПользователяИБ(); + КонецЕсли; + + Если Не УровеньДоступа.ПолныеПрава Тогда + ВходВПрограммуРазрешен = Ложь; + КонецЕсли; Иначе // Добавление элемента. - Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ; // Чтение начальных значений свойств пользователя ИБ. ПрочитатьПользователяИБ(); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; - ПользовательИнфБазыАутентификацияOpenID = Истина; + Если Не ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда ПользовательИнфБазыАутентификацияСтандартная = Истина; - ДоступКИнформационнойБазеРазрешен = Истина; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; + ПользовательИнфБазыАутентификацияOpenID = Истина; + КонецЕсли; + + Если УровеньДоступа.ПолныеПрава Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; КонецЕсли; КонецЕсли; Иначе @@ -95,23 +117,8 @@ УстановитьПривилегированныйРежим(Ложь); ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", ПользовательИБСуществует); - - ОпределитьДействияВФорме(); - - ОпределитьНесоответствияПользователяСПользователемИБ(); - - ТолькоПросмотр - = ТолькоПросмотр - ИЛИ ДействияВФорме.Роли <> "Редактирование" - И ДействияВФорме.КонтактнаяИнформация <> "Редактирование" - И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) - И ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - - ОбработатьИнтерфейсРолей( - "УстановитьТолькоПросмотрРолей", - ПользователиСлужебный.ЗапретРедактированияРолей() - ИЛИ ДействияВФорме.Роли <> "Редактирование"); + НачальноеОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); + ТребуетсяСинхронизацияССервисом = Объект.Ссылка.Пустая(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); @@ -119,20 +126,7 @@ ПереопределитьРедактированиеКонтактнойИнформацииВСервисе(); КонецЕсли; - Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - Элементы.Недействителен.ТолькоПросмотр = Истина; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ДействияСПользователемСервиса = Неопределено; - ПользователиСлужебный.ПриПолученииДействийСПользователемСервиса( - ДействияСПользователемСервиса, Объект.Ссылка); - КонецЕсли; - - УстановитьПостояннуюДоступностьСвойств(); - УстановитьДоступностьСвойств(ЭтотОбъект); - - ТребуетсяСинхронизацияССервисом = Объект.Ссылка.Пустая(); + ОбщаяНастройкаФормы(Истина); КонецПроцедуры @@ -153,6 +147,8 @@ МодульУправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; + ОбщаяНастройкаФормы(); + КонецПроцедуры &НаКлиенте @@ -160,7 +156,7 @@ ОчиститьСообщения(); - Если ДоступКИнформационнойБазеРазрешен Тогда + Если ВходВПрограммуРазрешен Тогда ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'"); Если ДействияВФорме.Роли = "Редактирование" @@ -198,8 +194,7 @@ Отказ = Истина; СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( - Новый ОписаниеОповещения( - "ПослеЗапросаПароляДляАутентификацииВСервисеПередЗаписью", ЭтотОбъект, ПараметрыЗаписи), + Новый ОписаниеОповещения("ПослеЗапросаПароляДляАутентификацииВСервисеПередЗаписью", ЭтотОбъект, ПараметрыЗаписи), ЭтотОбъект, ПарольПользователяСервиса); Возврат; @@ -215,31 +210,21 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", ТребуетсяСинхронизацияССервисом); - // Восстановление действий в форме, если они изменены на клиенте - ОпределитьДействияВФорме(); - - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); - Если ДоступКИнформационнойБазеРазрешен Тогда - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - Иначе - ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); + Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ТекущийОбъект.ДополнительныеСвойства.Вставить( - "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда - - ЗаполнитьЗначенияСвойств( - ТекущийОбъект, - ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления")); + ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления")); КонецЕсли; ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоПользователя", ГруппаНовогоПользователя); @@ -258,16 +243,12 @@ ТребуетсяСинхронизацияССервисом = Ложь; - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ПараметрыЗаписи.Вставить( ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); КонецЕсли; - ПрочитатьПользователяИБ(); - - ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); + ОбщаяНастройкаФормы(, ПараметрыЗаписи); КонецПроцедуры @@ -285,10 +266,10 @@ ИначеЕсли ПараметрыЗаписи.Свойство("УдаленПользовательИБ") Тогда Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтотОбъект); - ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществующимПользователемИБ") Тогда + ИначеЕсли ПараметрыЗаписи.Свойство("ОчищеноСопоставлениеСНесуществующимПользователемИБ") Тогда Оповестить( - "ОчищенаСвязьСНесуществующимПользователемИБ", - ПараметрыЗаписи.ОчищенаСвязьСНесуществующимПользователемИБ, + "ОчищеноСопоставлениеСНесуществующимПользователемИБ", + ПараметрыЗаписи.ОчищеноСопоставлениеСНесуществующимПользователемИБ, ЭтотОбъект); КонецЕсли; @@ -304,8 +285,7 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Если ДоступКИнформационнойБазеРазрешен Тогда - + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ); ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); @@ -325,53 +305,31 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ЗаполнитьПолноеИмяПоПользователюИБ(Команда) +Процедура ЗаполнитьИзПользователяИБ(Команда) - Объект.Наименование = ПользовательИнфБазыПолноеИмя; - Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; + ЗаполнитьПоляПоПользователюИБНаСервере(); КонецПроцедуры &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) - // Если ПолноеИмя определено, то его нужно обновлять. - // Прим.: неопределенное ПолноеИмя или другое свойство - // не учитывается при записи пользователя ИБ - // ПолноеИмя определено только для вида - // интерактивных действий "БезОграничения". - - Если ПользовательИнфБазыПолноеИмя <> Неопределено Тогда - ПользовательИнфБазыПолноеИмя = Объект.Наименование; - КонецЕсли; - - Если НЕ ПользовательИБСуществует - И ДоступКИнформационнойБазеРазрешен Тогда - - ПользовательИнфБазыИмя = - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( - Объект.Наименование); - КонецЕсли; + ОбновитьИмяДляВхода(ЭтотОбъект, Истина); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); КонецПроцедуры &НаКлиенте -Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент) +Процедура НедействителенПриИзменении(Элемент) - Если НЕ ПользовательИБСуществует - И ДоступКИнформационнойБазеРазрешен Тогда - - ПользовательИнфБазыИмя = - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( - Объект.Наименование); - - ПользовательИнфБазыПолноеИмя = Объект.Наименование; + Если Объект.Недействителен Тогда + ВходВПрограммуРазрешен = Ложь; КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); @@ -380,10 +338,45 @@ КонецПроцедуры +&НаКлиенте +Процедура ВходВПрограммуРазрешенПриИзменении(Элемент) + + Если Объект.ПометкаУдаления И ВходВПрограммуРазрешен Тогда + ВходВПрограммуРазрешен = Ложь; + ПоказатьПредупреждение(, + НСтр("ru = 'Чтобы разрешить вход в программу, требуется снять + |пометку на удаление с этого пользователя.'")); + Возврат; + КонецЕсли; + + ОбновитьИмяДляВхода(ЭтотОбъект); + + Если ВходВПрограммуРазрешен + И НЕ ПользовательИнфБазыАутентификацияOpenID + И НЕ ПользовательИнфБазыАутентификацияСтандартная + И НЕ ПользовательИнфБазыАутентификацияОС Тогда + + ПользовательИнфБазыАутентификацияСтандартная = Истина; + КонецЕсли; + + УстановитьДоступностьСвойств(ЭтотОбъект); + + УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); + + Если Не УровеньДоступа.ПолныеПрава + И УровеньДоступа.УправлениеСписком + И Не ВходВПрограммуРазрешен Тогда + + ПоказатьПредупреждение(, + НСтр("ru = 'После записи вход в программу сможет разрешить только администратор.'")); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПользовательИнфБазыАутентификацияСтандартнаяПриИзменении(Элемент) - УстановитьДоступностьСвойств(ЭтотОбъект); + АутентификацияПриИзменении(); КонецПроцедуры @@ -392,13 +385,43 @@ ПользовательИнфБазыПароль = Пароль; + УстановитьДоступностьСвойств(ЭтотОбъект); + УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура ПользовательИнфБазыПоказыватьВСпискеВыбораПриИзменении(Элемент) + + УстановитьДоступностьСвойств(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыЗапрещеноИзменятьПарольПриИзменении(Элемент) + + УстановитьДоступностьСвойств(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыАутентификацияOpenIDПриИзменении(Элемент) + + АутентификацияПриИзменении(); + +КонецПроцедуры + &НаКлиенте Процедура ПользовательИнфБазыАутентификацияОСПриИзменении(Элемент) + АутентификацияПриИзменении(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыПользовательОСПриИзменении(Элемент) + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры @@ -413,11 +436,7 @@ КонецПроцедуры &НаКлиенте -Процедура ДействителенПриИзменении(Элемент) - - Если Объект.Недействителен Тогда - ДоступКИнформационнойБазеРазрешен = Ложь; - КонецЕсли; +Процедура ПользовательИнфБазыИмяПриИзменении(Элемент) УстановитьДоступностьСвойств(ЭтотОбъект); @@ -426,19 +445,39 @@ КонецПроцедуры &НаКлиенте -Процедура ПользовательИнфБазыИмяПриИзменении(Элемент) +Процедура ПользовательИнфБазыЯзыкПриИзменении(Элемент) + + УстановитьДоступностьСвойств(ЭтотОбъект); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); КонецПроцедуры &НаКлиенте -Процедура ПользовательИнфБазыЯзыкПриИзменении(Элемент) +Процедура ПользовательИнфБазыРежимЗапускаПриИзменении(Элемент) - УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура ПользовательИнфБазыРежимЗапускаОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Поддержка контактной информации + &НаКлиенте Процедура Подключаемый_EMailПриИзменении(Элемент) @@ -478,7 +517,7 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_EMailНачалоВыбора() +Процедура Подключаемый_EMailНачалоВыбора(Элемент) Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено И ПарольПользователяСервиса = Неопределено Тогда @@ -577,50 +616,9 @@ КонецПроцедуры -&НаСервере -Функция ОбновитьКонтактнуюИнформацию(Результат = Неопределено) - - МодульУправлениеКонтактнойИнформациейСервер = - ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - - Возврат МодульУправлениеКонтактнойИнформациейСервер.ОбновитьКонтактнуюИнформацию( - ЭтотОбъект, Объект, Результат); - -КонецФункции +#КонецОбласти -&НаСервере -Процедура ПереопределитьРедактированиеКонтактнойИнформацииВСервисе() - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - КонтактнаяИнформация = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - - СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", Справочники["ВидыКонтактнойИнформации"].EmailПользователя))[0]; - ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита]; - ЭлементEMail.УстановитьДействие("ПриИзменении", "Подключаемый_EMailПриИзменении"); - - ЭлементEMail.КнопкаВыбора = Истина; - ЭлементEMail.УстановитьДействие("НачалоВыбора", "Подключаемый_EMailНачалоВыбора"); - - СтрокаТелефон = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", Справочники["ВидыКонтактнойИнформации"].ТелефонПользователя))[0]; - ЭлементТелефон = Элементы[СтрокаТелефон.ИмяРеквизита]; - ЭлементТелефон.УстановитьДействие("ПриИзменении", "Подключаемый_ТелефонПриИзменении"); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция ВидКонтактнойИнформацииEmailПользователя() - - ИмяПредопределенногоЗначения = "Справочник." + "ВидыКонтактнойИнформации" + ".EmailПользователя"; - - Возврат ПредопределенноеЗначение(ИмяПредопределенногоЗначения); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли +#Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -638,8 +636,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -676,8 +675,142 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиПометка.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.Имя"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'ПолныеПрава'"); + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиПометка.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РолиСиноним.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.Имя"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'ПолныеПрава'"); + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + +КонецПроцедуры + +&НаСервере +Процедура ОбщаяНастройкаФормы(ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) + + Если НачальноеОписаниеПользователяИБ = Неопределено Тогда + Возврат; // Вызов ПриЧтенииНаСервере до вызова ПриСозданииНаСервере. + КонецЕсли; + + Если Не ПриСозданииНаСервере Тогда + ПрочитатьПользователяИБ(); + КонецЕсли; + + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); + + ОпределитьДействияВФорме(); + + ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); + + ОбработатьИнтерфейсРолей( + "УстановитьТолькоПросмотрРолей", + ПользователиСлужебный.ЗапретРедактированияРолей() + Или ДействияВФорме.Роли <> "Редактирование" + Или Не УровеньДоступа.НастройкиДляВхода); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ДействияСПользователемСервиса = Неопределено; + ПользователиСлужебный.ПриПолученииДействийСПользователемСервиса( + ДействияСПользователемСервиса, Объект.Ссылка); + КонецЕсли; + + // Настройка возможности просмотра. + Элементы.КонтактнаяИнформация.Видимость = ЗначениеЗаполнено(ДействияВФорме.КонтактнаяИнформация); + Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); + + ВыводитьСписокРолей = ЗначениеЗаполнено(ДействияВФорме.Роли); + Элементы.ОтображениеРолей.Видимость = ВыводитьСписокРолей; + Элементы.СвойстваАутентификации1СПредприятия.Отображение = + ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.ОбычноеВыделение); + + Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость = + УровеньДоступа.ПолныеПрава И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; + + // Настройка возможности изменения. + Если Объект.Служебный Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + + ТолькоПросмотр = ТолькоПросмотр + ИЛИ ДействияВФорме.Роли <> "Редактирование" + И ДействияВФорме.СвойстваЭлемента <> "Редактирование" + И ДействияВФорме.КонтактнаяИнформация <> "Редактирование" + И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование"; + + Элементы.Наименование.ТолькоПросмотр = + Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); + + Элементы.Недействителен.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр; + + Элементы.ОсновныеСвойства.ТолькоПросмотр = + Не ( ДействияВФорме.СвойстваПользователяИБ = "Редактирование" + И (УровеньДоступа.УправлениеСписком Или УровеньДоступа.ИзменениеТекущего)); + + Элементы.ПользовательИнфБазыИмя1.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыИмя2.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; + + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; + Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; + + Элементы.Комментарий.ТолькоПросмотр = + Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); + + УстановитьДоступностьСвойств(ЭтотОбъект); + +КонецПроцедуры // Продолжение обработчика события ПередЗаписью &НаКлиенте @@ -702,6 +835,48 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьИмяДляВхода(Форма, ПриИзмененииНаименования = Ложь) + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + Если Форма.ПользовательИБСуществует Тогда + Возврат; + КонецЕсли; + + КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Форма.Объект.Наименование); + + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда + Если Форма.ПользовательИнфБазыИмя = КраткоеИмя Тогда + Форма.ПользовательИнфБазыИмя = ""; + КонецЕсли; + Иначе + + Если ПриИзмененииНаименования + Или Не ЗначениеЗаполнено(Форма.ПользовательИнфБазыИмя) Тогда + + Форма.ПользовательИнфБазыИмя = КраткоеИмя; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура АутентификацияПриИзменении() + + УстановитьДоступностьСвойств(ЭтотОбъект); + + Если ВходВПрограммуРазрешен + И НЕ ПользовательИнфБазыАутентификацияOpenID + И НЕ ПользовательИнфБазыАутентификацияСтандартная + И НЕ ПользовательИнфБазыАутентификацияОС Тогда + + ВходВПрограммуРазрешен = Ложь; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ОпределитьДействияВФорме() @@ -711,60 +886,50 @@ ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование". - ДействияВФорме.Вставить("КонтактнаяИнформация", ""); + ДействияВФорме.Вставить("КонтактнаяИнформация", "Просмотр"); - // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих". + // "", "ПросмотрВсех", "Редактирование". ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "Просмотр", "Редактирование". - ДействияВФорме.Вставить("СвойстваЭлемента", ""); + ДействияВФорме.Вставить("СвойстваЭлемента", "Просмотр"); - Если Пользователи.ЭтоПолноправныйПользователь(,ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда - // Администратор. + Если Не УровеньДоступа.АдминистраторСистемы + И УровеньДоступа.ПолныеПрава + И Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка, Истина) Тогда + + // Администратор системы доступен только на просмотр. + ДействияВФорме.Роли = "Просмотр"; + ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; + + ИначеЕсли УровеньДоступа.АдминистраторСистемы + ИЛИ УровеньДоступа.ПолныеПрава Тогда + ДействияВФорме.Роли = "Редактирование"; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; - - ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() Тогда - - Если Пользователи.АвторизованныйПользователь() <> Объект.Ссылка И - Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда - // Другой администратор. - ДействияВФорме.Роли = ""; - ДействияВФорме.КонтактнаяИнформация = "Просмотр"; - ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; - Иначе - ДействияВФорме.Роли = "Редактирование"; + Иначе + Если УровеньДоступа.ИзменениеТекущего Тогда + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; - ДействияВФорме.СвойстваЭлемента = "Редактирование"; КонецЕсли; - ИначеЕсли РольДоступна("ДобавлениеИзменениеПользователей") - И НЕ Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда - - // Ответственный за список пользователей и групп пользователей. - // (Исполнитель распоряжений о приеме на работу и переводу, - // переназначению, созданию отделов, подразделений и рабочих групп). - ДействияВФорме.Роли = ""; - ДействияВФорме.КонтактнаяИнформация = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - ДействияВФорме.СвойстваЭлемента = "Редактирование"; - - ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда - // Свои свойства. - ДействияВФорме.Роли = ""; - ДействияВФорме.КонтактнаяИнформация = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих"; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; - Иначе - // Чужие свойства. - ДействияВФорме.Роли = ""; - ДействияВФорме.КонтактнаяИнформация = "Просмотр"; - ДействияВФорме.СвойстваПользователяИБ = ""; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; + Если УровеньДоступа.УправлениеСписком Тогда + // Ответственный за список пользователей и групп пользователей. + // (Исполнитель распоряжений о приеме на работу и переводу, + // переназначению, созданию отделов, подразделений и рабочих групп). + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; + ДействияВФорме.КонтактнаяИнформация = "Редактирование"; + ДействияВФорме.СвойстваЭлемента = "Редактирование"; + + Если УровеньДоступа.НастройкиДляВхода Тогда + ДействияВФорме.Роли = "Редактирование"; + КонецЕсли; + Если Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда + ДействияВФорме.Роли = "Просмотр"; + КонецЕсли; + КонецЕсли; КонецЕсли; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( @@ -780,7 +945,9 @@ Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; - ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда + ИначеЕсли ДействияВФорме.Роли = "Редактирование" + И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда + ДействияВФорме.Роли = "Просмотр"; КонецЕсли; @@ -788,10 +955,18 @@ ДействияВФорме.КонтактнаяИнформация = ""; КонецЕсли; - Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", + Если Найти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; + + Иначе // Поддержка обратной совместимости. + Если Найти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда + ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; + + ИначеЕсли Найти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда + ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; + КонецЕсли; КонецЕсли; Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда @@ -807,10 +982,8 @@ ДействияВФорме.КонтактнаяИнформация = "Просмотр"; КонецЕсли; - Если Найти(", РедактированиеВсех, РедактированиеСвоих,", - ", " + ДействияВФорме.СвойстваПользователяИБ + ",") <> 0 Тогда - - ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; + Если ДействияВФорме.СвойстваПользователяИБ = "Редактирование" Тогда + ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; КонецЕсли; Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда @@ -823,11 +996,14 @@ &НаСервере Функция ОписаниеПользователяИБ(ДляПроверкиПервогоАдминистратора = Ложь) - Если Элементы.ПолноеИмяПояснениеНесоответствия.Видимость Тогда + Если УровеньДоступа.УправлениеСписком + И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда + Если УровеньДоступа.АдминистраторСистемы + Или УровеньДоступа.ПолныеПрава Тогда Результат = Пользователи.НовоеОписаниеПользователяИБ(); Пользователи.СкопироватьСвойстваПользователяИБ( @@ -838,19 +1014,38 @@ |Роли", "ПользовательИнфБазы"); + Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); Иначе - // РедактированиеСвоих. Результат = Новый Структура; - Результат.Вставить("Пароль", ПользовательИнфБазыПароль); - Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + + Если УровеньДоступа.ИзменениеТекущего Тогда + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + КонецЕсли; + + Если УровеньДоступа.УправлениеСписком Тогда + Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); + Результат.Вставить("ПоказыватьВСпискеВыбора", ПользовательИнфБазыПоказыватьВСпискеВыбора); + Результат.Вставить("ЗапрещеноИзменятьПароль", ПользовательИнфБазыЗапрещеноИзменятьПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + Результат.Вставить("РежимЗапуска", ПользовательИнфБазыРежимЗапуска); + + Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + Результат.Вставить("ПолноеИмя", ПользовательИнфБазыПолноеИмя); + КонецЕсли; + КонецЕсли; + + Если УровеньДоступа.НастройкиДляВхода Тогда + Результат.Вставить("АутентификацияСтандартная", ПользовательИнфБазыАутентификацияСтандартная); + Результат.Вставить("Имя", ПользовательИнфБазыИмя); + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("АутентификацияOpenID", ПользовательИнфБазыАутентификацияOpenID); + Результат.Вставить("АутентификацияОС", ПользовательИнфБазыАутентификацияОС); + Результат.Вставить("ПользовательОС", ПользовательИнфБазыПользовательОС); + КонецЕсли; КонецЕсли; Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); - Если ДействияВФорме.Роли = "Редактирование" Тогда - ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); - Результат.Вставить("Роли", ТекущиеРоли); - КонецЕсли; - Если НЕ ДляПроверкиПервогоАдминистратора И ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Результат) Тогда @@ -862,6 +1057,12 @@ РолиАдминистратора.Добавить(ИмяРолиАдминистратораСистемы); КонецЕсли; Результат.Вставить("Роли", РолиАдминистратора); + + ИначеЕсли УровеньДоступа.НастройкиДляВхода + И Не ПользователиСлужебный.ЗапретРедактированияРолей() Тогда + + ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); + Результат.Вставить("Роли", ТекущиеРоли); КонецЕсли; Возврат Результат; @@ -905,7 +1106,74 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработка пользователя ИБ. +// Поддержка контактной информации + +&НаСервере +Функция ОбновитьКонтактнуюИнформацию(Результат = Неопределено) + + МодульУправлениеКонтактнойИнформациейСервер = + ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + + Возврат МодульУправлениеКонтактнойИнформациейСервер.ОбновитьКонтактнуюИнформацию( + ЭтотОбъект, Объект, Результат); + +КонецФункции + +&НаСервере +Процедура ПереопределитьРедактированиеКонтактнойИнформацииВСервисе() + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + КонтактнаяИнформация = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + + СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", Справочники["ВидыКонтактнойИнформации"].EmailПользователя))[0]; + ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита]; + ЭлементEMail.УстановитьДействие("ПриИзменении", "Подключаемый_EMailПриИзменении"); + + ЭлементEMail.КнопкаВыбора = Истина; + ЭлементEMail.УстановитьДействие("НачалоВыбора", "Подключаемый_EMailНачалоВыбора"); + + СтрокаТелефон = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", Справочники["ВидыКонтактнойИнформации"].ТелефонПользователя))[0]; + ЭлементТелефон = Элементы[СтрокаТелефон.ИмяРеквизита]; + ЭлементТелефон.УстановитьДействие("ПриИзменении", "Подключаемый_ТелефонПриИзменении"); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ВидКонтактнойИнформацииEmailПользователя() + + ИмяПредопределенногоЗначения = "Справочник." + "ВидыКонтактнойИнформации" + ".EmailПользователя"; + + Возврат ПредопределенноеЗначение(ИмяПредопределенногоЗначения); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработка пользователя ИБ + +&НаСервере +Функция НачальноеОписаниеПользователяИБ() + + УстановитьПривилегированныйРежим(Истина); + + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + + Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + Иначе + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = + НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); + КонецЕсли; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + КонецЕсли; + ОписаниеПользователяИБ.Роли = Новый Массив; + + Возврат ОписаниеПользователяИБ; + +КонецФункции &НаСервере Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь) @@ -914,20 +1182,11 @@ Пароль = ""; ПодтверждениеПароля = ""; - ПрочитанныеСвойства = Неопределено; - ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - ПользовательИБСуществует = Ложь; - ДоступКИнформационнойБазеРазрешен = Ложь; - - // Заполнение начальных значений свойств пользователяИБ. - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; - Иначе - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = - НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); - КонецЕсли; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; - ОписаниеПользователяИБ.Роли = Новый Массив; + ПрочитанныеСвойства = Неопределено; + ОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); + ПользовательИБСуществует = Ложь; + ВходВПрограммуРазрешен = Ложь; + ПользовательИБОсновной = Ложь; Если ПриКопированииЭлемента Тогда @@ -935,30 +1194,51 @@ Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда - // Установка связи пользователем ИБ. - ДоступКИнформационнойБазеРазрешен = Истина; + // Сопоставление пользователя ИБ с пользователем в справочнике. + Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; // Копирование свойств и ролей пользователяИБ. ЗаполнитьЗначенияСвойств( ОписаниеПользователяИБ, ПрочитанныеСвойства, - "АутентификацияOpenID, - |АутентификацияСтандартная, - |ЗапрещеноИзменятьПароль, + "ЗапрещеноИзменятьПароль, |ПоказыватьВСпискеВыбора, - |АутентификацияОС, |РежимЗапуска, - |Язык, - |Роли"); + |РежимЗапуска" + ?(Не Элементы.ПользовательИнфБазыЯзык.Видимость, "", ", + |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", + |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; Иначе Если Пользователи.ПрочитатьПользователяИБ( - Объект.ИдентификаторПользователяИБ, - ПрочитанныеСвойства) Тогда + Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда - ПользовательИБСуществует = Истина; - ДоступКИнформационнойБазеРазрешен = Истина; + ПользовательИБСуществует = Истина; + ПользовательИБОсновной = Истина; + + ИначеЕсли Параметры.Свойство("ИдентификаторПользователяИБ") + И ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда + + Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ; + + Если Пользователи.ПрочитатьПользователяИБ( + Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда + + ПользовательИБСуществует = Истина; + Если Объект.Наименование <> ПрочитанныеСвойства.ПолноеИмя Тогда + Объект.Наименование = ПрочитанныеСвойства.ПолноеИмя; + Модифицированность = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ПользовательИБСуществует Тогда + + Если Пользователи.ВходВПрограммуРазрешен(ПрочитанныеСвойства) Тогда + ВходВПрограммуРазрешен = Истина; + КонецЕсли; ЗаполнитьЗначенияСвойств( ОписаниеПользователяИБ, @@ -971,9 +1251,9 @@ |ЗапрещеноИзменятьПароль, |АутентификацияОС, |ПользовательОС, - |РежимЗапуска, - |Язык, - |Роли"); + |РежимЗапуска" + ?(Не Элементы.ПользовательИнфБазыЯзык.Видимость, "", ", + |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", + |Роли")); Если ПрочитанныеСвойства.ПарольУстановлен Тогда Пароль = "**********"; @@ -990,155 +1270,175 @@ |Роли", "ПользовательИнфБазы"); + Если ПользовательИБОсновной И Не ВходВПрограммуРазрешен Тогда + ХранимыеСвойства = ПользователиСлужебный.ХранимыеСвойстваПользователяИБ(Объект.Ссылка); + ПользовательИнфБазыАутентификацияOpenID = ХранимыеСвойства.АутентификацияOpenID; + ПользовательИнфБазыАутентификацияСтандартная = ХранимыеСвойства.АутентификацияСтандартная; + ПользовательИнфБазыАутентификацияОС = ХранимыеСвойства.АутентификацияОС; + КонецЕсли; + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); + ПриЧтенииВходВПрограммуРазрешен = ВходВПрограммуРазрешен; + КонецПроцедуры &НаСервере Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено) - // Проверка соответствия свойства "ПолноеИмя" пользователяИБ и - // свойства "Наименование" пользователя. + // Проверка соответствия свойства ПолноеИмя пользователяИБ и + // реквизита Наименование пользователя. - Если НЕ ( ДействияВФорме.СвойстваЭлемента = "Редактирование" - И ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех") Тогда - - // Прочитанное ПолноеИмя пользователя не может быть изменено, если не совпадает. - ПользовательИнфБазыПолноеИмя = Неопределено; - КонецЕсли; + ПоказатьНесоответствие = Истина; + ПоказатьКомандыУстраненияРазличий = Ложь; - Если НЕ ПользовательИБСуществует - ИЛИ ПользовательИнфБазыПолноеИмя = Неопределено - ИЛИ ПользовательИнфБазыПолноеИмя = Объект.Наименование Тогда + Если НЕ ПользовательИБСуществует Тогда + ПоказатьНесоответствие = Ложь; - Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; - - ИначеЕсли ЗначениеЗаполнено(Объект.Ссылка) Тогда - - Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок, - ПользовательИнфБазыПолноеИмя); - Иначе + ИначеЕсли Не ЗначениеЗаполнено(Объект.Ссылка) Тогда Объект.Наименование = ПользовательИнфБазыПолноеИмя; - Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; + ПоказатьНесоответствие = Ложь; + + ИначеЕсли УровеньДоступа.УправлениеСписком Тогда + + УточнениеСвойств = Новый Массив; + + Если ПользовательИнфБазыПолноеИмя <> Объект.Наименование Тогда + ПоказатьКомандыУстраненияРазличий = + ПоказатьКомандыУстраненияРазличий + Или ДействияВФорме.СвойстваЭлемента = "Редактирование"; + + УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Полное имя ""%1""'"), ПользовательИнфБазыПолноеИмя)); + КонецЕсли; + + Если УточнениеСвойств.Количество() > 0 Тогда + СтрокаУточненияСвойств = ""; + ТекущаяСтрока = ""; + Для каждого УточнениеСвойства Из УточнениеСвойств Цикл + Если СтрДлина(ТекущаяСтрока + УточнениеСвойства) > 90 Тогда + СтрокаУточненияСвойств = СтрокаУточненияСвойств + СокрП(ТекущаяСтрока) + ", " + Символы.ПС; + ТекущаяСтрока = ""; + КонецЕсли; + ТекущаяСтрока = ТекущаяСтрока + ?(ЗначениеЗаполнено(ТекущаяСтрока), ", ", "") + УточнениеСвойства; + КонецЦикла; + Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда + СтрокаУточненияСвойств = СтрокаУточненияСвойств + ТекущаяСтрока; + КонецЕсли; + Элементы.СвойстваПояснениеНесоответствия.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: + |%1.'"), СтрокаУточненияСвойств) + + Символы.ПС + + ?(ПоказатьКомандыУстраненияРазличий, + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"), + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'")); + Иначе + ПоказатьНесоответствие = Ложь; + КонецЕсли; + Иначе + ПоказатьНесоответствие = Ложь; КонецЕсли; - // Определение связи с несуществующим пользователем ИБ. - ЕстьНоваяСвязьСНесуществующимПользователемИБ + Элементы.СвойстваОбработкаНесоответствия.Видимость = ПоказатьНесоответствие; + Элементы.СвойстваКомандыУстраненияРазличий.Видимость = ПоказатьКомандыУстраненияРазличий; + + // Определение сопоставление несуществующего пользователя ИБ с пользователем в справочнике. + ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); Если ПараметрыЗаписи <> Неопределено - И ЕстьСвязьСНесуществующимПользователемИБ - И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда + И ЕстьСопоставлениеСНесуществующимПользователемИБ + И НЕ ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ Тогда - ПараметрыЗаписи.Вставить("ОчищенаСвязьСНесуществующимПользователемИБ", Объект.Ссылка); + ПараметрыЗаписи.Вставить("ОчищеноСопоставлениеСНесуществующимПользователемИБ", Объект.Ссылка); КонецЕсли; - ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ; + ЕстьСопоставлениеСНесуществующимПользователемИБ = ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ; - Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда - // Связь не может быть изменена. - Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь; + Если УровеньДоступа.УправлениеСписком Тогда + Элементы.СопоставлениеОбработкаНесоответствия.Видимость = ЕстьСопоставлениеСНесуществующимПользователемИБ; Иначе - Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ; + // Сопоставление не может быть изменено. + Элементы.СопоставлениеОбработкаНесоответствия.Видимость = Ложь; КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ЗаполнитьПоляПоПользователюИБНаСервере() + + Если УровеньДоступа.УправлениеСписком + И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + + Объект.Наименование = ПользовательИнфБазыПолноеИмя; + КонецЕсли; + + ОпределитьНесоответствияПользователяСПользователемИБ(); + + УстановитьДоступностьСвойств(ЭтотОбъект); + + УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Начальное заполнение, проверка заполнения, доступность свойств -&НаСервере -Процедура УстановитьПостояннуюДоступностьСвойств() - - Элементы.КонтактнаяИнформация.Видимость = ЗначениеЗаполнено(ДействияВФорме.КонтактнаяИнформация); - Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); - - ВыводитьСписокРолей = ЗначениеЗаполнено(ДействияВФорме.Роли); - Элементы.ОтображениеРолей.Видимость = ВыводитьСписокРолей; - Элементы.СвойстваАутентификации1СПредприятия.Отображение = - ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.ОбычноеВыделение); - - Элементы.Наименование.ТолькоПросмотр = - ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - - Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.СвойстваПользователяИБ.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - - Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = - ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - -КонецПроцедуры - &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьСвойств(Форма) - Элементы = Форма.Элементы; + Элементы = Форма.Элементы; + Объект = Форма.Объект; + ДействияВФорме = Форма.ДействияВФорме; + УровеньДоступа = Форма.УровеньДоступа; + ДействияСПользователемСервиса = Форма.ДействияСПользователемСервиса; + + // Настройка возможности изменения. + Элементы.ВходВПрограммуРазрешен.ТолькоПросмотр = + Не ( Элементы.ОсновныеСвойства.ТолькоПросмотр = Ложь + И ( УровеньДоступа.ПолныеПрава + Или УровеньДоступа.УправлениеСписком И Форма.ПриЧтенииВходВПрограммуРазрешен)); Элементы.Пароль.ТолькоПросмотр = - Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; + Не ( УровеньДоступа.НастройкиДляВхода + Или УровеньДоступа.ИзменениеТекущего + И Не Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль); - Элементы.ПодтверждениеПароля.ТолькоПросмотр = - Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; + Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр; - Элементы.ОсновныеСвойства.Доступность = - Форма.ДоступКИнформационнойБазеРазрешен; + // Настройка необходимости заполнения. + Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда + НоваяСтраница = Элементы.ИмяСОтметкойНезаполненного; + Иначе + НоваяСтраница = Элементы.ИмяБезОтметкиНезаполненного; + КонецЕсли; - Элементы.ОтображениеРолей.Доступность = - Форма.ДоступКИнформационнойБазеРазрешен; + Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница <> НоваяСтраница Тогда + Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = НоваяСтраница; + КонецЕсли; + ОбновитьИмяДляВхода(Форма); - Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = - Форма.ДоступКИнформационнойБазеРазрешен; + // Настройка доступности связанных элементов. + Элементы.ВходВПрограммуРазрешен.Доступность = НЕ Объект.Недействителен; + Элементы.ОсновныеСвойства.Доступность = НЕ Объект.Недействителен; - Элементы.Пароль.Доступность = - Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.Пароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПодтверждениеПароля.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = - Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность + = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = - Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность + = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = - Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПользовательИнфБазыПользовательОС.Доступность = Форма.ПользовательИнфБазыАутентификацияОС; - Элементы.ПользовательИнфБазыПользовательОС.Доступность = - Форма.ПользовательИнфБазыАутентификацияОС; - - Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = - НЕ Форма.Объект.Недействителен; - - - Если Форма.ДействияСПользователемСервиса <> Неопределено Тогда + // Уточнение настроек в модели сервиса. + Если ДействияСПользователемСервиса <> Неопределено Тогда // Доступность редактирования КИ - - ДействияКИ = Форма.ДействияСПользователемСервиса.КонтактнаяИнформация; + ДействияКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; Для Каждого СтрокаКИ Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл ДействияВидаКИ = ДействияКИ.Получить(СтрокаКИ.Вид); @@ -1151,9 +1451,9 @@ Если СтрокаКИ.Вид = ВидКонтактнойИнформацииEmailПользователя() Тогда - ЭлементКИ.ТолькоПросмотр = НЕ Форма.Объект.Ссылка.Пустая(); + ЭлементКИ.ТолькоПросмотр = НЕ Объект.Ссылка.Пустая(); - ЭлементКИ.КнопкаВыбора = НЕ Форма.Объект.Ссылка.Пустая() + ЭлементКИ.КнопкаВыбора = НЕ Объект.Ссылка.Пустая() И ДействияВидаКИ.Изменение; ЗаполненEMail = ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]); @@ -1163,10 +1463,10 @@ КонецЕсли; КонецЦикла; - Если Форма.Объект.Ссылка.Пустая() И ЗаполненEMail Тогда + Если Объект.Ссылка.Пустая() И ЗаполненEMail Тогда МожноИзменятьПароль = Ложь; Иначе - МожноИзменятьПароль = Форма.ДействияСПользователемСервиса.ИзменениеПароля; + МожноИзменятьПароль = ДействияСПользователемСервиса.ИзменениеПароля; КонецЕсли; Элементы.Пароль.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр @@ -1175,30 +1475,67 @@ Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.ПодтверждениеПароля.ТолькоПросмотр ИЛИ НЕ МожноИзменятьПароль; - Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр - ИЛИ НЕ Форма.ДействияСПользователемСервиса.ИзменениеИмени; + Элементы.ПользовательИнфБазыИмя1.ТолькоПросмотр = Элементы.ПользовательИнфБазыИмя1.ТолькоПросмотр + ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеИмени; + + Элементы.ПользовательИнфБазыИмя2.ТолькоПросмотр = Элементы.ПользовательИнфБазыИмя2.ТолькоПросмотр + ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеИмени; Элементы.Наименование.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр - ИЛИ НЕ Форма.ДействияСПользователемСервиса.ИзменениеПолногоИмени; + ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеПолногоИмени; - Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Элементы.ДоступКИнформационнойБазеРазрешен.Доступность - И Форма.ДействияСПользователемСервиса.ИзменениеДоступа; + Элементы.ВходВПрограммуРазрешен.Доступность = Элементы.ВходВПрограммуРазрешен.Доступность + И ДействияСПользователемСервиса.ИзменениеДоступа; Элементы.Недействителен.Доступность = Элементы.Недействителен.Доступность - И Форма.ДействияСПользователемСервиса.ИзменениеДоступа; + И ДействияСПользователемСервиса.ИзменениеДоступа; - Форма.ЗапретИзмененияАдминистративногоДоступа = НЕ Форма.ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа; - + Форма.ЗапретИзмененияАдминистративногоДоступа = + НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа; КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПользовательИнфБазыРежимЗапускаОчистка(Элемент, СтандартнаяОбработка) +&НаКлиентеНаСервереБезКонтекста +Функция ТребуетсяЗаписьПользователяИБ(Форма, УчитыватьСтандартноеИмя = Истина) - СтандартнаяОбработка = Ложь; + Если Форма.ДействияВФорме.СвойстваПользователяИБ <> "Редактирование" Тогда + Возврат Ложь; + КонецЕсли; -КонецПроцедуры + Шаблон = Форма.НачальноеОписаниеПользователяИБ; + + ТекущееИмя = ""; + Если Не УчитыватьСтандартноеИмя Тогда + КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Форма.Объект.Наименование); + + Если Форма.ПользовательИнфБазыИмя = КраткоеИмя Тогда + ТекущееИмя = КраткоеИмя; + КонецЕсли; + КонецЕсли; + + Если Форма.ПользовательИБСуществует + ИЛИ Форма.ВходВПрограммуРазрешен + ИЛИ Форма.ПользовательИнфБазыИмя <> ТекущееИмя + ИЛИ Форма.ПользовательИнфБазыАутентификацияСтандартная <> Шаблон.АутентификацияСтандартная + ИЛИ Форма.ПользовательИнфБазыПоказыватьВСпискеВыбора <> Шаблон.ПоказыватьВСпискеВыбора + ИЛИ Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль <> Шаблон.ЗапрещеноИзменятьПароль + ИЛИ Форма.Пароль <> "" + ИЛИ Форма.ПодтверждениеПароля <> "" + ИЛИ Форма.ПользовательИнфБазыАутентификацияОС <> Шаблон.АутентификацияОС + ИЛИ Форма.ПользовательИнфБазыПользовательОС <> "" + ИЛИ Форма.ПользовательИнфБазыАутентификацияOpenID <> Шаблон.АутентификацияOpenID + ИЛИ Форма.ПользовательИнфБазыРежимЗапуска <> Шаблон.РежимЗапуска + ИЛИ Форма.ПользовательИнфБазыЯзык <> Шаблон.Язык + ИЛИ Форма.ПользовательИнфБазыРоли.Количество() <> 0 Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -1210,10 +1547,11 @@ ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); ПараметрыДействия.Вставить("Форма", ЭтотОбъект); ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИнфБазыРоли); - ПараметрыДействия.Вставить("ЗапретИзмененияАдминистративногоДоступа", ЗапретИзмененияАдминистративногоДоступа); + ПараметрыДействия.Вставить("ЗапретИзмененияАдминистративногоДоступа", + ЗапретИзмененияАдминистративногоДоступа); - ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), - Перечисления.ТипыПользователей.ПользовательОбластиДанных, + ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), + Перечисления.ТипыПользователей.ПользовательОбластиДанных, Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); ПараметрыДействия.Вставить("ТипПользователей", ТипПользователей); @@ -1230,3 +1568,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index ad6a195e6..ffb43ad26 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -1,9 +1,46 @@ - -

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

    -

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

    -

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

    -

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

    -

    См. также

    -

     

    \ No newline at end of file + +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Ввод пользователя

    +

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

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

    Группировка пользователей

    +

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

    +

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

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

    Ввод группы пользователей

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

    Включение группы пользователей в другую группу

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

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

    +

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

    +

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

    +

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

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

    Просмотр отчета Сведения о пользователях

    +

    Отчет позволяет выполнить анализ настроек для входа (свойств пользователя ИБ) совместно с остальными свойствами пользователя в справочнике. Включает 3 варианта отчета - о пользователях, внешних пользователях и всех пользователях программы.

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

    См. также   

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index 3add699f2..1607a1abf 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -9,19 +8,20 @@ Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; + НеРедактируемыеРеквизиты.Добавить("Служебный"); НеРедактируемыеРеквизиты.Добавить("ИдентификаторПользователяИБ"); НеРедактируемыеРеквизиты.Добавить("ИдентификаторПользователяСервиса"); - НеРедактируемыеРеквизиты.Добавить("Недействителен"); - НеРедактируемыеРеквизиты.Добавить("Служебный"); + НеРедактируемыеРеквизиты.Добавить("СвойстваПользователяИБ"); Возврат НеРедактируемыеРеквизиты; КонецФункции +#КонецОбласти + #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -35,3 +35,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index 48c35015b..f6731505d 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,5 +1,56 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Программный интерфейс объекта реализован через ДополнительныеСвойства: +// +// ОписаниеПользователяИБ - Структура со свойствами: +// Действие - Строка - "Записать" или "Удалить". +// 1. Если Действие = "Удалить" другие свойства не требуются. Удаление +// будет считаться успешным и в том случае, когда пользовательИБ +// не найден по значению реквизита ИдентификаторПользователяИБ. +// 2. Если Действие = "Записать", тогда будет создан или обновлен +// пользователь ИБ по указанным свойствам. +// +// ВходВПрограммуРазрешен - Неопределено - вычислить автоматически: +// если вход в программу запрещен, тогда остается запрещен, +// иначе остается разрешен, кроме случая, когда +// все виды аутентификации установлены в Ложь. +// - Булево - если Истина, тогда установить аутентификацию, как +// указана или сохранена в значениях одноименных реквизитов; +// если Ложь, тогда снять все виды аутентификации у пользователя ИБ. +// - свойство не указано - прямая установка сохраняемых и +// действующих видов аутентификации (для поддержки обратной совместимости). +// +// АутентификацияСтандартная, АутентификацияОС, АутентификацияOpenID - установить +// сохраняемые значения видов аутентификации и, в зависимости от использования свойства +// ВходВПрограммуРазрешен, установить действующие значения видов аутентификации. +// +// Остальные свойства. +// Состав остальных свойств указывается аналогично составу свойств параметра +// ОбновляемыеСвойства для процедуры Пользователи.ЗаписатьПользователяИБ(), +// кроме свойства ПолноеИмя - устанавливается по Наименованию. +// +// Для сопоставления существующего свободного пользователя ИБ с пользователем в справочнике, +// с которым не сопоставлен другой существующий пользователь ИБ, нужно вставить свойство +// УникальныйИдентификатор. Если указать идентификатор пользователя ИБ, который +// сопоставлен с текущим пользователем, ничего не изменится. +// +// При выполнении действий "Записать" и "Удалить" реквизит объекта +// ИдентификаторПользователяИБ обновляется автоматически, его не следует изменять. +// +// После выполнения действия в структуру вставляются (обновляются) следующие свойства: +// - РезультатДействия - Строка, содержащая одно из значений: +// "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ", +// "ОчищеноСопоставлениеСНесуществующимПользователемИБ", "НеТребуетсяУдалениеПользовательИБ". +// - УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ. + +#КонецОбласти + +#Область ОбработчикиСобытий + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. // Используются в обработчике события ПриЗаписи. @@ -7,41 +58,6 @@ Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Программный интерфейс объекта реализован через ДополнительныеСвойства: -// -// ОписаниеПользователяИБ - Структура со свойствами: -// Действие - Строка - "Записать" или "Удалить". -// -// 1. Если Действие = "Удалить" другие свойства не требуются. Удаление -// будет считаться успешным и в том случае, когда пользовательИБ -// не найден по значению реквизита ИдентификаторПользователяИБ. -// -// 2. Если Действие = "Записать", тогда будет создан или обновлен -// пользователь ИБ по указанным свойствам. -// -// Состав свойств указывается аналогично составу свойств параметра -// ОбновляемыеСвойства для процедуры Пользователи.ЗаписатьПользователяИБ(), -// кроме свойства ПолноеИмя - устанавливается по Наименованию. -// -// Для привязки существующего свободного пользователя ИБ к свободному элементу -// справочника, нужно вставить свойство УникальныйИдентификатор. -// -// При выполнении действий "Записать" и "Удалить" реквизит объекта -// ИдентификаторПользователяИБ обновляется автоматически, его не следует изменять. -// -// После выполнения действия в структуру вставляются (обновляются) следующие свойства. -// РезультатДействия - Строка, содержащая одно из значений: -// "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ", -// "ОчищенаСвязьСНесуществующимПользователемИБ", "НеТребуетсяУдалениеПользовательИБ". -// УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ. - - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ - Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -99,7 +115,7 @@ Возврат; КонецЕсли; - ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбмененДанными(); + ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными(); КонецПроцедуры @@ -109,13 +125,16 @@ ИдентификаторПользователяИБ = Неопределено; ИдентификаторПользователяСервиса = Неопределено; + Подготовлен = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -Процедура ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбмененДанными() Экспорт +#Область СлужебныеПроцедурыИФункции + +// Только для внутреннего использования +Процедура ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными() Экспорт // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, // кроме того, вход под этим пользователем ИБ приведет к ошибке. @@ -129,4 +148,6 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index 0ee6eff5f..87a894c2a 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -143,19 +143,98 @@ Catalog.Пользователи.Form.ФормаЭлемента Catalog.Пользователи.Form.ФормаСписка Catalog.Пользователи.Form.ФормаСписка + + Недействителен + + ru + Недействителен + + + Boolean + + + ru + Пользователь недействителен, оставлен для истории, +его не требуется выбирать в документах и других местах. + + + + + Index + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольная строка + + true + + + + Use + Use + + + Служебный + + ru + Служебный + + + Boolean + + + ru + Неразделенный или разделенный служебный пользователь, права к которому устанавливаются непосредственно и программно. + + + + + Use + Use + + + Подготовлен + + ru + Подготовлен + + + Boolean + + + ru + Пользователь подготовлен ответственным за список пользователей. + + + + + Use + Use + ИдентификаторПользователяИБ ru Идентификатор пользователя ИБ - Требуется для сопоставления элемента справочника Пользователи пользователю ИБ UUID ru - Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы. + Уникальный идентификатор пользователя информационной базы, с которым сопоставлен этот элемент справочника. @@ -174,7 +253,7 @@ ru - Уникальный идентификатор пользователя сервиса, через который установлена связь элемента справочника с пользователем сервиса. + Уникальный идентификатор пользователя сервиса, с которым сопоставлен этот элемент справочника. @@ -182,38 +261,18 @@ Index Use - - Недействителен + + СвойстваПользователяИБ ru - Недействителен + Свойства пользователя ИБ - Boolean + ValueStorage ru - Пользователь недействителен - - - - - Index - Use - Use - - - Служебный - - ru - Служебный - - - Boolean - - - ru - Неразделенный или разделенный служебный пользователь, права к которому устанавливаются непосредственно и программно. + Служебное хранилище некоторых свойств пользователя ИБ diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl new file mode 100644 index 000000000..983baeba5 --- /dev/null +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ФизическиеЛица/ФизическиеЛица.mdo b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo similarity index 57% rename from SSL/src/Catalogs/ФизическиеЛица/ФизическиеЛица.mdo rename to SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo index a5d7ab467..35b52e9e0 100644 --- a/SSL/src/Catalogs/ФизическиеЛица/ФизическиеЛица.mdo +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ПользовательскиеНастройкиОтчетов.mdo @@ -1,19 +1,20 @@ - + - - - - - + + + + + - ФизическиеЛица + ПользовательскиеНастройкиОтчетов ru - Физические лица + Пользовательские настройки отчетов + Используется для поиска настроек. Содержит только представления. Не содержит самих настроек. true - Catalog.ФизическиеЛица.StandardAttribute.Description + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Description DontUse Use @@ -68,18 +69,8 @@ Use Parent - - ru - Группа физ. лиц - - - ru - Группа физических лиц - true - - Catalog.ФизическиеЛица.EmptyRef - + Use @@ -87,15 +78,7 @@ Use Description - - ru - ФИО - - - ru - Фамилия, имя и отчество физического лица - - + ShowError Use @@ -104,85 +87,86 @@ Use Code - + Use Use - true - - - ru - - Managed Use ru - Физическое лицо + Пользовательская настройка отчета - true 2 true - 50 + 150 String + Variable AsDescription - BothWays + InDialog BothWays - Catalog.ФизическиеЛица.Form.ФормаГруппы - - ДатаРождения + + Вариант ru - Дата рождения + Вариант - Date - - Date - + CatalogRef.ВариантыОтчетов ru - Дата рождения физического лица + - - 0001-01-01T00:00:00 - - Use + + Index Use - - Пол + + Пользователь ru - Пол + Пользователь - EnumRef.ПолФизическогоЛица + CatalogRef.Пользователи ru - Пол физического лица + - - Enum.ПолФизическогоЛица.EmptyRef - - Use + + Index Use - - ФормаГруппы + + КлючПользовательскойНастройки ru - Форма группы + Ключ пользовательской настройки - PersonalComputer - MobileDevice - + + String + + 36 + + + + ru + + + + + + + + Index + Use + diff --git a/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo deleted file mode 100644 index e3ba4ac33..000000000 --- a/SSL/src/Catalogs/ПоставляемыеДополнительныеОтчетыИОбработки/ПоставляемыеДополнительныеОтчетыИОбработки.mdo +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - ПоставляемыеДополнительныеОтчетыИОбработки - - ru - Поставляемые дополнительные отчеты и обработки - - Catalog.ПоставляемыеДополнительныеОтчетыИОбработки.StandardAttribute.Description - DontUse - - Use - PredefinedDataName - - Use - - - - - Use - Predefined - - Use - - - - - Use - Ref - - Use - - - - - Use - DeletionMark - - Use - - - - - Use - IsFolder - - Use - - - - - Use - Owner - true - - ShowError - Use - - - - - Use - Parent - true - - Use - - - - - Use - Description - - ru - Наименование - - - ShowError - Use - - - - - Use - Code - - Use - - - - Use - Managed - Use - - ru - Поставляемый дополнительный отчет или обработка - - - ru - Поставляемые дополнительные отчеты и обработки - - 2 - true - 100 - String - Variable - AsDescription - InDialog - BothWays - - Вид - - ru - Вид - - - EnumRef.ВидыДополнительныхОтчетовИОбработок - - - ru - Вид дополнительного отчета или обработки - - - - - Index - Use - - - ИспользоватьДляФормыОбъекта - - ru - Использовать для формы объекта - - - Boolean - - - ru - Признак использования для формы объекта - - - - - Index - Use - - - ИспользоватьДляФормыСписка - - ru - Использовать для формы списка - - - Boolean - - - ru - Признак использования для формы списка - - - - - Index - Use - - - Публикация - - ru - Публикация - - - EnumRef.ВариантыПубликацииДополнительныхОтчетовИОбработок - - - ru - Вариант публикации (опубликовано, опубликовано для тестирования, не опубликовано) - - - - ShowError - true - - Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок.EnumValue.Используется - - Use - Use - - - ПричинаОтключения - - ru - Причина отключения - - - EnumRef.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса - - - ru - Причина отключения - - - - - Use - Use - - - Информация - - ru - Информация - - - String - - 1024 - - - - ru - Краткая информация о внешней обработке - - - - - Use - Use - - - Версия - - ru - Версия - - - String - - 10 - - - - ru - Версия дополнительного отчета или обработки (устанавливается поставщиком) - - - - - Use - Use - - - БезопасныйРежим - - ru - Безопасный режим - - - Boolean - - - ru - Вызывать обработку в безопасном режиме. В безопасном режиме запрещены COM; загрузка внешних компонент; запуск внешних приложений и команд операционной системы; доступ к файловой системе (кроме временных файлов); доступ к сети Интернет. - - - - - Use - Use - - - ИмяОбъекта - - ru - Имя объекта - - - String - - 256 - - - - ru - Имя, под которым дополнительный отчет или обработка регистрируется в системе - - - - - Index - Use - Use - - - ИмяФайла - - ru - Имя файла - - - String - - 260 - - - - ru - Имя файла дополнительного отчета или обработки - - - - - Use - Use - - - ХранилищеОбработки - - ru - Хранилище обработки - - - ValueStorage - - - ru - Двоичные данные дополнительного отчета или обработки - - - - - Use - - - ХранилищеВариантов - - ru - Хранилище вариантов - - - String - - 150 - - - - ru - Хранилище вариантов - - - - - Use - Use - - - ВерсияGUID - - ru - Версия GUID - - - UUID - - - ru - Уникальный идентификатор версии - - - - - Use - - - КонтролироватьСовместимостьСВерсиямиКонфигурации - - ru - Контролировать совместимость с версиями конфигурации - - - Boolean - - - - - Use - Use - - - ИспользуетХранилищеВариантов - - ru - Использует хранилище вариантов - - - Boolean - - - - - Use - Use - - - - - - - Команды - - ru - Команды - - - Use - LineNumber - - Use - - - - - Идентификатор - - ru - Идентификатор - - - String - - 100 - - - - ru - Идентификатор команды (служебное поле) - - - - Use - Use - - - ВариантЗапуска - - ru - Вариант запуска - - - EnumRef.СпособыВызоваДополнительныхОбработок - - - ru - Вариант запуска команды (клиент, сервер, открытие формы) - - - - Use - Use - - - Представление - - ru - Команда - - Представление команды для конечного пользователя - - String - - 200 - - - - ru - Представление команды для конечного пользователя - - - - Use - Use - - - ПоказыватьОповещение - - ru - Показывать оповещение - - - Boolean - - - ru - Показывать оповещение пользователю после выполнения - - - - Use - - - Модификатор - - ru - Модификатор - - - String - - 9 - - - - ru - Модификатор команды (служебное поле) - - - - Use - - - Скрыть - - ru - Скрыть - - - Boolean - - - ru - Скрыть - - - - Use - Use - - - - - - - - Совместимость - - ru - Совместимость - - - Use - LineNumber - - Use - - - - - Версия - - ru - Версия - - - String - - 18 - - - - - Use - Use - - - - - - - - Разрешения - - ru - Разрешения - - - Use - LineNumber - - Use - - - - - ВидРазрешения - - ru - Вид разрешения - - - String - - 255 - - - - - Use - Use - - - Параметры - - ru - Параметры - - - ValueStorage - - - - Use - Use - - - diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html index 73a54ceb4..7cbc62866 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 ed4929563..68831ff4b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -5,8 +5,7 @@ &НаКлиенте Перем ФормаДлительнойОперации; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -70,8 +69,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Применить(Команда) @@ -140,8 +140,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция ПрименитьПравилаНаСервере() @@ -219,3 +220,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Help/ru.html index 3d8fb73b0..0d4a347e7 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 014dee8c6..b9e74a0bf 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -29,8 +28,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПрименитьПравила(Команда) @@ -69,3 +69,5 @@ НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВнизВыполнить(Список, Элементы.Список); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index 90d1f4764..aa4d6c9db 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 98c96ad21..8cb8a9969 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -7,7 +7,6 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Если Объект.Ссылка.Пустая() Тогда @@ -56,9 +55,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КомпоновщикНастроекНастройкиОтборПриИзменении(Элемент) @@ -74,8 +73,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) @@ -110,6 +110,4 @@ КонецПроцедуры - - - +#КонецОбласти diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html index 4df5cc4f3..8f7bb1c2d 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/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 4144a3695..8f7e1e4b7 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + &НаСервере Процедура ПрименитьПравила(ПараметрыВыгрузки, АдресХранилища) Экспорт @@ -132,4 +134,25 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Код"); + Результат.Добавить("Наименование"); + Результат.Добавить("КомпоновщикНастроек"); + Результат.Добавить("ПомещатьВПапку"); + Результат.Добавить("РеквизитДопУпорядочивания"); + Результат.Добавить("ПредставлениеОтбора"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl index 43e14172e..6e802459f 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) @@ -16,4 +15,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs index a8f017b4b..2547743b3 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs @@ -36,6 +36,10 @@ ТипПисьма ТипПисьма + + Рассмотрено + Рассмотрено + ИсточникДанных1 ВЫБРАТЬ РАЗРЕШЕННЫЕ ВложенныйЗапрос.Ссылка, @@ -43,7 +47,8 @@ ВложенныйЗапрос.ОтправительКонтакт, ВложенныйЗапрос.АдресЭлектроннойПочтыОтправителя, ВложенныйЗапрос.Предмет, - ВложенныйЗапрос.ТипПисьма + ВложенныйЗапрос.ТипПисьма, + ВложенныйЗапрос.Рассмотрено ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ ЭлектронноеПисьмоВходящее.Ссылка КАК Ссылка, @@ -51,7 +56,8 @@ ЭлектронноеПисьмоВходящее.ОтправительКонтакт КАК ОтправительКонтакт, ЭлектронноеПисьмоВходящее.ОтправительАдрес КАК АдресЭлектроннойПочтыОтправителя, ПредметыПапкиВзаимодействий.Предмет КАК Предмет, - ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоВходящее.Ссылка) КАК ТипПисьма + ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоВходящее.Ссылка) КАК ТипПисьма, + ПредметыПапкиВзаимодействий.Рассмотрено КАК Рассмотрено ИЗ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий @@ -65,7 +71,8 @@ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, ПредметыПапкиВзаимодействий.Предмет, - ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоИсходящее.Ссылка) + ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоИсходящее.Ссылка), + ПредметыПапкиВзаимодействий.Рассмотрено ИЗ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее {ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl index 0749f18f0..4ed219f04 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + // Возвращает реквизиты справочника, которые образуют естественный ключ // для элементов справочника. // @@ -17,4 +19,15 @@ КонецФункции +// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl index e2f344faa..af9696c21 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -13,4 +12,6 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo index 302aac17d..27742e972 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo @@ -171,6 +171,21 @@ Index Use
    + + ВыводитьТолькоОтчет + + ru + Выводить только отчет + + + Boolean + + + + + Index + Use + ВидимостьПоУмолчанию @@ -209,6 +224,73 @@ Use Use + + ХешНастроек + + ru + Хеш настроек + + + String + + 32 + + + + ru + Используется при обновлении программы. + + + + + Use + + + НаименованияПолей + + ru + Наименования полей + + + String + + + + ru + Наименования полей, выведенных в отчете. +Используется при поиске. + + true + true + + + + Use + Use + + + НаименованияПараметровИОтборов + + ru + Наименования параметров и отборов + + + String + + + + ru + Наименования параметров и отборов отчета. +Используется при поиске. + + true + true + + + + Use + Use + diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html index ced90fa3e..beade0c5f 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 3dd1592ba..5c217cec0 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,6 +21,11 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); + МодульАвтономнаяРабота.ОбъектПриЧтенииНаСервере(ТекущийОбъект, ЭтотОбъект.ТолькоПросмотр); + КонецЕсли; + ЗаполнитьДаннымиТекущегоГода(); КонецПроцедуры @@ -93,8 +98,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ИзменитьДень(Команда) @@ -162,8 +168,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьДаннымиТекущегоГода(ЗначениеКопирования = Неопределено) @@ -423,3 +430,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 2e5b8a029..fb6e5c841 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции // Функция читает данные производственного календаря из регистра // @@ -787,4 +786,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl index abb988220..2e1bcfc38 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) @@ -12,5 +11,7 @@ КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей(); КонецПроцедуры + +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form index 398943e74..17e1c5324 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form @@ -51,17 +51,17 @@ true - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -71,20 +71,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -94,10 +105,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -106,10 +140,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -119,7 +153,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition @@ -221,6 +255,9 @@ true + + Список.Ref +
      true
      Catalog.ПрофилиГруппДоступа diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html new file mode 100644 index 000000000..70093bc79 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html @@ -0,0 +1,10 @@ + +

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

      +

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

      +

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

      +

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

      +

      Ввод папки групп доступа

      +

      Нажмите  Создать группу, введите наименование папки.

      +

      См. также

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html new file mode 100644 index 000000000..a14f8c9d9 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html @@ -0,0 +1,10 @@ + +

      Описание свойств папки профилей групп доступа

      +

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

      +

      Ввод папки профилей групп доступа

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index f505e6338..d2502e4b7 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -59,18 +59,17 @@ Normal - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 8 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 10 Label true @@ -80,20 +79,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 9 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 11 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 13 Label true @@ -103,10 +114,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 12 true + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + ViewStatusAddition Список @@ -115,10 +149,10 @@ СписокУправлениеПоиском - 14 + 17 СписокУправлениеПоискомРасширеннаяПодсказка - 16 + 19 Label true true @@ -128,7 +162,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 15 + 18 true SearchControlAddition diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html index 2e4d2bd01..ac3aac565 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,17 @@ - -

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

      -

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

      -

       

      \ No newline at end of file + +

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

      +

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

      +

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

      +

      Различают основные и дополнительные профили груп доступа:

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

      Например, дополнительно к основным профилям Бухгалтер и Кладовщик предусмотрены профили Ведение переписки с контрагентами и Печать непроведенных документов.

      +

      Рекомендации по созданию основных профилей групп доступа

      +

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

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

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

      +

      Ввод профиля групп доступа

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

      Ввод папки профилей групп доступа

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index 8135c8f89..702713a33 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -41,3 +41,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..213d1a8a0 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,32 @@ + +

      Описание свойств профиля групп доступа.

      +

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

      +

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

      +

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

      +

      Ввод профиля групп доступа

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

      Разрешенные действия (роли) 

      +

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

      +

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

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

      Ограничения доступа

      +

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

      +

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

      +

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

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

      Просмотр групп доступа

      +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 49f10f01f..3fb77f0d0 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -202,8 +202,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаПриИзменении(Элемент) @@ -290,8 +291,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -317,7 +319,6 @@ КонецПроцедуры - &НаКлиенте Процедура ЗначениеДоступаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -358,8 +359,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -373,8 +375,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВосстановитьПоНачальномуЗаполнению(Команда) @@ -445,8 +448,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Продолжение обработчика события ПередЗаписью &НаКлиенте @@ -596,3 +600,5 @@ ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html index 6b1e4c46f..5257069bf 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html @@ -1,14 +1,12 @@ - -

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

      + +

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

      +

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

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

      -

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

      -
      • Добавление и изменение заказов клиентов, -
      • Чтение нормативно-справочной информации, -
      • ...


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

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

      Виды доступа и ограничения доступа

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

      -

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

      -

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

      -

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

      -

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

      -

      См. также

      -

       

      \ No newline at end of file +

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

      +

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

      +

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

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 89436d1c7..528b032fb 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые не нужно редактировать // с помощью обработки группового изменения объектов @@ -19,8 +18,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Процедура Обновляет описание поставляемых профилей в // параметрах ограничения доступа при изменении конфигурации. @@ -309,8 +309,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает строку уникального идентификатора // поставляемого и предопределенного профиля Администратор. @@ -858,9 +859,9 @@ ТаблицаЗначенийДоступа = Новый ТаблицаЗначений; ТаблицаЗначенийДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); ТаблицаЗначенийДоступа.Колонки.Добавить("ЗначениеДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - Отбор = Новый Структура; Для каждого ЭлементСписка Из ОписаниеПрофиля.ЗначенияДоступа Цикл + Отбор = Новый Структура; Отбор.Вставить("ВидДоступа", ЭлементСписка.Значение); Отбор.Вставить("ЗначениеДоступа", ЭлементСписка.Представление); ВидДоступа = Отбор.ВидДоступа; @@ -1116,4 +1117,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index d75bc86c7..95d014335 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -1,14 +1,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Перем СтарыеРолиПрофиля; // Роли профиля до изменения для использования // в обработчике события ПриЗаписи. Перем СтараяПометкаУдаления; // Пометка удаления профиля групп доступа до изменения // для использования в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -297,4 +295,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 11b75cc9c..00d4b2378 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -397,6 +397,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice @@ -420,6 +425,11 @@ ru Форма группы + + + ru + + PersonalComputer MobileDevice @@ -429,6 +439,11 @@ ru Форма выбора группы + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl index eba6826fb..b05d37f04 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(МассивРассылок, Параметры) @@ -116,3 +116,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl index 7343d34ce..93ef77bff 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(Рассылка, Параметры) @@ -25,8 +25,9 @@ ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Параметры.Источник, Параметры.Уникальность, Параметры.Окно); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция ПоследнийЗапускРассылки(Рассылка) @@ -47,3 +48,4 @@ Возврат Результат; КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html index 767d7ec7a..dc7b1666d 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/ПараметрыFTP/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl index 4fd46cd12..12e13c32d 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +21,9 @@ ВидимостьДоступность(ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СерверИКаталогПриИзменении(Элемент) @@ -30,8 +31,9 @@ ВидимостьДоступность(ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Заполнить(Команда) @@ -56,8 +58,9 @@ ОповеститьОВыборе(ЗначениеВыбора); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура ВидимостьДоступность(Форма, Изменения = "") @@ -74,3 +77,5 @@ ВидимостьДоступность(ЭтотОбъект); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html index 61df13164..9375a6313 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 index c3ed9c385..0096bf812 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,3 +14,5 @@ РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html index 818588245..9ed788007 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/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl index 8dcf6b95f..29d129faa 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,3 +15,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index b3e4369ca..c168edc96 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -489,16 +489,17 @@ true - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 76 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 78 Label true @@ -508,10 +509,43 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 77 true + LabelField + Enter + true + Left + true + + true + true + + + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 83 + + СписокСтрокаПоискаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 84 + true + Список true @@ -519,10 +553,10 @@ СписокСостояниеПросмотра - 79 + 86 СписокСостояниеПросмотраРасширеннаяПодсказка - 81 + 88 Label true true @@ -532,7 +566,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 80 + 87 true ViewStatusAddition @@ -543,10 +577,10 @@ СписокУправлениеПоиском - 82 + 89 СписокУправлениеПоискомРасширеннаяПодсказка - 84 + 91 Label true true @@ -556,7 +590,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 83 + 90 true SearchControlAddition @@ -579,7 +613,7 @@ СписокКонтекстноеМеню 2 - СписокКонтекстноеМенюСправочникРассылкиОтчетовВыполнитьСейчас + ВыполнитьСейчасСписок 53 true true @@ -590,7 +624,7 @@ Items.Список.CurrentData.Ref - СписокКонтекстноеМенюСправочникРассылкиОтчетовВыполнитьСейчасExtendedTooltip + ВыполнитьСейчасСписокРасширеннаяПодсказка 60 Label true @@ -608,7 +642,7 @@ Auto - СписокКонтекстноеМенюСправочникРассылкиОтчетовСобытияРассылки + СобытияРассылкиСписок 54 true true @@ -619,7 +653,7 @@ Items.Список.CurrentData.Ref - СписокКонтекстноеМенюСправочникРассылкиОтчетовСобытияРассылкиExtendedTooltip + СобытияРассылкиСписокРасширеннаяПодсказка 61 Label true @@ -636,6 +670,32 @@ UserCmds Auto + + ИзменитьВыделенныеСписок + 81 + true + true + + true + + + ИзменитьВыделенныеСписокРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + true HierarchicalList @@ -684,7 +744,7 @@ ГруппаКнопок 22 - ФормаИзменитьФорму + ИзменитьФорму 49 true true @@ -692,7 +752,7 @@ true - ФормаИзменитьФормуExtendedTooltip + ИзменитьФормуРасширеннаяПодсказка 56 Label true @@ -795,7 +855,7 @@ Auto - ФормаСправка + Справка 37 true true @@ -803,7 +863,7 @@ true - ФормаСправкаExtendedTooltip + СправкаРасширеннаяПодсказка 59 Label true @@ -820,6 +880,33 @@ UserCmds Auto + + ИзменитьВыделенные + 79 + true + true + + true + + + ИзменитьВыделенныеРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.ИзменитьВыделенные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left @@ -965,6 +1052,28 @@ + + ИзменитьВыделенные + + <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 e34f5ae70..341e00113 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -46,6 +45,32 @@ Список.Параметры.УстановитьЗначениеПараметра("ПустаяДата", '00010101'); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + Элементы.ИзменитьВыделенные.Видимость = Ложь; + Элементы.ИзменитьВыделенныеСписок.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИзменитьВыделенные(Команда) + МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); + МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаполнитьПараметрСписка(Ключ) + Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда + Элементы.Список[Ключ] = Параметры[Ключ]; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -56,12 +81,4 @@ РассылкаОтчетовКлиент.ПроверитьВыполнениеФоновогоЗадания(ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ЗаполнитьПараметрСписка(Ключ) - Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда - Элементы.Список[Ключ] = Параметры[Ключ]; - КонецЕсли; -КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca deleted file mode 100644 index 133353321..000000000 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - НастройкиТекущегоОтчета - - - - - НастройкиТекущегоОтчета.Обнаружен - Equal - false - - - - - ЦветТекста - style:НедоступныеДанныеЦвет - - - false - Шрифт - - - - false - Видимость - false - - - Доступность - false - - - false - Отображать - false - - - - - - - ПолучателиПолучатель - - - ПолучателиИсключен - - - - - Объект.Получатели.Исключен - Equal - true - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - - diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index d9b4f90d1..160fe5abb 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -697,10 +697,10 @@ ОтчетыСтрокаПоиска - 960 + 977 ОтчетыСтрокаПоискаРасширеннаяПодсказка - 962 + 979 Label true true @@ -710,7 +710,7 @@ ОтчетыСтрокаПоискаКонтекстноеМеню - 961 + 978 true Отчеты @@ -720,10 +720,10 @@ ОтчетыСостояниеПросмотра - 963 + 980 ОтчетыСостояниеПросмотраРасширеннаяПодсказка - 965 + 982 Label true true @@ -733,7 +733,7 @@ ОтчетыСостояниеПросмотраКонтекстноеМеню - 964 + 981 true ViewStatusAddition @@ -744,10 +744,10 @@ ОтчетыУправлениеПоиском - 966 + 983 ОтчетыУправлениеПоискомРасширеннаяПодсказка - 968 + 985 Label true true @@ -757,7 +757,7 @@ ОтчетыУправлениеПоискомКонтекстноеМеню - 967 + 984 true SearchControlAddition @@ -1012,10 +1012,10 @@ ПустыеНастройкиСтрокаПоиска - 978 + 995 ПустыеНастройкиСтрокаПоискаРасширеннаяПодсказка - 980 + 997 Label true true @@ -1025,7 +1025,7 @@ ПустыеНастройкиСтрокаПоискаКонтекстноеМеню - 979 + 996 true ПустыеНастройки @@ -1035,10 +1035,10 @@ ПустыеНастройкиСостояниеПросмотра - 981 + 998 ПустыеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 983 + 1000 Label true true @@ -1048,7 +1048,7 @@ ПустыеНастройкиСостояниеПросмотраКонтекстноеМеню - 982 + 999 true ViewStatusAddition @@ -1059,10 +1059,10 @@ ПустыеНастройкиУправлениеПоиском - 984 + 1001 ПустыеНастройкиУправлениеПоискомРасширеннаяПодсказка - 986 + 1003 Label true true @@ -1072,7 +1072,7 @@ ПустыеНастройкиУправлениеПоискомКонтекстноеМеню - 985 + 1002 true SearchControlAddition @@ -1587,10 +1587,10 @@ КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска - 998 + 1015 КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 1000 + 1017 Label true true @@ -1600,7 +1600,7 @@ КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 999 + 1016 true КомпоновщикНастроекПользовательскиеНастройки @@ -1610,10 +1610,10 @@ КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра - 1001 + 1018 КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 1003 + 1020 Label true true @@ -1623,7 +1623,7 @@ КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 1002 + 1019 true ViewStatusAddition @@ -1634,10 +1634,10 @@ КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском - 1004 + 1021 КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 1006 + 1023 Label true true @@ -1647,7 +1647,7 @@ КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 1005 + 1022 true SearchControlAddition @@ -1949,10 +1949,10 @@ НастройкиТекущегоОтчетаСтрокаПоиска - 1022 + 1039 НастройкиТекущегоОтчетаСтрокаПоискаРасширеннаяПодсказка - 1024 + 1041 Label true true @@ -1962,7 +1962,7 @@ НастройкиТекущегоОтчетаСтрокаПоискаКонтекстноеМеню - 1023 + 1040 true НастройкиТекущегоОтчета @@ -1972,10 +1972,10 @@ НастройкиТекущегоОтчетаСостояниеПросмотра - 1025 + 1042 НастройкиТекущегоОтчетаСостояниеПросмотраРасширеннаяПодсказка - 1027 + 1044 Label true true @@ -1985,7 +1985,7 @@ НастройкиТекущегоОтчетаСостояниеПросмотраКонтекстноеМеню - 1026 + 1043 true ViewStatusAddition @@ -1996,10 +1996,10 @@ НастройкиТекущегоОтчетаУправлениеПоиском - 1028 + 1045 НастройкиТекущегоОтчетаУправлениеПоискомРасширеннаяПодсказка - 1030 + 1047 Label true true @@ -2009,7 +2009,7 @@ НастройкиТекущегоОтчетаУправлениеПоискомКонтекстноеМеню - 1029 + 1046 true SearchControlAddition @@ -7517,20 +7517,103 @@ CopyToClipboard EndEdit Find - - ПолучателиПолучатель - 44 + + ПолучателиГруппа1 + 970 + + ПолучателиПолучатель + 44 + true + true + + true + + + Объект.Получатели.Получатель + + + ПолучателиПолучательExtendedTooltip + 913 + Label + true + true + + Left + + + + ПолучателиПолучательКонтекстноеМеню + 45 + true + + InputField + true + Left + true + + true + true + true + true + true + true + true + Normal + + + ТипПолучателейРассылки + + + + + + ПолучателиАдрес + 967 + true + true + + true + + + Объект.Получатели.Адрес + + + ПолучателиАдресРасширеннаяПодсказка + 969 + Label + true + true + + Left + + + + ПолучателиАдресКонтекстноеМеню + 968 + true + + InputField + Auto + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.Получатели.Получатель - - ПолучателиПолучательExtendedTooltip - 913 + ПолучателиГруппа1РасширеннаяПодсказка + 971 Label true true @@ -7538,28 +7621,11 @@ Left - - ПолучателиПолучательКонтекстноеМеню - 45 - true - - InputField - true - Left - true - - true - true - true - true - true - true - Normal - - - ТипПолучателейРассылки - - + ColumnGroup + + InCell + auto + true @@ -7771,10 +7837,10 @@ ПолучателиСтрокаПоиска - 1084 + 1101 ПолучателиСтрокаПоискаРасширеннаяПодсказка - 1086 + 1103 Label true true @@ -7784,7 +7850,7 @@ ПолучателиСтрокаПоискаКонтекстноеМеню - 1085 + 1102 true Получатели @@ -7794,10 +7860,10 @@ ПолучателиСостояниеПросмотра - 1087 + 1104 ПолучателиСостояниеПросмотраРасширеннаяПодсказка - 1089 + 1106 Label true true @@ -7807,7 +7873,7 @@ ПолучателиСостояниеПросмотраКонтекстноеМеню - 1088 + 1105 true ViewStatusAddition @@ -7818,10 +7884,10 @@ ПолучателиУправлениеПоиском - 1090 + 1107 ПолучателиУправлениеПоискомРасширеннаяПодсказка - 1092 + 1109 Label true true @@ -7831,7 +7897,7 @@ ПолучателиУправлениеПоискомКонтекстноеМеню - 1091 + 1108 true SearchControlAddition @@ -8278,10 +8344,10 @@ ФорматыОтчетовСтрокаПоиска - 1104 + 1122 ФорматыОтчетовСтрокаПоискаРасширеннаяПодсказка - 1106 + 1124 Label true true @@ -8291,7 +8357,7 @@ ФорматыОтчетовСтрокаПоискаКонтекстноеМеню - 1105 + 1123 true ФорматыОтчетов @@ -8301,10 +8367,10 @@ ФорматыОтчетовСостояниеПросмотра - 1107 + 1125 ФорматыОтчетовСостояниеПросмотраРасширеннаяПодсказка - 1109 + 1127 Label true true @@ -8314,7 +8380,7 @@ ФорматыОтчетовСостояниеПросмотраКонтекстноеМеню - 1108 + 1126 true ViewStatusAddition @@ -8325,10 +8391,10 @@ ФорматыОтчетовУправлениеПоиском - 1110 + 1128 ФорматыОтчетовУправлениеПоискомРасширеннаяПодсказка - 1112 + 1130 Label true true @@ -8338,7 +8404,7 @@ ФорматыОтчетовУправлениеПоискомКонтекстноеМеню - 1111 + 1129 true SearchControlAddition @@ -9134,8 +9200,156 @@ ФормаКоманднаяПанель -1 + + КомандаЗаписатьИЗакрыть + 955 + true + true + + true + + + КомандаЗаписатьИЗакрытьРасширеннаяПодсказка + 956 + Label + true + true + + Left + + + Form.Command.КомандаЗаписатьИЗакрыть + true + true + true + UserCmds + Auto + + + КомандаЗаписать + 957 + true + true + + true + + + КомандаЗаписатьРасширеннаяПодсказка + 958 + Label + true + true + + Left + + + Form.Command.КомандаЗаписать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 963 + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 964 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 965 + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 966 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппа1 + 959 + true + true + + true + + + ФормаГруппа1РасширеннаяПодсказка + 960 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 961 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 962 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true OnOpen @@ -9175,6 +9389,24 @@ Объект.Получатели + + Адрес + + <key>ru</key> + <value>Адрес</value> + + 1 + + String + + + + true + + + true + + @@ -10633,7 +10865,7 @@ ru Дата рассылки - 6 + 2 ru Добавить или изменить шаблон даты рассылки @@ -10657,7 +10889,7 @@ ru Получатель - 7 + 3 ru Добавить представление получателя @@ -10681,7 +10913,7 @@ ru Сформированные отчеты - 8 + 4 ru Добавить шаблон сформированных отчетов @@ -10705,7 +10937,7 @@ ru Отчет - 9 + 5 ru Добавить отчет @@ -10730,7 +10962,7 @@ ru Дополнительный отчет - 10 + 6 ru Добавить дополнительный отчет @@ -10755,7 +10987,7 @@ ru Проверить - 12 + 7 ru Проверить публикацию @@ -10781,7 +11013,7 @@ ru Автор - 14 + 8 ru Добавить представление автора @@ -10805,7 +11037,7 @@ ru Наименование рассылки - 15 + 9 ru Добавить шаблон наименования рассылки @@ -10829,7 +11061,7 @@ ru Предварительный просмотр - 16 + 10 ru Предпросмотр шаблона @@ -10855,7 +11087,7 @@ ru Просмотр - 3 + 11 ru Предварительный просмотр отчета @@ -10881,7 +11113,7 @@ ru Заголовок системы - 4 + 12 ru Добавить представление рассылки @@ -10905,7 +11137,7 @@ ru Способ доставки - 5 + 13 ru Добавить представление способа доставки @@ -10929,7 +11161,7 @@ ru Заполнить расписание по шаблону - 19 + 14 ru Заполнить расписание по шаблону @@ -10955,7 +11187,7 @@ ru Изменить расписание... - 20 + 15 true @@ -10978,7 +11210,7 @@ ru Снять пометки - 21 + 16 ru Снять пометки @@ -11004,7 +11236,7 @@ ru Установить пометки - 22 + 17 ru Установить пометки @@ -11030,7 +11262,7 @@ ru HTML - 11 + 18 ru Изменить тип текста на HTML @@ -11052,7 +11284,7 @@ ru Обычный текст - 13 + 19 ru Изменить тип текста на HTML @@ -11074,7 +11306,7 @@ ru Проверить - 18 + 20 ru Проверить электронную почту @@ -11100,7 +11332,7 @@ ru Шаблон по умолчанию - 17 + 21 ru Добавить/Заменить шаблоном по умолчанию @@ -11127,7 +11359,7 @@ ru Снять пометки - 23 + 22 ru Снять пометки флажка "Отправлять, если пустой" для всех отчетов @@ -11152,7 +11384,7 @@ ru Установить пометки - 24 + 23 ru Установить пометки флажка "Отправлять, если пустой" для всех отчетов @@ -11177,7 +11409,7 @@ ru Указать получателя рассылки - 2 + 24 ru Указать получателя рассылки в выбранной настройке @@ -11197,6 +11429,57 @@ Auto Auto + + КомандаЗаписать + + <key>ru</key> + <value>Записать</value> + + 25 + + ru + Записать объект + + + true + + Ctrl+S + + StdPicture.Write + + + + КомандаЗаписать + + + Auto + Auto + + + КомандаЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 26 + + ru + Записать объект и закрыть форму + + + true + + + StdPicture.WriteAndClose + + + + КомандаЗаписатьИЗакрыть + + + Auto + Auto + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index 831dfc798..8e4a96934 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 e1390178e..50d11ff33 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) @@ -20,6 +19,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -77,19 +77,22 @@ // Автор рассылки ТекущийПользователь = Пользователи.ТекущийПользователь(); Объект.Автор = ТекущийПользователь; - Если НЕ ЗначениеЗаполнено(Объект.Автор) Тогда + Если Не ЗначениеЗаполнено(Объект.Автор) Тогда Отказ = Истина; + + ПараметрыЖурнала = Новый Структура; + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("Данные", Неопределено); + ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка заполнения автора рассылки - |Автор (%1): %2'"), - Строка(ТипЗнч(ТекущийПользователь)), - Строка(ТекущийПользователь)); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.РассылкиОтчетов, - , - Текст); + НСтр("ru = 'Ошибка заполнения автора рассылки: + |Пользователь ""%1"" (%2) не может быть автором.'"), + Строка(ТекущийПользователь), + Строка(ТипЗнч(ТекущийПользователь))); + + РассылкаОтчетов.ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, Текст); + Возврат; КонецЕсли; @@ -104,7 +107,7 @@ Элементы.ОтчетыДобавитьДополнительныйОтчет.Доступность = ?(Кэш.ПустоеЗначениеОтчета = Неопределено, Истина, Ложь); // "Кэш.ПустоеЗначениеОтчета = Неопределено" когда тип реквизита "отчет" составной, // соответственно используется интеграция с подсистемой Дополнительные отчеты и обработки - + // Доступность автора рассылки Элементы.Автор.Доступность = Пользователи.ЭтоПолноправныйПользователь(); @@ -182,39 +185,10 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - // Очистка окна сообщений - ОчиститьСообщения(); - - // Рекомендации по отключению архивации при доставке только в папку - ЗначенияИзменились = Ложь; - Для Каждого КлючИЗначение Из ЗначенияРеквизитовДоИзменения Цикл - Если Объект[КлючИЗначение.Ключ] <> ЗначенияРеквизитовДоИзменения[КлючИЗначение.Ключ] Тогда - ЗначенияИзменились = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ЗначенияИзменились - И Объект.ИспользоватьПапку - И Объект.Архивировать - И (Объект.ТолькоУведомить ИЛИ НЕ Объект.ИспользоватьЭлектроннуюПочту) - И Не ПараметрыЗаписи.Свойство("НеОтключатьАрхивацию") Тогда - + Если ПараметрыЗаписи = Неопределено Или Не ПараметрыЗаписи.Свойство("Шаг") Тогда Отказ = Истина; - - ЗаголовокВопроса = НСтр("ru = 'Отключить архивацию'"); - ТекстВопроса = НСтр("ru = 'При публикации отчетов в папку рекомендуется отключать архивацию в ZIP.'"); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отключить архивацию в ZIP'")); - Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Продолжить'")); - Кнопки.Добавить(КодВозвратаДиалога.Отмена); - - Обработчик = Новый ОписаниеОповещения("ПередЗаписьюПродолжение", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Да, ЗаголовокВопроса, КодВозвратаДиалога.Нет); - + ЗаписатьНаКлиенте(Истина, Неопределено); КонецЕсли; - КонецПроцедуры &НаСервере @@ -303,7 +277,7 @@ Если ОбщаяНастройка = Неопределено Тогда Продолжить; КонецЕсли; - ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка, Ложь); + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка); Если ДоступнаяНастройка = Неопределено Тогда Продолжить; КонецЕсли; @@ -383,11 +357,11 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - // После записи значения реквизитов табличной части, добавленные в форме, сбрасываются + // Перезаполнение таблиц формы, связанных с таблицами объектов (т.к. таблицы объектов уже перезаполнились). ПрочитатьПользовательскоеПредставлениеФорматов(); ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторТекущейСтрокиТаблицыОтчетов); - // + // Обновление изначальных значений реквизитов в кэше. ЗафиксироватьЗначенияРеквизитовДоИзменения(); КонецПроцедуры @@ -418,8 +392,9 @@ РассылкаОтчетовКлиент.ПроверитьВыполнениеФоновогоЗадания(ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Страница "Расписание" @@ -714,8 +689,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Отчеты +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОтчеты &НаКлиенте Процедура ОтчетыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -814,8 +790,9 @@ ВидимостьДоступностьКорректность(ЭтотОбъект, "Отчеты"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомпоновщикНастроекПользовательскиеНастройки +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекПользовательскиеНастройки &НаКлиенте Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент) @@ -827,8 +804,9 @@ СтрокаОтчеты.ВнесеныИзменения = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиТекущегоОтчета +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиТекущегоОтчета &НаКлиенте Процедура НастройкиТекущегоОтчетаЗначениеПриИзменении(Элемент) @@ -850,8 +828,9 @@ СтрокаОтчеты.ВнесеныИзменения = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Получатели +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПолучатели &НаКлиенте Процедура ПолучателиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -889,8 +868,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ФорматыОтчетов +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыФорматыОтчетов &НаКлиенте Процедура ФорматыОтчетовФорматыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -920,8 +900,22 @@ СтрокаОтчеты.Форматы = ПредставлениеФорматовПоУмолчанию(); КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиКомандФормы + //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// Командная панель + +&НаКлиенте +Процедура КомандаЗаписатьИЗакрыть(Команда) + ЗаписатьНаКлиенте(Истина, Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаЗаписать(Команда) + ЗаписатьНаКлиенте(Ложь, Неопределено); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Страница "Отчеты" @@ -936,7 +930,8 @@ КонецЦикла; Отбор = Новый Структура; - Отбор.Вставить("ТипОтчета", ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внутренний")); + Отбор.Вставить("ТипОтчета", 1); + Отбор.Вставить("ТолькоВарианты", Истина); ПараметрыФормыВыбора = Новый Структура; ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -1084,34 +1079,15 @@ Иначе - // Нахождение поля в составе элементов отбора КД по идентификатору. - ТекущийЭлементОтбораКД = Неопределено; - Идентификатор = Строка(ИдентификаторНастройки); - - ГруппыЭлементовОтбора = Новый Массив; - ГруппыЭлементовОтбора.Добавить(КомпоновщикНастроекКД.Настройки.Отбор.Элементы); - Пока ГруппыЭлементовОтбора.Количество() > 0 И ТекущийЭлементОтбораКД = Неопределено Цикл - ГруппаЭлементовОтбора = ГруппыЭлементовОтбора[0]; - ГруппыЭлементовОтбора.Удалить(0); - - Для Каждого ЭлементОтбораКД Из ГруппаЭлементовОтбора Цикл - Если ТипЗнч(ЭлементОтбораКД) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - ГруппыЭлементовОтбора.Добавить(ЭлементОтбораКД.Элементы); - ИначеЕсли ЭлементОтбораКД.ИдентификаторПользовательскойНастройки = Идентификатор Тогда - ТекущийЭлементОтбораКД = ЭлементОтбораКД; - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Если ТекущийЭлементОтбораКД = Неопределено Тогда + ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, КомпоновщикНастроекКД.Настройки.Отбор.Элементы); + Если ПолеКД = Неопределено Тогда + ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы); + КонецЕсли; + Если ПолеКД = Неопределено Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для настройки отчета не найдено описание доступного поля'")); Возврат; КонецЕсли; - ПолеКД = ТекущийЭлементОтбораКД.ЛевоеЗначение; - КонецЕсли; // Нахождение поля в составе доступных полей выбора. @@ -1165,9 +1141,30 @@ РассылкаБылаПерсонализирована = Истина; Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина; + Модифицированность = Истина; КонецПроцедуры +&НаКлиенте +Функция ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, Коллекция) + Для Каждого Элемент Из Коллекция Цикл + Если Строка(Элемент.ИдентификаторПользовательскойНастройки) = Строка(ИдентификаторНастройки) + И ЗначениеЗаполнено(Строка(Элемент.ЛевоеЗначение)) Тогда + Возврат Элемент.ЛевоеЗначение; + КонецЕсли; + + Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда + Поле = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, Элемент.Элементы); + Если Поле <> Неопределено Тогда + Возврат Поле; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Страница "Расписание" @@ -1449,24 +1446,29 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "НастройкиТекущегоОтчета"; + Инструкция.Отборы.Вставить("НастройкиТекущегоОтчета.Обнаружен", Ложь); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Инструкция.Оформление.Вставить("Доступность", Ложь); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ПолучателиПолучатель, ПолучателиИсключен"; + Инструкция.Отборы.Вставить("Объект.Получатели.Исключен", Истина); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики асинхронных диалогов -&НаКлиенте -Процедура ПередЗаписьюПродолжение(Ответ, ДополнительныеПараметры) Экспорт - Если Ответ = КодВозвратаДиалога.Да Тогда // Отключить архивацию и записать. - Объект.Архивировать = Ложь; - Записать(); - ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда // Не отключать архивацию и записать. - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("НеОтключатьАрхивацию"); - Записать(ПараметрыЗаписи); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ТипПолучателейРассылкиОбработкаВыбораЗавершение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда @@ -1573,7 +1575,7 @@ Результат = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры @@ -1724,9 +1726,6 @@ СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент - &НаКлиенте Процедура ДобавитьПеретащитьПолучателя(ПолучательИлиНаборПолучателей) Если ПодборПользователейИлиГрупп(ПолучательИлиНаборПолучателей) Тогда @@ -2924,13 +2923,6 @@ Возврат ПараметрыОтчета; КонецФункции -&НаСервере -Функция ЗафиксироватьЗначенияРеквизитовДоИзменения() - ЗначенияРеквизитовДоИзменения = Новый Структура("ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать"); - ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовДоИзменения, Объект); - ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения); -КонецФункции - &НаСервере Процедура ДобавитьНастройкиОтчетов(ПрисоединяемыеОтчеты) Для Каждого СтрокаОтчетыПараметры Из ПрисоединяемыеОтчеты Цикл @@ -2978,3 +2970,144 @@ КонецЕсли; КонецЦикла; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Запись объекта + +&НаКлиенте +Процедура ЗаписатьНаКлиенте(Результат, ПараметрыЗаписи) Экспорт + // Инициализация параметров. + Если ПараметрыЗаписи = Неопределено Тогда + ПараметрыЗаписи = Новый Структура; + КонецЕсли; + Если Не ПараметрыЗаписи.Свойство("Шаг") Тогда + ОчиститьСообщения(); // Очистка окна сообщений. + ПараметрыЗаписи.Вставить("ЗакрытьПослеЗаписи", Результат); + ПараметрыЗаписи.Вставить("Шаг", 1); + КонецЕсли; + + // Разрешения на ресурсы. + Если ПараметрыЗаписи.Шаг = 1 И ТребуютсяРазрешенияНаРесурсыСервера() Тогда + ПараметрыЗаписи.Шаг = 2; + // Вопрос. + Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиенте", ЭтотОбъект, ПараметрыЗаписи); + Разрешения = РазрешенияНаРесурсыСервера(); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Разрешения, ЭтотОбъект, Обработчик); + ИначеЕсли ПараметрыЗаписи.Шаг = 1 Тогда + // Вопрос не нужен. + ПараметрыЗаписи.Шаг = 3; + ИначеЕсли ПараметрыЗаписи.Шаг = 2 Тогда + // Обработка ответа. + Если Результат = КодВозвратаДиалога.ОК Тогда + ПараметрыЗаписи.Шаг = 3; // Внешние ресурсы разрешены. Продолжить запись. + Иначе + Возврат; // Отменить запись. + КонецЕсли; + КонецЕсли; + + // Отключение архивации. + Если ПараметрыЗаписи.Шаг = 3 И ЖелательноОтключитьАрхивацию() Тогда + ПараметрыЗаписи.Шаг = 4; + // Вопрос. + ЗаголовокВопроса = НСтр("ru = 'Отключить архивацию'"); + ТекстВопроса = НСтр("ru = 'При публикации отчетов в папку рекомендуется отключать архивацию в ZIP.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отключить архивацию в ZIP'")); + Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиенте", ЭтотОбъект, ПараметрыЗаписи); + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Да, ЗаголовокВопроса); + ИначеЕсли ПараметрыЗаписи.Шаг = 3 Тогда + // Вопрос не нужен. + ПараметрыЗаписи.Шаг = 5; + ИначеЕсли ПараметрыЗаписи.Шаг = 4 Тогда + // Обработка ответа. + Если Результат = КодВозвратаДиалога.Да Тогда + Объект.Архивировать = Ложь; // Отключить архивацию. + ПараметрыЗаписи.Шаг = 5; // Продолжить запись. + ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда + ПараметрыЗаписи.Шаг = 5; // Продолжить запись без отключения архивации. + Иначе + Возврат; // Отменить запись. + КонецЕсли; + КонецЕсли; + + // Запись. + Если ПараметрыЗаписи.Шаг = 5 Тогда + ПараметрыЗаписи.Шаг = 6; + Успешно = Записать(ПараметрыЗаписи); + Если Успешно И ПараметрыЗаписи.Свойство("ЗакрытьПослеЗаписи") И ПараметрыЗаписи.ЗакрытьПослеЗаписи Тогда + Закрыть(); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ТребуютсяРазрешенияНаРесурсыСервера() + Если Объект.ИспользоватьСетевойКаталог + И (ЗначениеЗаполнено(Объект.СетевойКаталогWindows) Или ЗначениеЗаполнено(Объект.СетевойКаталогLinux)) Тогда + // Публикация в сетевой каталог. Требуются разрешения. + Если ИзменилисьЗначенияРеквизитов("ИспользоватьСетевойКаталог, СетевойКаталогWindows, СетевойКаталогLinux") Тогда + // Пользователь менял значения проверяемых реквизитов. + Возврат Истина; + КонецЕсли; + КонецЕсли; + Если Объект.ИспользоватьFTPРесурс И ЗначениеЗаполнено(Объект.FTPСервер) Тогда + // Публикация в сетевой каталог. Требуются разрешения. + Если ИзменилисьЗначенияРеквизитов("ИспользоватьFTPРесурс, FTPСервер, FTPКаталог") Тогда + // Пользователь менял значения проверяемых реквизитов. + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +&НаКлиенте +Функция ЖелательноОтключитьАрхивацию() + Если Объект.ИспользоватьПапку + И Объект.Архивировать + И (Объект.ТолькоУведомить Или Не Объект.ИспользоватьЭлектроннуюПочту) Тогда + // Публикация в папку с рассылкой уведомлений. Желательно отключить архивацию. + Если ИзменилисьЗначенияРеквизитов("ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать") Тогда + // Пользователь менял значения проверяемых реквизитов. + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +&НаСервере +Функция РазрешенияНаРесурсыСервера() + РазрешенияНабор = РассылкаОтчетов.РазрешенияНаРесурсыСервера(Объект); + РазрешенияСсылка = РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(РазрешенияНабор, Объект.Ссылка); + РазрешенияМассивСсылок = Новый Массив; + РазрешенияМассивСсылок.Добавить(РазрешенияСсылка); + Возврат РазрешенияМассивСсылок; +КонецФункции + +&НаКлиенте +Функция ИзменилисьЗначенияРеквизитов(ИменаРеквизитов) + ИменаРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРеквизитов, , Истина, Истина); + Для Каждого ИмяРеквизита Из ИменаРеквизитов Цикл + Если Объект[ИмяРеквизита] <> ЗначенияРеквизитовДоИзменения[ИмяРеквизита] Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + +&НаСервере +Функция ЗафиксироватьЗначенияРеквизитовДоИзменения() + ИменаРеквизитов = "ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать"; + ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьСетевойКаталог, СетевойКаталогWindows, СетевойКаталогLinux"; + ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьFTPРесурс, FTPСервер, FTPКаталог"; + ЗначенияРеквизитовДоИзменения = Новый Структура(ИменаРеквизитов); + ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовДоИзменения, Объект); + ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index 0ebc73f7c..77ff88799 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 e69de29bb..52d290823 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -0,0 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Реквизиты, которые запрещается изменять сразу для нескольких объектов. +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Отчеты.*"); + Результат.Добавить("ФорматыОтчетов.*"); + Результат.Добавить("Получатели.*"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 2a4057e07..7333232ad 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоГруппа Тогда @@ -244,8 +243,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПредставлениеЗаданияПоРассылке(НаименованиеРассылки) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -253,4 +253,6 @@ СокрЛП(НаименованиеРассылки)); КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form index ddc537e02..40492de5c 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form @@ -199,17 +199,17 @@ true
      - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 23 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 25 Label true @@ -219,20 +219,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 24 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра +
      + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 26 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 28 Label true @@ -242,10 +253,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 27 true + Список + + true + + + + СписокСостояниеПросмотра + 29 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 30 + true + ViewStatusAddition Список @@ -254,10 +288,10 @@ СписокУправлениеПоиском - 29 + 32 СписокУправлениеПоискомРасширеннаяПодсказка - 31 + 34 Label true true @@ -267,7 +301,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 30 + 33 true SearchControlAddition @@ -406,6 +440,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form index 2f29c1e73..81eb2cfa4 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form @@ -211,6 +211,40 @@ true + + Ссылка + 27 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 28 + true + + LabelField + Enter + true + Left + true + + true + true + + true true @@ -307,32 +341,9 @@ СписокСтрокаПоиска - 27 - - СписокСтрокаПоискаРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 28 - true - - Список - - true - - - - СписокСостояниеПросмотра 30 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 32 Label true @@ -342,10 +353,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 31 true + Список + + true + +
      + + СписокСостояниеПросмотра + 33 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 34 + true + ViewStatusAddition Список @@ -354,10 +388,10 @@ СписокУправлениеПоиском - 33 + 36 СписокУправлениеПоискомРасширеннаяПодсказка - 35 + 38 Label true true @@ -367,7 +401,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 34 + 37 true SearchControlAddition @@ -456,6 +490,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index 181352ac7..cdd8f34e6 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -129,3 +129,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index ccb43d07b..4ddf38d4d 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 new file mode 100644 index 000000000..94ea391c3 --- /dev/null +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + + Результат.Добавить("КраткоеПредставление"); + Результат.Добавить("Комментарий"); + Результат.Добавить("ВнешняяРоль"); + Результат.Добавить("УзелОбмена"); + + Возврат Результат +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 96de9ce6f..7ba88b9bd 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,3 +11,5 @@ ПрисоединенныеФайлы.ВызватьИсключениеОткрытияФормы(ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index 4a1356848..37494d69d 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,11 +11,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) ПрисоединенныеФайлыКлиент.ПерейтиКФормеПрисоединенногоФайла(ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl new file mode 100644 index 000000000..6b0f37643 --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl index f3745b57c..6ae2a71d7 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -29,8 +29,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантГруппировкиПриИзменении(Элемент) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОтправитьИПолучитьСообщения(Команда) @@ -101,8 +103,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьГруппировкуСписка() @@ -166,3 +169,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl index 64e03e25f..05f7b4ff1 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,3 +25,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl index d7fd4f8ae..4e03a24f1 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантГруппировкиПриИзменении(Элемент) @@ -42,8 +43,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОтправитьИПолучитьСообщения(Команда) @@ -109,8 +111,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьГруппировкуСписка() @@ -173,3 +176,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl index 64e03e25f..05f7b4ff1 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,3 +25,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl new file mode 100644 index 000000000..67743ed22 --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl @@ -0,0 +1,21 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("*"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form index a581a4e17..c89a80223 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form @@ -719,7 +719,7 @@ Left
      - Form.Item.Классификатор.StandardCommand.SelectAll + 0 Normal Auto true @@ -734,7 +734,6 @@ true true true - MultiRow
      true
      1 1 diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html index c991bdaf8..d67c0b1eb 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html @@ -7,7 +7,7 @@ P:first-letter { SUP { LINE-HEIGHT: normal; FONT-VARIANT: normal; FONT-STYLE: normal; FONT-SIZE: 0.9em; FONT-WEIGHT: normal } - +

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

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

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

      diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl index 3aa4204a3..0cefbb15d 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -1,9 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -39,8 +40,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Классификатор +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКлассификатор // &НаКлиенте @@ -82,8 +84,9 @@ ОткрытьФормуЭлементаКлассификатора(Элементы.Классификатор.ТекущиеДанные); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -160,4 +163,6 @@ Процедура ОповеститьОСозданииЭлементов(Ссылка) ОповеститьОЗаписиНового(Ссылка); Оповестить("Справочник.СтраныМира.Изменение", Ссылка, ЭтотОбъект); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 3dbad5ff5..fe43b7d6a 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -197,6 +197,40 @@ true + + Ссылка + 33 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 34 + true + + LabelField + Enter + true + Left + true + + true + true + + Top СписокКоманднаяПанель @@ -377,32 +411,9 @@ СписокСтрокаПоиска - 33 - - СписокСтрокаПоискаРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 34 - true - - Список - - true - - - - СписокСостояниеПросмотра 36 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 38 Label true @@ -412,10 +423,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 37 true + Список + + true + + + + СписокСостояниеПросмотра + 39 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 40 + true + ViewStatusAddition Список @@ -424,10 +458,10 @@ СписокУправлениеПоиском - 39 + 42 СписокУправлениеПоискомРасширеннаяПодсказка - 41 + 44 Label true true @@ -437,7 +471,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 40 + 43 true SearchControlAddition @@ -542,6 +576,9 @@ true + + Список.Ref +
      true
      Catalog.СтраныМира diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index de065778c..f953934dc 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -92,8 +92,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок // &НаКлиенте @@ -121,8 +122,9 @@ ОбновитьОтображениеСпискаСтран(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -145,8 +147,9 @@ ОткрытьФорму("Справочник.СтраныМира.Форма.Классификатор", ПараметрыОткрытия, Элементы.Список); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -218,3 +221,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl index 3cf330964..f447607fc 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -18,3 +18,4 @@ Оповестить("Справочник.СтраныМира.Изменение", Объект.Ссылка, ЭтотОбъект); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index f981dd002..84bce8ece 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -7,7 +7,7 @@ P:first-letter { SUP { LINE-HEIGHT: normal; FONT-VARIANT: normal; FONT-STYLE: normal; FONT-SIZE: 0.9em; FONT-WEIGHT: normal } - +

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

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

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

      diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 726b0fb93..d60791bcf 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -1,22 +1,20 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Определяет данные страны по справочнику стран или классификатору ОКСМ // // Параметры: -// КодСтраны - строка или число с кодом ОКСМ страны. Если не указано, то поиск по коду не производится -// Наименование - наименование страны. Если не указано, то поиск по наименованию не производится +// КодСтраны - Строка, Число - код ОКСМ страны. Если не указано, то поиск по коду не производится +// Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится // // Возвращаемое значение: -// Структура с полями "Ссылка", "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3", +// Структура - содержит поля "Ссылка", "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3". // Если страна не найдена в справочнике, но найдена в классфикаторе, то поле "Ссылка" не заполнено // // Если страна не найдена ни в адресе, ни в классификаторе, то возвращается значение Неопределено // -Функция ДанныеСтраныМира(Знач КодСтраны=Неопределено, Знач Наименование=Неопределено) Экспорт +Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт Если КодСтраны=Неопределено И Наименование=Неопределено Тогда Возврат Неопределено; КонецЕсли; @@ -69,11 +67,11 @@ // Определяет данные страны по классификатору ОКСМ // // Параметры: -// КодСтраны - строка кода страны или числовой код +// КодСтраны - Строка, Число - код ОКСМ страны // // Возвращаемое значение: -// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" -// - в случае отсуствия страны в классфикаторе - Неопределено +// Структура, Неопределено - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3". +// В случае отсуствия страны в классфикаторе - Неопределено // Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт @@ -92,11 +90,11 @@ // Определяет данные страны по классификатору ОКСМ // // Параметры: -// Наименование - строка наименования страны +// Наименование - Строка - наименование страны // // Возвращаемое значение: -// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" -// - в случае отсуствия страны в классфикаторе - Неопределено +// Структура, Неопределено - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3". +// В случае отсуствия страны в классфикаторе - Неопределено // Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт ДанныеКлассификатора = ТаблицаКлассификатора(); @@ -115,10 +113,10 @@ // Идентификация существующих элементов в справочнике выполняется по полю Код. // // Параметры: -// Добавлять - необязательный флаг. Если Истина, то добавляются страны, которые есть в классфикаторе, +// Добавлять - Булево - если Истина, то добавляются страны, которые есть в классфикаторе, // но отсутствуют в справочнике стран мира. // -Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять=Ложь) Экспорт +Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять = Ложь) Экспорт ВсеОшибки = ""; Фильтр = Новый Структура("Код"); @@ -174,12 +172,13 @@ // Создает или возвращает существующую ссылку по данным классификатора // // Параметры: -// Отбор - объект с полем Код для поиска страны в классфикаторе -// Данные - необязательная структура для заполнения оставшихся полей создаваемого объекта. +// Отбор - Структура - содержит поле Код для поиска страны в классфикаторе +// Данные - Структура - для заполнения оставшихся полей создаваемого объекта. // -// Возвращаемое значение - ссылка на созданый элемент +// Возвращаемое значение: +// СправочникСсылка - ссылка на созданый элемент // -Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные=Неопределено) Экспорт +Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные = Неопределено) Экспорт // Убеждаемся, что страна есть в классификаторе ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); @@ -208,16 +207,19 @@ // Возвращает флаг возможности добавления и изменения элементов // Функция ЕстьПравоДобавления() Экспорт - Возврат ПравоДоступа("Добавление", Справочники.СтраныМира.ПустаяСсылка().Метаданные()); + + Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); + КонецФункции // Возвращает поля поиска в порядке предпочтения для справочника стран мира // -// Результат - массив структур с полями: -// - Имя - имя реквизита поиска -// - ШаблонПредставления - шаблон для формирования значения представления по именам реквизитов, -// например: "%1.Наменование (%1.Код)". Здесь "Наименование" и "Код" - имена реквизитов, -// "%1" - заполнитель для передачи псевдонима таблицы +// Возвращаемое значение: +// Массив - содержит структуры с полями: +// Имя - Строка - имя реквизита поиска +// ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, +// например: "%1.Наменование (%1.Код)". Здесь "Наименование" и "Код" - имена реквизитов, +// "%1" - заполнитель для передачи псевдонима таблицы // Функция ПоляПоиска() Экспорт Результат = Новый Массив; @@ -255,17 +257,17 @@ Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); КонецФункции -// Возвращает таблицу значений с данными ОКСМ +// Возвращает полные данные ОКСМ классификатора. // -// Колонки: -// Код - Строка(3, Переменная), -// Наименование - Строка(60, Переменная), -// НаименованиеПолное - Строка(100, Переменная), -// КодАльфа2 - Строка(2, Переменная), -// КодАльфа3 - Строка(3, Переменная) -// Индексы: -// Код, -// Наименование +// Возвращаемое значение: +// ТаблицаЗначений - данные классифкатора с колонками: +// Код - Строка(3, Переменная), +// Наименование - Строка(60, Переменная), +// НаименованиеПолное - Строка(100, Переменная), +// КодАльфа2 - Строка(2, Переменная), +// КодАльфа3 - Строка(3, Переменная) +// +// Таблица значений проиндексирована по полям "Код", "Наименование" // Функция ТаблицаКлассификатора() Экспорт Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); @@ -276,11 +278,11 @@ Возврат СериализаторXDTO.ПрочитатьXML(Чтение); КонецФункции -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// +#Область СлужебныеПроцедурыИФункции + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Приводит код страны к единому виду - строка длиной три символа // @@ -315,9 +317,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ -// +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Если Не СтандартнаяОбработка Тогда @@ -484,3 +486,22 @@ КонецПроцедуры +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("*"); + Возврат Результат; + +КонецФункции + +#КонецЕсли + +#КонецОбласти diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index 083780aaa..6efd87684 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // // Контролирует уникальность элемента в базе @@ -53,8 +52,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#КонецОбласти + +#Область ОбработчикиСобытий // Процедура ПередЗаписью(Отказ) @@ -83,4 +83,6 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt index 82be1a4e7..565277785 100644 --- a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt +++ b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt @@ -1398,7 +1398,7 @@ SO SOM 706 - Сомалийская Республика + Федеративная Республика Сомали СУДАН diff --git a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl new file mode 100644 index 000000000..971060863 --- /dev/null +++ b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl @@ -0,0 +1,20 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 200de6f11..81b0523d1 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,8 +27,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -57,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Создать(Команда) @@ -168,8 +170,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(Ссылка) @@ -225,3 +228,5 @@ ВключитьОтключитьВыгрузкуНаСервере(ФлагИспользования, СценарийОбменаДанными); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form index 99bf8566e..810b9d13e 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form @@ -105,18 +105,17 @@ Normal
      - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска + + Ссылка 19 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 21 Label true @@ -126,20 +125,32 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 20 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска 22 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 24 Label true @@ -149,10 +160,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 23 true + Список + + true + + + + СписокСостояниеПросмотра + 25 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 26 + true + ViewStatusAddition Список @@ -161,10 +195,10 @@ СписокУправлениеПоиском - 25 + 28 СписокУправлениеПоискомРасширеннаяПодсказка - 27 + 30 Label true true @@ -174,7 +208,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 26 + 29 true SearchControlAddition @@ -314,6 +348,9 @@ true + + Список.Ref +
      true
      Catalog.СценарииОбменовДанными diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl index e767b8a2b..a3c6f2d87 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьОтключитьРегламентноеЗадание(Команда) @@ -16,8 +16,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(ВыделенныеСтроки, ИспользоватьРегламентноеЗадание) @@ -39,3 +40,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index f826e4c93..2d2c5ba9c 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -475,51 +475,6 @@ Normal - - НастройкиОбменаКоличествоЭлементовВТранзакции - 118 - - <key>ru</key> - <value>Элементов в транзакции</value> - - true - true - - true - - - Объект.НастройкиОбмена.КоличествоЭлементовВТранзакции - - - НастройкиОбменаКоличествоЭлементовВТранзакцииExtendedTooltip - 144 - Label - true - true - - Left - - - - НастройкиОбменаКоличествоЭлементовВТранзакцииКонтекстноеМеню - 119 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - СоставРасписанияКоманднаяПанель 7 diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..07be766fe --- /dev/null +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,15 @@ + +

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

      +

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

      +

      Настройка сценария синхронизации

      +

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

      +

      Настройка сценария синхронизации данных состоит из следующих этапов:

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

      Выполнение сценария

      +

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

      +

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 5a8ea5570..8dd06017b 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -4,8 +4,7 @@ &НаКлиенте Перем КоличествоСтрок; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,8 +70,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИспользоватьРегламентноеЗаданиеПриИзменении(Элемент) @@ -107,8 +107,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиОбмена +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиОбмена &НаКлиенте Процедура НастройкиОбменаВидТранспортаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -123,8 +124,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьОбмен(Команда) @@ -186,8 +188,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура РедактированиеРасписанияРегламентногоЗадания() @@ -281,7 +284,6 @@ | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы, | СценарииОбменовДаннымиНастройкиОбмена.ВидТранспортаОбмена, | СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие, - | СценарииОбменовДаннымиНастройкиОбмена.КоличествоЭлементовВТранзакции, | ВЫБОР | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена ЕСТЬ NULL | ТОГДА 0 @@ -349,3 +351,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html index 67400ce48..9001b1c9f 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html @@ -1,5 +1,15 @@ - -

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

      + +

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

      +

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

      +

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

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

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

      +

      Настройка сценария

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

        Настройка сценария синхронизации данных состоит из следующих этапов:

        • Настроить расписание выполнения сценария синхронизации данных.
        • Выбрать информационные базы, для которых будет выполняться сценарий синхронизации данных. -
        • Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).
        \ No newline at end of file +
      • Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).
    • После того как настроен сценарий синхронизации данных, около настройки синхронизации данных в списке появляется значок . Синхронизация данных производится по расписанию с помощью регламентного задания.

    Включение расписания

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index e4550c25e..2e0347be5 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура СоздатьСценарий(УзелИнформационнойБазы, Расписание = Неопределено) Экспорт @@ -26,13 +25,11 @@ СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - СтрокаТаблицы.КоличествоЭлементовВТранзакции = 200; СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - СтрокаТаблицы.КоличествоЭлементовВТранзакции = 200; СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; СценарийОбменаДанными.Записать(); @@ -314,7 +311,6 @@ НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - НоваяСтрока.КоличествоЭлементовВТранзакции = 0; Прервать; КонецЕсли; @@ -330,7 +326,6 @@ НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - НоваяСтрока.КоличествоЭлементовВТранзакции = 0; КонецЕсли; @@ -369,7 +364,6 @@ НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - НоваяСтрока.КоличествоЭлементовВТранзакции = 0; Прервать; КонецЕсли; @@ -385,7 +379,6 @@ НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; НоваяСтрока.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - НоваяСтрока.КоличествоЭлементовВТранзакции = 0; КонецЕсли; @@ -438,4 +431,20 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("РегламентноеЗаданиеGUID"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl index 50c98e969..3b44f0209 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -52,8 +51,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Выполняет удаление регламентного задания // @@ -83,4 +83,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo index d765c0a0e..4645115dd 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo +++ b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo @@ -270,28 +270,6 @@ Use Use
    - - КоличествоЭлементовВТранзакции - - ru - Количество элементов в транзакции - - - Number - - 10 - true - - - - ru - Количество элементов на одну транзакцию выгрузки или загрузки данных. 0 – данные будут выгружены или загружены в одной транзакции. - - - - Use - Use - ФормаСписка @@ -308,6 +286,11 @@ ru Форма элемента + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl new file mode 100644 index 000000000..6b0f37643 --- /dev/null +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form index 6a2369e54..7b39ac1c5 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form @@ -14,6 +14,7 @@ true false None + SetDeletionMark Наименование 4 @@ -244,17 +245,17 @@ true - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 25 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 27 Label true @@ -264,10 +265,44 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 26 true + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 46 + + СписокСтрокаПоискаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 47 + true + Список true @@ -275,10 +310,10 @@ СписокСостояниеПросмотра - 28 + 49 СписокСостояниеПросмотраРасширеннаяПодсказка - 30 + 51 Label true true @@ -288,7 +323,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 29 + 50 true ViewStatusAddition @@ -299,10 +334,10 @@ СписокУправлениеПоиском - 31 + 52 СписокУправлениеПоискомРасширеннаяПодсказка - 33 + 54 Label true true @@ -312,7 +347,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 32 + 53 true SearchControlAddition @@ -376,9 +411,244 @@ ФормаКоманднаяПанель -1 + + ФормаСоздать + 30 + true + true + + true + + + ФормаСоздатьРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 32 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 34 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокУстановкаПометкиУдаления + 28 + true + true + + true + + + СписокУстановкаПометкиУдаленияРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.УстановкаПометкиУдаления + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНайти + 36 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 38 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНастройкаСписка + 40 + true + true + + true + + + ФормаНастройкаСпискаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВывестиСписок + 42 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОбновить + 44 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + Left - true + Delete + SetDeletionMark DontBlock true true @@ -402,6 +672,15 @@ true + + Список.DeletionMark + + + Список.Description + + + Список.Ref +
    true
    Catalog.ТомаХраненияФайлов @@ -411,6 +690,32 @@ true + + УстановкаПометкиУдаления + + <key>ru</key> + <value>Установка пометки удаления</value> + + 1 + + ru + Установка пометки удаления + + + true + + + StdPicture.MarkToDelete + + + + УстановитьСнятьПометкуУдаления + + + Picture + Auto + Auto + diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..9a1f4689d --- /dev/null +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,111 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УстановитьСнятьПометкуУдаления(Команда) + + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + НачатьИзменениеПометкиУдаления(Элементы.Список.ТекущиеДанные); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура НачатьИзменениеПометкиУдаления(ТекущиеДанные) + + Если ТекущиеДанные.ПометкаУдаления Тогда + ТекстВопроса = НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); + КонецЕсли; + + СодержимоеВопроса = Новый Массив; + СодержимоеВопроса.Добавить(БиблиотекаКартинок.Вопрос32); + СодержимоеВопроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, ТекущиеДанные.Наименование)); + + ПоказатьВопрос( + Новый ОписаниеОповещения("ПродолжитьИзменениеПометкиУдаления", ЭтотОбъект, ТекущиеДанные), + Новый ФорматированнаяСтрока(СодержимоеВопроса), + РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьИзменениеПометкиУдаления(Ответ, ТекущиеДанные) Экспорт + + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Том = Элементы.Список.ТекущиеДанные.Ссылка; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Том", Элементы.Список.ТекущиеДанные.Ссылка); + ДополнительныеПараметры.Вставить("ПометкаУдаления", Неопределено); + ДополнительныеПараметры.Вставить("Запросы", Новый Массив()); + ДополнительныеПараметры.Вставить("ИдентификаторФормы", УникальныйИдентификатор); + + ПодготовкаКУстановкеСнятиюПометкиУдаления(Том, ДополнительныеПараметры); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ДополнительныеПараметры.Запросы, ЭтотОбъект, Новый ОписаниеОповещения( + "ПродолжитьУстановкуСнятиеПометкиУдаления", ЭтотОбъект, ДополнительныеПараметры)); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПодготовкаКУстановкеСнятиюПометкиУдаления(Том, ДополнительныеПараметры) + + ЗаблокироватьДанныеДляРедактирования(Том, , ДополнительныеПараметры.ИдентификаторФормы); + + СвойстваТома = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Том, "ПометкаУдаления,ПолныйПутьWindows,ПолныйПутьLinux"); + + ДополнительныеПараметры.ПометкаУдаления = СвойстваТома.ПометкаУдаления; + + Если ДополнительныеПараметры.ПометкаУдаления Тогда + // Пометка удаления установлена, ее требуется снять + + Запрос = Справочники.ТомаХраненияФайлов.ЗапросНаИспользованиеВнешнихРесурсовДляТома( + Том, СвойстваТома.ПолныйПутьWindows, СвойстваТома.ПолныйПутьLinux); + Иначе + // Пометка удаления не установлена, ее требуется установить + Запрос = РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Том) + КонецЕсли; + + ДополнительныеПараметры.Запросы.Добавить(Запрос); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьУстановкуСнятиеПометкиУдаления(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ЗавершитьУстановкуСнятиеПометкиУдаления(ДополнительныеПараметры); + Элементы.Список.Обновить(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗавершитьУстановкуСнятиеПометкиУдаления(ДополнительныеПараметры) + + Объект = ДополнительныеПараметры.Том.ПолучитьОбъект(); + Объект.УстановитьПометкуУдаления(Не ДополнительныеПараметры.ПометкаУдаления); + Объект.Записать(); + + РазблокироватьДанныеДляРедактирования( + ДополнительныеПараметры.Том, ДополнительныеПараметры.ИдентификаторФормы); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index 8e8692be2..6d5ec3392 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,5 @@ - + ГруппаКодИНаименование 12 @@ -137,6 +137,10 @@ Объект.ПолныйПутьWindows Top + + OnChange + ПолныйПутьWindowsПриИзменении + ПолныйПутьWindowsExtendedTooltip 29 @@ -165,7 +169,6 @@ true true true - false true true true @@ -188,6 +191,10 @@ Объект.ПолныйПутьLinux Top + + OnChange + ПолныйПутьLinuxПриИзменении + ПолныйПутьLinuxExtendedTooltip 30 @@ -462,13 +469,105 @@ ФормаКоманднаяПанель -1 + + ФормаЗаписатьИЗакрыть + 36 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + true + true + true + UserCmds + + StdPicture.WriteAndClose + + Auto + + + СтандартныеКоманды + 38 + true + true + + true + + + <key>ru</key> + <value>Стандартные команды</value> + + + ru + Стандартные команды + + + СтандартныеКомандыРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 40 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + WriteAndClose LockOwner true true @@ -515,6 +614,62 @@ true + + ПроверкаЗаполненияУжеВыполнена + + <key>ru</key> + <value>Проверка заполнения уже выполнена</value> + + 3 + + Boolean + + + true + + + true + + + + СсылкаНового + + <key>ru</key> + <value>Ссылка нового</value> + + 4 + + CatalogRef.ТомаХраненияФайлов + + + true + + + true + + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 1 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + Auto + Auto + @@ -527,9 +682,17 @@ + + AfterWrite + ПослеЗаписи + BeforeWrite ПередЗаписью + + BeforeWriteAtServer + ПередЗаписьюНаСервере + diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html index 50b9cd068..272e60bfc 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -1,3 +1,3 @@ - +

    Если сервер 1С:Предприятия работает под 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/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index c7cba3714..0a8d4f622 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ТекущиеПараметрыЗаписи; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,11 +12,12 @@ Если Объект.Ссылка.Пустая() Тогда Объект.ПорядокЗаполнения = НайтиМаксимальныйПорядок() + 1; - КонецЕсли; - - Если НЕ Объект.Ссылка.Пустая() Тогда - Элементы.ПолныйПутьLinux.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; - Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; + Иначе + Элементы.ПолныйПутьLinux.ОтображениеПредупрежденияПриРедактировании + = ОтображениеПредупрежденияПриРедактировании.Отображать; + + Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании + = ОтображениеПредупрежденияПриРедактировании.Отображать; ТекущийРазмерВБайтах = 0; @@ -29,7 +32,9 @@ ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 + ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Элементы.ПолныйПутьWindows.АвтоОтметкаНезаполненного = Истина; Иначе Элементы.ПолныйПутьLinux.АвтоОтметкаНезаполненного = Истина; @@ -37,9 +42,70 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьОповещение", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ); + +КонецПроцедуры + &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + Если Не ПараметрыЗаписи.Свойство("ВнешниеРесурсыРазрешены") Тогда + Отказ = Истина; + ТекущиеПараметрыЗаписи = ПараметрыЗаписи; + ПодключитьОбработчикОжидания("РазрешитьВнешнийРесурсНачало", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если ЗначениеЗаполнено(СсылкаНового) Тогда + ТекущийОбъект.УстановитьСсылкуНового(СсылкаНового); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + + Если ПроверкаЗаполненияУжеВыполнена Тогда + ПроверкаЗаполненияУжеВыполнена = Ложь; + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПропуститьОсновнуюПроверкуЗаполнения"); + Иначе + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуДоступаКПапке"); + КонецЕсли; + + ПроверяемыеРеквизиты.Очистить(); + + Если Не ТекущийОбъект.ПроверитьЗаполнение() Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПолныйПутьWindowsПриИзменении(Элемент) + // Добавляем слэш в конце, если его нет Если Не ПустаяСтрока(Объект.ПолныйПутьWindows) Тогда Если Прав(Объект.ПолныйПутьWindows, 1) <> "\" Тогда @@ -51,6 +117,11 @@ КонецЕсли; КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПолныйПутьLinuxПриИзменении(Элемент) + // Добавляем слэш в конце, если его нет Если Не ПустаяСтрока(Объект.ПолныйПутьLinux) Тогда Если Прав(Объект.ПолныйПутьLinux, 1) <> "\" Тогда @@ -64,17 +135,38 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Записать(Новый Структура("ЗаписатьИЗакрыть")); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ЗаписатьИЗакрытьОповещение(Результат = Неопределено, Неопределен = Неопределено) Экспорт + + Записать(Новый Структура("ЗаписатьИЗакрыть")); + +КонецПроцедуры // Находит максимальный порядок среди томов &НаСервере Функция НайтиМаксимальныйПорядок() + Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | МАКСИМУМ(Тома.ПорядокЗаполнения) КАК МаксимальныйНомер - |ИЗ - | Справочник.ТомаХраненияФайлов КАК Тома"; + Запрос.Текст = + "ВЫБРАТЬ + | МАКСИМУМ(Тома.ПорядокЗаполнения) КАК МаксимальныйНомер + |ИЗ + | Справочник.ТомаХраненияФайлов КАК Тома"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -82,8 +174,63 @@ Возврат 0; Иначе Возврат Число(Выборка.МаксимальныйНомер); - КонецЕсли; + КонецЕсли; КонецЕсли; Возврат 0; -КонецФункции // НайтиМаксимальныйПорядок + +КонецФункции + +&НаКлиенте +Процедура РазрешитьВнешнийРесурсНачало() + + ЗапросыВнешнихРесурсов = Новый Массив; + Если Не ПроверитьЗаполнениеНаСервере(ЗапросыВнешнихРесурсов) Тогда + Возврат; + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения( + "РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ТекущиеПараметрыЗаписи); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ЗапросыВнешнихРесурсов, ЭтотОбъект, ОповещениеОЗакрытии); + +КонецПроцедуры + +&НаСервере +Функция ПроверитьЗаполнениеНаСервере(ЗапросыВнешнихРесурсов) + + Если Не ПроверитьЗаполнение() Тогда + Возврат Ложь; + КонецЕсли; + + ПроверкаЗаполненияУжеВыполнена = Истина; + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + СсылкаНаОбъект = Объект.Ссылка; + Иначе + Если Не ЗначениеЗаполнено(СсылкаНового) Тогда + СсылкаНового = Справочники.ТомаХраненияФайлов.ПолучитьСсылку(); + КонецЕсли; + СсылкаНаОбъект = СсылкаНового; + КонецЕсли; + + ЗапросыВнешнихРесурсов.Добавить( + Справочники.ТомаХраненияФайлов.ЗапросНаИспользованиеВнешнихРесурсовДляТома( + СсылкаНаОбъект, Объект.ПолныйПутьWindows, Объект.ПолныйПутьLinux)); + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура РазрешитьВнешнийРесурсЗавершение(Результат, ПараметрыЗаписи) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ПараметрыЗаписи.Вставить("ВнешниеРесурсыРазрешены"); + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index 4e522c7e0..9875e0137 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/ТомаХраненияФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl index ca3ca9b78..78290d3aa 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает список реквизитов, которые разрешается редактировать // с помощью обработки группового изменения объектов. @@ -15,4 +14,79 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Только для внутреннего использования. +Процедура ДобавитьЗапросыНаИспользованиеВнешнихРесурсовВсехТомов(Запросы) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка КАК Ссылка, + | ТомаХраненияФайлов.ПолныйПутьLinux, + | ТомаХраненияФайлов.ПолныйПутьWindows, + | ТомаХраненияФайлов.ПометкаУдаления КАК ПометкаУдаления + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Запросы.Добавить(ЗапросНаИспользованиеВнешнихРесурсовДляТома( + Выборка.Ссылка, Выборка.ПолныйПутьWindows, Выборка.ПолныйПутьLinux)); + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ДобавитьЗапросыНаОтменуИспользованияВнешнихРесурсовВсехТомов(Запросы) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка КАК Ссылка, + | ТомаХраненияФайлов.ПолныйПутьLinux, + | ТомаХраненияФайлов.ПолныйПутьWindows, + | ТомаХраненияФайлов.ПометкаУдаления КАК ПометкаУдаления + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( + Выборка.Ссылка)); + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +Функция ЗапросНаИспользованиеВнешнихРесурсовДляТома(Том, ПолныйПутьWindows, ПолныйПутьLinux) Экспорт + + Разрешения = Новый Массив; + + Если ЗначениеЗаполнено(ПолныйПутьWindows) Тогда + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + ПолныйПутьWindows, Истина, Истина)); + КонецЕсли; + + Если ЗначениеЗаполнено(ПолныйПутьLinux) Тогда + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + ПолныйПутьLinux, Истина, Истина)); + КонецЕсли; + + Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Том); + +КонецФункции + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 76058f664..1ae76f321 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -1,105 +1,129 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - Если Не НомерПорядкаУникален(ПорядокЗаполнения, Ссылка) Тогда - ТекстОшибки = НСтр("ru = 'Порядок заполнения не уникален - в системе уже есть том с таким порядком'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект", Отказ); - КонецЕсли; + Если Не ДополнительныеСвойства.Свойство("ПропуститьОсновнуюПроверкуЗаполнения") Тогда - Если МаксимальныйРазмер <> 0 Тогда - ТекущийРазмерВБайтах = 0; - Если Не Ссылка.Пустая() Тогда - - ФайловыеФункцииСлужебный.ПриОпределенииРазмераФайловНаТоме( - Ссылка, ТекущийРазмерВБайтах); + Если Не НомерПорядкаУникален(ПорядокЗаполнения, Ссылка) Тогда + ТекстОшибки = НСтр("ru = 'Порядок заполнения не уникален - в системе уже есть том с таким порядком'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект", Отказ); КонецЕсли; - ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); - Если МаксимальныйРазмер < ТекущийРазмер Тогда - ТекстОшибки = НСтр("ru = 'Максимальный размер тома меньше, чем текущий размер'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект", Отказ); + Если МаксимальныйРазмер <> 0 Тогда + ТекущийРазмерВБайтах = 0; + Если Не Ссылка.Пустая() Тогда + + ФайловыеФункцииСлужебный.ПриОпределенииРазмераФайловНаТоме( + Ссылка, ТекущийРазмерВБайтах); + КонецЕсли; + ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); + + Если МаксимальныйРазмер < ТекущийРазмер Тогда + ТекстОшибки = НСтр("ru = 'Максимальный размер тома меньше, чем текущий размер'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект", Отказ); + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(ПолныйПутьWindows) И ПустаяСтрока(ПолныйПутьLinux) Тогда + ТекстОшибки = НСтр("ru = 'Не заполнен полный путь'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект", Отказ); + Возврат; + КонецЕсли; + + Если Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") + И Не ПустаяСтрока(ПолныйПутьWindows) + И ( Лев(ПолныйПутьWindows, 2) <> "\\" + ИЛИ Найти(ПолныйПутьWindows, ":") <> 0 ) Тогда + + ТекстОшибки = НСтр("ru = 'Путь к тому должен быть в формате UNC (\\servername\resource).'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); + Возврат; КонецЕсли; КонецЕсли; - Если ПустаяСтрока(ПолныйПутьWindows) И ПустаяСтрока(ПолныйПутьLinux) Тогда - ТекстОшибки = НСтр("ru = 'Не заполнен полный путь'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект", Отказ); - Возврат; - КонецЕсли; - - Если Не ПустаяСтрока(ПолныйПутьWindows) И (Лев(ПолныйПутьWindows, 2) <> "\\" ИЛИ Найти(ПолныйПутьWindows, ":") <> 0) Тогда - ТекстОшибки = НСтр("ru = 'Путь к тому должен быть в формате UNC (\\servername\resource).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); - Возврат; - КонецЕсли; - - ИмяПоляСПолнымПутем = ""; - - Попытка + Если Не ДополнительныеСвойства.Свойство("ПропуститьПроверкуДоступаКПапке") Тогда + ИмяПоляСПолнымПутем = ""; ПолныйПутьТома = ""; ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 + ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + ПолныйПутьТома = ПолныйПутьWindows; ИмяПоляСПолнымПутем = "ПолныйПутьWindows"; - Иначе + Иначе ПолныйПутьТома = ПолныйПутьLinux; ИмяПоляСПолнымПутем = "ПолныйПутьLinux"; КонецЕсли; ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа\"; - СоздатьКаталог(ИмяКаталогаТестовое); - УдалитьФайлы(ИмяКаталогаТестовое); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Путь к тому некорректен. - |Возможно учетная запись, от лица которой работает - |сервер 1С:Предприятия, не имеет прав доступа к каталогу тома. - | - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - ТекстОшибки, , ИмяПоляСПолнымПутем, "Объект", Отказ); - КонецПопытки; + Попытка + СоздатьКаталог(ИмяКаталогаТестовое); + УдалитьФайлы(ИмяКаталогаТестовое); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + ШаблонОшибки = + НСтр("ru = 'Путь к тому некорректен. + |Возможно не настроены разрешения в профилях безопасности, + |или учетная запись, от лица которой работает + |сервер 1С:Предприятия, не имеет прав доступа к каталогу тома. + | + |%1'"); + Иначе + ШаблонОшибки = + НСтр("ru = 'Путь к тому некорректен. + |Возможно учетная запись, от лица которой работает + |сервер 1С:Предприятия, не имеет прав доступа к каталогу тома. + | + |%1'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ТекстОшибки, , ИмяПоляСПолнымПутем, "Объект", Отказ); + КонецПопытки; + КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает Ложь, если есть том с таким порядком Функция НомерПорядкаУникален(ПорядокЗаполнения, СсылкаНаТом) + Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | КОЛИЧЕСТВО(Тома.ПорядокЗаполнения) КАК Количество - |ИЗ - | Справочник.ТомаХраненияФайлов КАК Тома - |ГДЕ - | Тома.ПорядокЗаполнения = &ПорядокЗаполнения - |И Тома.Ссылка <> &СсылкаНаТом"; + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(Тома.ПорядокЗаполнения) КАК Количество + |ИЗ + | Справочник.ТомаХраненияФайлов КАК Тома + |ГДЕ + | Тома.ПорядокЗаполнения = &ПорядокЗаполнения + | И Тома.Ссылка <> &СсылкаНаТом"; Запрос.Параметры.Вставить("ПорядокЗаполнения", ПорядокЗаполнения); Запрос.Параметры.Вставить("СсылкаНаТом", СсылкаНаТом); - + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - Если Выборка.Количество = 0 Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; + Возврат Выборка.Количество = 0; КонецЕсли; Возврат Истина; -КонецФункции // НайтиМаксимальныйНомерВерсии + +КонецФункции + +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html deleted file mode 100644 index 8afe9c9cd..000000000 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html +++ /dev/null @@ -1,15 +0,0 @@ - -

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

    -
    • Общие -
      • POP3 аутентификация - настройка аутентификации на сервере POP3 (сервер входящих сообщений)
    • Сервер исходящей почты - настройка аутентификации на сервере SMTP -
      • SMTP серверу требуется проверка подлинности - если флаг установлен, серверу SMTP требуется дополнительная проверка подлинности, при этом появляется возможность выбора способа аутентификации: -
        • Аналогично серверу входящей почты - параметры аутентификации (пользователь и пароль) берутся из параметров аутентификации для сервера входящей почты, при этом тип SMTP аутентификации указывается "по умолчанию" -
        • Задать параметры аутентификации - параметры аутентификации задаются вручную: -
          • Пользователь SMTP -
          • Пароль SMTP -
          • Тип аутентификации на SMTP сервере
        • Зайти на сервер входящей почты перед отправкой
    • Дополнительно - настройка портов сервера POP3 и сервера SMTP, времени ожидания успешного завершения операции, а так же число дней по истечению которых сообщение необходимо удалять с сервера -
      • Настройка портов сервера / POP3-Сервер - порт сервера POP3 -
      • Настройка портов сервера / SMTP-Сервер - порт сервера SMTP -
      • Длительность ожидания сервера - определяет время ожидания удачного исполнения операции в секундах -
      • Оставлять копии сообщений на сервере - определяет необходимость оставлять сообщения на сервере -
        • оставлять копии сообщений <дней> - число дней, которое сообщение будет храниться на сервере.
          Сообщения с истекшим сроком хранения удаляются при попытке получить новые сообщения, при этом они не передаются, как часть входящих сообщений.
    \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl deleted file mode 100644 index e2e2a2028..000000000 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl +++ /dev/null @@ -1,316 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Ссылка = Параметры.Ссылка; - - Заполнить_СписокSMTPАутентификация_СП(); - Заполнить_СписокСпособSMTPАутентификации_СП(); - - УчетнаяЗаписьСтруктура = Параметры.УчетнаяЗаписьСтруктура; - - ДлительностьОжиданияСервера = УчетнаяЗаписьСтруктура.ВремяОжидания; - - ОставлятьКопииСообщенийНаСервере = УчетнаяЗаписьСтруктура.ОставлятьКопииСообщенийНаСервере; - ОставлятьКопииСообщенийЧислоДней = УчетнаяЗаписьСтруктура.ПериодХраненияСообщенийНаСервере; - УдалятьСообщенияССервера = ?(ОставлятьКопииСообщенийЧислоДней = 0, Ложь, Истина); - - ПортSMTP = УчетнаяЗаписьСтруктура.ПортSMTP; - ПортPOP3 = УчетнаяЗаписьСтруктура.ПортPOP3; - - СпособPOP3Аутентификации = УчетнаяЗаписьСтруктура.СпособPOP3Аутентификации; - - СпособSMTPАутентификации = УчетнаяЗаписьСтруктура.СпособSMTPАутентификации; - ПользовательSMTP = УчетнаяЗаписьСтруктура.ПользовательSMTP; - ПарольSMTP = УчетнаяЗаписьСтруктура.ПарольSMTP; - - SMTPАутентификация = УчетнаяЗаписьСтруктура.SMTPАутентификация; - - SMTPАутентификацияУстановлена = ?(SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.НеЗадано, Ложь, Истина); - - Элементы.ГруппаАутентификацияSMTP.ТекущаяСтраница = ?(SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами, - Элементы.ГруппаПараметры, - Элементы.ГруппаПустаяСтраница); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьДоступностьЭлементовФормы(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -// Обработчик события "при изменении" элемента формы "SMTPАутентификация". -// Вызывает процедуру обновления группы дополнительных параметров -// аутентификации. -// -&НаКлиенте -Процедура SMTPАутентификацияПриИзменении(Элемент) - - УстановитьДополнительныеПараметрыПоSMTPАутентификации(); - -КонецПроцедуры - -// Обработчик события "при изменении" элемента формы "ТребуетсяДополнительнаяSMTPАутентификация". -// Устанавливает параметры аутентификации "по умолчанию", а так же -// снимает их при снятии флага необходимости дополнительной SMTP аутентификации. -// -&НаКлиенте -Процедура SMTPАутентификацияУстановленаПриИзменении(Элемент) - - Если SMTPАутентификацияУстановлена Тогда - Элементы.SMTPАутентификация.Доступность = Истина; - СпособSMTPАутентификации = ?(СпособSMTPАутентификации = СпособSMTPАутентификации_БезАутентификации(), - СпособSMTPАутентификации_ПоУмолчанию(), - СпособSMTPАутентификации); - SMTPАутентификация = SMTPАутентификация_АналогичноPOP3(); - Иначе - Элементы.SMTPАутентификация.Доступность = Ложь; - SMTPАутентификация = SMTPАутентификация_НеЗадано(); - СпособSMTPАутентификации = СпособSMTPАутентификации_БезАутентификации(); - КонецЕсли; - - УстановитьДополнительныеПараметрыПоSMTPАутентификации(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОставлятьКопииСообщенийНаСервереПриИзменении(Элемент) - - УстановитьДоступностьЭлементовФормы(); - -КонецПроцедуры - -&НаКлиенте -Процедура УдалятьСообщенияССервераПриИзменении(Элемент) - - УстановитьДоступностьЭлементовФормы(); - - Если УдалятьСообщенияССервера Тогда - ОставлятьКопииСообщенийЧислоДней = 1; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура УстановитьПортыПоУмолчаниюВыполнить() - - ПортSMTP = 25; - ПортPOP3 = 110; - -КонецПроцедуры - -// Выполняет проверку корректности значений реквизитов формы и возвращает -// управление в вызывающую среду с дополнительными заполненными параметрами -// учетной записи. -// -&НаКлиенте -Процедура ЗаполнитьДопПараметрыИВернутьсяВыполнить() - - Если SMTPАутентификацияУстановлена - И SMTPАутентификация <> SMTPАутентификация_АналогичноPOP3() - И SMTPАутентификация <> SMTPАутентификация_ЗадаетсяПараметрами() - И SMTPАутентификация <> SMTPАутентификация_POP3ПередSMTP() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Необходимо выбрать способ SMTP аутентификации'"), , - "SMTPАутентификация"); - Возврат; - КонецЕсли; - - Оповестить("УстановкаДополнительныхПараметровУчетнойЗаписи", ЗаполнитьДополнительныеПараметры(), Ссылка); - - Закрыть(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Единая процедура для установки доступности элементов формы в зависимости от условий -// -&НаКлиенте -Процедура УстановитьДоступностьЭлементовФормы() - - Если ОставлятьКопииСообщенийНаСервере Тогда - Элементы.УдалятьСообщенияССервера.Доступность = Истина; - Если УдалятьСообщенияССервера Тогда - Элементы.ОставлятьКопииСообщенийЧислоДней.Доступность = Истина; - Иначе - Элементы.ОставлятьКопииСообщенийЧислоДней.Доступность = Ложь; - КонецЕсли; - Иначе - Элементы.УдалятьСообщенияССервера.Доступность = Ложь; - Элементы.ОставлятьКопииСообщенийЧислоДней.Доступность = Ложь; - КонецЕсли; - - Если SMTPАутентификацияУстановлена Тогда - Элементы.SMTPАутентификация.Доступность = Истина; - Иначе - Элементы.SMTPАутентификация.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - -// Функция, формирующая параметры настроек перед передачей их в вызывающую среду. -// -// Возвращаемое значение: -// структура -// ключ "ПортSMTP", значение - число, порт SMTP -// ключ "ПортPOP3", значение - число, порт POP3 -// ключ "ОставлятьКопииСообщенийНаСервере" - булево - признак того, что необходимо оставлять на сервере сообщения -// ключ "ПериодХраненияСообщенийНаСервере" - число - число дней, которое сообщение должно храниться на сервере -// ключ "ДлительностьОжиданияСервера", значение - число секунд ожидания успешного выполнения операции на сервере -// ключ "SMTPАутентификация", Перечисление.SMTPАутентификация -// ключ "ПользовательSMTP", значение - строка, имя пользователя SMTP аутентификации -// ключ "ПарольSMTP", значение - строка, пароль SMTP аутентификации -// ключ "СпособSMTPАутентификации"*, Перечисление.СпособSMTPАутентификации -// -// ключ "СпособPOP3Аутентификации" - Перечисление.СпособPOP3Аутентификации -// -// *- при аутентификации "АналогичноPOP3" тип аутентификации не устанавливается, -// тем не менее происходит его копирование -// -// Все поля, при любых параметрах аутентификации заполняются. Таким образом в вызывающей -// среде остается только взять их как есть без дополнительной обработки. -// -&НаКлиенте -Функция ЗаполнитьДополнительныеПараметры() - - Результат = Новый Структура; - - Результат.Вставить("ПортSMTP", ПортSMTP); - Результат.Вставить("ПортPOP3", ПортPOP3); - - Результат.Вставить("ОставлятьКопииСообщенийНаСервере", ОставлятьКопииСообщенийНаСервере); - - Если УдалятьСообщенияССервера Тогда - ОставлятьКопииСообщенийЧислоДней = ОставлятьКопииСообщенийЧислоДней; - Иначе - ОставлятьКопииСообщенийЧислоДней = 0; - КонецЕсли; - - Результат.Вставить("ПериодХраненияСообщенийНаСервере", ОставлятьКопииСообщенийЧислоДней); - - Результат.Вставить("ДлительностьОжиданияСервера", ДлительностьОжиданияСервера); - - Если SMTPАутентификацияУстановлена Тогда - Результат.Вставить("SMTPАутентификация", SMTPАутентификация); - Если SMTPАутентификация = (SMTPАутентификация_ЗадаетсяПараметрами()) Тогда - Результат.Вставить("ПользовательSMTP", ПользовательSMTP); - Результат.Вставить("ПарольSMTP", ПарольSMTP); - Результат.Вставить("СпособSMTPАутентификации", СпособSMTPАутентификации); - Иначе - Результат.Вставить("ПользовательSMTP", ""); - Результат.Вставить("ПарольSMTP", ""); - Результат.Вставить("СпособSMTPАутентификации", СпособSMTPАутентификации_БезАутентификации()); - КонецЕсли; - Иначе - Результат.Вставить("SMTPАутентификация", SMTPАутентификация_НеЗадано()); - Результат.Вставить("ПользовательSMTP", ""); - Результат.Вставить("ПарольSMTP", ""); - Результат.Вставить("СпособSMTPАутентификации", СпособSMTPАутентификации_БезАутентификации()); - КонецЕсли; - - Результат.Вставить("СпособPOP3Аутентификации", СпособPOP3Аутентификации); - - Возврат Результат; - -КонецФункции - -// Процедура устанавливает видимость параметров аутентификации -// для выбора способа аутентификации "ЗаданыПараметры". -// -&НаКлиенте -Процедура УстановитьДополнительныеПараметрыПоSMTPАутентификации() - - Элементы.ГруппаАутентификацияSMTP.ТекущаяСтраница = - ?(SMTPАутентификация = SMTPАутентификация_ЗадаетсяПараметрами(), - Элементы.ГруппаПараметры, - Элементы.ГруппаПустаяСтраница); - -КонецПроцедуры - -&НаСервере -Функция Заполнить_СписокSMTPАутентификация_СП() - - СписокSMTPАутентификация_СП.Добавить(Перечисления.ВариантыSMTPАутентификации.POP3ПередSMTP, - "POP3ПередSMTP"); - СписокSMTPАутентификация_СП.Добавить(Перечисления.ВариантыSMTPАутентификации.АналогичноPOP3, - "АналогичноPOP3"); - СписокSMTPАутентификация_СП.Добавить(Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами, - "ЗадаетсяПараметрами"); - СписокSMTPАутентификация_СП.Добавить(Перечисления.ВариантыSMTPАутентификации.НеЗадано, - "НеЗадано"); - -КонецФункции - -&НаКлиенте -Функция SMTPАутентификация_POP3ПередSMTP() - - Возврат СписокSMTPАутентификация_СП[0].Значение; - -КонецФункции - -&НаКлиенте -Функция SMTPАутентификация_АналогичноPOP3() - - Возврат СписокSMTPАутентификация_СП[1].Значение; - -КонецФункции - -&НаКлиенте -Функция SMTPАутентификация_ЗадаетсяПараметрами() - - Возврат СписокSMTPАутентификация_СП[2].Значение; - -КонецФункции - -&НаКлиенте -Функция SMTPАутентификация_НеЗадано() - - Возврат СписокSMTPАутентификация_СП[3].Значение; - -КонецФункции - -&НаСервере -Функция Заполнить_СписокСпособSMTPАутентификации_СП() - - СписокСпособSMTPАутентификации_СП.Добавить(Перечисления.СпособыSMTPАутентификации.CramMD5, - "CramMD5"); - СписокСпособSMTPАутентификации_СП.Добавить(Перечисления.СпособыSMTPАутентификации.Login, - "Login"); - СписокСпособSMTPАутентификации_СП.Добавить(Перечисления.СпособыSMTPАутентификации.Plain, - "Plain"); - СписокСпособSMTPАутентификации_СП.Добавить(Перечисления.СпособыSMTPАутентификации.БезАутентификации, - "БезАутентификации"); - СписокСпособSMTPАутентификации_СП.Добавить(Перечисления.СпособыSMTPАутентификации.ПоУмолчанию, - "ПоУмолчанию"); - -КонецФункции - -&НаКлиенте -Функция СпособSMTPАутентификации_БезАутентификации() - - Возврат СписокСпособSMTPАутентификации_СП[3].Значение; - -КонецФункции - -&НаКлиенте -Функция СпособSMTPАутентификации_ПоУмолчанию() - - Возврат СписокСпособSMTPАутентификации_СП[4].Значение; - -КонецФункции diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form new file mode 100644 index 000000000..e287997f4 --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -0,0 +1,3710 @@ + + + + Страницы + 1 + + НастройкаУчетнойЗаписи + 32 + + НастройкаУчетнойЗаписиЗаголовок + 207 + + <key>ru</key> + <value>Создание учетной записи электронной почты</value> + + true + true + + true + + + НастройкаУчетнойЗаписиЗаголовокРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + НастройкаУчетнойЗаписиЗаголовокКонтекстноеМеню + 208 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + НадписьУчетнаяЗаписьНеНастроена + 5 + + <key>ru</key> + <value>Для отправки писем необходимо настроить +учетную запись электронной почты. </value> + + true + + true + + + НадписьУчетнаяЗаписьНеНастроенаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + НадписьУчетнаяЗаписьНеНастроенаКонтекстноеМеню + 6 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + НеУдалосьПодключитьсяКартинкаИНадпись + 158 + + КартинкаПредупреждение + 160 + + <key>ru</key> + <value>Картинка вопрос</value> + + true + true + + true + + + КартинкаПредупреждениеРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню + 161 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + НадписьНеУдалосьПодключиться + 163 + + <key>ru</key> + <value>Не удалось подключиться к почтовому серверу: +Cann't connect to example.com, 110: Refused</value> + + true + + true + + + НадписьНеУдалосьПодключитьсяРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + НадписьНеУдалосьПодключитьсяКонтекстноеМеню + 164 + true + + Label + true + true + true + + Left + Top + + + + СообщенияОбОшибках + 238 + true + true + + true + + + СообщенияОбОшибках + + None + + СообщенияОбОшибкахРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + СообщенияОбОшибкахКонтекстноеМеню + 239 + true + + InputField + true + Enter + true + Left + true + + true + 2 + true + false + true + true + true + true + true + + Style.FormBackColor + + + Style.FormBackColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + Учетная запись не настроена картинка и надпись + + + НеУдалосьПодключитьсяКартинкаИНадписьРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Аутентификация + 200 + + АдресЭлектроннойПочты + 44 + true + true + + true + + + АдресЭлектроннойПочты + + 1 + + OnChange + АдресЭлектроннойПочтыПриИзменении + + + АдресЭлектроннойПочтыРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + АдресЭлектроннойПочтыКонтекстноеМеню + 45 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + Normal + + + + Пароль + 47 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольДляПолученияПисем + + 1 + + OnChange + ПарольПриИзменении + + + ПарольРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 48 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Аутентификация</value> + + + ru + Аутентификация + + + АутентификацияРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ИспользоватьУчетнуюЗапись + 189 + + ИспользоватьДляОтправки + 191 + true + true + + true + + + ИспользоватьДляОтправки + + Right + + ИспользоватьДляОтправкиРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + ИспользоватьДляОтправкиКонтекстноеМеню + 192 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьДляПолучения + 194 + true + true + + true + + + ИспользоватьДляПолучения + + Right + + ИспользоватьДляПолученияРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ИспользоватьДляПолученияКонтекстноеМеню + 195 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Использовать учетную запись</value> + + + ru + Использовать учетную запись + + + ИспользоватьУчетнуюЗаписьРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ИмяОтправителя + 202 + + ИмяОтправителяПисем + 151 + + <key>ru</key> + <value>Имя отправителя</value> + + true + true + + true + + + ИмяОтправителяПисем + + ShowBottom + + OnChange + ИмяОтправителяПисемПриИзменении + + + ИмяОтправителяПисемРасширеннаяПодсказка + 153 + + <key>ru</key> + <value>Например, Ваше имя или название организации.</value> + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ИмяОтправителяПисемКонтекстноеМеню + 152 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + + + ПояснениеКИмени + 204 + + <key>ru</key> + <value>Например, Ваше имя или название организации.</value> + + true + + true + + + ПояснениеКИмениРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + ПояснениеКИмениКонтекстноеМеню + 205 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Имя отправителя</value> + + + ru + Имя отправителя + + + ИмяОтправителяРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СпособНастройкиУчетнойЗаписи + 154 + + СпособНастройки + 50 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + СпособНастройки + + None + + OnChange + СпособНастройкиПриИзменении + + + СпособНастройкиРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + СпособНастройкиКонтекстноеМеню + 51 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Определить параметры подключения автоматически (рекомендуется) + + + Автоматически + + + + + ru + Настроить параметры подключения вручную + + + Вручную + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Способ настройки учетной записи</value> + + + ru + Способ настройки учетной записи + + + СпособНастройкиУчетнойЗаписиРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка учетной записи</value> + + + ru + Настройка учетной записи + + + НастройкаУчетнойЗаписиРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкаСервераИсходящейПочты + 38 + + НастройкаСервераИсходящейПочтыЗаголовок + 210 + + <key>ru</key> + <value>Настройка сервера исходящей почты</value> + + true + true + + true + + + НастройкаСервераИсходящейПочтыЗаголовокРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + НастройкаСервераИсходящейПочтыЗаголовокКонтекстноеМеню + 211 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + АвторизацияПриОтправкеПисем + 78 + + ИмяПользователяДляОтправкиПисем + 80 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + ИмяПользователяДляОтправкиПисем + + + ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ИмяПользователяДляОтправкиПисемКонтекстноеМеню + 81 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + Normal + + + + ПарольДляОтправкиПисем + 83 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольДляОтправкиПисем + + + ПарольДляОтправкиПисемРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ПарольДляОтправкиПисемКонтекстноеМеню + 84 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + true + Normal + + + + ИспользоватьБезопасныйВходНаСерверИсходящейПочты + 86 + + <key>ru</key> + <value>Безопасная проверка пароля</value> + + true + true + + true + + + ИспользоватьБезопасныйВходНаСерверИсходящейПочты + + Right + + ИспользоватьБезопасныйВходНаСерверИсходящейПочтыРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ИспользоватьБезопасныйВходНаСерверИсходящейПочтыКонтекстноеМеню + 87 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Авторизация при отправке писем</value> + + + ru + Авторизация при отправке писем + + + АвторизацияПриОтправкеПисемРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + НастройкиСервераИсходящейПочты + 89 + + СерверИсходящейПочты + 91 + + <key>ru</key> + <value>Сервер</value> + + true + true + + true + + + СерверИсходящейПочты + + + СерверИсходящейПочтыРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + СерверИсходящейПочтыКонтекстноеМеню + 92 + true + + InputField + true + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + true + Normal + + + + ПортСервераИсходящейПочты + 94 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортСервераИсходящейПочты + + + ПортСервераИсходящейПочтыРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + ПортСервераИсходящейПочтыКонтекстноеМеню + 95 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + + + ru + Настройки сервера входящей почты + + + НастройкиСервераИсходящейПочтыРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + 97 + + <key>ru</key> + <value>Использовать безопасное соединение (SSL)</value> + + true + true + + true + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + + Right + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыКонтекстноеМеню + 98 + true + + CheckBoxField + Enter + true + Left + true + + + + ДлительностьОжиданияИсходящейПочты + 179 + + ДлительностьОжиданияСервераПриОтправкеПисем + 181 + + <key>ru</key> + <value>Длительность ожидания сервера</value> + + true + true + + true + + + ДлительностьОжиданияСервераПриОтправкеПисем + + + ДлительностьОжиданияСервераПриОтправкеПисемРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ДлительностьОжиданияСервераПриОтправкеПисемКонтекстноеМеню + 182 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + + 5 + + Normal + + + + НадписьСекунд1 + 184 + + <key>ru</key> + <value>сек.</value> + + true + true + + true + + + НадписьСекунд1РасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + НадписьСекунд1КонтекстноеМеню + 185 + true + + Label + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Длительность ожидания</value> + + + ru + Длительность ожидания + + + ДлительностьОжиданияИсходящейПочтыРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа1 + 187 + + ТребуетсяВходНаСерверПередОтправкой + 75 + + <key>ru</key> + <value>Требуется авторизация на сервере входящей почты перед отправкой</value> + + true + true + + true + + + ТребуетсяВходНаСерверПередОтправкой + + Right + + ТребуетсяВходНаСерверПередОтправкойРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + ТребуетсяВходНаСерверПередОтправкойКонтекстноеМеню + 76 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 188 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка сервера исходящей почты</value> + + + ru + Настройка сервера исходящей почты + + + НастройкаСервераИсходящейПочтыРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкаСервераВходящейПочты + 40 + + НастройкаСервераВходящейПочтыЗаголовок + 213 + + <key>ru</key> + <value>Настройка сервера входящей почты</value> + + true + true + + true + + + НастройкаСервераВходящейПочтыЗаголовокРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + + НастройкаСервераВходящейПочтыЗаголовокКонтекстноеМеню + 214 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + ИмяПользователяДляПолученияПисем + 100 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + ИмяПользователяДляПолученияПисем + + + ИмяПользователяДляПолученияПисемРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ИмяПользователяДляПолученияПисемКонтекстноеМеню + 101 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + Normal + + + + ПарольДляПолученияПисем + 103 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольДляПолученияПисем + + + ПарольДляПолученияПисемРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ПарольДляПолученияПисемКонтекстноеМеню + 104 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + true + Normal + + + + ИспользоватьБезопасныйВходНаСерверВходящейПочты + 106 + + <key>ru</key> + <value>Безопасная проверка пароля</value> + + true + true + + true + + + ИспользоватьБезопасныйВходНаСерверВходящейПочты + + Right + + ИспользоватьБезопасныйВходНаСерверВходящейПочтыРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + + ИспользоватьБезопасныйВходНаСерверВходящейПочтыКонтекстноеМеню + 107 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкиСервераВходящейПочты + 109 + + СерверВходящейПочты + 111 + + <key>ru</key> + <value>Сервер</value> + + true + true + + true + + + СерверВходящейПочты + + Left + + СерверВходящейПочтыРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + СерверВходящейПочтыКонтекстноеМеню + 112 + true + + InputField + true + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + true + Normal + + + + ПротоколИПортСервераВходящейПочты + 114 + + Протокол + 116 + + <key>ru</key> + <value>Протокол</value> + + true + true + + true + + + Протокол + + + ПротоколРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + + ПротоколКонтекстноеМеню + 117 + true + + InputField + true + Enter + true + Left + true + + 8 + true + true + true + true + true + true + true + + + IMAP + + + + + POP + + + Normal + + + + ПортВходящейПочты + 119 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортСервераВходящейПочты + + + ПортВходящейПочтыРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ПортВходящейПочтыКонтекстноеМеню + 120 + true + + InputField + true + Enter + true + Left + true + + 8 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Протокол и порт сервера входящей почты</value> + + + ru + Протокол и порт сервера входящей почты + + + ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТипСоединенияИДлительностьОжидания + 122 + + ИспользоватьЗащищенноеСоединениеДляВходящейПочты + 124 + + <key>ru</key> + <value>Защищенное соединение (SSL)</value> + + true + true + + true + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочты + + Right + + ИспользоватьЗащищенноеСоединениеДляВходящейПочтыРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочтыКонтекстноеМеню + 125 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Тип соединения и длительность ожидания</value> + + + ru + Тип соединения и длительность ожидания + + + ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + + + ru + Настройки сервера входящей почты + + + НастройкиСервераВходящейПочтыРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОставлятьПисьмаНаСервере + 135 + + ОставлятьКопииПисемНаСервере + 137 + + <key>ru</key> + <value>Оставлять копии писем на сервере</value> + + true + true + + true + + + ОставлятьКопииПисемНаСервере + + Right + + OnChange + ОставлятьКопииПисемНаСервереПриИзменении + + + ОставлятьКопииПисемНаСервереРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + ОставлятьКопииПисемНаСервереКонтекстноеМеню + 138 + true + + CheckBoxField + Enter + true + Left + true + + + + УдалятьПисьмаССервера + 140 + + УдалятьПисьмаССервераЧерез + 142 + + <key>ru</key> + <value>Удалять письма с сервера через</value> + + true + true + + true + + + УдалятьПисьмаССервераЧерез + + + УдалятьПисьмаССервераЧерезРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + УдалятьПисьмаССервераЧерезКонтекстноеМеню + 143 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + + 1 + + Normal + + + + НадписьДней + 145 + + <key>ru</key> + <value>дней</value> + + true + true + + true + + + НадписьДнейРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + НадписьДнейКонтекстноеМеню + 146 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Удалять письма с сервера</value> + + + ru + Удалять письма с сервера + + + УдалятьПисьмаССервераРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оставлять письма на сервере</value> + + + ru + Оставлять письма на сервере + + + ОставлятьПисьмаНаСервереРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка сервера входящей почты</value> + + + ru + Страница настройка сервера исходящей почты + + + НастройкаСервераВходящейПочтыРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ДополнительныеНастройки + 42 + + ДополнительныеНастройкиЗаголовок + 229 + + <key>ru</key> + <value>Дополнительные настройки</value> + + true + true + + true + + + ДополнительныеНастройкиЗаголовокРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + + ДополнительныеНастройкиЗаголовокКонтекстноеМеню + 230 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + НазваниеУчетнойЗаписи + 148 + true + true + + true + + + НазваниеУчетнойЗаписи + + + НазваниеУчетнойЗаписиРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + НазваниеУчетнойЗаписиКонтекстноеМеню + 149 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + true + true + true + true + true + Normal + + + + ДлительностьОжидания + 127 + + ДлительностьОжиданияСервераПриПолученииПисем + 129 + + <key>ru</key> + <value>Длительность ожидания сервера</value> + + true + true + + true + + + ДлительностьОжиданияСервера + + + ДлительностьОжиданияСервераПриПолученииПисемРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + ДлительностьОжиданияСервераПриПолученииПисемКонтекстноеМеню + 130 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + + 5 + + Normal + + + + НадписьСекунд + 132 + + <key>ru</key> + <value>сек.</value> + + true + true + + true + + + НадписьСекундРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + НадписьСекундКонтекстноеМеню + 133 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Длительность ожидания</value> + + + ru + Длительность ожидания + + + ДлительностьОжиданияРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные настройки</value> + + + ru + Страница настройка сервера исходящей почты + + + ДополнительныеНастройкиРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПроверкаНастроекУчетнойЗаписи + 34 + + ПроверкаНастроекУчетнойЗаписиЗаголовок + 232 + + <key>ru</key> + <value>Проверка настроек учетной записи</value> + + true + true + + true + + + ПроверкаНастроекУчетнойЗаписиЗаголовокРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + + ПроверкаНастроекУчетнойЗаписиЗаголовокКонтекстноеМеню + 233 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + ПроверкаНастроекУчетнойЗаписиКартинкаИНадпись + 53 + + КартинкаДлительнаяОперация + 55 + true + true + + true + + + КартинкаДлительнаяОперацияРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + КартинкаДлительнаяОперацияКонтекстноеМеню + 56 + true + + 7 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + НадписьПроверкаНастроекУчетнойЗаписи + 58 + + <key>ru</key> + <value>Выполняется проверка настроек учетной записи. +Это может занять несколько минут.</value> + + true + true + + true + + + НадписьПроверкаНастроекУчетнойЗаписиРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + НадписьПроверкаНастроекУчетнойЗаписиКонтекстноеМеню + 59 + true + + Label + true + 3 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Проверка настроек учетной записи картинка и надпись</value> + + + ru + Учетная запись не настроена картинка и надпись + + + ПроверкаНастроекУчетнойЗаписиКартинкаИНадписьРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка настроек учетной записи</value> + + + ru + Проверка настроек учетной записи + + + ПроверкаНастроекУчетнойЗаписиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + УчетнаяЗаписьУспешноНастроена + 36 + + УчетнаяЗаписьУспешноНастроенаЗаголовок + 235 + + <key>ru</key> + <value>Учетная запись успешно настроена</value> + + true + true + + true + + + УчетнаяЗаписьУспешноНастроенаЗаголовокРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + УчетнаяЗаписьУспешноНастроенаЗаголовокКонтекстноеМеню + 236 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + УчетнаяЗаписьУспешноНастроенаКартинкаИНадпись + 64 + + КартинкаУспешно + 66 + + <key>ru</key> + <value>Картинка успешно</value> + + true + true + + true + + + КартинкаУспешноРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + КартинкаУспешноКонтекстноеМеню + 67 + true + + 4 + true + 2 + true + + + CommonPicture.Успешно32 + + + + + НадписьУчетнаяЗаписьУспешноНастроена + 69 + + <key>ru</key> + <value>Настройка параметров учетной записи +vasyapupkin@example.com завершена.</value> + + true + true + + true + + + НадписьУчетнаяЗаписьУспешноНастроенаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + НадписьУчетнаяЗаписьУспешноНастроенаКонтекстноеМеню + 70 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Учетная запись успешно настроена картинка и надпись</value> + + + ru + Учетная запись не настроена картинка и надпись + + + УчетнаяЗаписьУспешноНастроенаКартинкаИНадписьРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Учетная запись успешно настроена</value> + + + ru + Учетная запись успешно настроена + + + УчетнаяЗаписьУспешноНастроенаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + + + СтраницыРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + Отступ + 197 + + <key>ru</key> + <value> </value> + + true + true + + true + + + ОтступРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 198 + true + + Label + true + true + true + + Left + + + + КоманднаяПанель + 28 + + КоманднаяПанельЛеваяЧасть + 11 + + КнопкаНазад + 20 + true + true + + true + + + КнопкаНазадРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменитьФорму + 171 + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель левая часть</value> + + + ru + Командная панель левая часть + + + КоманднаяПанельЛеваяЧастьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + CommandBar + + Left + + + + Заглушка + 168 + + <key>ru</key> + <value> </value> + + true + true + + true + + + ЗаглушкаРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + ЗаглушкаКонтекстноеМеню + 169 + true + + Label + true + true + + Left + + + + КоманднаяПанельПраваяЧасть + 30 + + КнопкаПерейтиКНастройкам + 156 + + <key>ru</key> + <value>Настроить параметры подключения вручную</value> + + true + true + + true + + + КнопкаПерейтиКНастройкамРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Form.Command.ПерейтиКНастройкам + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаДалее + 22 + true + true + + true + + + КнопкаДалееРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.Далее + Auto + true + true + true + UserCmds + Auto + + + КнопкаОтмена + 18 + true + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель правая часть</value> + + + ru + Командная панель правая часть + + + КоманднаяПанельПраваяЧастьРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Close + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 50 + LockOwner + true + true + Vertical + true + true + true + auto + true + + АдресЭлектроннойПочты + + <key>ru</key> + <value>Адрес электронной почты</value> + + 1 + + String + + 255 + + + + true + + + true + + + + СпособНастройки + + <key>ru</key> + <value>Способ настройки</value> + + 3 + + String + + 13 + + + + true + + + true + + + + ТребуетсяВходНаСерверПередОтправкой + + <key>ru</key> + <value>Требуется вход на сервер перед отправкой</value> + + 4 + + Boolean + + + true + + + true + + + + ИмяПользователяДляОтправкиПисем + + <key>ru</key> + <value>Имя пользователя для отправки писем</value> + + 5 + + String + + 100 + + + + true + + + true + + + + ПарольДляОтправкиПисем + + <key>ru</key> + <value>Пароль для отправки писем</value> + + 6 + + String + + 100 + + + + true + + + true + + + + ИспользоватьБезопасныйВходНаСерверИсходящейПочты + + <key>ru</key> + <value>Использовать безопасный вход на сервер исходящей почты</value> + + 7 + + Boolean + + + true + + + true + + + + СерверИсходящейПочты + + <key>ru</key> + <value>Сервер исходящей почты</value> + + 8 + + String + + 255 + + + + true + + + true + + + + ПортСервераИсходящейПочты + + <key>ru</key> + <value>Порт сервера исходящей почты</value> + + 9 + + Number + + 5 + true + + + + true + + + true + + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + + <key>ru</key> + <value>Использовать защищенное соединение для исходящей почты</value> + + 10 + + Boolean + + + true + + + true + + + + ИмяПользователяДляПолученияПисем + + <key>ru</key> + <value>Имя пользователя для получения писем</value> + + 11 + + String + + 100 + + + + true + + + true + + + + ПарольДляПолученияПисем + + <key>ru</key> + <value>Пароль для получения писем</value> + + 12 + + String + + 100 + + + + true + + + true + + + + ИспользоватьБезопасныйВходНаСерверВходящейПочты + + <key>ru</key> + <value>Использовать безопасный вход на сервер входящей почты</value> + + 13 + + Boolean + + + true + + + true + + + + СерверВходящейПочты + + <key>ru</key> + <value>Сервер входящей почты</value> + + 14 + + String + + 255 + + + + true + + + true + + + + Протокол + + <key>ru</key> + <value>Протокол</value> + + 15 + + String + + 4 + + + + true + + + true + + + + ПортСервераВходящейПочты + + <key>ru</key> + <value>Порт сервера входящей почты</value> + + 16 + + Number + + 5 + true + + + + true + + + true + + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочты + + <key>ru</key> + <value>Использовать защищенное соединение для входящей почты</value> + + 17 + + Boolean + + + true + + + true + + + + ДлительностьОжиданияСервера + + <key>ru</key> + <value>Длительность ожидания сервера</value> + + 18 + + Number + + 3 + true + + + + true + + + true + + + + ОставлятьКопииПисемНаСервере + + <key>ru</key> + <value>Оставлять копии писем на сервере</value> + + 19 + + Boolean + + + true + + + true + + + + УдалятьПисьмаССервераЧерез + + <key>ru</key> + <value>Удалять письма с сервера через</value> + + 20 + + Number + + 3 + + + + true + + + true + + + + НазваниеУчетнойЗаписи + + <key>ru</key> + <value>Наименование учетной записи</value> + + 21 + + String + + 50 + + + + true + + + true + + + + ИмяОтправителяПисем + + <key>ru</key> + <value>Имя отправителя писем</value> + + 22 + + String + + 100 + + + + true + + + true + + + + ПроверкаЗавершиласьСОшибками + + <key>ru</key> + <value>Проверка завершилась с ошибками</value> + + 23 + + Boolean + + + true + + + true + + + + КонтекстныйРежим + + <key>ru</key> + <value>Контекстный режим</value> + + 2 + + Boolean + + + true + + + true + + + + ОткрытьКарточкуУчетнойЗаписи + + <key>ru</key> + <value>Открыть карточку учетной записи</value> + + 24 + + Boolean + + + true + + + true + + + + ДлительностьОжиданияСервераПриОтправкеПисем + + <key>ru</key> + <value>Длительность ожидания сервера при отправке писем</value> + + 26 + + Number + + 3 + true + + + + true + + + true + + + + НастройкиЗаполнены + + <key>ru</key> + <value>Настройки заполнены</value> + + 27 + + Boolean + + + true + + + true + + + + ИспользоватьДляОтправки + + <key>ru</key> + <value>Для отправки почты</value> + + 28 + + Boolean + + + true + + + true + + + + ИспользоватьДляПолучения + + <key>ru</key> + <value>Для получения почты</value> + + 29 + + Boolean + + + true + + + true + + + + УчетнаяЗаписьСсылка + + <key>ru</key> + <value>Учетная запись ссылка</value> + + 30 + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + true + + + true + + + + СообщенияОбОшибках + + <key>ru</key> + <value>Сообщения об ошибках</value> + + 31 + + String + + + + true + + + true + + + + ТребуетсяПодтверждениеЗакрытияФормы + + <key>ru</key> + <value>Требуется подтверждение закрытия формы</value> + + 32 + + Boolean + + + true + + + true + + + + СсылкаНовойУчетнойЗаписи + + <key>ru</key> + <value>Ссылка новой учетной записи</value> + + 25 + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + true + + + true + + + + ИспользуютсяПрофилиБезопасности + + <key>ru</key> + <value>Используются профили безопасности</value> + + 33 + + Boolean + + + true + + + true + + + + Назад + + <key>ru</key> + <value>< Назад</value> + + 1 + + true + + + + Назад + + + Auto + Auto + + + Далее + + <key>ru</key> + <value>Далее ></value> + + 2 + + true + + + + Далее + + + Auto + Auto + + + ПерейтиКНастройкам + + <key>ru</key> + <value>Перейти к настройкам</value> + + 3 + + true + + + + ПерейтиКНастройкам + + + Auto + Auto + + + КонтекстныйРежим + + Boolean + + + + + + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl new file mode 100644 index 000000000..a8f0c8928 --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -0,0 +1,912 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Элементы.КнопкаПерейтиКНастройкам.Видимость = Ложь; + ИспользуютсяПрофилиБезопасности = ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности"); + Элементы.СпособНастройки.Видимость = Не ИспользуютсяПрофилиБезопасности; + Если ИспользуютсяПрофилиБезопасности Тогда + СпособНастройки = "Вручную"; + Иначе + СпособНастройки = "Автоматически"; + КонецЕсли; + + КонтекстныйРежим = Параметры.КонтекстныйРежим; + Элементы.ИспользоватьУчетнуюЗапись.Видимость = Не КонтекстныйРежим; + Элементы.НастройкаУчетнойЗаписиЗаголовок.Заголовок = ?(КонтекстныйРежим, + НСтр("ru = 'Для отправки писем необходимо настроить учетную запись электронной почты'"), + НСтр("ru = 'Введите параметры учетной записи'")); + + Если Не КонтекстныйРежим Тогда + Заголовок = НСтр("ru = 'Создание учетной записи электронной почты'"); + Иначе + Заголовок = НСтр("ru = 'Настройка учетной записи электронной почты'"); + КонецЕсли; + + ИспользоватьДляПолучения = Не КонтекстныйРежим; + ИспользоватьДляОтправки = Истина; + Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи; + + КлючСохраненияПоложенияОкна = ?(КонтекстныйРежим, "КонтекстныйРежим", "НеконтекстныйРежим"); + + СсылкаНовойУчетнойЗаписи = Справочники.УчетныеЗаписиЭлектроннойПочты.ПолучитьСсылку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + НастроитьЭлементыТекущейСтраницы() +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если ТребуетсяПодтверждениеЗакрытияФормы Тогда + Отказ = Истина; + ПодключитьОбработчикОжидания("ПоказатьВопросПередЗакрытиемФормы", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПарольПриИзменении(Элемент) + ПарольДляОтправкиПисем = ПарольДляПолученияПисем; +КонецПроцедуры + +&НаКлиенте +Процедура ОставлятьКопииПисемНаСервереПриИзменении(Элемент) + ОбновитьДоступностьНастройкиДнейДоУдаления(); +КонецПроцедуры + +&НаКлиенте +Процедура АдресЭлектроннойПочтыПриИзменении(Элемент) + НастройкиЗаполнены = Ложь; + ТребуетсяПодтверждениеЗакрытияФормы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ИмяОтправителяПисемПриИзменении(Элемент) + ТребуетсяПодтверждениеЗакрытияФормы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура СпособНастройкиПриИзменении(Элемент) + НастроитьЭлементыТекущейСтраницы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыИмяТаблицыФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте + +Процедура Далее(Команда) + + ПерейтиНаСледующуюСтраницу(); + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + ПредыдущаяСтраница = Неопределено; + Если ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда + ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; + ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда + Если ИспользоватьДляОтправки Тогда + ПредыдущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; + Иначе + ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда + Если ИспользоватьДляПолучения Или ТребуетсяВходНаСерверПередОтправкой Тогда + ПредыдущаяСтраница = Элементы.НастройкаСервераВходящейПочты; + ИначеЕсли ИспользоватьДляОтправки Тогда + ПредыдущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; + Иначе + ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Тогда + ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; + КонецЕсли; + + Если ПредыдущаяСтраница <> Неопределено Тогда + Элементы.Страницы.ТекущаяСтраница = ПредыдущаяСтраница; + КонецЕсли; + + НастроитьЭлементыТекущейСтраницы() +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПоказатьВопросПередЗакрытиемФормы() + ТекстВопроса = НСтр("ru = 'Введенные данные не записаны. Закрыть форму?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ЗакрытиеФормыПодтверждено", ЭтотОбъект); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Закрыть", НСтр("ru = 'Закрыть'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Не закрывать'")); + ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Введенные данные не записаны. Закрыть форму?'"), Кнопки,, + КодВозвратаДиалога.Отмена, НСтр("ru = 'Настройка учетной записи'")); +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытиеФормыПодтверждено(РезультатВопроса, ДополнительныеПараметры = Неопределено) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + ТребуетсяПодтверждениеЗакрытияФормы = Ложь; + Закрыть(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНаСледующуюСтраницу() + + Отказ = Ложь; + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + СледующаяСтраница = Неопределено; + Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда + ПроверитьЗаполнениеНаСтраницеНастройкаУчетнойЗаписи(Отказ); + Если Не Отказ И Не НастройкиЗаполнены Тогда + ЗаполнитьНастройкиУчетнойЗаписи(); + КонецЕсли; + Если СпособНастройки = "Автоматически" Или ПроверкаЗавершиласьСОшибками Тогда + СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи; + Иначе + Если ИспользоватьДляОтправки Тогда + СледующаяСтраница = Элементы.НастройкаСервераИсходящейПочты; + ИначеЕсли ИспользоватьДляПолучения Тогда + СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; + Иначе + СледующаяСтраница = Элементы.ДополнительныеНастройки; + КонецЕсли; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда + Если Не КонтекстныйРежим Или ТребуетсяВходНаСерверПередОтправкой Тогда + СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; + Иначе + СледующаяСтраница = Элементы.ДополнительныеНастройки; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда + СледующаяСтраница = Элементы.ДополнительныеНастройки; + ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда + СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи; + ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Тогда + Если ПроверкаЗавершиласьСОшибками Тогда + СледующаяСтраница = Элементы.НастройкаУчетнойЗаписи; + Иначе + СледующаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена; + КонецЕсли; + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если СледующаяСтраница = Неопределено Тогда + Закрыть(Истина); + Иначе + Элементы.Страницы.ТекущаяСтраница = СледующаяСтраница; + НастроитьЭлементыТекущейСтраницы(); + КонецЕсли; + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Тогда + Если СпособНастройки = "Автоматически" Тогда + ПодключитьОбработчикОжидания("НастроитьПараметрыПодключенияАвтоматически", 0.1, Истина); + Иначе + ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуНастроек() + Запрос = СоздатьЗапросНаИспользованиеВнешнихРесурсов(); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ВыполнитьПроверкуНастроекЗапросНаРазрешенияВыполнен", ЭтотОбъект); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос), ЭтотОбъект, ОповещениеОЗакрытии); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуНастроекЗапросНаРазрешенияВыполнен(РезультатЗапроса, ДополнительныеПараметры) Экспорт + Если Не РезультатЗапроса = КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + + ПроверитьНастройкиУчетнойЗаписи(); + Если ЗначениеЗаполнено(УчетнаяЗаписьСсылка) Тогда + ОповеститьОбИзменении(ТипЗнч(УчетнаяЗаписьСсылка)); + КонецЕсли; + ПерейтиНаСледующуюСтраницу(); +КонецПроцедуры + +&НаСервере +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов() + + Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + Разрешения(), СсылкаНовойУчетнойЗаписи); + +КонецФункции + +&НаСервере +Функция Разрешения() + + Результат = Новый Массив; + + Если ИспользоватьДляОтправки Тогда + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + "SMTP", + СерверИсходящейПочты, + ПортСервераИсходящейПочты, + НСтр("ru = 'Электронная почта.'"))); + КонецЕсли; + + Если ИспользоватьДляПолучения Тогда + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + Протокол, + СерверВходящейПочты, + ПортСервераВходящейПочты, + НСтр("ru = 'Электронная почта.'"))); + КонецЕсли; + + Возврат Результат; + +КонецФункции + + +&НаКлиенте +Процедура ПроверитьЗаполнениеНаСтраницеНастройкаУчетнойЗаписи(Отказ) + + Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Введите адрес электронной почты'"), , "АдресЭлектроннойПочты", , Отказ); + ИначеЕсли Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Истина) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Адрес электронной почты введен неверно'"), , "АдресЭлектроннойПочты", , Отказ); + КонецЕсли; + + Если ПустаяСтрока(ПарольДляПолученияПисем) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо ввести пароль'"), , "ПарольДляПолученияПисем", , Отказ); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьЭлементыТекущейСтраницы() + + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + // КнопкаДалее + Если ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда + Если КонтекстныйРежим Тогда + ЗаголовокКнопкиДалее = НСтр("ru = 'Продолжить'"); + Иначе + ЗаголовокКнопкиДалее = НСтр("ru = 'Закрыть'"); + КонецЕсли; + Иначе + Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи + И ПроверкаЗавершиласьСОшибками Тогда + ЗаголовокКнопкиДалее = НСтр("ru = 'Повторить'"); + ИначеЕсли ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи + И СпособНастройки = "Автоматически" Тогда + Если КонтекстныйРежим Тогда + ЗаголовокКнопкиДалее = НСтр("ru = 'Настроить'"); + Иначе + ЗаголовокКнопкиДалее = НСтр("ru = 'Создать'"); + КонецЕсли; + Иначе + ЗаголовокКнопкиДалее = НСтр("ru = 'Далее >'"); + КонецЕсли; + КонецЕсли; + Элементы.КнопкаДалее.Заголовок = ЗаголовокКнопкиДалее; + Элементы.КнопкаДалее.Доступность = ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи; + Элементы.КнопкаДалее.Видимость = ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи; + + // КнопкаНазад + Элементы.КнопкаНазад.Видимость = ТекущаяСтраница <> Элементы.НастройкаУчетнойЗаписи + И ТекущаяСтраница <> Элементы.УчетнаяЗаписьУспешноНастроена + И ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи; + + // КнопкаОтмена + Элементы.КнопкаОтмена.Видимость = ТекущаяСтраница <> Элементы.УчетнаяЗаписьУспешноНастроена; + + // КнопкаПерейтиКНастройкам + Элементы.КнопкаПерейтиКНастройкам.Видимость = Не ИспользуютсяПрофилиБезопасности И (ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи + И ПроверкаЗавершиласьСОшибками Или Не КонтекстныйРежим И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена); + + Если Не КонтекстныйРежим И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда + Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Перейти к учетной записи'"); + Иначе + Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Настроить параметры подключения вручную'"); + КонецЕсли; + + Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда + Элементы.НеУдалосьПодключитьсяКартинкаИНадпись.Видимость = ПроверкаЗавершиласьСОшибками; + Элементы.СпособНастройки.Видимость = Не ПроверкаЗавершиласьСОшибками И Не ИспользуютсяПрофилиБезопасности; + КонецЕсли; + + Если ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда + ОбновитьДоступностьНастройкиДнейДоУдаления() + КонецЕсли; + + Если ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда + Элементы.НадписьУчетнаяЗаписьУспешноНастроена.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка параметров учетной записи + |%1 завершена.'"), АдресЭлектроннойПочты); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДоступностьНастройкиДнейДоУдаления() + Элементы.УдалятьПисьмаССервераЧерез.Доступность = ОставлятьКопииПисемНаСервере; + Элементы.НадписьДней.Доступность = Элементы.УдалятьПисьмаССервераЧерез.Доступность; +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКНастройкам(Команда) + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + Если Не КонтекстныйРежим И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда + ПоказатьЗначение(,УчетнаяЗаписьСсылка); + Закрыть(Истина); + Иначе + Если СпособНастройки = "Автоматически" Тогда + СпособНастройки = "Вручную"; + КонецЕсли; + Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; + НастроитьЭлементыТекущейСтраницы(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьНастройкиУчетнойЗаписи() + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию(АдресЭлектроннойПочты, ПарольДляПолученияПисем)); + НастройкиЗаполнены = Истина; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль) + + Позиция = Найти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Настройки = Новый Структура; + + Настройки.Вставить("НазваниеУчетнойЗаписи", АдресЭлектроннойПочты); + + Настройки.Вставить("ИмяПользователяДляПолученияПисем", АдресЭлектроннойПочты); + Настройки.Вставить("ИмяПользователяДляОтправкиПисем", АдресЭлектроннойПочты); + + Настройки.Вставить("ПарольДляОтправкиПисем", Пароль); + Настройки.Вставить("ПарольДляПолученияПисем", Пароль); + + Настройки.Вставить("Протокол", "POP"); + Настройки.Вставить("СерверВходящейПочты", "pop." + ИмяСервераВУчетнойЗаписи); + Настройки.Вставить("ПортСервераВходящейПочты", 995); + Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", Истина); + Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверВходящейПочты", Ложь); + + Настройки.Вставить("СерверИсходящейПочты", "smtp." + ИмяСервераВУчетнойЗаписи); + Настройки.Вставить("ПортСервераИсходящейПочты", 465); + Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", Истина); + Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверИсходящейПочты", Ложь); + + Настройки.Вставить("ДлительностьОжиданияСервера", 30); + Настройки.Вставить("ОставлятьКопииПисемНаСервере", Ложь); + Настройки.Вставить("УдалятьПисьмаССервераЧерез", 10); + + Возврат Настройки; +КонецФункции + +&НаСервере +Функция ПроверитьПодключениеКСерверуВходящейПочты() + + Профиль = ИнтернетПочтовыйПрофиль(Истина); + ИнтернетПочта = Новый ИнтернетПочта; + + ИспользуемыйПротокол = ПротоколИнтернетПочты.POP3; + Если Протокол = "IMAP" Тогда + ИспользуемыйПротокол = ПротоколИнтернетПочты.IMAP; + КонецЕсли; + + ТекстОшибки = ""; + Попытка + ИнтернетПочта.Подключиться(Профиль, ИспользуемыйПротокол); + ИнтернетПочта.ПолучитьЗаголовки(); + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + ИнтернетПочта.Отключиться(); + + Возврат ТекстОшибки; + +КонецФункции + +&НаСервере +Функция ПроверитьПодключениеКСерверуИсходящейПочты() + + ПараметрыПисьма = Новый Структура; + + Тема = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'"); + Тело = НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'"); + + Письмо = Новый ИнтернетПочтовоеСообщение; + Письмо.Тема = Тема; + + Получатель = Письмо.Получатели.Добавить(АдресЭлектроннойПочты); + Получатель.ОтображаемоеИмя = ИмяОтправителяПисем; + + Письмо.ИмяОтправителя = ИмяОтправителяПисем; + Письмо.Отправитель.ОтображаемоеИмя = ИмяОтправителяПисем; + Письмо.Отправитель.Адрес = АдресЭлектроннойПочты; + + Текст = Письмо.Тексты.Добавить(Тело); + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; + + Профиль = ИнтернетПочтовыйПрофиль(); + ИнтернетПочта = Новый ИнтернетПочта; + + ТекстОшибки = ""; + Попытка + ИнтернетПочта.Подключиться(Профиль); + ИнтернетПочта.Послать(Письмо); + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + ИнтернетПочта.Отключиться(); + + Возврат ТекстОшибки; + +КонецФункции + +&НаСервере +Процедура ПроверитьНастройкиУчетнойЗаписи() + + ПроверкаЗавершиласьСОшибками = Ложь; + + СообщениеСервераИсходящейПочты = ""; + Если ИспользоватьДляОтправки Тогда + СообщениеСервераИсходящейПочты = ПроверитьПодключениеКСерверуИсходящейПочты(); + КонецЕсли; + + СообщениеСервераВходящейПочты = ""; + Если ИспользоватьДляПолучения Тогда + СообщениеСервераВходящейПочты = ПроверитьПодключениеКСерверуВходящейПочты(); + КонецЕсли; + + Если Не ПустаяСтрока(СообщениеСервераИсходящейПочты) Тогда + ТекстОшибки = НСтр("ru = 'Не удалось подключиться к серверу исходящей почты:'" + Символы.ПС) + + СообщениеСервераИсходящейПочты + Символы.ПС; + КонецЕсли; + + Если Не ПустаяСтрока(СообщениеСервераВходящейПочты) Тогда + ТекстОшибки = ТекстОшибки + + НСтр("ru = 'Не удалось подключиться к серверу входящей почты:'" + Символы.ПС) + + СообщениеСервераВходящейПочты; + КонецЕсли; + + СообщенияОбОшибках = СокрЛП(ТекстОшибки); + + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ПроверкаЗавершиласьСОшибками = Истина; + Иначе + СоздатьУчетнуюЗапись(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СоздатьУчетнуюЗапись() + Если КонтекстныйРежим И ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты, "АдресЭлектроннойПочты")) Тогда + УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПолучитьОбъект(); + Иначе + УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент(); + УчетнаяЗапись.УстановитьСсылкуНового(СсылкаНовойУчетнойЗаписи); + КонецЕсли; + ЗаполнитьЗначенияСвойств(УчетнаяЗапись, ЭтотОбъект); + УчетнаяЗапись.ИмяПользователя = ИмяОтправителяПисем; + УчетнаяЗапись.Пользователь = ИмяПользователяДляПолученияПисем; + УчетнаяЗапись.Пароль = ПарольДляПолученияПисем; + УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; + УчетнаяЗапись.ПарольSMTP = ПарольДляОтправкиПисем; + УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; + УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; + УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = УдалятьПисьмаССервераЧерез; + УчетнаяЗапись.ПротоколВходящейПочты = Протокол; + УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; + УчетнаяЗапись.Записать(); + УчетнаяЗаписьСсылка = УчетнаяЗапись.Ссылка; + ТребуетсяПодтверждениеЗакрытияФормы = Ложь; +КонецПроцедуры + +&НаСервере +Функция ИнтернетПочтовыйПрофиль(ДляПолучения = Ложь) + + Профиль = Новый ИнтернетПочтовыйПрофиль; + Если ДляПолучения Тогда + Если Протокол = "IMAP" Тогда + Профиль.АдресСервераIMAP = СерверВходящейПочты; + Профиль.ИспользоватьSSLIMAP = ИспользоватьЗащищенноеСоединениеДляВходящейПочты; + Профиль.ПарольIMAP = ПарольДляПолученияПисем; + Профиль.ПользовательIMAP = ИмяПользователяДляПолученияПисем; + Профиль.ПортIMAP = ПортСервераВходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияIMAP = ИспользоватьБезопасныйВходНаСерверВходящейПочты; + Иначе + Профиль.АдресСервераPOP3 = СерверВходящейПочты; + Профиль.ИспользоватьSSLPOP3 = ИспользоватьЗащищенноеСоединениеДляВходящейПочты; + Профиль.Пароль = ПарольДляПолученияПисем; + Профиль.Пользователь = ИмяПользователяДляПолученияПисем; + Профиль.ПортPOP3 = ПортСервераВходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияPOP3 = ИспользоватьБезопасныйВходНаСерверВходящейПочты; + КонецЕсли; + Иначе + Профиль.POP3ПередSMTP = ТребуетсяВходНаСерверПередОтправкой; + Профиль.АдресСервераSMTP = СерверИсходящейПочты; + Профиль.ИспользоватьSSLSMTP = ИспользоватьЗащищенноеСоединениеДляИсходящейПочты; + Профиль.ПарольSMTP = ПарольДляОтправкиПисем; + Профиль.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; + Профиль.ПортSMTP = ПортСервераИсходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияSMTP = ИспользоватьБезопасныйВходНаСерверИсходящейПочты; + КонецЕсли; + + Профиль.Таймаут = ДлительностьОжиданияСервера; + + Возврат Профиль; + +КонецФункции + +&НаСервере +Функция ВариантыИмениПользователя() + + Позиция = Найти(АдресЭлектроннойПочты, "@"); + ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); + + Результат = Новый Массив; + Результат.Добавить(АдресЭлектроннойПочты); + Результат.Добавить(ИмяПользователяВУчетнойЗаписи); + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ВариантыНастройкиПодключенияКСерверуIMAP() + + Позиция = Найти(АдресЭлектроннойПочты, "@"); + ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверВходящейПочты"); + Результат.Колонки.Добавить("ПортСервераВходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); + + // стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "imap.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера с префиксом "mail.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера без префикса "imap.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера с префиксом "imap.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // имя сервера с префиксом "mail.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // имя сервера без префикса "imap.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ВариантыНастройкиПодключенияКСерверуPOP() + + Позиция = Найти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверВходящейПочты"); + Результат.Колонки.Добавить("ПортСервераВходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); + + // стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "pop.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера с префиксом "pop3.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера с префиксом "mail.", защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера без префиксов, защищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // имя сервера с префиксом "pop.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // имя сервера с префиксом "pop3", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // имя сервера с префиксом "mail.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // имя сервера без префиксов, незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ВариантыНастройкиПодключенияКСерверуSMTP() + + Позиция = Найти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверИсходящейПочты"); + Результат.Колонки.Добавить("ПортСервераИсходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты"); + + // стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "smtp.", защищенное соединение, порт 465 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера с префиксом "mail.", защищенное соединение, порт 465 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера без префиксов, защищенное соединение, порт 465 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера с префиксом "smtp.", защищенное соединение, порт 587 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера с префиксом "mail.", защищенное соединение, порт 587 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера без префиксов, защищенное соединение, порт 587 + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // имя сервера с префиксом "smtp.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // имя сервера с префиксом "mail.", незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // имя сервера без префиксов, незащищенное соединение + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПодобратьНастройкиУчетнойЗаписи() + + НайденыНастройкиСервераВходящейПочты = Ложь; + НайденыНастройкиСервераИсходящейПочты = Ложь; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию(АдресЭлектроннойПочты, ПарольДляПолученияПисем)); + + Если ИспользоватьДляПолучения Тогда + ПодключениеВыполнено = Ложь; + ОшибкаАутентификации = Ложь; + ВариантНастройкиПодключения = Неопределено; + + // Поиск настроек IMAP + Протокол = "IMAP"; + Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл + ИмяПользователяДляПолученияПисем = ИмяПользователя; + Если ОшибкаАутентификации Тогда + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + Иначе + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуIMAP() Цикл + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; + Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + НайденыНастройкиСервераВходящейПочты = ПодключениеВыполнено; + + Если Не НайденыНастройкиСервераВходящейПочты Тогда + // Поиск настроек POP + ПодключениеВыполнено = Ложь; + ОшибкаАутентификации = Ложь; + ВариантНастройкиПодключения = Неопределено; + + Протокол = "POP"; + Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл + ИмяПользователяДляПолученияПисем = ИмяПользователя; + Если ОшибкаАутентификации Тогда + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + Иначе + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуPOP() Цикл + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; + Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ИспользоватьДляОтправки Тогда + // Поиск настроек SMTP + ПодключениеВыполнено = Ложь; + ОшибкаАутентификации = Ложь; + ВариантНастройкиПодключения = Неопределено; + + Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл + ИмяПользователяДляОтправкиПисем = ИмяПользователя; + Если ОшибкаАутентификации Тогда + СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + Иначе + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуSMTP() Цикл + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(); + ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); + ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; + Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + НайденыНастройкиСервераИсходящейПочты = ПодключениеВыполнено; + КонецЕсли; + + Возврат (Не ИспользоватьДляОтправки Или НайденыНастройкиСервераИсходящейПочты) + И (Не ИспользоватьДляПолучения Или НайденыНастройкиСервераВходящейПочты); + +КонецФункции + +&НаКлиенте +Процедура НастроитьПараметрыПодключенияАвтоматически() + ПодобратьНастройкиИСоздатьУчетнуюЗапись(); + + Если ЗначениеЗаполнено(УчетнаяЗаписьСсылка) Тогда + ОповеститьОбИзменении(ТипЗнч(УчетнаяЗаписьСсылка)); + КонецЕсли; + + ПерейтиНаСледующуюСтраницу(); +КонецПроцедуры + +&НаСервере +Процедура ПодобратьНастройкиИСоздатьУчетнуюЗапись() + ПроверкаЗавершиласьСОшибками = Не ПодобратьНастройкиУчетнойЗаписи(); + Если Не ПроверкаЗавершиласьСОшибками Тогда + СоздатьУчетнуюЗапись(); + Иначе + СообщенияОбОшибках = НСтр("ru = 'Не удалось определить настройки подключения. + |Настройте параметры подключения вручную.'"); + + // установка настроек по умолчанию + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию(АдресЭлектроннойПочты, ПарольДляПолученияПисем)); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index 1c0525ce5..669884aba 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -58,17 +58,17 @@ true - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска + + Ссылка 14 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка + СсылкаРасширеннаяПодсказка 16 Label true @@ -78,20 +78,31 @@ - СписокСтрокаПоискаКонтекстноеМеню + СсылкаКонтекстноеМеню 15 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска 17 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 19 Label true @@ -101,10 +112,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 18 true + Список + + true + + + + СписокСостояниеПросмотра + 20 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 21 + true + ViewStatusAddition Список @@ -113,10 +147,10 @@ СписокУправлениеПоиском - 20 + 23 СписокУправлениеПоискомРасширеннаяПодсказка - 22 + 25 Label true true @@ -126,7 +160,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 21 + 24 true SearchControlAddition @@ -291,6 +325,9 @@ true + + Список.Ref +
    true
    ВЫБРАТЬ РАЗРЕШЕННЫЕ diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index 8672f447c..38c96ae23 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -45,20 +45,16 @@ 5 true - InputField + LabelField Enter true Left true - + 30 true true true - true - true - true - Normal @@ -91,19 +87,15 @@ 7 true - InputField + LabelField Enter true Left true - + 20 true true - true - true - true - Normal @@ -136,19 +128,49 @@ 9 true - InputField + LabelField Enter true Left true - + 20 true true - true - true - true - Normal + + + + Ссылка + 24 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + true + true None @@ -160,10 +182,10 @@
    СписокСтрокаПоиска - 14 + 27 СписокСтрокаПоискаРасширеннаяПодсказка - 16 + 29 Label true true @@ -173,7 +195,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 15 + 28 true Список @@ -183,10 +205,10 @@ СписокСостояниеПросмотра - 17 + 30 СписокСостояниеПросмотраРасширеннаяПодсказка - 19 + 32 Label true true @@ -196,7 +218,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 18 + 31 true ViewStatusAddition @@ -207,10 +229,10 @@ СписокУправлениеПоиском - 20 + 33 СписокУправлениеПоискомРасширеннаяПодсказка - 22 + 35 Label true true @@ -220,7 +242,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 21 + 34 true SearchControlAddition @@ -282,6 +304,36 @@ Форма_КоманднаяПанель -1 + + ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗапись + 22 + true + true + + true + + + Items.Список.CurrentData.Ref + + + ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗаписьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -308,6 +360,9 @@ true + + Список.Ref +
    true
    Catalog.УчетныеЗаписиЭлектроннойПочты diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 2993b6d66..5fe7982aa 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -1,28 +1,169 @@ - - Наименование - 1 - - <key>ru</key> - <value>Наименование</value> - + + Шапка + 86 + + Наименование + 1 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Объект.Description + + Left + + ru + Наименование учетной записи + + + НаименованиеРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + 25 + true + true + false + true + true + Normal + + + + АдресЭлектроннойПочты + 80 + true + true + + true + + + Объект.АдресЭлектроннойПочты + + + OnChange + АдресЭлектроннойПочтыПриИзменении + + + АдресЭлектроннойПочтыРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + АдресЭлектроннойПочтыКонтекстноеМеню + 81 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + + + ИмяОтправителяПисем + 83 + + <key>ru</key> + <value>Имя отправителя писем</value> + + true + true + + true + + + Объект.ИмяПользователя + + + ИмяОтправителяПисемРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ИмяОтправителяПисемКонтекстноеМеню + 84 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + true true true - - Объект.Description - - Left + + <key>ru</key> + <value>Шапка</value> + ru - Наименование учетной записи + Шапка - НаименованиеExtendedTooltip - 59 + ШапкаРасширеннаяПодсказка + 87 Label true true @@ -30,186 +171,157 @@ Left
    - - НаименованиеКонтекстноеМеню - 2 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - ОбщаяГруппировка - 49 - - Основное - 35 - - СведенияОПользователе - 31 - - ИмяПользователя - 3 - - <key>ru</key> - <value>Имя </value> - - true - true - - true - - - Объект.ИмяПользователя - - - ИмяПользователяExtendedTooltip - 63 - Label - true - true - - Left - - - - ИмяПользователяКонтекстноеМеню - 4 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - АдресЭлектроннойПочты - 5 - - <key>ru</key> - <value>Почтовый адрес</value> - - true - true - - true - - - Объект.АдресЭлектроннойПочты - - - АдресЭлектроннойПочтыExtendedTooltip - 64 - Label - true - true - - Left - - - - АдресЭлектроннойПочтыКонтекстноеМеню - 6 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сведения о пользователе</value> - - - System.DefaultGUIFont - true - false - false - false - - - ru - Сведения о пользователе - - - СведенияОПользователеExtendedTooltip - 62 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto + ИспользоватьУчетнуюЗапись + 88 + + ДляОтправки + 90 + + <key>ru</key> + <value>Для отправки писем</value> + + true + true + + true + + + Объект.ИспользоватьДляОтправки + + Right + + ДляОтправкиРасширеннаяПодсказка + 92 + Label + true + true + + Left - + + + ДляОтправкиКонтекстноеМеню + 91 + true + + CheckBoxField + Enter + true + Left + true + + + + ДляПолучения + 93 + + <key>ru</key> + <value>Для получения писем</value> + + true + true + + true + + + Объект.ИспользоватьДляПолучения + + Right + + ДляПолученияРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ДляПолученияКонтекстноеМеню + 94 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Использовать учетную запись</value> + + + ru + Использовать учетную запись + + true + + ИспользоватьУчетнуюЗаписьРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + НастройкиСоединения + 96 + + ОтправкаПисем + 100 - ПользовательПароль - 40 + АвторизацияПриОтправкеПисем + 192 - Пользователь - 15 + ИмяПользователяДляОтправкиПисем + 149 + + <key>ru</key> + <value>Имя пользователя</value> + true true true - Объект.Пользователь + Объект.ПользовательSMTP - ПользовательExtendedTooltip - 66 + ИмяПользователяДляОтправкиПисемРасширеннаяПодсказка + 151 Label true true @@ -218,22 +330,21 @@ - ПользовательКонтекстноеМеню - 16 + ИмяПользователяДляОтправкиПисемКонтекстноеМеню + 150 true InputField - true Enter true Left true - 15 + 25 true true false - true + true true true true @@ -241,19 +352,23 @@ - Пароль - 17 + ПарольДляОтправкиПисем + 152 + + <key>ru</key> + <value>Пароль</value> + true true true - Объект.Пароль + Объект.ПарольSMTP - ПарольExtendedTooltip - 67 + ПарольДляОтправкиПисемРасширеннаяПодсказка + 154 Label true true @@ -262,8 +377,8 @@ - ПарольКонтекстноеМеню - 18 + ПарольДляОтправкиПисемКонтекстноеМеню + 153 true InputField @@ -272,11 +387,11 @@ Left true - 15 + 25 true true false - true + true true true true @@ -284,24 +399,24 @@ - ЗапомнитьПароль - 36 + ИспользоватьБезопасныйВходНаСерверИсходящейПочты + 155 + + <key>ru</key> + <value>Безопасная проверка пароля</value> + true true true - ЗапомнитьПароль + Объект.ИспользоватьБезопасныйВходНаСерверИсходящейПочты Right - - ru - Запомнить пароль в учетной записи - - ЗапомнитьПарольExtendedTooltip - 68 + ИспользоватьБезопасныйВходНаСерверИсходящейПочтыРасширеннаяПодсказка + 157 Label true true @@ -310,8 +425,8 @@ - ЗапомнитьПарольКонтекстноеМеню - 37 + ИспользоватьБезопасныйВходНаСерверИсходящейПочтыКонтекстноеМеню + 156 true CheckBoxField @@ -328,18 +443,225 @@ <key>ru</key> - <value>Аутентификация</value> + <value>Авторизация при отправке писем</value> - - System.DefaultGUIFont - true - false - false - false - + + ru + Авторизация при отправке писем + - ПользовательПарольExtendedTooltip - 65 + АвторизацияПриОтправкеПисемРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + НастройкиСервераИсходящейПочты + 158 + + СерверИсходящейПочты + 174 + + <key>ru</key> + <value>Сервер</value> + + true + true + + true + + + Объект.СерверИсходящейПочты + + + OnChange + СерверИсходящейПочтыПриИзменении + + + СерверИсходящейПочтыРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + СерверИсходящейПочтыКонтекстноеМеню + 175 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + Normal + + + + ПортСервераИсходящейПочты + 177 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + Объект.ПортСервераИсходящейПочты + + + ПортСервераИсходящейПочтыРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПортСервераИсходящейПочтыКонтекстноеМеню + 178 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + + + ru + Настройки сервера входящей почты + + + НастройкиСервераИсходящейПочтыРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТипСоединенияИДлительностьОжиданияПриОтправке + 202 + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + 180 + + <key>ru</key> + <value>Использовать безопасное соединение (SSL)</value> + + true + true + + true + + + Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + + Right + + OnChange + ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыПриИзменении + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыКонтекстноеМеню + 181 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Тип соединения и длительность ожидания при отправке</value> + + + ru + Тип соединения и длительность ожидания при отправке + + + ТипСоединенияИДлительностьОжиданияПриОтправкеРасширеннаяПодсказка + 203 Label true true @@ -353,7 +675,77 @@ Auto true true - auto + Auto + Auto + + + + POPПередSMTP + 204 + + ТребуетсяВходНаСерверПередОтправкой + 189 + true + true + + true + + + Объект.ТребуетсяВходНаСерверПередОтправкой + + Right + + ТребуетсяВходНаСерверПередОтправкойРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + + ТребуетсяВходНаСерверПередОтправкойКонтекстноеМеню + 190 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>POP перед SMTP</value> + + + ru + POPПеред SMTP + + + POPПередSMTPРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true Auto Auto @@ -365,15 +757,15 @@ <key>ru</key> - <value>Основное</value> + <value>Отправка писем</value> ru - Основное + Отправка писем - ОсновноеExtendedTooltip - 61 + ОтправкаПисемРасширеннаяПодсказка + 101 Label true true @@ -381,157 +773,33 @@ Left - UsualGroup - + Page + Vertical - Auto - true - true - Auto - Auto + auto - Аутентификация - 27 - - СведенияОСервере - 28 - - СерверВходящейПочтыPOP3 - 9 - true - true - - true - - - Объект.СерверВходящейПочтыPOP3 - - - СерверВходящейПочтыPOP3ExtendedTooltip - 71 - Label - true - true - - Left - - - - СерверВходящейПочтыPOP3КонтекстноеМеню - 10 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - СерверИсходящейПочтыSMTP - 7 - true - true - - true - - - Объект.СерверИсходящейПочтыSMTP - - - СерверИсходящейПочтыSMTPExtendedTooltip - 72 - Label - true - true - - Left - - - - СерверИсходящейПочтыSMTPКонтекстноеМеню - 8 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - ДополнительныеНастройкиСервераПочты - 50 - true - true - - true - - false - - ДополнительныеНастройкиСервераПочтыExtendedTooltip - 73 - Label - true - true - - Left - - - Hyperlink - Form.Command.ДополнительныеНастройки - Normal - Auto - true - true - UserCmds - Auto - + ПолучениеПисем + 98 + + ИмяПользователяДляПолученияПисем + 102 + + <key>ru</key> + <value>Имя пользователя</value> + true true true - - <key>ru</key> - <value>Сведения о сервере почты</value> - - - System.DefaultGUIFont - true - false - false - false - + + Объект.Пользователь + - СведенияОСервереExtendedTooltip - 70 + ИмяПользователяДляПолученияПисемРасширеннаяПодсказка + 104 Label true true @@ -539,38 +807,189 @@ Left - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto + + ИмяПользователяДляПолученияПисемКонтекстноеМеню + 103 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + ПарольДляПолученияПисем + 105 + true + true + + true + + + Объект.Пароль + + + ПарольДляПолученияПисемРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ПарольДляПолученияПисемКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + + + ИспользоватьБезопасныйВходНаСерверВходящейПочты + 143 + + <key>ru</key> + <value>Безопасная проверка пароля</value> + + true + true + + true + + + Объект.ИспользоватьБезопасныйВходНаСерверВходящейПочты + + Right + + ИспользоватьБезопасныйВходНаСерверВходящейПочтыРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ИспользоватьБезопасныйВходНаСерверВходящейПочтыКонтекстноеМеню + 144 + true + + CheckBoxField + Enter + true + Left + true + + - ДополнительныеПараметрыУчетнойЗаписи - 57 + НастройкиСервераВходящейПочты + 125 + + СерверВходящейПочты + 113 + + <key>ru</key> + <value>Сервер</value> + + true + true + + true + + + Объект.СерверВходящейПочты + + Left + + OnChange + СерверВходящейПочтыПриИзменении + + + СерверВходящейПочтыРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + СерверВходящейПочтыКонтекстноеМеню + 114 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + Normal + + - ИспользованиеУчетнойЗаписи - 58 + ПротоколИПортСервераВходящейПочты + 111 - ИспользоватьДляОтправки - 51 + Протокол + 108 + + <key>ru</key> + <value>Протокол</value> + true true true - Объект.ИспользоватьДляОтправки + Объект.ПротоколВходящейПочты - Right + + OnChange + ПротоколПриИзменении + - ИспользоватьДляОтправкиExtendedTooltip - 76 + ПротоколРасширеннаяПодсказка + 110 Label true true @@ -579,32 +998,57 @@ - ИспользоватьДляОтправкиКонтекстноеМеню - 52 + ПротоколКонтекстноеМеню + 109 true - CheckBoxField + InputField + true Enter true Left true - + + 8 + true + true + true + true + true + true + true + + + IMAP + + + + + POP + + + Normal + 4 + - ИспользоватьДляПолучения - 53 + ПортВходящейПочты + 122 + + <key>ru</key> + <value>Порт</value> + true true true - Объект.ИспользоватьДляПолучения + Объект.ПортСервераВходящейПочты - Right - ИспользоватьДляПолученияExtendedTooltip - 77 + ПортВходящейПочтыРасширеннаяПодсказка + 124 Label true true @@ -613,8 +1057,94 @@ - ИспользоватьДляПолученияКонтекстноеМеню - 54 + ПортВходящейПочтыКонтекстноеМеню + 123 + true + + InputField + Enter + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Протокол и порт сервера входящей почты</value> + + + ru + Протокол и порт сервера входящей почты + + + ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТипСоединенияИДлительностьОжидания + 187 + + ИспользоватьЗащищенноеСоединениеДляВходящейПочты + 119 + + <key>ru</key> + <value>Использовать безопасное соединение (SSL)</value> + + true + true + + true + + + Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты + + Right + + OnChange + ИспользоватьЗащищенноеСоединениеДляВходящейПочтыПриИзменении + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочтыРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочтыКонтекстноеМеню + 120 true CheckBoxField @@ -631,15 +1161,15 @@ <key>ru</key> - <value>Использование учетной записи</value> + <value>Тип соединения и длительность ожидания</value> ru - Использование учетной записи + Тип соединения и длительность ожидания - ИспользованиеУчетнойЗаписиExtendedTooltip - 75 + ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка + 188 Label true true @@ -649,11 +1179,10 @@ UsualGroup + Vertical Auto - WeakSeparation true true - auto Auto Auto @@ -665,15 +1194,208 @@ <key>ru</key> - <value>Дополнительные параметры учетной записи</value> + <value>Настройки сервера входящей почты</value> ru - Дополнительные параметры учетной записи + Настройки сервера входящей почты - ДополнительныеПараметрыУчетнойЗаписиExtendedTooltip - 74 + НастройкиСервераВходящейПочтыРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОставлятьПисьмаНаСервере + 185 + + ОставлятьКопииПисемНаСервере + 130 + + <key>ru</key> + <value>Оставлять копии писем на сервере</value> + + true + true + + true + + + Объект.ОставлятьКопииСообщенийНаСервере + + Right + + ОставлятьКопииПисемНаСервереРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + ОставлятьКопииПисемНаСервереКонтекстноеМеню + 131 + true + + CheckBoxField + Enter + true + Left + true + + + + УдалятьПисьмаССервера + 141 + + УдалятьПисьмаССервераЧерез + 133 + + <key>ru</key> + <value>Удалять письма с сервера через</value> + + true + true + + true + + + Объект.ПериодХраненияСообщенийНаСервере + + + УдалятьПисьмаССервераЧерезРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + УдалятьПисьмаССервераЧерезКонтекстноеМеню + 134 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + Normal + + + + НадписьДней + 146 + + <key>ru</key> + <value>дней</value> + + true + true + + true + + + НадписьДнейРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + НадписьДнейКонтекстноеМеню + 147 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Удалять письма с сервера</value> + + + ru + Удалять письма с сервера + + + УдалятьПисьмаССервераРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оставлять письма на сервере</value> + + + ru + Оставлять письма на сервере + + + ОставлятьПисьмаНаСервереРасширеннаяПодсказка + 186 Label true true @@ -698,19 +1420,15 @@ <key>ru</key> - <value>Аутентификация</value> + <value>Получение писем</value> - - System.DefaultGUIFont - true - false - false - false - - true + + ru + Получение писем + - АутентификацияExtendedTooltip - 69 + ПолучениеПисемРасширеннаяПодсказка + 99 Label true true @@ -718,14 +1436,160 @@ Left - UsualGroup - + Page + Vertical - Auto - true - true - Auto - Auto + auto + + + + ПрочиеНастройки + 206 + + ДлительностьОжидания + 136 + + ДлительностьОжиданияСервера + 127 + + <key>ru</key> + <value>Длительность ожидания сервера</value> + + true + true + + true + + + Объект.ВремяОжидания + + + ДлительностьОжиданияСервераРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ДлительностьОжиданияСервераКонтекстноеМеню + 128 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 10 + + Normal + + + + НадписьСекунд + 138 + + <key>ru</key> + <value>сек.</value> + + true + true + + true + + + НадписьСекундРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + НадписьСекундКонтекстноеМеню + 139 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Длительность ожидания</value> + + + ru + Длительность ожидания + + + ДлительностьОжиданияРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Прочие настройки</value> + + + ru + Прочие настройки + + + ПрочиеНастройкиРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Page + + Vertical + auto true @@ -735,15 +1599,17 @@ <key>ru</key> - <value>Общая группировка</value> + <value>Настройки соединения</value> ru - Общая группировка + Настройки соединения + true + true - ОбщаяГруппировкаExtendedTooltip - 60 + НастройкиСоединенияРасширеннаяПодсказка + 97 Label true true @@ -751,29 +1617,141 @@ Left - UsualGroup - - Auto - true - true - Auto + Pages + + TabsOnTop Auto ФормаКоманднаяПанель -1 + + ФормаЗаписатьИЗакрыть + 208 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаСтандартныеКоманды + 210 + true + true + + true + + + <key>ru</key> + <value>Форма стандартные команды</value> + + + ru + Форма стандартные команды + + + ФормаСтандартныеКомандыРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + Form + + + + ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗапись + 78 + + <key>ru</key> + <value>Проверить настройки</value> + + true + true + + true + + + Объект.Ref + + + ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗаписьРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 212 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true - NotificationProcessing - ОбработкаОповещения + BeforeClose + ПередЗакрытием OnCreateAtServer ПриСозданииНаСервере + WriteAndClose DontBlock true true @@ -783,6 +1761,7 @@ true true UseIfNecessary + Normal auto true @@ -800,41 +1779,23 @@
    true
    true
    - - ЗапомнитьПароль - - <key>ru</key> - <value>Запомнить пароль</value> - - 2 - - Boolean - - - true - - - true - - true - - ДополнительныеНастройки + ЗаписатьИЗакрыть <key>ru</key> - <value>Дополнительные настройки сервера почты</value> + <value>Записать и закрыть</value> - 2 + 1 ru - Редактировать дополнительные настройки почтового сервера + Записать и закрыть true - ДополнительныеНастройкиВыполнить + ЗаписатьИЗакрыть Auto @@ -856,8 +1817,8 @@ ПослеЗаписи - BeforeWriteAtServer - ПередЗаписьюНаСервере + BeforeWrite + ПередЗаписью diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index fb618689d..ded21a7f4 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html @@ -1,11 +1,37 @@ - -

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

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

    -
  • POP3 сервер - адрес POP3 сервера (сервера входящих сообщений) -
  • SMTP сервер - адрес SMTP сервера (сервера исходящих сообщений)
  • Аутентификация:

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

    -

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

    -

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

    \ No newline at end of file + +

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

    +

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

    +

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

    +

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

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

    Отправка писем (настройка сервера исходящей почты)

    +
    • Укажите Адрес электронной почты учетной записи в формате пользователь@почтовыйсервер, он может отличаться от основного, в таком случае он будет предназначен только для отправки писем.
    • При необходимости введите Пароль учетной записи (если он не введен, программа запрашивает его при отправке писем).
    • При необходимости включите флажок Безопасная проверка пароля. +
    • В поле Сервер укажите адрес SMTP-сервера, например, "smtp.mail.ru". +
    • Укажите Порт компьютера для отправки почтовых сообщений, например, "465". +
    • Включите флажок Использовать безопасное соединение (SSL). +
    • При необходимости включите флажок Требуется вход на сервер перед отправкой.

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

    +
    • Укажите Адрес электронной почты учетной записи в формате пользователь@почтовыйсервер, он может отличаться от основного, в таком случае он будет предназначен только для получения писем. +
    • При необходимости введите Пароль учетной записи (если он не введен, программа запрашивает его для получения писем).
    • При необходимости включите флажок Безопасная проверка пароля. +
    • В поле Сервер укажите адрес POP3 сервера, например, "pop.mail.ru".  +
    • Выберите Протокол сервера входящей почты: POP или IMAP. +
    • Укажите Порт компьютера для получения входящей почты, например, 993. +
    • Включите флажок Защищенное соединение (SSL). +
    • Включите флажок Оставлять копии писем на сервере, для того чтобы программа не удалила письма в папке "Входящие" почтового ящика электронной почты. По умолчанию флажок отключен, в этом случае все письма после получения будут удалены с почтового сервера. +
    • Определите срок хранения писем на почтовом сервере с помощью поля Удалять письма с сервера через - например, через "10 дней".

    Прочие настройки

    +
    • Укажите Длительность ожидания сервера - например, "30 сек".

    Проверка настроек

    +
    • +

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

      +
    • +

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 9ebadf9da..15edcdc71 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + + +&НаКлиенте +Перем РазрешенияПолучены; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,10 +16,6 @@ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; - Если ЗначениеЗаполнено(Объект.Пароль) Тогда - ЗапомнитьПароль = Истина; - КонецЕсли; - Если Объект.Ссылка.Пустая() Тогда Объект.ИспользоватьДляОтправки = Истина; Объект.ИспользоватьДляПолучения = Истина; @@ -23,67 +23,176 @@ КонецПроцедуры -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - - Если НЕ ЗапомнитьПароль Тогда - ТекущийОбъект.Пароль = ""; - КонецЕсли; - - Если Объект.SMTPАутентификация <> Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами Тогда - Объект.ПользовательSMTP = ""; - Объект.ПарольSMTP = ""; - КонецЕсли; - +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемПодтверждениеПолучено", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ); КонецПроцедуры &НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Обрабатывает оповещение, от формы настройки дополнительных свойств учетной записи, - // содержащее некоторые настройки учетной записи. +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если ИмяСобытия = "УстановкаДополнительныхПараметровУчетнойЗаписи" И Источник = Объект.Ссылка Тогда - Объект.ВремяОжидания = Параметр.ДлительностьОжиданияСервера; - Объект.ОставлятьКопииСообщенийНаСервере = Параметр.ОставлятьКопииСообщенийНаСервере; - Объект.ПериодХраненияСообщенийНаСервере = Параметр.ПериодХраненияСообщенийНаСервере; - Объект.ПользовательSMTP = Параметр.ПользовательSMTP; - Объект.ПарольSMTP = Параметр.ПарольSMTP; - Объект.ПортPOP3 = Параметр.ПортPOP3; - Объект.ПортSMTP = Параметр.ПортSMTP; - Объект.SMTPАутентификация = Параметр.SMTPАутентификация; - Объект.СпособSMTPАутентификации = Параметр.СпособSMTPАутентификации; - Объект.СпособPOP3Аутентификации = Параметр.СпособPOP3Аутентификации; - Модифицированность = Истина; + Если РазрешенияПолучены <> Истина Тогда + Если Не ПроверитьЗаполнение() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Запрос = СоздатьЗапросНаИспользованиеВнешнихРесурсов(); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПолучениеРазрешенийЗавершение", ЭтотОбъект, ПараметрыЗаписи); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос), ЭтотОбъект, ОповещениеОЗакрытии); + + Отказ = Истина; КонецЕсли; + РазрешенияПолучены = Ложь; КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Оповестить("Запись_УчетныеЗаписиЭлектроннойПочты", ПараметрыЗаписи, Объект.Ссылка); + Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + Закрыть(); + КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - &НаКлиенте -Процедура ДополнительныеНастройкиВыполнить() +Процедура ПолучениеРазрешенийЗавершение(Результат, ПараметрыЗаписи) Экспорт - УчетнаяЗаписьСтруктура = Новый Структура; - УчетнаяЗаписьСтруктура.Вставить("ВремяОжидания", Объект.ВремяОжидания); - УчетнаяЗаписьСтруктура.Вставить("ОставлятьКопииСообщенийНаСервере", Объект.ОставлятьКопииСообщенийНаСервере); - УчетнаяЗаписьСтруктура.Вставить("ПериодХраненияСообщенийНаСервере", Объект.ПериодХраненияСообщенийНаСервере); - УчетнаяЗаписьСтруктура.Вставить("ПользовательSMTP", Объект.ПользовательSMTP); - УчетнаяЗаписьСтруктура.Вставить("ПарольSMTP", Объект.ПарольSMTP); - УчетнаяЗаписьСтруктура.Вставить("ПортPOP3", Объект.ПортPOP3); - УчетнаяЗаписьСтруктура.Вставить("ПортSMTP", Объект.ПортSMTP); - УчетнаяЗаписьСтруктура.Вставить("SMTPАутентификация", Объект.SMTPАутентификация); - УчетнаяЗаписьСтруктура.Вставить("СпособSMTPАутентификации", Объект.СпособSMTPАутентификации); - УчетнаяЗаписьСтруктура.Вставить("СпособPOP3Аутентификации", Объект.СпособPOP3Аутентификации); - - ПараметрыВызова = Новый Структура("Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр", Объект.Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр); - - ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ДополнительныеСвойстваУчетнойЗаписи", ПараметрыВызова); + Если Результат = КодВозвратаДиалога.ОК Тогда + РазрешенияПолучены = Истина; + Записать(ПараметрыЗаписи); + КонецЕсли; КонецПроцедуры +&НаСервере +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов() + + Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + Разрешения(), Объект.Ссылка); + +КонецФункции + +&НаСервере +Функция Разрешения() + + Результат = Новый Массив; + + Если Объект.ИспользоватьДляОтправки Тогда + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + "SMTP", + Объект.СерверИсходящейПочты, + Объект.ПортСервераИсходящейПочты, + НСтр("ru = 'Электронная почта.'"))); + КонецЕсли; + + Если Объект.ИспользоватьДляПолучения Тогда + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + Объект.ПротоколВходящейПочты, + Объект.СерверВходящейПочты, + Объект.ПортСервераВходящейПочты, + НСтр("ru = 'Электронная почта.'"))); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПротоколПриИзменении(Элемент) + Если Объект.ПротоколВходящейПочты = "IMAP" Тогда + Если Лев(Объект.СерверВходящейПочты, 4) = "pop." Тогда + Объект.СерверВходящейПочты = "imap." + Сред(Объект.СерверВходящейПочты, 5); + КонецЕсли + Иначе + Если ПустаяСтрока(Объект.ПротоколВходящейПочты) Тогда + Объект.ПротоколВходящейПочты = "POP"; + КонецЕсли; + Если Лев(Объект.СерверВходящейПочты, 5) = "imap." Тогда + Объект.СерверВходящейПочты = "pop." + Сред(Объект.СерверВходящейПочты, 6); + КонецЕсли; + КонецЕсли; + + УстановитьПортВходящейПочты(); +КонецПроцедуры + +&НаКлиенте +Процедура СерверВходящейПочтыПриИзменении(Элемент) + Объект.СерверВходящейПочты = СокрЛП(НРег(Объект.СерверВходящейПочты)); +КонецПроцедуры + +&НаКлиенте +Процедура СерверИсходящейПочтыПриИзменении(Элемент) + Объект.СерверИсходящейПочты = СокрЛП(НРег(Объект.СерверИсходящейПочты)); +КонецПроцедуры + +&НаКлиенте +Процедура АдресЭлектроннойПочтыПриИзменении(Элемент) + Объект.АдресЭлектроннойПочты = СокрЛП(Объект.АдресЭлектроннойПочты); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьЗащищенноеСоединениеДляИсходящейПочтыПриИзменении(Элемент) + УстановитьПортИсходящейПочты(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьЗащищенноеСоединениеДляВходящейПочтыПриИзменении(Элемент) + УстановитьПортВходящейПочты(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Записать(Новый Структура("ЗаписатьИЗакрыть")); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьПортВходящейПочты() + Если Объект.ПротоколВходящейПочты = "IMAP" Тогда + Если Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты Тогда + Объект.ПортСервераВходящейПочты = 993; + Иначе + Объект.ПортСервераВходящейПочты = 143; + КонецЕсли; + Иначе + Если Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты Тогда + Объект.ПортСервераВходящейПочты = 995; + Иначе + Объект.ПортСервераВходящейПочты = 110; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПортИсходящейПочты() + Если Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты Тогда + Объект.ПортСервераИсходящейПочты = 465; + Иначе + Объект.ПортСервераИсходящейПочты = 25; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытиемПодтверждениеПолучено(РезультатВопроса, ДополнительныеПараметры) Экспорт + Записать(Новый Структура("ЗаписатьИЗакрыть")); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 22a24ee52..287b0c069 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -1,5 +1,27 @@ - -

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

    -

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

    -

    См. также:

    - \ No newline at end of file + +

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

    +

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

    +

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

    +
    • Наименование учетной записи; +
    • Имя пользователя - указывается имя отправителя писем, оно может отличаться от имени пользователя в программе; +
    • Адрес электронной почты учетной записи в формате пользователь@почтовыйсервер. 

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

    +

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

    +

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

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

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

    +

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

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

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

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

    +
    • Нажмите  Изменить, с помощью программы произведите необходимые настройки.

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

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

    См. также: 

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index e69de29bb..9263e4ebb 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -0,0 +1,151 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ИспользоватьДляОтправки"); + Результат.Добавить("ИспользоватьДляПолучения"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Только для внутреннего использования. +Процедура ЗаполнитьРазрешения(СписокРазрешений) Экспорт + + РазрешенияУчетныхЗаписей = РазрешенияУчетныхЗаписей(); + Для Каждого УчетнаяЗапись Из РазрешенияУчетныхЗаписей Цикл + ОписаниеРазрешения = СписокРазрешений.Добавить(); + ОписаниеРазрешения.Ключ = УчетнаяЗапись.Ключ; + ОписаниеРазрешения.Разрешения = УчетнаяЗапись.Значения; + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +Функция РазрешенияУчетныхЗаписей(УчетнаяЗапись = Неопределено) Экспорт + + Результат = Новый Соответствие; + + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол, + | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК Сервер, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК Порт, + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ПОМЕСТИТЬ СервераЭлектроннойПочты + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты <> """" + | И УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = ЛОЖЬ + | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения = ИСТИНА + | И УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты <> """" + | И УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты > 0 + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ""SMTP"", + | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты, + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = ЛОЖЬ + | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки = ИСТИНА + | И УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты <> """" + | И УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты > 0 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СервераЭлектроннойПочты.Ссылка КАК Ссылка, + | СервераЭлектроннойПочты.Протокол КАК Протокол, + | СервераЭлектроннойПочты.Сервер КАК Сервер, + | СервераЭлектроннойПочты.Порт КАК Порт + |ИЗ + | СервераЭлектроннойПочты КАК СервераЭлектроннойПочты + |ГДЕ + | (&Ссылка = НЕОПРЕДЕЛЕНО + | ИЛИ СервераЭлектроннойПочты.Ссылка = &Ссылка) + | + |СГРУППИРОВАТЬ ПО + | СервераЭлектроннойПочты.Протокол, + | СервераЭлектроннойПочты.Сервер, + | СервераЭлектроннойПочты.Порт, + | СервераЭлектроннойПочты.Ссылка + |ИТОГИ ПО + | Ссылка"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); + + УчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока УчетныеЗаписи.Следующий() Цикл + Разрешения = Новый Массив; + НастройкиУчетнойЗаписи = УчетныеЗаписи.Выбрать(); + Пока НастройкиУчетнойЗаписи.Следующий() Цикл + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + НастройкиУчетнойЗаписи.Протокол, + НастройкиУчетнойЗаписи.Сервер, + НастройкиУчетнойЗаписи.Порт, + НСтр("ru = 'Электронная почта.'") + ) + ); + КонецЦикла; + Результат.Вставить(УчетныеЗаписи.Ссылка, Разрешения); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Только для внутреннего использования. +Функция РазрешенияУчетнойЗаписи(УчетнаяЗапись) Экспорт + + Для Каждого Результат Из РазрешенияУчетныхЗаписей(УчетнаяЗапись) Цикл + Возврат Результат.Значение; + КонецЦикла; + + Возврат Новый Массив; + +КонецФункции + +// Только для внутреннего использования. +Функция ЗапросНаВнешниеРазрешенияДляУчетнойЗаписи(Знач УчетнаяЗапись) Экспорт + + Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + РазрешенияУчетнойЗаписи(УчетнаяЗапись), УчетнаяЗапись); + +КонецФункции + +#КонецОбласти + +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы = "ФормаОбъекта" И Не Параметры.Свойство("Ключ") И Не Параметры.Свойство("ЗначениеКопирования") Тогда + ВыбраннаяФорма = "ПомощникНастройкиУчетнойЗаписи"; + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 3e915c522..c58db2c9c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -1,25 +1,20 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Инициализирует новую учетную запись значениями по умолчанию // Процедура ЗаполнитьОбъектЗначениямиПоУмолчанию() Экспорт ИмяПользователя = НСтр("ru = '1С:Предприятие'"); - SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.НеЗадано; ИспользоватьДляПолучения = Ложь; + ИспользоватьДляОтправки = Истина; ОставлятьКопииСообщенийНаСервере = Ложь; ПериодХраненияСообщенийНаСервере = 0; ВремяОжидания = 30; - SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.НеЗадано; - СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.БезАутентификации; - СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.Обычная; - ПользовательSMTP = ""; - ПарольSMTP = ""; - ПортPOP3 = 110; - ПортSMTP = 25; + ПортСервераВходящейПочты = 110; + ПортСервераИсходящейПочты = 25; + ПротоколВходящейПочты = "POP"; КонецПроцедуры @@ -43,11 +38,11 @@ МассивНепроверяемыхРеквизитов = Новый Массив; Если Не ИспользоватьДляОтправки Тогда - МассивНепроверяемыхРеквизитов.Добавить("СерверИсходящейПочтыSMTP"); + МассивНепроверяемыхРеквизитов.Добавить("СерверИсходящейПочты"); КонецЕсли; Если Не ИспользоватьДляПолучения Тогда - МассивНепроверяемыхРеквизитов.Добавить("СерверВходящейПочтыPOP3"); + МассивНепроверяемыхРеквизитов.Добавить("СерверВходящейПочты"); КонецЕсли; Если Не ПустаяСтрока(АдресЭлектроннойПочты) И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Истина) Тогда @@ -61,4 +56,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 59ecc6b80..f2377fe0a 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -126,29 +126,6 @@ Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаСписка Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаВыбора - - ИмяПользователя - - ru - Имя пользователя - - - String - - 100 - - - - ru - Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например, "Иван Петров". - - - - - Index - Use - Use - АдресЭлектроннойПочты @@ -172,8 +149,55 @@ Use Use + + ИмяПользователя + + ru + Имя пользователя + + Имя отправителя + + String + + 100 + + + + ru + Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например, "Иван Петров". + + + + + Index + Use + Use + + + СерверВходящейПочты + + ru + Сервер входящей почты + + + String + + 300 + + + + ru + Адрес POP3 сервера + + + + ShowError + + Use + Use + - СерверИсходящейПочтыSMTP + СерверИсходящейПочты ru Сервер исходящей почты (SMTP) @@ -195,58 +219,11 @@ Use Use - - СерверВходящейПочтыPOP3 - - ru - Сервер входящей почты (POP3) - - - String - - 300 - - - - ru - Адрес POP3 сервера - - - - ShowError - - Use - Use - - - ПортSMTP - - ru - Порт SMTP - - - Number - - 5 - - - - ru - Порт SMTP (необязательное поле) - - - - - 0 - - Use - Use - - ПортPOP3 + ПортСервераВходящейПочты ru - Порт POP3 + Порт сервера входящей почты Number @@ -266,6 +243,30 @@ Use Use + + ПортСервераИсходящейПочты + + ru + Порт сервера исходящей почты + + + Number + + 5 + + + + ru + Порт SMTP (необязательное поле) + + + + + 0 + + Use + Use + Пользователь @@ -280,7 +281,7 @@ ru - Имя пользователя для доступа на POP3 сервер (логин) + Имя пользователя для доступа к почте (логин) @@ -289,6 +290,28 @@ Use Use + + ПользовательSMTP + + ru + Пользователь SMTP + + + String + + 100 + + + + ru + Имя пользователя для дополнительной аутентификации на SMTP сервере + + + + + Use + Use + Пароль @@ -304,75 +327,7 @@ true ru - Пароль для доступа на SMTP/POP3 сервер - - - - - Use - Use - - - SMTPАутентификация - - ru - SMTP аутентификация - - - EnumRef.ВариантыSMTPАутентификации - - - ru - Применяемые параметры SMTP аутентификации - - - - Use - DontUse - - Enum.ВариантыSMTPАутентификации.EmptyRef - - Use - Use - - - СпособSMTPАутентификации - - ru - Способ SMTP аутентификации - - - EnumRef.СпособыSMTPАутентификации - - - ru - Способ аутентификации на сервере SMTP - - - - Use - DontUse - - Enum.СпособыSMTPАутентификации.EmptyRef - - Use - Use - - - ПользовательSMTP - - ru - Пользователь SMTP - - - String - - 100 - - - - ru - Имя пользователя для дополнительной аутентификации на SMTP сервере + Пароль для доступа к почте @@ -403,29 +358,6 @@ Use Use - - СпособPOP3Аутентификации - - ru - Способ POP3 аутентификации - - - EnumRef.СпособыPOP3Аутентификации - - - ru - Способ аутентификации на POP3 сервере - - - - Use - DontUse - - Enum.СпособыPOP3Аутентификации.EmptyRef - - Use - Use - ВремяОжидания @@ -536,6 +468,124 @@ Use Use + + ПротоколВходящейПочты + + ru + Протокол входящей почты + + + String + + 4 + + + + ru + Протокол сервера входящей почты: POP или IMAP. + + + + Use + + Use + Use + + + ИспользоватьЗащищенноеСоединениеДляВходящейПочты + + ru + Использовать защищенное соединение для входящей почты + + + Boolean + + + ru + Использовать шифрование соединения (SSL) + + + + + Use + Use + + + ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + + ru + Использовать защищенное соединение для исходящей почты + + + Boolean + + + ru + Использовать шифрование соединения (SSL) + + + + + Use + Use + + + ИспользоватьБезопасныйВходНаСерверВходящейПочты + + ru + Использовать безопасный вход на сервер входящей почты + + + Boolean + + + ru + Использовать шифрование учетных данных при аутентификации на сервере + + + + + Use + Use + + + ИспользоватьБезопасныйВходНаСерверИсходящейПочты + + ru + Использовать безопасный вход на сервер исходящей почты + + + Boolean + + + ru + Использовать шифрование учетных данных при аутентификации на сервере + + + + + Use + Use + + + ТребуетсяВходНаСерверПередОтправкой + + ru + Требуется вход на сервер перед отправкой + + + Boolean + + + ru + Установите этот флажок, если для аутентификации на SMTP сервере требуется успешное подключение к POP3 серверу. + + + + + Use + Use + УдалитьВПредставлениеВключатьИмяПользователя @@ -576,20 +626,75 @@ Use Use - - ДополнительныеСвойстваУчетнойЗаписи + + СпособPOP3Аутентификации ru - Дополнительные свойства сервера почты + Способ POP3 аутентификации - - - ru - - - PersonalComputer - MobileDevice - + + EnumRef.СпособыPOP3Аутентификации + + + ru + Способ аутентификации на POP3 сервере + + + + Use + DontUse + + Enum.СпособыPOP3Аутентификации.EmptyRef + + Use + Use + + + СпособSMTPАутентификации + + ru + Способ SMTP аутентификации + + + EnumRef.СпособыSMTPАутентификации + + + ru + Способ аутентификации на сервере SMTP + + + + Use + DontUse + + Enum.СпособыSMTPАутентификации.EmptyRef + + Use + Use + + + SMTPАутентификация + + ru + SMTP аутентификация + + + EnumRef.ВариантыSMTPАутентификации + + + ru + Применяемые параметры SMTP аутентификации + + + + Use + DontUse + + Enum.ВариантыSMTPАутентификации.EmptyRef + + Use + Use + ФормаВыбора @@ -622,6 +727,15 @@ PersonalComputer MobileDevice + + ПомощникНастройкиУчетнойЗаписи + + ru + Помощник настройки учетной записи + + PersonalComputer + MobileDevice + ПроверитьУчетнуюЗапись diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl index f1a7d956c..56d458fac 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -11,8 +11,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Вернуться(Команда) @@ -33,3 +34,5 @@ Процедура СохранитьИзменения(Команда) ОповеститьОВыборе("СохранитьИзменения"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html index 49dcf675f..0436fd042 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html @@ -1 +1,7 @@ -Предельно допустимый размера файлов можно увеличить в настройках системы.  \ No newline at end of file + +

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

    +

    В программу можно загрузить несколько файлов.

    +

    Нажмите Продолжить, для того чтобы:

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

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

    +

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl index 94fa0a735..5f0ce644b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,3 +23,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html index 894c0f472..f046f8d3b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html @@ -1,4 +1,4 @@ - +

    + 1 + + + + + БыстрыйДоступПодвалПустаяДекорация + 320 + + <key>ru</key> + <value> </value> + + true + true + + true + + + БыстрыйДоступПодвалПустаяДекорацияРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + + БыстрыйДоступПодвалПустаяДекорацияКонтекстноеМеню + 321 + true + + 1 + true + 1 + true + true + true + + Stretch + + true true true + + <key>ru</key> + <value> </value> + + + ru + + - БыстрыйДоступДекорацияExtendedTooltip - 288 + БыстрыйДоступПодвалРасширеннаяПодсказка + 316 Label true true @@ -766,18 +1013,14 @@ Left - - БыстрыйДоступДекорацияКонтекстноеМеню - 259 - true - - Label - true - true - false - true - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto @@ -799,8 +1042,6 @@ ru - true - false БезГруппыКолонка1ExtendedTooltip 290 @@ -837,8 +1078,6 @@ ru - true - false БезГруппыКолонка2ExtendedTooltip 291 @@ -875,8 +1114,6 @@ ru - true - false БезГруппыКолонка3ExtendedTooltip 292 @@ -910,7 +1147,6 @@ ru Без группы - false БезГруппыExtendedTooltip 289 @@ -932,15 +1168,19 @@ - БезГруппыДекорация + БезГруппыПодвал 43 + + <key>ru</key> + <value> </value> + true true true - БезГруппыДекорацияExtendedTooltip + БезГруппыПодвалРасширеннаяПодсказка 293 Label true @@ -950,7 +1190,7 @@ - БезГруппыДекорацияКонтекстноеМеню + БезГруппыПодвалКонтекстноеМеню 44 true @@ -982,8 +1222,6 @@ ru - true - false СГруппойКолонка1ExtendedTooltip 295 @@ -1020,8 +1258,6 @@ ru - true - false СГруппойКолонка2ExtendedTooltip 296 @@ -1058,8 +1294,6 @@ ru - true - false СГруппойКолонка3ExtendedTooltip 297 @@ -1093,7 +1327,6 @@ ru С группой - false СГруппойExtendedTooltip 294 @@ -1115,15 +1348,19 @@ - СГруппойДекорация + СГруппойПодвал 216 + + <key>ru</key> + <value> </value> + true true true - СГруппойДекорацияExtendedTooltip + СГруппойПодвалРасширеннаяПодсказка 298 Label true @@ -1133,7 +1370,7 @@ - СГруппойДекорацияКонтекстноеМеню + СГруппойПодвалКонтекстноеМеню 217 true @@ -1165,8 +1402,6 @@ ru - true - false СмТакжеКолонка1ExtendedTooltip 300 @@ -1203,8 +1438,6 @@ ru - true - false СмТакжеКолонка2ExtendedTooltip 301 @@ -1241,8 +1474,6 @@ ru - true - false СмТакжеКолонка3ExtendedTooltip 302 @@ -1283,7 +1514,6 @@ ru См также - false СмТакжеExtendedTooltip 299 @@ -1307,15 +1537,19 @@ - СмТакжеДекорация + СмТакжеПодвал 218 + + <key>ru</key> + <value> </value> + true true true - СмТакжеДекорацияExtendedTooltip + СмТакжеПодвалРасширеннаяПодсказка 303 Label true @@ -1325,7 +1559,7 @@ - СмТакжеДекорацияКонтекстноеМеню + СмТакжеПодвалКонтекстноеМеню 219 true @@ -1338,6 +1572,163 @@ Left + true + true + + true + + true + false + + КолонкиExtendedTooltip + 283 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + РезультатыПоискаИзДругихРазделовГруппа + 345 + + РезультатыПоискаИзДругихРазделовДекорация + 347 + + <key>ru</key> + <value>Отчеты, найденные в других разделах: + +</value> + + true + true + + true + + + РезультатыПоискаИзДругихРазделовДекорацияРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + + РезультатыПоискаИзДругихРазделовДекорацияКонтекстноеМеню + 348 + true + + Label + true + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + Style.ToolTipTextColor + + + + + РезультатыПоискаИзДругихРазделов + 350 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + РезультатыПоискаИзДругихРазделовРасширеннаяПодсказка + 351 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Отчеты, найденные в других разделах</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Результаты поиска из других разделов группа + + + РезультатыПоискаИзДругихРазделовГруппаРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ПодвалФормы + 311 СсылкаВсеОтчеты 261 @@ -1373,11 +1764,17 @@ true - true - false + + <key>ru</key> + <value> </value> + + + ru + + - КолонкиExtendedTooltip - 283 + ПодвалФормыРасширеннаяПодсказка + 312 Label true true @@ -1387,7 +1784,6 @@ UsualGroup - Vertical Auto true true @@ -1395,17 +1791,13 @@ Auto - None - false + Bottom + true ФормаКоманднаяПанель -1 Right - - OnSaveDataInSettingsAtServer - ПриСохраненииДанныхВНастройкахНаСервере - NotificationProcessing ОбработкаОповещения @@ -1418,10 +1810,6 @@ BeforeClose ПередЗакрытием - - OnLoadDataFromSettingsAtServer - ПриЗагрузкеДанныхИзНастроекНаСервере - OnCreateAtServer ПриСозданииНаСервере @@ -1437,21 +1825,20 @@ SaveValues Yes DontBlock - Use true true Vertical true true true - UseIfNecessary + Use auto true - РазделПолноеИмя + ТекущийРазделПолноеИмя <key>ru</key> - <value>Раздел полное имя</value> + <value>Текущий раздел полное имя</value> 1 @@ -1466,10 +1853,10 @@ - ДобавленоЭлементов + ВыведеноЭлементовВариантов <key>ru</key> - <value>Добавлено элементов</value> + <value>Выведено элементов вариантов</value> 3 @@ -2013,15 +2400,12 @@ true - - ОтборАвтор - - ОтборНаименование + СтрокаПоиска <key>ru</key> - <value>Наименование</value> + <value>Поиск</value> 11 @@ -2034,15 +2418,12 @@ true - - ОтборНаименование - - РазделСсылка + ТекущийРазделСсылка <key>ru</key> - <value>Раздел ссылка</value> + <value>Текущий раздел ссылка</value> 16 @@ -2056,10 +2437,10 @@ - ТаблицаПодсистем + ПодсистемыПрограммы <key>ru</key> - <value>Таблица подсистем</value> + <value>Подсистемы программы</value> 12 @@ -2068,9 +2449,7 @@ true - - true - + Ссылка @@ -2223,6 +2602,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>РазделСсылка</name> + <title> + <key>ru</key> + <value>Раздел ссылка</value> + + 7 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + ЦветГруппыВариантовОтчетов @@ -2241,6 +2637,95 @@ true + + ИскатьВоВсехРазделах + + <key>ru</key> + <value>Искать</value> + + 17 + + Number + + 1 + + + + true + + + true + + + + ПоказыватьПодсказки + + <key>ru</key> + <value>Отображение описаний</value> + + 20 + + Number + + + + true + + + true + + + + ЦветПодсветкиНайденныхСлов + + <key>ru</key> + <value>Цвет подсветки найденных слов</value> + + 21 + + Color + + + true + + + true + + + + ПоказатьОповещениеОПодсказках + + <key>ru</key> + <value>Показать оповещение о подсказках</value> + + 19 + + Boolean + + + true + + + true + + + + ЦветПодсказки + + <key>ru</key> + <value>Цвет подсказки</value> + + 22 + + Color + + + true + + + true + + Настроить @@ -2358,9 +2843,6 @@ <use> <common>true</common> </use> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.InputFieldClear</picture> - </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>СброситьНастройки</name> @@ -2370,55 +2852,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>СохранитьИзменения</name> - <title> - <key>ru</key> - <value>Сохранить изменения</value> - - 13 - - ru - Завершить настройку панели отчетов и вернуться в нормальный режим (режим просмотра) - - - true - - - StdPicture.SaveValues - - - - СохранитьИзменения - - - TextPicture - Auto - Auto - - - ОтменитьИзменения - - <key>ru</key> - <value>Отменить</value> - - 14 - - ru - Отменить изменения - - - true - - - - ОтменитьИзменения - - - TextPicture - Auto - Auto - ВсеОтчеты @@ -2467,6 +2900,29 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыполнитьПоиск</name> + <title> + <key>ru</key> + <value>Найти</value> + + 8 + + ru + Найти + + + true + + + + ВыполнитьПоиск + + + TextPicture + Auto + Auto + ПутьКПодсистеме diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html index f2fd5bae4..d5d97b658 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -1,25 +1,41 @@ - -

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

    -

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

    -

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

    - - -
    -
  • Настроить (F2)
  • Переводит панель отчетов в режим настройки.
    -
  • Сбросить мои настройки
  • -

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

     

    -

    В режиме настройки:

    -

    Доступны быстрые отборы по наименованию и автору.

    -

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

    -

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

    -

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

    - - - - -
    -
  • Сохранить изменения
  • Сохраняет изменения и переводит панель отчетов в режим просмотра.
    -
  • Отменить
  • Переводит панель отчетов в режим просмотра без сохранения изменений.
    -
  • Настроить (F2)
  • Выводит запрос на сохранение изменений и переводит панель отчетов в режим просмотра.
    -
  • Сбросить мои настройки
  • -

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

    \ No newline at end of file + +

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

    +

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

    +

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

    +

    Режим просмотра

    +

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

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

    Поиск отчетов

    +

    Поиск доступен как в режиме просмотра, так и в режиме настройки.

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

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

    +
    • Нажмите левой кнопкой по наименованию отчета.

    Отмена настроек панели отчетов

    +

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

    +

    Все отчеты

    +

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

    +

    Режим настройки

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

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 05c611b41..f1b8bab91 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,51 +7,15 @@ КонецЕсли; КартинкаБыстрыйДоступ = БиблиотекаКартинок.БыстрыйДоступ; - - РазделПолноеИмя = "Подсистема." + СтрЗаменить(Параметры.ПутьКПодсистеме, ".", ".Подсистема."); - РазделМетаданные = Метаданные.НайтиПоПолномуИмени(РазделПолноеИмя); - РазделСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); - - Если Параметры.Свойство("Заголовок") Тогда - Заголовок = Параметры.Заголовок; - Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчеты раздела ""%1""'"), - РазделМетаданные.Представление()); - КонецЕсли; - - ЭтотОбъект.КлючНазначенияИспользования = "Раздел_" + Строка(РазделСсылка.УникальныйИдентификатор()); - - ВсеПодсистемы = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); - Найденные = ВсеПодсистемы.Строки.НайтиСтроки(Новый Структура("РазделСсылка", РазделСсылка), Истина); - - Если Найденные.Количество() = 0 Тогда - МассивДляОбхода = ВсеПодсистемы.Строки.НайтиСтроки(Новый Структура("Ссылка", РазделСсылка), Истина); - Пока МассивДляОбхода.Количество() > 0 Цикл - ТекущаяСтрокаДерева = МассивДляОбхода[0]; - Для Каждого СтрокаДерева Из ТекущаяСтрокаДерева.Строки Цикл - МассивДляОбхода.Добавить(СтрокаДерева); - КонецЦикла; - Найденные.Добавить(ТекущаяСтрокаДерева); - МассивДляОбхода.Удалить(0); - КонецЦикла; - КонецЕсли; - - Для Каждого СтрокаДерева Из Найденные Цикл - СтрокаТаблицы = ТаблицаПодсистем.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); - СтрокаТаблицы.ИмяЭлемента = СтрЗаменить(СтрокаТаблицы.ПолноеИмя, ".", "_"); - СтрокаТаблицы.НомерЭлемента = 0; - Если СтрокаДерева.Ссылка <> РазделСсылка Тогда - СтрокаТаблицы.РодительСсылка = СтрокаДерева.Родитель.Ссылка; - КонецЕсли; - КонецЦикла; - ЦветСкрытыхВариантов = ЦветаСтиля.СкрытыйВариантОтчетаЦвет; ЦветВидимыхВариантов = ЦветаСтиля.ВидимыйВариантОтчетаЦвет; ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетовЦвет; + ЦветПодсветкиНайденныхСлов = WebЦвета.Желтый; + ЦветПодсказки = ЦветаСтиля.ПоясняющийТекст; ШрифтЖирный = Новый Шрифт(, , Истина); + ЗаполнитьИнформациюОПодсистемахИУстановитьЗаголовок(); + НаборРеквизитов = ПолучитьРеквизиты(); Для Каждого Реквизит Из НаборРеквизитов Цикл ПостоянныеРеквизиты.Добавить(Реквизит.Имя); @@ -62,7 +25,20 @@ ПостоянныеКоманды.Добавить(Команда.Имя); КонецЦикла; - ОбновитьПанельОтчетов(Ложь, Ложь); + Элементы.ИскатьВоВсехРазделах.Видимость = ЗначениеЗаполнено(СтрокаПоиска); + + // Чтение пользовательской настройки, общей для всех панелей отчетов. + ЗагрузитьВсеНастройки(); + + Если Параметры.Свойство("СтрокаПоиска") Тогда + СтрокаПоиска = Параметры.СтрокаПоиска; + КонецЕсли; + Если Параметры.Свойство("ИскатьВоВсехРазделах") Тогда + ИскатьВоВсехРазделах = Параметры.ИскатьВоВсехРазделах; + КонецЕсли; + + // Заполнение панели. + ОбновитьПанельОтчетов(); КонецПроцедуры &НаКлиенте @@ -72,43 +48,40 @@ #Иначе ВебКлиент = Ложь; #КонецЕсли + Если ПоказатьОповещениеОПодсказках Тогда + ПоказатьОповещениеПользователя( + НСтр("ru = 'Новая возможность'"), + "e1cib/data/Справочник.ВариантыОтчетов.Форма.ОписаниеНовойВозможностиПоВыводуОписаний", + НСтр("ru = 'Вывод описаний в панелях отчетов'"), + БиблиотекаКартинок.Информация32 + ); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда - СохранитьНастройки = Ложь; - ОставитьИзмененияВНастройках = РежимНастройки; - ОбновитьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках); + Событие = ""; + Если ТипЗнч(Параметр) = Тип("Структура") Тогда + Если Параметр.Свойство("ПоказыватьПодсказки") Тогда + ПоказыватьПодсказки = Параметр.ПоказыватьПодсказки; + Событие = "ПоказыватьПодсказкиПриИзменении"; + КонецЕсли; + КонецЕсли; + ОбновитьПанельОтчетов(Событие); КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - // Вызывается после загрузки данных из настроек в реквизиты формы - - ОтборНаименованиеСписокВыбора = Настройки.Получить("ОтборНаименованиеСписокВыбора"); - Если ТипЗнч(ОтборНаименованиеСписокВыбора) = Тип("Массив") Тогда - Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора); - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) - Настройки.Вставить("ОтборНаименованиеСписокВыбора", Элементы.ОтборНаименование.СписокВыбора.ВыгрузитьЗначения()); -КонецПроцедуры - &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если РежимНастройки Тогда - ТекстВопроса = ТекстВопросаОСохраненииИзменений(); - Обработчик = Новый ОписаниеОповещения("СохранитьИЗакрыть", ЭтотОбъект); - ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Обработчик, Отказ, ТекстВопроса); + СохранитьПользовательскиеНастройки(); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантНажатие(Элемент) @@ -118,11 +91,19 @@ КонецЕсли; Вариант = Найденные[0]; + ПараметрыОткрытия = Новый Структура; + Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); + КонецЕсли; + ПараметрыОткрытия.Вставить("Раздел", ТекущийРазделСсылка); + ПараметрыОткрытия.Вставить("Подсистема", Вариант.Подсистема); + + Найденные = ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема)); + ПараметрыОткрытия.Вставить("ПодсистемаПредставление", Найденные[0].Представление); + // Открытие Если Вариант.Дополнительный Тогда - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка); ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет); ВариантыОтчетовКлиент.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); @@ -139,9 +120,6 @@ Уникальность = Уникальность + "/КлючВарианта." + Вариант.КлючВарианта; КонецЕсли; - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); - ПараметрыОткрытия.Вставить("Раздел", РазделСсылка); ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); @@ -158,7 +136,7 @@ НадписьИмя = Сред(Флажок.Имя, СтрДлина("Флажок_")+1); Элемент = Элементы.Найти(НадписьИмя); Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", НадписьИмя)); - Если Найденные.Количество() <> 1 ИЛИ Элемент = Неопределено Тогда + Если Найденные.Количество() <> 1 Или Элемент = Неопределено Тогда Возврат; КонецЕсли; Вариант = Найденные[0]; @@ -167,58 +145,95 @@ КонецПроцедуры &НаКлиенте -Процедура ОтборНаименованиеПриИзменении(Элемент) - Если ЗначениеЗаполнено(ОтборНаименование) Тогда - СписокВыбора = Элементы.ОтборНаименование.СписокВыбора; - ЭлементСписка = СписокВыбора.НайтиПоЗначению(ОтборНаименование); - Если ЭлементСписка = Неопределено Тогда - СписокВыбора.Вставить(0, ОтборНаименование); - Если СписокВыбора.Количество() > 10 Тогда - СписокВыбора.Удалить(10); - КонецЕсли; - Иначе - Индекс = СписокВыбора.Индекс(ЭлементСписка); - Если Индекс <> 0 Тогда - СписокВыбора.Сдвинуть(Индекс, -Индекс); - КонецЕсли; - КонецЕсли; - ТекущийЭлемент = Элементы.ОтборНаименование; +Процедура СтрокаПоискаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка) + Если Не ПустаяСтрока(Текст) И ВведенаСлишкомКороткаяСтрокаПоиска(Текст) Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ВведенаСлишкомКороткаяСтрокаПоиска(Текст) + Текст = СокрЛП(Текст); + Если СтрДлина(Текст) < 2 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Введена слишком короткая строка поиска.'")); + Возврат Истина; КонецЕсли; - ОбновитьПанельОтчетов(Ложь, Истина); + ЕстьНормальноеСлово = Ложь; + МассивСлов = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(Текст); + Для Каждого Слово Из МассивСлов Цикл + Если СтрДлина(Слово) >= 2 Тогда + ЕстьНормальноеСлово = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ЕстьНормальноеСлово Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Введены слишком короткие слова для поиска.'")); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + Если Не ПустаяСтрока(СтрокаПоиска) И ВведенаСлишкомКороткаяСтрокаПоиска(СтрокаПоиска) Тогда + СтрокаПоиска = ""; + ТекущийЭлемент = Элементы.СтрокаПоиска; + Возврат; + КонецЕсли; + + ОбновитьПанельОтчетов("СтрокаПоискаПриИзменении"); + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ТекущийЭлемент = Элементы.СтрокаПоиска; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОтборАвторПриИзменении(Элемент) - ОбновитьПанельОтчетов(Ложь, Истина); + ОбновитьПанельОтчетов(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - &НаКлиенте -Процедура Настроить(Команда) - Если РежимНастройки И Модифицированность Тогда - ТекстВопроса = ТекстВопросаОСохраненииИзменений(); - ЗаголовокВопроса = СтрЗаменить(Заголовок, "*", ""); - Обработчик = Новый ОписаниеОповещения("НастроитьЗавершение", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, 60, КодВозвратаДиалога.Да, ЗаголовокВопроса); +Процедура ИскатьВоВсехРазделахПриИзменении(Элемент) + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ОбновитьПанельОтчетов("ИскатьВоВсехРазделахПриИзменении"); + ТекущийЭлемент = Элементы.ВыполнитьПоиск; Иначе - РежимНастройки = НЕ РежимНастройки; - ОбновитьПанельОтчетов(Ложь, Ложь); + ТекущийЭлемент = Элементы.СтрокаПоиска; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура СохранитьИзменения(Команда) - РежимНастройки = Ложь; - ОбновитьПанельОтчетов(Истина, Ложь); +Процедура ЗаголовокРазделаНажатие(Элемент) + ИмяРодителя = Элемент.Родитель.Имя; + ИмяРаздела = Сред(ИмяРодителя, Найти(ИмяРодителя, "_")+1); + + ФормаПараметры = Новый Структура; + ФормаПараметры.Вставить("ПутьКПодсистеме", ИмяРаздела); + ФормаПараметры.Вставить("СтрокаПоиска", СтрокаПоиска); + ФормаПараметры.Вставить("ИскатьВоВсехРазделах", 0); + + ФормаВладелец = ЭтотОбъект; + ФормаУникальность = Истина; + + ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, ФормаВладелец, ФормаУникальность); КонецПроцедуры &НаКлиенте -Процедура ОтменитьИзменения(Команда) - РежимНастройки = Ложь; - ОбновитьПанельОтчетов(Ложь, Ложь); +Процедура ПоказыватьПодсказкиПриИзменении(Элемент) + ОбновитьПанельОтчетов("ПоказыватьПодсказкиПриИзменении"); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Настроить(Команда) + РежимНастройки = Не РежимНастройки; + ОбновитьПанельОтчетов(); КонецПроцедуры &НаКлиенте @@ -290,32 +305,39 @@ &НаКлиенте Процедура ВсеОтчеты(Команда) - ФормаПараметры = Новый Структура("РазделСсылка", РазделСсылка); - ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаСписка", ФормаПараметры, , "ВариантыОтчетов.ВсеОтчеты." + РазделПолноеИмя); + ФормаПараметры = Новый Структура; + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ФормаПараметры.Вставить("СтрокаПоиска", СтрокаПоиска); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаПоиска) И Не РежимНастройки И ИскатьВоВсехРазделах = 1 Тогда + // Спозиционироваться на корне дерева. + РазделСсылка = ПредопределенноеЗначение("Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка"); + Иначе + РазделСсылка = ТекущийРазделСсылка; + КонецЕсли; + ФормаПараметры.Вставить("РазделСсылка", РазделСсылка); + ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаСписка", ФормаПараметры, , "ВариантыОтчетов.ВсеОтчеты"); КонецПроцедуры &НаКлиенте Процедура Обновить(Команда) - СохранитьНастройки = Ложь; - ОставитьИзмененияВНастройках = РежимНастройки; - ОбновитьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках); + ОбновитьПанельОтчетов(); КонецПроцедуры &НаКлиенте -Функция ТекстВопросаОСохраненииИзменений() - Возврат НСтр("ru = 'Настройки расположения отчетов были изменены. - |Сохранить изменения?'"); -КонецФункции +Процедура ВыполнитьПоиск(Команда) + ОбновитьПанельОтчетов(); +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент &НаКлиенте Процедура ПоказатьСкрытьВариант(Вариант, Элемент, Показать) - Модифицированность = Истина; Вариант.Видимость = Показать; Вариант.ИзмененПользователем = Истина; Вариант.СвоиНастройки = Истина; @@ -332,7 +354,6 @@ &НаКлиенте Процедура ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, БыстрыйДоступ) - Модифицированность = Истина; Если Вариант.БыстрыйДоступ = БыстрыйДоступ Тогда Возврат; КонецЕсли; @@ -343,7 +364,7 @@ Вариант.СвоиНастройки = Истина; // Связанное действие: если добавляемый в быстрый доступ вариант не видим - показываем его - Если БыстрыйДоступ И НЕ Вариант.Видимость Тогда + Если БыстрыйДоступ И Не Вариант.Видимость Тогда ПоказатьСкрытьВариант(Вариант, Элемент, Истина); КонецЕсли; @@ -358,23 +379,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура НастроитьЗавершение(Ответ, ДополнительныеПараметры) Экспорт - Если Ответ = КодВозвратаДиалога.Да Тогда - СохранитьИзменения(Неопределено); - ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда - ОтменитьИзменения(Неопределено); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьИЗакрыть(Результат, ДополнительныеПараметры) Экспорт - - СохранитьПользовательскиеНастройки(); - Закрыть(); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -384,11 +388,8 @@ Элемент = Элементы.Найти(Вариант.НадписьИмя); Если БыстрыйДоступ Тогда - Элемент.Шрифт = ШрифтЖирный; + Элемент.Шрифт = Новый Шрифт; ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БыстрыйДоступ); - Если НЕ Элементы.БыстрыйДоступДекорация.Видимость Тогда - Элементы.БыстрыйДоступДекорация.Видимость = Истина; - КонецЕсли; ИначеЕсли Вариант.СмТакже Тогда Элемент.Шрифт = Новый Шрифт; ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.СмТакже); @@ -397,13 +398,13 @@ ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БезГруппы); Иначе Элемент.Шрифт = ?(Вариант.Важный, ШрифтЖирный, Новый Шрифт); - Найденные = ТаблицаПодсистем.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема)); + Найденные = ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема)); Подсистема = Найденные[0]; - Если Подсистема.НомерЭлемента = 0 Тогда - Возврат; - КонецЕсли; ГруппаДляПереноса = Элементы.Найти(Подсистема.ИмяЭлемента + "_1"); + Если ГруппаДляПереноса = Неопределено Тогда + Возврат; + КонецЕсли; КонецЕсли; ПередКакимЭлементом = Неопределено; @@ -412,33 +413,27 @@ КонецЕсли; Элементы.Переместить(Элемент.Родитель, ГруппаДляПереноса, ПередКакимЭлементом); + //ЭлементРасширеннаяПодсказка = Элементы.Найти(Вариант.НадписьИмя + "_РасширеннаяПодсказка"); + //Если ЭлементРасширеннаяПодсказка <> Неопределено Тогда + // Элементы.Переместить(ЭлементРасширеннаяПодсказка, ГруппаДляПереноса, ПередКакимЭлементом); + //КонецЕсли; - КартинкаИмя = "Картинка_" + Вариант.НадписьИмя; - Картинка = Элементы.Найти(КартинкаИмя); - КартинкаВыведена = (Картинка <> Неопределено И Картинка.Видимость <> Ложь); - Если БыстрыйДоступ И Картинка = Неопределено Тогда - Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), Элемент.Родитель, Элемент); - Картинка.Вид = ВидДекорацииФормы.Картинка; - Картинка.Ширина = 2; - Картинка.Высота = 1; - Картинка.Картинка = КартинкаБыстрыйДоступ; - Картинка.РастягиватьПоГоризонтали = Ложь; - Картинка.РастягиватьПоВертикали = Ложь; - КонецЕсли; - Если КартинкаВыведена <> БыстрыйДоступ Тогда - Картинка.Видимость = БыстрыйДоступ; - КонецЕсли; - - КартинкаОтступа = Элементы.Найти("КартинкаОтступа_" + Вариант.НадписьИмя); - Если КартинкаОтступа <> Неопределено Тогда - КартинкаОтступа.Видимость = НЕ БыстрыйДоступ; + Если БыстрыйДоступ Тогда + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Видимость = Ложь; + Иначе + ВариантыБыстрогоДоступа = ДобавленныеВарианты.НайтиСтроки(Новый Структура("БыстрыйДоступ", Истина)); + Если ВариантыБыстрогоДоступа.Количество() = 0 Тогда + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Видимость = Истина; + Иначе + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Видимость = Ложь; + КонецЕсли; КонецЕсли; ФлажокИмя = "Флажок_" + Вариант.НадписьИмя; Флажок = Элементы.Найти(ФлажокИмя); ФлажокВыведен = (Флажок.Видимость = Истина); Если ФлажокВыведен = БыстрыйДоступ Тогда - Флажок.Видимость = НЕ БыстрыйДоступ; + Флажок.Видимость = Не БыстрыйДоступ; КонецЕсли; НадписьКонтекстноеМеню = Элемент.КонтекстноеМеню; @@ -446,7 +441,7 @@ КнопкаУбрать = Элементы.Найти("УбратьИзБыстрогоДоступа_" + Вариант.НадписьИмя); КнопкаПереместить = Элементы.Найти("ПереместитьВБыстрыйДоступ_" + Вариант.НадписьИмя); КнопкаУбрать.Видимость = БыстрыйДоступ; - КнопкаПереместить.Видимость = НЕ БыстрыйДоступ; + КнопкаПереместить.Видимость = Не БыстрыйДоступ; КонецЕсли; КонецПроцедуры @@ -454,67 +449,56 @@ &НаСервере Процедура СброситьНастройкиИОбновитьПанельОтчетов() РежимНастройки = Ложь; - Модифицированность = Ложь; - РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(РазделСсылка); - ОбновитьПанельОтчетов(Ложь, Ложь); + РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(ТекущийРазделСсылка); + ОбновитьПанельОтчетов(); КонецПроцедуры &НаСервере -Процедура ОбновитьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках) - Если СохранитьНастройки Тогда - ОставитьИзмененияВНастройках = Ложь; - КонецЕсли; - - Если РежимНастройки И Элементы.ВерхняяПанельНадпись.Заголовок = "" Тогда - Элементы.ВерхняяПанельНадпись.Заголовок = НСтр("ru = 'Настроить быстрый доступ можно с помощью правой кнопки мыши.'"); - КонецЕсли; - - Элементы.ОтборНаименование.Видимость = РежимНастройки; - Элементы.ОтборАвтор.Видимость = РежимНастройки; - Элементы.СохранитьИзменения.Видимость = РежимНастройки; - Элементы.ОтменитьИзменения.Видимость = РежимНастройки; - Элементы.ВерхняяПанельСтрока2.Видимость = РежимНастройки; - Элементы.ВерхняяПанельОтступ.Видимость = РежимНастройки; - Элементы.ВсеОтчеты.Видимость = НЕ РежимНастройки; - Элементы.СсылкаВсеОтчеты.Видимость = НЕ РежимНастройки; - - // Заголовок - ПрефиксРежимаНастройки = НСтр("ru = 'Настройка:'") + " "; - ПрефиксВыведен = (Лев(Заголовок, СтрДлина(ПрефиксРежимаНастройки)) = ПрефиксРежимаНастройки); - Если ПрефиксВыведен <> РежимНастройки Тогда - Если РежимНастройки Тогда - Заголовок = ПрефиксРежимаНастройки + Заголовок; - Иначе - Заголовок = СтрЗаменить(Заголовок, ПрефиксРежимаНастройки, ""); - КонецЕсли; - КонецЕсли; - - // Удаление элементов - УдаляемыеЭлементы = Новый Массив; - Для Каждого ЭлементУровня2 Из Элементы.Колонки.ПодчиненныеЭлементы Цикл - Если ТипЗнч(ЭлементУровня2) = Тип("ГруппаФормы") Тогда - Для Каждого ЭлементУровня3 Из ЭлементУровня2.ПодчиненныеЭлементы Цикл - Если ТипЗнч(ЭлементУровня3) = Тип("ГруппаФормы") Тогда - Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл - УдаляемыеЭлементы.Добавить(ЭлементУровня4); - КонецЦикла; +Процедура ОбновитьПанельОтчетов(Знач Событие = "") + Если Событие = "" Или Событие = "СтрокаПоискаПриИзменении" Тогда + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(СтрокаПоиска); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, СтрокаПоиска); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); КонецЕсли; - КонецЦикла; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; + КонецЕсли; + Если Событие = "СтрокаПоискаПриИзменении" Тогда + СохранитьНастройкиЭтойПанелиОтчетов(); + КонецЕсли; КонецЕсли; - КонецЦикла; - Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл - Элементы.Удалить(УдаляемыйЭлемент); - КонецЦикла; + ИначеЕсли Событие = "ПоказыватьПодсказкиПриИзменении" + Или Событие = "ИскатьВоВсехРазделахПриИзменении" Тогда + СохранитьНастройкиВсехПанелейОтчетов(); + КонецЕсли; + Элементы.ИскатьВоВсехРазделах.Видимость = Не РежимНастройки И ЗначениеЗаполнено(СтрокаПоиска); - // Удаление реквизитов - УдаляемыеРеквизиты = Новый Массив; - НаборРеквизитов = ПолучитьРеквизиты(); - Для Каждого Реквизит Из НаборРеквизитов Цикл - Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда - УдаляемыеРеквизиты.Добавить(Реквизит.Имя); + Элементы.ОтборАвтор.Видимость = РежимНастройки; + Элементы.ГруппаПоказыватьПодсказки.Видимость = РежимНастройки; + Элементы.БыстрыйДоступШапкаНадпись.ОтображениеПодсказки = ?(РежимНастройки, ОтображениеПодсказки.Кнопка, ОтображениеПодсказки.Нет); + Элементы.РезультатыПоискаИзДругихРазделовГруппа.Видимость = (ИскатьВоВсехРазделах = 1); + Элементы.Настроить.Заголовок = ?(РежимНастройки, НСтр("ru = 'Вернуться к режиму просмотра'"), ""); + + // Заголовок. + СуффиксРежимаНастройки = " (" + НСтр("ru = 'настройка'") + ")"; + СуффиксВыведен = (Прав(Заголовок, СтрДлина(СуффиксРежимаНастройки)) = СуффиксРежимаНастройки); + Если СуффиксВыведен <> РежимНастройки Тогда + Если РежимНастройки Тогда + Заголовок = Заголовок + СуффиксРежимаНастройки; + Иначе + Заголовок = СтрЗаменить(Заголовок, СуффиксРежимаНастройки, ""); КонецЕсли; - КонецЦикла; - ИзменитьРеквизиты(, УдаляемыеРеквизиты); + КонецЕсли; + + // Удаление элементов. + ОчиститьФормуОтДобавленныхЭлементов(); // Удаление команд Если ВебКлиент Тогда @@ -529,72 +513,223 @@ КонецЦикла; КонецЕсли; - // Сохранение пользовательских настроек - Если СохранитьНастройки Тогда - СохранитьПользовательскиеНастройки(); - КонецЕсли; - - // Очистка изменений в пользовательских настройках - Если НЕ ОставитьИзмененияВНастройках Тогда - ДобавленныеВарианты.Очистить(); - ДобавленоЭлементов = 0; - КонецЕсли; + // Сохранение пользовательских настроек. + СохранитьПользовательскиеНастройки(); // Сброс номера последнего добавленного элемента - Для Каждого СтрокаТаблицы Из ТаблицаПодсистем Цикл + Для Каждого СтрокаТаблицы Из ПодсистемыПрограммы Цикл СтрокаТаблицы.НомерЭлемента = 0; КонецЦикла; // Заполнение панели отчетов ЗаполнитьПанельОтчетов(); - - // Снятие флажка модифицированности - Если Модифицированность И НЕ ОставитьИзмененияВНастройках Тогда - Модифицированность = Ложь; - КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура ОчиститьФормуОтДобавленныхЭлементов() + УдаляемыеЭлементы = Новый Массив; + Для Каждого ЭлементУровня3 Из Элементы.БыстрыйДоступ.ПодчиненныеЭлементы Цикл + Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + КонецЦикла; + Для Каждого ЭлементУровня3 Из Элементы.БезГруппы.ПодчиненныеЭлементы Цикл + Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + КонецЦикла; + Для Каждого ЭлементУровня3 Из Элементы.СГруппой.ПодчиненныеЭлементы Цикл + Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + КонецЦикла; + Для Каждого ЭлементУровня3 Из Элементы.СмТакже.ПодчиненныеЭлементы Цикл + Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + КонецЦикла; + Для Каждого ЭлементУровня4 Из Элементы.РезультатыПоискаИзДругихРазделов.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(УдаляемыйЭлемент); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура СохранитьПользовательскиеНастройки() + Если ДобавленныеВарианты.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Отбор = Новый Структура("ИзмененПользователем", Истина); + Колонки = "Ссылка, Подсистема, Видимость, БыстрыйДоступ"; + ИзмененныеНастройки = ДобавленныеВарианты.Выгрузить(Отбор, Колонки); + Если ИзмененныеНастройки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ИзмененныеНастройки.Колонки.Ссылка.Имя = "Вариант"; + ИзмененныеНастройки.Колонки.Подсистема.Имя = "РазделИлиГруппа"; + РегистрыСведений.НастройкиВариантовОтчетов.СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки); +КонецПроцедуры + +&НаСервере +Функция ПодгруппаСНаименьшимКоличествомЭлементов(Группа) + ПодгруппаМин = Неопределено; + ВложенныхЭлементовМин = 0; + Для Каждого Подгруппа Из Группа.ПодчиненныеЭлементы Цикл + ВложенныхЭлементов = Подгруппа.ПодчиненныеЭлементы.Количество(); + Если ВложенныхЭлементов < ВложенныхЭлементовМин Или ПодгруппаМин = Неопределено Тогда + ПодгруппаМин = Подгруппа; + ВложенныхЭлементовМин = ВложенныхЭлементов; + КонецЕсли; + КонецЦикла; + Возврат ПодгруппаМин; +КонецФункции + +&НаСервере +Процедура ЗаполнитьИнформациюОПодсистемахИУстановитьЗаголовок() + ЗаголовокПереопределенКомандой = Параметры.Свойство("Заголовок"); + Если ЗаголовокПереопределенКомандой Тогда + Заголовок = Параметры.Заголовок; + КонецЕсли; + + ТекущийРазделПолноеИмя = "Подсистема." + СтрЗаменить(Параметры.ПутьКПодсистеме, ".", ".Подсистема."); + + ВсеПодсистемы = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + ВсеРазделы = ВсеПодсистемы.Строки[0].Строки; + Для Каждого СтрокаРаздел Из ВсеРазделы Цикл + СтрокаТаблицы = ПодсистемыПрограммы.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаРаздел); + СтрокаТаблицы.ИмяЭлемента = СтрЗаменить(СтрокаРаздел.ПолноеИмя, ".", "_"); + СтрокаТаблицы.НомерЭлемента = 0; + СтрокаТаблицы.РазделСсылка = СтрокаРаздел.Ссылка; + + Если СтрокаРаздел.ПолноеИмя = ТекущийРазделПолноеИмя Тогда + ТекущийРазделСсылка = СтрокаРаздел.Ссылка; + Если ЗаголовокПереопределенКомандой Тогда + СтрокаРаздел.ПолноеПредставление = Параметры.Заголовок; + Иначе + Заголовок = СтрокаРаздел.ПолноеПредставление; + КонецЕсли; + КонецЕсли; + + Найденные = СтрокаРаздел.Строки.НайтиСтроки(Новый Структура("РазделСсылка", СтрокаРаздел.Ссылка), Истина); + Для Каждого СтрокаДерева Из Найденные Цикл + СтрокаТаблицы = ПодсистемыПрограммы.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); + СтрокаТаблицы.ИмяЭлемента = СтрЗаменить(СтрокаТаблицы.ПолноеИмя, ".", "_"); + СтрокаТаблицы.НомерЭлемента = 0; + СтрокаТаблицы.РодительСсылка = СтрокаДерева.Родитель.Ссылка; + СтрокаТаблицы.РазделСсылка = СтрокаРаздел.Ссылка; + + Если СтрокаДерева.ПолноеИмя = ТекущийРазделПолноеИмя Тогда + ТекущийРазделСсылка = СтрокаДерева.Ссылка; + Если ЗаголовокПереопределенКомандой Тогда + СтрокаДерева.ПолноеПредставление = Параметры.Заголовок; + Иначе + Заголовок = СтрокаДерева.ПолноеПредставление; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КлючНазначенияИспользования = "Раздел_" + Строка(ТекущийРазделСсылка.УникальныйИдентификатор()); +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьВсеНастройки() + ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеНастройки); // "ПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах". + + ЛокальныеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + КлючНазначенияИспользования); + Если ЛокальныеНастройки <> Неопределено Тогда + Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ЛокальныеНастройки.СтрокаПоискаСписокВыбора); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиВсехПанелейОтчетов() + ОбщиеНастройки = Новый Структура; + ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); + ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + "ПанельОтчетов", + ОбщиеНастройки); +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиЭтойПанелиОтчетов() + ЛокальныеНастройки = Новый Структура; + ЛокальныеНастройки.Вставить("СтрокаПоискаСписокВыбора", Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения()); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + КлючНазначенияИспользования, + ЛокальныеНастройки); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер / Заполнение панели отчетов + &НаСервере Процедура ЗаполнитьПанельОтчетов() + // Очистка сведений об изменениях в пользовательских настройках. + ДобавленныеВарианты.Очистить(); - Варианты = ВариантыОтчетовЭтойПанели(); + ПараметрыЗаполнения = Новый Структура; + ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения); - ПеременныеКонтекста = Новый Структура("ИмяГруппы, ДобавляемыеРеквизиты", "", Новый Массив); - ИнициализироватьПеременныеКонтекста(ПеременныеКонтекста); + НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения); Если РежимНастройки Тогда - ПеременныеКонтекста.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = Истина; - ПеременныеКонтекста.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = Ложь; + ПараметрыЗаполнения.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = Истина; + ПараметрыЗаполнения.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = Ложь; КонецЕсли; - ВариантыБыстрогоДоступа = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ", Ложь, Истина)); - ПеременныеКонтекста.ИмяГруппы = "БыстрыйДоступ"; - ВывестиВариантыБезГруппы(ВариантыБыстрогоДоступа, ПеременныеКонтекста); + ВывестиВариантыРаздела(ПараметрыЗаполнения, ТекущийРазделСсылка); - Если РежимНастройки Тогда - ПеременныеКонтекста.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = Ложь; - ПеременныеКонтекста.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = Истина; + Если ПараметрыЗаполнения.ТолькоТекущийРаздел Тогда + Элементы.РезультатыПоискаИзДругихРазделовГруппа.Видимость = Ложь; + Иначе + Элементы.РезультатыПоискаИзДругихРазделовГруппа.Видимость = Истина; + Если ПараметрыЗаполнения.ДругиеРазделы.Количество() = 0 Тогда + Надпись = Элементы.Вставить("ВДругихРазделах", Тип("ДекорацияФормы"), Элементы.РезультатыПоискаИзДругихРазделов); + Надпись.Заголовок = " " + НСтр("ru = 'Отчеты в других разделах не найдены.'") + Символы.ПС; + Надпись.Высота = 2; + КонецЕсли; + Для Каждого РазделСсылка Из ПараметрыЗаполнения.ДругиеРазделы Цикл + ВывестиВариантыРаздела(ПараметрыЗаполнения, РазделСсылка); + КонецЦикла; + Если ПараметрыЗаполнения.НеВыведено > 0 Тогда // Вывод информационной надписи. + ЗаголовокНадписи = НСтр("ru = 'Выведены первые %1 отчетов из других разделов, уточните поисковый запрос.'"); + ЗаголовокНадписи = СтрЗаменить(ЗаголовокНадписи, "%1", ПараметрыЗаполнения.ПределВывода); + Надпись = Элементы.Вставить("ПределВыводаПревышен", Тип("ДекорацияФормы"), Элементы.РезультатыПоискаИзДругихРазделов); + Надпись.Заголовок = ЗаголовокНадписи; + Надпись.Шрифт = ШрифтЖирный; + Надпись.Высота = 2; + КонецЕсли; КонецЕсли; - ВариантыБезГруппы = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы", Ложь, Ложь, Истина)); - ПеременныеКонтекста.ИмяГруппы = "БезГруппы"; - ВывестиВариантыБезГруппы(ВариантыБезГруппы, ПеременныеКонтекста); - - ВариантыСГруппой = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Ложь)); - ПеременныеКонтекста.ИмяГруппы = "СГруппой"; - ВывестиВариантыСГруппой(ВариантыСГруппой, ПеременныеКонтекста); - - ВариантыСмТакже = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Истина)); - ПеременныеКонтекста.ИмяГруппы = "СмТакже"; - ВывестиВариантыБезГруппы(ВариантыСмТакже, ПеременныеКонтекста); - - Если ПеременныеКонтекста.ДобавляемыеРеквизиты.Количество() > 0 Тогда - ИзменитьРеквизиты(ПеременныеКонтекста.ДобавляемыеРеквизиты); - Для Каждого Реквизит Из ПеременныеКонтекста.ДобавляемыеРеквизиты Цикл + Если ПараметрыЗаполнения.ДобавляемыеРеквизиты.Количество() > 0 Тогда + // Регистрация старых реквизитов для удаления. + УдаляемыеРеквизиты = Новый Массив; + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда + УдаляемыеРеквизиты.Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + // Удаление старых и добавление новых реквизитов. + ИзменитьРеквизиты(ПараметрыЗаполнения.ДобавляемыеРеквизиты, УдаляемыеРеквизиты); + // Связывание новых реквизитов с данными. + Для Каждого Реквизит Из ПараметрыЗаполнения.ДобавляемыеРеквизиты Цикл Флажок = Элементы.Найти(Реквизит.Имя); Флажок.ПутьКДанным = Реквизит.Имя; НадписьИмя = Сред(Реквизит.Имя, СтрДлина("Флажок_")+1); @@ -606,276 +741,18 @@ КонецЦикла; КонецЕсли; - // Добавление вариантов, скрытых отбором (для сохранения их пользовательских настроек). - ВариантыСкрытыеОтбором = Варианты.НайтиСтроки(Новый Структура("СкрытОтбором", Истина)); - Для Каждого Вариант Из ВариантыСкрытыеОтбором Цикл - Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Ссылка, Подсистема", Вариант.Ссылка, Вариант.Подсистема)); - Если Найденные.Количество() = 0 Тогда - СтрокаТаблицы = ДобавленныеВарианты.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант); - КонецЕсли; - КонецЦикла; - - Элементы.БыстрыйДоступДекорация.Видимость = (ВариантыБыстрогоДоступа.Количество() > 0); - Элементы.БезГруппыДекорация.Видимость = (ВариантыБезГруппы.Количество() > 0); - Элементы.СГруппойДекорация.Видимость = (ВариантыСГруппой.Количество() > 0); - Элементы.СмТакжеДекорация.Видимость = (ВариантыСмТакже.Количество() > 0); - - Если ВариантыБыстрогоДоступа.Количество() = 0 - И ВариантыБезГруппы.Количество() = 0 - И ВариантыСГруппой.Количество() = 0 - И ВариантыСмТакже.Количество() = 0 Тогда - Надпись = Элементы.Вставить("СписокОтчетовПуст", Тип("ДекорацияФормы"), Элементы.БыстрыйДоступКолонка1); - Если ВариантыСкрытыеОтбором.Количество() = 0 Тогда - Надпись.Заголовок = НСтр("ru = 'Нет доступных отчетов.'"); - Иначе - Надпись.Заголовок = НСтр("ru = 'Варианты отчетов не найдены.'"); - КонецЕсли; - КонецЕсли; - КонецПроцедуры &НаСервере -Процедура СохранитьПользовательскиеНастройки() - ИзмененныеНастройки = ДобавленныеВарианты.Выгрузить( - Новый Структура("ИзмененПользователем", Истина), - "Ссылка, Подсистема, Видимость, БыстрыйДоступ"); - ИзмененныеНастройки.Колонки.Ссылка.Имя = "Вариант"; - ИзмененныеНастройки.Колонки.Подсистема.Имя = "РазделИлиГруппа"; - РегистрыСведений.НастройкиВариантовОтчетов.СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки); - Модифицированность = Ложь; -КонецПроцедуры - -&НаСервере -Функция ПодгруппаСНаименьшимКоличествомЭлементов(Группа) - ПодгруппаМин = Неопределено; - ВложенныхЭлементовМин = 0; - Для Каждого Подгруппа Из Группа.ПодчиненныеЭлементы Цикл - ВложенныхЭлементов = Подгруппа.ПодчиненныеЭлементы.Количество(); - Если ВложенныхЭлементов < ВложенныхЭлементовМин ИЛИ ПодгруппаМин = Неопределено Тогда - ПодгруппаМин = Подгруппа; - ВложенныхЭлементовМин = ВложенныхЭлементов; - КонецЕсли; - КонецЦикла; - Возврат ПодгруппаМин; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Сервер / Заполнение панели отчетов - -&НаСервере -Функция ВариантыОтчетовЭтойПанели() +Процедура ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения) + ВыведеноЭлементовВариантов = 0; - Запрос = Новый Запрос; - - Запрос.Текст = - "ВЫБРАТЬ - | Подсистемы.Ссылка КАК Подсистема, - | Подсистемы.Представление, - | Подсистемы.Приоритет - |ПОМЕСТИТЬ втПодсистемы - |ИЗ - | &ТаблицаПодсистем КАК Подсистемы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДобавленныеВарианты.Ссылка, - | ДобавленныеВарианты.Подсистема, - | ДобавленныеВарианты.Видимость, - | ДобавленныеВарианты.БыстрыйДоступ - |ПОМЕСТИТЬ втНастройки - |ИЗ - | &ДобавленныеВарианты КАК ДобавленныеВарианты - |ГДЕ - | ДобавленныеВарианты.ИзмененПользователем = ИСТИНА - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ПредопределенныеРазмещение.Подсистема, - | ПредопределенныеРазмещение.Важный, - | ПредопределенныеРазмещение.СмТакже, - | ВЫБОР - | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь - | ТОГДА ИСТИНА - | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию - | КОНЕЦ КАК ВидимостьПоУмолчанию, - | ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) КАК Описание, - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.Отчет, - | ВариантыОтчетов.ТипОтчета, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Автор - |ПОМЕСТИТЬ втПредопределенные - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение - | ПО (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка - | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) - | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыРазмещение.Ссылка, - | ВариантыРазмещение.РазделИлиГруппа, - | ВариантыРазмещение.Использование, - | ВариантыРазмещение.Важный, - | ВариантыРазмещение.СмТакже, - | ВЫБОР - | КОГДА ВариантыРазмещение.Ссылка.Автор = &ТекущийПользователь - | ТОГДА ИСТИНА - | КОГДА ВариантыРазмещение.Ссылка.ВидимостьПоУмолчаниюПереопределена - | ИЛИ ВариантыРазмещение.Ссылка.Пользовательский - | ИЛИ ВариантыРазмещение.Ссылка.ПредопределенныйВариант = ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка) - | ТОГДА ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию - | ИНАЧЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант.ВидимостьПоУмолчанию - | КОНЕЦ КАК ВидимостьПоУмолчанию, - | ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.Описание КАК СТРОКА(1000)) КАК Описание, - | ВариантыРазмещение.Ссылка.Наименование, - | ВариантыРазмещение.Ссылка.Отчет, - | ВариантыРазмещение.Ссылка.ТипОтчета, - | ВариантыРазмещение.Ссылка.КлючВарианта, - | ВариантыРазмещение.Ссылка.Автор - |ПОМЕСТИТЬ втВарианты - |ИЗ - | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - |ГДЕ - | ВариантыРазмещение.РазделИлиГруппа В(&МассивПодсистем) - | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И (НЕ ВариантыРазмещение.Ссылка.ТолькоДляАвтора - | ИЛИ ВариантыРазмещение.Ссылка.Автор = &ТекущийПользователь) - | И ВариантыРазмещение.Ссылка.ПометкаУдаления = ЛОЖЬ - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ЕСТЬNULL(втВарианты.Ссылка, втПредопределенные.Ссылка) КАК Ссылка, - | ЕСТЬNULL(втВарианты.РазделИлиГруппа, втПредопределенные.Подсистема) КАК Подсистема, - | ЕСТЬNULL(втВарианты.Важный, втПредопределенные.Важный) КАК Важный, - | ЕСТЬNULL(втВарианты.СмТакже, втПредопределенные.СмТакже) КАК СмТакже, - | ЕСТЬNULL(втВарианты.Наименование, втПредопределенные.Наименование) КАК Наименование, - | ЕСТЬNULL(втВарианты.Описание, втПредопределенные.Описание) КАК Описание, - | ЕСТЬNULL(втВарианты.Автор, втПредопределенные.Автор) КАК Автор, - | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, - | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, - | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, - | ЕСТЬNULL(втВарианты.ВидимостьПоУмолчанию, втПредопределенные.ВидимостьПоУмолчанию) КАК ВидимостьПоУмолчанию - |ПОМЕСТИТЬ втВсеВарианты - |ИЗ - | втПредопределенные КАК втПредопределенные - | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты - | ПО втПредопределенные.Ссылка = втВарианты.Ссылка - | И втПредопределенные.Подсистема = втВарианты.РазделИлиГруппа - |ГДЕ - | (втВарианты.Использование = ИСТИНА - | ИЛИ втВарианты.Использование ЕСТЬ NULL ) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | втВсеВарианты.Ссылка, - | втВсеВарианты.Подсистема, - | втПодсистемы.Представление КАК ПодсистемаПредставление, - | втПодсистемы.Приоритет КАК ПодсистемаПриоритет, - | ВЫБОР - | КОГДА втВсеВарианты.Подсистема = &РазделСсылка - | И втВсеВарианты.СмТакже = ЛОЖЬ - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК БезГруппы, - | втВсеВарианты.Важный, - | втВсеВарианты.СмТакже, - | ВЫБОР - | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК Дополнительный, - | ВЫБОР - | КОГДА втНастройки.Видимость ЕСТЬ NULL - | И НастройкиВариантовОтчетов.Видимость ЕСТЬ NULL - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК СвоиНастройки, - | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) КАК Видимость, - | ЕСТЬNULL(втНастройки.БыстрыйДоступ, ЕСТЬNULL(НастройкиВариантовОтчетов.БыстрыйДоступ, ЛОЖЬ)) КАК БыстрыйДоступ, - | ВЫБОР - | КОГДА втВсеВарианты.ТипОтчета = &ТипВнутренний - | ТОГДА втВсеВарианты.Отчет.Имя - | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный - | ТОГДА """" - | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) - | КОНЕЦ КАК ИмяОтчета, - | втВсеВарианты.Наименование КАК Наименование, - | втВсеВарианты.Описание, - | втВсеВарианты.Автор, - | втВсеВарианты.Отчет, - | втВсеВарианты.ТипОтчета, - | втВсеВарианты.КлючВарианта, - | ВЫБОР - | КОГДА &ОтборНаименование = """" - | ТОГДА ЛОЖЬ - | КОГДА втВсеВарианты.Наименование ПОДОБНО ""%"" + &ОтборНаименование + ""%"" - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ - | ИЛИ ВЫБОР - | КОГДА &ОтборАвтор = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | ТОГДА ЛОЖЬ - | КОГДА втВсеВарианты.Автор = &ОтборАвтор - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК СкрытОтбором - |ИЗ - | втВсеВарианты КАК втВсеВарианты - | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы - | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема - | ЛЕВОЕ СОЕДИНЕНИЕ втНастройки КАК втНастройки - | ПО втВсеВарианты.Ссылка = втНастройки.Ссылка - | И втВсеВарианты.Подсистема = втНастройки.Подсистема - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НастройкиВариантовОтчетов - | ПО втВсеВарианты.Подсистема = НастройкиВариантовОтчетов.РазделИлиГруппа - | И втВсеВарианты.Ссылка = НастройкиВариантовОтчетов.Вариант - | И (НастройкиВариантовОтчетов.Пользователь = &ТекущийПользователь) - |ГДЕ - | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) - | - |УПОРЯДОЧИТЬ ПО - | ПодсистемаПредставление, - | Наименование"; - - Запрос.УстановитьПараметр("ТаблицаПодсистем", ТаблицаПодсистем.Выгрузить()); - Запрос.УстановитьПараметр("МассивПодсистем", Запрос.Параметры.ТаблицаПодсистем.ВыгрузитьКолонку("Ссылка")); - Запрос.УстановитьПараметр("РазделСсылка", РазделСсылка); - Запрос.УстановитьПараметр("ДобавленныеВарианты", ДобавленныеВарианты.Выгрузить(, "Ссылка, Подсистема, Видимость, БыстрыйДоступ, ИзмененПользователем")); - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); - Запрос.УстановитьПараметр("ОтборНаименование", ?(РежимНастройки, ОтборНаименование, "")); - Запрос.УстановитьПараметр("ОтборАвтор", ?(РежимНастройки, ОтборАвтор, Справочники.Пользователи.ПустаяСсылка())); - Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); - Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); - Запрос.УстановитьПараметр("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя()); - Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); - - Если РежимНастройки Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, - "ГДЕ - | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию))", - ""); - КонецЕсли; - - ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); - Возврат ТаблицаРезультат; -КонецФункции - -&НаСервере -Процедура ИнициализироватьПеременныеКонтекста(ПеременныеКонтекста) + ПараметрыЗаполнения.Вставить("ИмяГруппы", ""); + ПараметрыЗаполнения.Вставить("ДобавляемыеРеквизиты", Новый Массив); + ПараметрыЗаполнения.Вставить("ДобавленоПустыхДекораций", 0); + ПараметрыЗаполнения.Вставить("ПределВывода", 20); + ПараметрыЗаполнения.Вставить("ОсталосьВывести", ПараметрыЗаполнения.ПределВывода); + ПараметрыЗаполнения.Вставить("НеВыведено", 0); ШаблонГруппыВарианта = Новый Структура( "Вид, РастягиватьПоГоризонтали, @@ -917,36 +794,557 @@ ШаблонНадписиВарианта.Высота = 1; ШаблонНадписиВарианта.ЦветТекста = ЦветВидимыхВариантов; - ПеременныеКонтекста.Вставить("Шаблоны", Новый Структура); - ПеременныеКонтекста.Шаблоны.Вставить("ГруппаВарианта", ШаблонГруппыВарианта); - ПеременныеКонтекста.Шаблоны.Вставить("КартинкаБыстрогоДоступа", ШаблонКартинкиБыстрогоДоступа); - ПеременныеКонтекста.Шаблоны.Вставить("КартинкаОтступа", ШаблонКартинкиОтступа); - ПеременныеКонтекста.Шаблоны.Вставить("НадписьВарианта", ШаблонНадписиВарианта); + ПараметрыЗаполнения.Вставить("Шаблоны", Новый Структура); + ПараметрыЗаполнения.Шаблоны.Вставить("ГруппаВарианта", ШаблонГруппыВарианта); + ПараметрыЗаполнения.Шаблоны.Вставить("КартинкаБыстрогоДоступа", ШаблонКартинкиБыстрогоДоступа); + ПараметрыЗаполнения.Шаблоны.Вставить("КартинкаОтступа", ШаблонКартинкиОтступа); + ПараметрыЗаполнения.Шаблоны.Вставить("НадписьВарианта", ШаблонНадписиВарианта); Если РежимНастройки Тогда - ПеременныеКонтекста.Вставить("КонтекстноеМеню", Новый Структура("УбратьИзБыстрогоДоступа, ПереместитьВБыстрыйДоступ, Изменить")); - ПеременныеКонтекста.КонтекстноеМеню.УбратьИзБыстрогоДоступа = Новый Структура("Видимость", Ложь); - ПеременныеКонтекста.КонтекстноеМеню.ПереместитьВБыстрыйДоступ = Новый Структура("Видимость", Ложь); - ПеременныеКонтекста.КонтекстноеМеню.Изменить = Новый Структура("Видимость", Истина); + ПараметрыЗаполнения.Вставить("КонтекстноеМеню", Новый Структура("УбратьИзБыстрогоДоступа, ПереместитьВБыстрыйДоступ, Изменить")); + ПараметрыЗаполнения.КонтекстноеМеню.УбратьИзБыстрогоДоступа = Новый Структура("Видимость", Ложь); + ПараметрыЗаполнения.КонтекстноеМеню.ПереместитьВБыстрыйДоступ = Новый Структура("Видимость", Ложь); + ПараметрыЗаполнения.КонтекстноеМеню.Изменить = Новый Структура("Видимость", Истина); КонецЕсли; + + ПараметрыЗаполнения.Вставить("ГруппыИнтерфейса", Новый Массив); + ПараметрыЗаполнения.ГруппыИнтерфейса.Добавить("БыстрыйДоступ"); + ПараметрыЗаполнения.ГруппыИнтерфейса.Добавить("БезГруппы"); + ПараметрыЗаполнения.ГруппыИнтерфейса.Добавить("СГруппой"); + ПараметрыЗаполнения.ГруппыИнтерфейса.Добавить("СмТакже"); + + Для Каждого ИмяГруппы Из ПараметрыЗаполнения.ГруппыИнтерфейса Цикл + ПараметрыЗаполнения.Вставить(ИмяГруппы, Новый Структура("Отбор, Варианты, Количество")); + КонецЦикла; + + ПараметрыЗаполнения.БыстрыйДоступ.Отбор = Новый Структура("БыстрыйДоступ", Истина); + ПараметрыЗаполнения.БезГруппы.Отбор = Новый Структура("БыстрыйДоступ, БезГруппы", Ложь, Истина); + ПараметрыЗаполнения.СГруппой.Отбор = Новый Структура("БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь); + ПараметрыЗаполнения.СмТакже.Отбор = Новый Структура("БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Истина); + КонецПроцедуры &НаСервере -Процедура ВывестиВариантыБезГруппы(Варианты, ПеременныеКонтекста) +Процедура НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения) - КоличествоВариантов = Варианты.Количество(); - Если КоличествоВариантов = 0 Тогда + Запрос = Новый Запрос; + + Запрос.Текст = + "ВЫБРАТЬ + | Подсистемы.Ссылка КАК Подсистема, + | Подсистемы.РазделСсылка КАК РазделСсылка, + | Подсистемы.Представление, + | Подсистемы.Приоритет + |ПОМЕСТИТЬ втПодсистемы + |ИЗ + | &ТаблицаПодсистем КАК Подсистемы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДобавленныеВарианты.Ссылка, + | ДобавленныеВарианты.Подсистема, + | ДобавленныеВарианты.Видимость, + | ДобавленныеВарианты.БыстрыйДоступ + |ПОМЕСТИТЬ втНастройки + |ИЗ + | &ДобавленныеВарианты КАК ДобавленныеВарианты + |ГДЕ + | ДобавленныеВарианты.ИзмененПользователем = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ПредопределенныеРазмещение.Подсистема, + | ПредопределенныеРазмещение.Важный, + | ПредопределенныеРазмещение.СмТакже, + | ВЫБОР + | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ПредопределенныеРазмещение.Ссылка.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыОтчетов.Наименование, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Автор + |ПОМЕСТИТЬ втПредопределенные + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском)) + | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыРазмещение.Ссылка, + | ВариантыРазмещение.РазделИлиГруппа, + | ВариантыРазмещение.Использование, + | ВариантыРазмещение.Важный, + | ВариантыРазмещение.СмТакже, + | ВЫБОР + | КОГДА ВариантыРазмещение.Ссылка.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | КОГДА ВариантыРазмещение.Ссылка.ВидимостьПоУмолчаниюПереопределена + | ИЛИ ВариантыРазмещение.Ссылка.Пользовательский + | ИЛИ ВариантыРазмещение.Ссылка.ПредопределенныйВариант = ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка) + | ТОГДА ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию + | ИНАЧЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыРазмещение.Ссылка.Описание, 1, 1) = """" + | И НЕ ВариантыРазмещение.Ссылка.Пользовательский + | ТОГДА ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыРазмещение.Ссылка.Наименование, + | ВариантыРазмещение.Ссылка.Отчет, + | ВариантыРазмещение.Ссылка.ТипОтчета, + | ВариантыРазмещение.Ссылка.КлючВарианта, + | ВариантыРазмещение.Ссылка.Автор + |ПОМЕСТИТЬ втВарианты + |ИЗ + | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение + |ГДЕ + | (ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ ВариантыРазмещение.РазделИлиГруппа В (&ПодсистемыНайденныеПоиском)) + | И (НЕ ВариантыРазмещение.Ссылка.ТолькоДляАвтора + | ИЛИ ВариантыРазмещение.Ссылка.Автор = &ТекущийПользователь) + | И ВариантыРазмещение.Ссылка.ПометкаУдаления = ЛОЖЬ + | И ВариантыРазмещение.РазделИлиГруппа В(&МассивПодсистем) + | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ЕСТЬNULL(втВарианты.Ссылка, втПредопределенные.Ссылка) КАК Ссылка, + | ЕСТЬNULL(втВарианты.РазделИлиГруппа, втПредопределенные.Подсистема) КАК Подсистема, + | ЕСТЬNULL(втВарианты.Важный, втПредопределенные.Важный) КАК Важный, + | ЕСТЬNULL(втВарианты.СмТакже, втПредопределенные.СмТакже) КАК СмТакже, + | ЕСТЬNULL(втВарианты.Наименование, втПредопределенные.Наименование) КАК Наименование, + | ЕСТЬNULL(втВарианты.Описание, втПредопределенные.Описание) КАК Описание, + | ЕСТЬNULL(втВарианты.Автор, втПредопределенные.Автор) КАК Автор, + | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, + | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, + | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, + | ЕСТЬNULL(втВарианты.ВидимостьПоУмолчанию, втПредопределенные.ВидимостьПоУмолчанию) КАК ВидимостьПоУмолчанию + |ПОМЕСТИТЬ втВсеВарианты + |ИЗ + | втПредопределенные КАК втПредопределенные + | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты + | ПО втПредопределенные.Ссылка = втВарианты.Ссылка + | И втПредопределенные.Подсистема = втВарианты.РазделИлиГруппа + |ГДЕ + | (втВарианты.Использование = ИСТИНА + | ИЛИ втВарианты.Использование ЕСТЬ NULL ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | втВсеВарианты.Ссылка, + | втВсеВарианты.Подсистема, + | втПодсистемы.Представление КАК ПодсистемаПредставление, + | втПодсистемы.Приоритет КАК ПодсистемаПриоритет, + | втПодсистемы.РазделСсылка КАК РазделСсылка, + | ВЫБОР + | КОГДА втВсеВарианты.Подсистема = втПодсистемы.РазделСсылка + | И втВсеВарианты.СмТакже = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БезГруппы, + | втВсеВарианты.Важный, + | втВсеВарианты.СмТакже, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Дополнительный, + | ВЫБОР + | КОГДА втНастройки.Видимость ЕСТЬ NULL + | И НастройкиВариантовОтчетов.Видимость ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СвоиНастройки, + | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) КАК Видимость, + | ЕСТЬNULL(втНастройки.БыстрыйДоступ, ЕСТЬNULL(НастройкиВариантовОтчетов.БыстрыйДоступ, ЛОЖЬ)) КАК БыстрыйДоступ, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = &ТипВнутренний + | ТОГДА втВсеВарианты.Отчет.Имя + | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный + | ТОГДА """" + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) + | КОНЕЦ КАК ИмяОтчета, + | втВсеВарианты.Наименование КАК Наименование, + | втВсеВарианты.Описание, + | втВсеВарианты.Автор, + | втВсеВарианты.Отчет, + | втВсеВарианты.ТипОтчета, + | втВсеВарианты.КлючВарианта + |ИЗ + | втВсеВарианты КАК втВсеВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы + | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема + | ЛЕВОЕ СОЕДИНЕНИЕ втНастройки КАК втНастройки + | ПО втВсеВарианты.Ссылка = втНастройки.Ссылка + | И втВсеВарианты.Подсистема = втНастройки.Подсистема + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НастройкиВариантовОтчетов + | ПО втВсеВарианты.Подсистема = НастройкиВариантовОтчетов.РазделИлиГруппа + | И втВсеВарианты.Ссылка = НастройкиВариантовОтчетов.Вариант + | И (НастройкиВариантовОтчетов.Пользователь = &ТекущийПользователь) + |ГДЕ + | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) + | + |УПОРЯДОЧИТЬ ПО + | ПодсистемаПриоритет, + | Наименование"; + + ТолькоТекущийРаздел = РежимНастройки Или Не ЗначениеЗаполнено(СтрокаПоиска) Или ИскатьВоВсехРазделах = 0; + Если ТолькоТекущийРаздел Тогда + ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(Новый Структура("РазделСсылка", ТекущийРазделСсылка)); + Иначе + ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(); + КонецЕсли; + МассивПодсистем = ТаблицаПодсистем.ВыгрузитьКолонку("Ссылка"); + + ИспользоватьПодсветку = ЗначениеЗаполнено(СтрокаПоиска); + + ПараметрыПоиска = Новый Структура; + Если ИспользоватьПодсветку Тогда + ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); + КонецЕсли; + Если РежимНастройки И ЗначениеЗаполнено(ОтборАвтор) Тогда + ПараметрыПоиска.Вставить("Автор", ОтборАвтор); + КонецЕсли; + Если ТолькоТекущийРаздел Тогда + ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); + КонецЕсли; + ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); + + РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); + + Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); + Запрос.УстановитьПараметр("ТаблицаПодсистем", ТаблицаПодсистем); + Запрос.УстановитьПараметр("РазделСсылка", ТекущийРазделСсылка); + Запрос.УстановитьПараметр("ДобавленныеВарианты", ДобавленныеВарианты.Выгрузить(, "Ссылка, Подсистема, Видимость, БыстрыйДоступ, ИзмененПользователем")); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); + Запрос.УстановитьПараметр("ВариантыНайденныеПоиском", РезультатПоиска.Ссылки); + Если ИспользоватьПодсветку И РезультатПоиска.Подсистемы.Количество() > 0 Тогда + Запрос.УстановитьПараметр("ПодсистемыНайденныеПоиском", РезультатПоиска.Подсистемы); + Запрос.УстановитьПараметр("ОтчетыПользователя", ПараметрыПоиска.ОтчетыПользователя); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); + Иначе + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "(ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))", + "(ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском))"); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "(ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ ВариантыРазмещение.РазделИлиГруппа В (&ПодсистемыНайденныеПоиском))", + "ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском)"); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + " + | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы))", + ""); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + " + | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)", + ""); + КонецЕсли; + + Если РежимНастройки Или ИспользоватьПодсветку Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ГДЕ + | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию))", + ""); + КонецЕсли; + + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); + + Если ИспользоватьПодсветку Тогда + Для Каждого КлючИЗначение Из РезультатПоиска.ВариантыСвязанныеСПодсистемами Цикл + ВариантСсылка = КлючИЗначение.Ключ; + СвязанныеПодсистемы = КлючИЗначение.Значение; + Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + Если СвязанныеПодсистемы.Найти(СтрокаТаблицы.Подсистема) = Неопределено Тогда + ТаблицаРезультат.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Если ТолькоТекущийРаздел Тогда + ДругиеРазделы = Новый Массив; + Иначе + КопияТаблицы = ТаблицаРезультат.Скопировать(); + КопияТаблицы.Свернуть("РазделСсылка"); + ДругиеРазделы = КопияТаблицы.ВыгрузитьКолонку("РазделСсылка"); + Индекс = ДругиеРазделы.Найти(ТекущийРазделСсылка); + Если Индекс <> Неопределено Тогда + ДругиеРазделы.Удалить(Индекс); + КонецЕсли; + КонецЕсли; + + Если ИспользоватьПодсветку Тогда + МассивСлов = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(ВРег(СокрЛП(СтрокаПоиска))); + Иначе + МассивСлов = Неопределено; + КонецЕсли; + + ПараметрыЗаполнения.Вставить("ТолькоТекущийРаздел", ТолькоТекущийРаздел); + ПараметрыЗаполнения.Вставить("ТаблицаПодсистем", ТаблицаПодсистем); + ПараметрыЗаполнения.Вставить("ДругиеРазделы", ДругиеРазделы); + ПараметрыЗаполнения.Вставить("Варианты", ТаблицаРезультат); + ПараметрыЗаполнения.Вставить("ИспользоватьПодсветку", ЗначениеЗаполнено(СтрокаПоиска)); + ПараметрыЗаполнения.Вставить("РезультатПоиска", РезультатПоиска); + ПараметрыЗаполнения.Вставить("МассивСлов", МассивСлов); +КонецПроцедуры + +&НаСервере +Процедура ВывестиВариантыРаздела(ПараметрыЗаполнения, РазделСсылка) + ОтборПоРазделу = Новый Структура("РазделСсылка", РазделСсылка); + ВариантыРаздела = ПараметрыЗаполнения.Варианты.Скопировать(ОтборПоРазделу); + ПараметрыЗаполнения.Вставить("ВыводятсяВариантыТекущегоРаздела", РазделСсылка = ТекущийРазделСсылка); + ПараметрыЗаполнения.Вставить("ВариантыРаздела", ВариантыРаздела); + ПараметрыЗаполнения.Вставить("ВариантыКоличество", ВариантыРаздела.Количество()); + Если ПараметрыЗаполнения.ВариантыКоличество = 0 Тогда + // Вывод надписи, поясняющей почему нет вариантов (только для текущего раздела). + Если ПараметрыЗаполнения.ВыводятсяВариантыТекущегоРаздела Тогда + Надпись = Элементы.Вставить("СписокОтчетовПуст", Тип("ДекорацияФормы"), Элементы.БыстрыйДоступКолонка1); + Если ЗначениеЗаполнено(СтрокаПоиска) Или ЗначениеЗаполнено(ОтборАвтор) Тогда + Если ПараметрыЗаполнения.ТолькоТекущийРаздел Тогда + Надпись.Заголовок = НСтр("ru = 'Отчеты не найдены.'"); + Иначе + Надпись.Заголовок = НСтр("ru = 'Отчеты в текущем разделе не найдены.'"); + КонецЕсли; + Иначе + Надпись.Заголовок = НСтр("ru = 'В панели отчетов этого раздела не размещено ни одного отчета.'"); + КонецЕсли; + Элементы["БыстрыйДоступШапка"].Видимость = Ложь; + Элементы["БыстрыйДоступПодвал"].Видимость = Ложь; + Элементы["БезГруппыПодвал"].Видимость = Ложь; + Элементы["СГруппойПодвал"].Видимость = Ложь; + Элементы["СмТакжеПодвал"].Видимость = Ложь; + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Видимость = Ложь; + КонецЕсли; Возврат; КонецЕсли; + Если ПараметрыЗаполнения.ТолькоТекущийРаздел Тогда + ПодсистемыРаздела = ПараметрыЗаполнения.ТаблицаПодсистем; + Иначе + ПодсистемыРаздела = ПараметрыЗаполнения.ТаблицаПодсистем.Скопировать(ОтборПоРазделу); + КонецЕсли; + ПодсистемыРаздела.Сортировать("Приоритет ВОЗР"); // Сортировка по иерархии + + ПараметрыЗаполнения.Вставить("РазделСсылка", РазделСсылка); + ПараметрыЗаполнения.Вставить("ПодсистемыРаздела", ПодсистемыРаздела); + + ОпределитьГруппыИДекорацииДляВыводаВариантов(ПараметрыЗаполнения); + + Если Не ПараметрыЗаполнения.ВыводятсяВариантыТекущегоРаздела + И ПараметрыЗаполнения.ОсталосьВывести = 0 Тогда + ПараметрыЗаполнения.НеВыведено = ПараметрыЗаполнения.НеВыведено + ПараметрыЗаполнения.ВариантыКоличество; + Возврат; + КонецЕсли; + + Для Каждого ИмяГруппы Из ПараметрыЗаполнения.ГруппыИнтерфейса Цикл + ПараметрыГруппы = ПараметрыЗаполнения[ИмяГруппы]; + Если ПараметрыЗаполнения.ОсталосьВывести <= 0 Тогда + ПараметрыГруппы.Варианты = Новый Массив; + ПараметрыГруппы.Количество = 0; + Иначе + ПараметрыГруппы.Варианты = ПараметрыЗаполнения.ВариантыРаздела.Скопировать(ПараметрыГруппы.Отбор); + ПараметрыГруппы.Количество = ПараметрыГруппы.Варианты.Количество(); + КонецЕсли; + + Если ПараметрыГруппы.Количество = 0 Тогда + Продолжить; + КонецЕсли; + + Если Не ПараметрыЗаполнения.ВыводятсяВариантыТекущегоРаздела Тогда + // Ограничение на вывод вариантов. + ПараметрыЗаполнения.ОсталосьВывести = ПараметрыЗаполнения.ОсталосьВывести - ПараметрыГруппы.Количество; + Если ПараметрыЗаполнения.ОсталосьВывести < 0 Тогда + // Удаление строк, которые уже превышают предел. + ЛишнихВариантов = -ПараметрыЗаполнения.ОсталосьВывести; + Для Номер = 1 По ЛишнихВариантов Цикл + ПараметрыГруппы.Варианты.Удалить(ПараметрыГруппы.Количество - Номер); + КонецЦикла; + ПараметрыЗаполнения.НеВыведено = ПараметрыЗаполнения.НеВыведено + ЛишнихВариантов; + ПараметрыЗаполнения.ОсталосьВывести = 0; + КонецЕсли; + КонецЕсли; + + Если РежимНастройки Тогда + ПараметрыЗаполнения.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = (ИмяГруппы = "БыстрыйДоступ"); + ПараметрыЗаполнения.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = (ИмяГруппы <> "БыстрыйДоступ"); + КонецЕсли; + + ПараметрыЗаполнения.ИмяГруппы = ИмяГруппы; + Если ИмяГруппы = "СГруппой" Тогда + ВывестиВариантыСГруппой(ПараметрыЗаполнения); + Иначе + ВывестиВариантыБезГруппы(ПараметрыЗаполнения); + КонецЕсли; + КонецЦикла; + + ЕстьБыстрыйДоступ = (ПараметрыЗаполнения.БыстрыйДоступ.Количество > 0); + ЕстьВариантыБезГруппы = (ПараметрыЗаполнения.БезГруппы.Количество > 0); + ЕстьВариантыСГруппой = (ПараметрыЗаполнения.СГруппой.Количество > 0); + ЕстьВариантыСмТакже = (ПараметрыЗаполнения.СмТакже.Количество > 0); + + Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступШапка"].Видимость = РежимНастройки Или ЕстьБыстрыйДоступ; + Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступПодвал"].Видимость = ( + РежимНастройки + Или ( + ЕстьБыстрыйДоступ + И ( + ЕстьВариантыБезГруппы + Или ЕстьВариантыСГруппой + Или ЕстьВариантыСмТакже + ) + ) + ); + Элементы[ПараметрыЗаполнения.Префикс + "БезГруппыПодвал"].Видимость = ЕстьВариантыБезГруппы; + Элементы[ПараметрыЗаполнения.Префикс + "СГруппойПодвал"].Видимость = ЕстьВариантыСГруппой; + Элементы[ПараметрыЗаполнения.Префикс + "СмТакжеПодвал"].Видимость = ЕстьВариантыСмТакже; + + Если ПараметрыЗаполнения.ВыводятсяВариантыТекущегоРаздела Тогда + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Видимость = РежимНастройки И Не ЕстьБыстрыйДоступ; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОпределитьГруппыИДекорацииДляВыводаВариантов(ПараметрыЗаполнения) + // В этой процедуре определяются подмены стандартных групп и элементов. + ПараметрыЗаполнения.Вставить("Префикс", ""); + Если ПараметрыЗаполнения.ВыводятсяВариантыТекущегоРаздела Тогда + Возврат; + КонецЕсли; + + ИнформацияОРазделе = ПараметрыЗаполнения.ТаблицаПодсистем.Найти(ПараметрыЗаполнения.РазделСсылка, "Ссылка"); + ПараметрыЗаполнения.Префикс = "Раздел" + ИнформацияОРазделе.Приоритет + "_"; + + ГруппаРазделаИмя = ПараметрыЗаполнения.Префикс + ИнформацияОРазделе.Имя; + ГруппаРаздела = Элементы.Вставить(ГруппаРазделаИмя, Тип("ГруппаФормы"), Элементы.РезультатыПоискаИзДругихРазделов); + ГруппаРаздела.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаРаздела.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаРаздела.ОтображатьЗаголовок = Ложь; + ГруппаРаздела.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСверху; + ГруппаРаздела.РастягиватьПоГоризонтали = Истина; + + РазделСуффикс = " (" + Формат(ПараметрыЗаполнения.ВариантыКоличество, "ЧН=0; ЧГ=") + ")" + Символы.ПС; + Если ПараметрыЗаполнения.ИспользоватьПодсветку Тогда + ПараметрыПодсветки = ПараметрыЗаполнения.РезультатПоиска.ПодсветкаПодсистем.Получить(ПараметрыЗаполнения.РазделСсылка); + Если ПараметрыПодсветки = Неопределено Тогда + ПодсветкаПредставления = Новый Структура("Значение, КоличествоНайденныхСлов, ПодсветкаСлов", ИнформацияОРазделе.Представление, 0, Новый СписокЗначений); + Для Каждого Слово Из ПараметрыЗаполнения.МассивСлов Цикл + ВариантыОтчетов.ОтметитьСлово(ПодсветкаПредставления, Слово); + КонецЦикла; + Иначе + ПодсветкаПредставления = ПараметрыПодсветки.НаименованиеПодсистемы; + КонецЕсли; + ПодсветкаПредставления.Значение = ПодсветкаПредставления.Значение + РазделСуффикс; + Если ПодсветкаПредставления.КоличествоНайденныхСлов > 0 Тогда + РазделЗаголовок = СформироватьСтрокуСПодсветкой(ПодсветкаПредставления); + Иначе + РазделЗаголовок = ПодсветкаПредставления.Значение; + КонецЕсли; + Иначе + РазделЗаголовок = ИнформацияОРазделе.Представление + РазделСуффикс; + КонецЕсли; + + ЗаголовокРаздела = ГруппаРаздела.РасширеннаяПодсказка; + ЗаголовокРаздела.Заголовок = РазделЗаголовок; + ЗаголовокРаздела.Шрифт = Новый Шрифт(ШрифтЖирный, , 10); + ЗаголовокРаздела.ЦветТекста = ЦветГруппыВариантовОтчетов; + ЗаголовокРаздела.Высота = 2; + ЗаголовокРаздела.Гиперссылка = Истина; + ЗаголовокРаздела.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Верх; + ЗаголовокРаздела.УстановитьДействие("Нажатие", "ЗаголовокРазделаНажатие"); + + ГруппаРаздела.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + + ДекорацияОтступаИмя = ПараметрыЗаполнения.Префикс + "ДекорацияОтступа"; + ДекорацияОтступа = Элементы.Вставить(ДекорацияОтступаИмя, Тип("ДекорацияФормы"), ГруппаРаздела); + ДекорацияОтступа.Вид = ВидДекорацииФормы.Надпись; + ДекорацияОтступа.Заголовок = " "; + + Если ПараметрыЗаполнения.ОсталосьВывести = 0 Тогда // Ранее в других группах достигнут предел вывода - не нужно создавать подчиненные. + ЗаголовокРаздела.Высота = 1; // Сам заголовок раздела больше не нужно отделять от вариантов. + Возврат; + КонецЕсли; + + СкопироватьЭлемент(ПараметрыЗаполнения.Префикс, ГруппаРаздела, "Колонки", 2); + + Элементы.Удалить(Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступПодсказкаКогдаНеНастроен"]); + Элементы[ПараметрыЗаполнения.Префикс + "БыстрыйДоступШапкаНадпись"].РасширеннаяПодсказка.Заголовок = ""; +КонецПроцедуры + +&НаСервере +Функция СкопироватьЭлемент(ПрефиксНового, ГруппаНового, ИмяКопируемого, УровеньВложенности) + КопируемыйЭлемент = Элементы.Найти(ИмяКопируемого); + ИмяНового = ПрефиксНового + ИмяКопируемого; + НовыйЭлемент = Элементы.Найти(ИмяНового); + ТипЭлемента = ТипЗнч(КопируемыйЭлемент); + ЭтоГруппа = (ТипЭлемента = Тип("ГруппаФормы")); + Если НовыйЭлемент = Неопределено Тогда + НовыйЭлемент = Элементы.Вставить(ИмяНового, ТипЭлемента, ГруппаНового); + КонецЕсли; + Если ЭтоГруппа Тогда + НеЗаполняемыеСвойства = "Имя, Родитель, Видимость, СочетаниеКлавиш, ПодчиненныеЭлементы, ПутьКДаннымЗаголовка"; + Иначе + НеЗаполняемыеСвойства = "Имя, Родитель, Видимость, СочетаниеКлавиш, РасширеннаяПодсказка"; + КонецЕсли; + ЗаполнитьЗначенияСвойств(НовыйЭлемент, КопируемыйЭлемент, , НеЗаполняемыеСвойства); + Если ЭтоГруппа И УровеньВложенности > 0 Тогда + Для Каждого ПодчиненныйЭлемент Из КопируемыйЭлемент.ПодчиненныеЭлементы Цикл + СкопироватьЭлемент(ПрефиксНового, НовыйЭлемент, ПодчиненныйЭлемент.Имя, УровеньВложенности - 1); + КонецЦикла; + КонецЕсли; + Возврат НовыйЭлемент; +КонецФункции + +&НаСервере +Процедура ВывестиВариантыБезГруппы(ПараметрыЗаполнения) + ПараметрыГруппы = ПараметрыЗаполнения[ПараметрыЗаполнения.ИмяГруппы]; + Варианты = ПараметрыГруппы.Варианты; + КоличествоВариантов = ПараметрыГруппы.Количество; + // Базовые свойства группы 2 уровня - ГруппаУровня2 = Элементы.Найти(ПеременныеКонтекста.ИмяГруппы); - ВБыстрыйДоступ = (ПеременныеКонтекста.ИмяГруппы = "БыстрыйДоступ"); - ВКореньПодсистемы = (ПеременныеКонтекста.ИмяГруппы = "БезГруппы"); + ГруппаУровня2 = Элементы.Найти(ПараметрыЗаполнения.Префикс + ПараметрыЗаполнения.ИмяГруппы); + ВБыстрыйДоступ = (ПараметрыЗаполнения.ИмяГруппы = "БыстрыйДоступ"); + ВКореньПодсистемы = (ПараметрыЗаполнения.ИмяГруппы = "БезГруппы"); Если РежимНастройки Тогда - ПеременныеКонтекста.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = ВБыстрыйДоступ; - ПеременныеКонтекста.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = НЕ ВБыстрыйДоступ; + ПараметрыЗаполнения.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = ВБыстрыйДоступ; + ПараметрыЗаполнения.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = Не ВБыстрыйДоступ; КонецЕсли; // Сортировка вариантов @@ -977,30 +1375,31 @@ ГруппаУровня3Добавка = ГруппаУровня3Добавка - 1; КонецЕсли; - ДобавитьЭлементыВариантаОтчета(ПеременныеКонтекста, Вариант, ГруппаУровня3); + ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, Вариант, ГруппаУровня3); КонецЦикла; Если КоличествоВариантов > 1 И КоличествоВариантов < КоличествоКолонок Тогда Для ГруппаУровня3Индекс = КоличествоВариантов По КоличествоКолонок - 1 Цикл ГруппаУровня3 = ГруппаУровня2.ПодчиненныеЭлементы.Получить(ГруппаУровня3Индекс); - ДобавитьПустуюДекорацию(ПеременныеКонтекста, ГруппаУровня3); + ДобавитьПустуюДекорацию(ПараметрыЗаполнения, ГруппаУровня3); КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере -Процедура ВывестиВариантыСГруппой(Варианты, ПеременныеКонтекста) - - КоличествоВариантов = Варианты.Количество(); +Процедура ВывестиВариантыСГруппой(ПараметрыЗаполнения) + ПараметрыГруппы = ПараметрыЗаполнения[ПараметрыЗаполнения.ИмяГруппы]; + Варианты = ПараметрыГруппы.Варианты; + КоличествоВариантов = ПараметрыГруппы.Количество; Если КоличествоВариантов = 0 Тогда Возврат; КонецЕсли; // Базовые свойства группы 2 уровня - ГруппаУровня2Имя = ПеременныеКонтекста.ИмяГруппы; - ГруппаУровня2 = Элементы.Найти(ГруппаУровня2Имя); + ГруппаУровня2Имя = ПараметрыЗаполнения.ИмяГруппы; + ГруппаУровня2 = Элементы.Найти(ПараметрыЗаполнения.Префикс + ГруппаУровня2Имя); // Сортировка вариантов Варианты.Сортировать("ПодсистемаПриоритет ВОЗР, Важный УБЫВ, Наименование ВОЗР"); // Есть группы и важные @@ -1020,8 +1419,7 @@ МаксимальныйУровеньВложенности = 0; ТекущаяПодсистема = Неопределено; - ТаблицаПодсистем.Сортировать("Приоритет ВОЗР"); // Сортировка по иерархии - Для Каждого Подсистема Из ТаблицаПодсистем Цикл + Для Каждого Подсистема Из ПараметрыЗаполнения.ПодсистемыРаздела Цикл СтрокаРодителя = ДеревоРаспределения.Строки.Найти(Подсистема.РодительСсылка, "ПодсистемаСсылка", Истина); Если СтрокаРодителя = Неопределено Тогда @@ -1036,7 +1434,7 @@ СтрокаДерева.КоличествоВариантов = СтрокаДерева.Варианты.Количество(); ЕстьВарианты = СтрокаДерева.КоличествоВариантов > 0; - Если НЕ ЕстьВарианты Тогда + Если Не ЕстьВарианты Тогда СтрокаДерева.КоличествоПустыхСтрок = -1; КонецЕсли; @@ -1058,7 +1456,7 @@ КонецЦикла; // Вычисление колонки расположения и необходимости переноса каждой подсистемы на основе данных по количеству - ПеременныеКонтекста.Вставить("МаксимальныйУровеньВложенности", МаксимальныйУровеньВложенности); + ПараметрыЗаполнения.Вставить("МаксимальныйУровеньВложенности", МаксимальныйУровеньВложенности); ДеревоРаспределения.Колонки.Добавить("ГруппаФормы"); ДеревоРаспределения.Колонки.Добавить("НачатВывод", Новый ОписаниеТипов("Булево")); КорневаяСтрока = ДеревоРаспределения.Строки[0]; @@ -1087,22 +1485,21 @@ ПорядокВывода.Колонки.Добавить("ВариантСсылка"); ПорядокВывода.Колонки.Добавить("УровеньВложенности", Новый ОписаниеТипов("Число")); - Рекурсия = Новый Структура; Рекурсия.Вставить("ВсегоОсталосьВывести", КоличествоСтрок); Рекурсия.Вставить("СвободноКолонок", КоличествоКолонок - 1); Рекурсия.Вставить("КоличествоКолонок", КоличествоКолонок); Рекурсия.Вставить("ГруппаУровня3Отсечка", ГруппаУровня3Отсечка); Рекурсия.Вставить("НомерТекущейКолонки", 1); - Рекурсия.Вставить("ЭтоПоследняяКолонка", Рекурсия.НомерТекущейКолонки = Рекурсия.КоличествоКолонок ИЛИ КоличествоСтрок <= 6); + Рекурсия.Вставить("ЭтоПоследняяКолонка", Рекурсия.НомерТекущейКолонки = Рекурсия.КоличествоКолонок Или КоличествоСтрок <= 6); Рекурсия.Вставить("СвободноСтрок", ГруппаУровня3Отсечка);// + ?(ГруппаУровня3Добавка > 0, 1, 0); Рекурсия.Вставить("НачатВыводВТекущейКолонке", Ложь); - ПеременныеКонтекста.Вставить("Рекурсия", Рекурсия); - ПеременныеКонтекста.Вставить("Варианты", Варианты); + ПараметрыЗаполнения.Вставить("Рекурсия", Рекурсия); + //ПараметрыЗаполнения.Вставить("ВариантыСГруппой", Варианты); // Заполнение порядка вывода по данным дерева распределения. - ЗаполнитьПорядокВывода(ПорядокВывода, КорневаяСтрока, ПеременныеКонтекста); + ЗаполнитьПорядокВывода(ПорядокВывода, КорневаяСтрока, ПараметрыЗаполнения); // Вывод в форму НомерТекущейКолонки = 0; @@ -1120,7 +1517,7 @@ ТекущийУровеньВложенности = СтрокаПорядкаВывода.УровеньВложенности; ВГруппу = ТекущиеГруппыПоУровнямВложенности.Получить(СтрокаПорядкаВывода.УровеньВложенности - 1); - ТекущаяГруппа = ДобавитьГруппуПодсистемы(ПеременныеКонтекста, СтрокаПорядкаВывода, ВГруппу); + ТекущаяГруппа = ДобавитьГруппуПодсистемы(ПараметрыЗаполнения, СтрокаПорядкаВывода, ВГруппу); ТекущиеГруппыПоУровнямВложенности.Вставить(ТекущийУровеньВложенности, ТекущаяГруппа); ИначеЕсли СтрокаПорядкаВывода.ЭтоВариант Тогда @@ -1130,12 +1527,12 @@ ТекущаяГруппа = ТекущиеГруппыПоУровнямВложенности.Получить(ТекущийУровеньВложенности); КонецЕсли; - ДобавитьЭлементыВариантаОтчета(ПеременныеКонтекста, СтрокаПорядкаВывода.Вариант, ТекущаяГруппа, СтрокаПорядкаВывода.УровеньВложенности); + ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, СтрокаПорядкаВывода.Вариант, ТекущаяГруппа, СтрокаПорядкаВывода.УровеньВложенности); ИначеЕсли СтрокаПорядкаВывода.ЭтоПустаяСтрока Тогда ВГруппу = ТекущиеГруппыПоУровнямВложенности.Получить(СтрокаПорядкаВывода.УровеньВложенности - 1); - ДобавитьПустуюДекорацию(ПеременныеКонтекста, ВГруппу); + ДобавитьПустуюДекорацию(ПараметрыЗаполнения, ВГруппу); КонецЕсли; @@ -1145,20 +1542,20 @@ Найденные = ПорядокВывода.НайтиСтроки(Новый Структура("НомерКолонки, ЭтоПодсистема", НомерКолонки, Ложь)); Если Найденные.Количество() = 0 Тогда ГруппаУровня3 = ГруппаУровня2.ПодчиненныеЭлементы.Получить(НомерКолонки - 1); - ДобавитьПустуюДекорацию(ПеременныеКонтекста, ГруппаУровня3); + ДобавитьПустуюДекорацию(ПараметрыЗаполнения, ГруппаУровня3); КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервере -Процедура ЗаполнитьПорядокВывода(ПорядокВывода, СтрокаРодителя, ПеременныеКонтекста) +Процедура ЗаполнитьПорядокВывода(ПорядокВывода, СтрокаРодителя, ПараметрыЗаполнения) - Рекурсия = ПеременныеКонтекста.Рекурсия; + Рекурсия = ПараметрыЗаполнения.Рекурсия; Для Каждого СтрокаДерева Из СтрокаРодителя.Строки Цикл - Если НЕ Рекурсия.ЭтоПоследняяКолонка И Рекурсия.СвободноСтрок <= 0 Тогда // текущая колонка исчерпана + Если Не Рекурсия.ЭтоПоследняяКолонка И Рекурсия.СвободноСтрок <= 0 Тогда // текущая колонка исчерпана // Переход к новой колонке. Рекурсия.ВсегоОсталосьВывести = Рекурсия.ВсегоОсталосьВывести - 1; // Пустая группа, которую не надо выводить. Рекурсия.НомерТекущейКолонки = Рекурсия.НомерТекущейКолонки + 1; @@ -1169,7 +1566,7 @@ // Вывод иерархии / Повтор иерархии с добавкой "(продолжение)" если вывод строк текущего родителя уже был начат в предыдущей колонке. ТекущийРодитель = СтрокаРодителя; - Пока ТекущийРодитель.ПодсистемаСсылка <> РазделСсылка Цикл + Пока ТекущийРодитель.ПодсистемаСсылка <> ПараметрыЗаполнения.РазделСсылка Цикл // Рекурсия.ВсегоОсталосьВывести при этом не уменьшается, т.к. вывод продолжения увеличивает количество строк. ВывестиПодсистему = ПорядокВывода.Добавить(); @@ -1187,7 +1584,7 @@ КонецЕсли; - Если (СтрокаДерева.КоличествоВариантов > 0 ИЛИ СтрокаДерева.ВсегоВложенныхВариантов > 0) И Рекурсия.НачатВыводВТекущейКолонке И СтрокаРодителя.НачатВывод Тогда + Если (СтрокаДерева.КоличествоВариантов > 0 Или СтрокаДерева.ВсегоВложенныхВариантов > 0) И Рекурсия.НачатВыводВТекущейКолонке И СтрокаРодителя.НачатВывод Тогда // Вывод пустой строки. Рекурсия.ВсегоОсталосьВывести = Рекурсия.ВсегоОсталосьВывести - 1; ВывестиПустуюСтроку = ПорядокВывода.Добавить(); @@ -1219,8 +1616,8 @@ Рекурсия.НачатВыводВТекущейКолонке = Истина; Если Рекурсия.ЭтоПоследняяКолонка - ИЛИ СтрокаДерева.КоличествоВариантов <= 5 - ИЛИ СтрокаДерева.КоличествоВариантов - 2 <= Рекурсия.СвободноСтрок + 2 Тогда + Или СтрокаДерева.КоличествоВариантов <= 5 + Или СтрокаДерева.КоличествоВариантов - 2 <= Рекурсия.СвободноСтрок + 2 Тогда // Вывод всех в текущую колонку. НачалоСПродолжением = Ложь; @@ -1259,7 +1656,7 @@ // Повтор иерархии с добавкой "(продолжение)". ТекущийРодитель = СтрокаРодителя; - Пока ТекущийРодитель.ПодсистемаСсылка <> РазделСсылка Цикл + Пока ТекущийРодитель.ПодсистемаСсылка <> ПараметрыЗаполнения.РазделСсылка Цикл // Рекурсия.ВсегоОсталосьВывести при этом не уменьшается, т.к. вывод продолжения увеличивает количество строк. ВывестиПодсистему = ПорядокВывода.Добавить(); @@ -1306,7 +1703,7 @@ КонецЕсли; // Регистрация вложенных строк. - ЗаполнитьПорядокВывода(ПорядокВывода, СтрокаДерева, ПеременныеКонтекста); + ЗаполнитьПорядокВывода(ПорядокВывода, СтрокаДерева, ПараметрыЗаполнения); // Проброс НачатВывод вверх по иерархии. Если СтрокаДерева.НачатВывод Тогда @@ -1318,99 +1715,149 @@ КонецПроцедуры &НаСервере -Функция ДобавитьГруппуПодсистемы(ПеременныеКонтекста, СтрокаПорядкаВывода, ВГруппу) - +Функция ДобавитьГруппуПодсистемы(ПараметрыЗаполнения, СтрокаПорядкаВывода, ВГруппу) Подсистема = СтрокаПорядкаВывода.Подсистема; СтрокаДерева = СтрокаПорядкаВывода.СтрокаДерева; - УвеличениеРазмераШрифта = ПеременныеКонтекста.МаксимальныйУровеньВложенности - СтрокаПорядкаВывода.УровеньВложенности; + Если СтрокаДерева.КоличествоВариантов = 0 И СтрокаДерева.ВсегоВложенныхВариантов = 0 Тогда + Возврат ВГруппу; + КонецЕсли; + УвеличениеРазмераШрифта = ПараметрыЗаполнения.МаксимальныйУровеньВложенности - СтрокаПорядкаВывода.УровеньВложенности; + ПодсистемаПредставление = Подсистема.Представление; Подсистема.НомерЭлемента = Подсистема.НомерЭлемента + 1; ГруппаПодсистемыИмя = Подсистема.ИмяЭлемента + "_" + Формат(Подсистема.НомерЭлемента, "ЧГ=0"); + // Добавление отступа слева. + Если СтрокаПорядкаВывода.УровеньВложенности > 1 Тогда + // Группа. + ГруппаОтступа = Элементы.Вставить(ГруппаПодсистемыИмя + "_ГруппаОтступа", Тип("ГруппаФормы"), ВГруппу); + ГруппаОтступа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаОтступа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаОтступа.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаОтступа.ОтображатьЗаголовок = Ложь; + ГруппаОтступа.РастягиватьПоГоризонтали = Истина; + + // Картинка. + КартинкаОтступа = Элементы.Вставить(ГруппаПодсистемыИмя + "_КартинкаОтступа", Тип("ДекорацияФормы"), ГруппаОтступа); + ЗаполнитьЗначенияСвойств(КартинкаОтступа, ПараметрыЗаполнения.Шаблоны.КартинкаОтступа); + КартинкаОтступа.Ширина = СтрокаПорядкаВывода.УровеньВложенности - 1; + Если СтрокаПорядкаВывода.СтрокаДерева.КоличествоВариантов = 0 И СтрокаПорядкаВывода.СтрокаДерева.ВсегоВложенныхВариантов = 0 Тогда + КартинкаОтступа.Видимость = Ложь; + КонецЕсли; + + // Подмена группы верхнего уровня. + ВГруппу = ГруппаОтступа; + КонецЕсли; + ГруппаПодсистемы = Элементы.Вставить(ГруппаПодсистемыИмя, Тип("ГруппаФормы"), ВГруппу); ГруппаПодсистемы.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаПодсистемы.РастягиватьПоГоризонтали = Истина; - ГруппаПодсистемы.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; - ГруппаПодсистемы.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаПодсистемы.ШрифтЗаголовка = Новый Шрифт(ШрифтЖирный, , 8 + 2*УвеличениеРазмераШрифта); - ГруппаПодсистемы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ГруппаПодсистемы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ГруппаПодсистемы.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаПодсистемы.Заголовок = Подсистема.Представление; - Если СтрокаПорядкаВывода.ЭтоПродолжение Тогда - ГруппаПодсистемы.Заголовок = ГруппаПодсистемы.Заголовок + " " + НСтр("ru = '(продолжение)'"); + ТребуетсяПодсветка = Ложь; + Если ПараметрыЗаполнения.ИспользоватьПодсветку Тогда + ПараметрыПодсветки = ПараметрыЗаполнения.РезультатПоиска.ПодсветкаПодсистем.Получить(Подсистема.Ссылка); + Если ПараметрыПодсветки <> Неопределено Тогда + ПодсветкаПредставления = ПараметрыПодсветки.НаименованиеПодсистемы; + Если ПодсветкаПредставления.КоличествоНайденныхСлов > 0 Тогда + ТребуетсяПодсветка = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ШрифтЗаголовка = Новый Шрифт(ШрифтЖирный, , 8 + 2*УвеличениеРазмераШрифта); + Если ТребуетсяПодсветка Тогда + Если СтрокаПорядкаВывода.ЭтоПродолжение Тогда + Суффикс = НСтр("ru = '(продолжение)'"); + Если Прав(ПодсветкаПредставления.Значение, СтрДлина(Суффикс)) <> Суффикс Тогда + ПодсветкаПредставления.Значение = ПодсветкаПредставления.Значение + " " + Суффикс; + КонецЕсли; + КонецЕсли; + + ГруппаПодсистемы.ОтображатьЗаголовок = Ложь; + ГруппаПодсистемы.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСверху; + + ФорматированнаяСтрока = СформироватьСтрокуСПодсветкой(ПодсветкаПредставления); + + ЗаголовокПодсистемы = Элементы.Вставить(ГруппаПодсистемы.Имя + "_РасширеннаяПодсказка", Тип("ДекорацияФормы"), ГруппаПодсистемы); + ЗаголовокПодсистемы.Заголовок = ФорматированнаяСтрока; + ЗаголовокПодсистемы.ЦветТекста = ЦветГруппыВариантовОтчетов; + ЗаголовокПодсистемы.Шрифт = ШрифтЗаголовка; + ЗаголовокПодсистемы.РастягиватьПоГоризонтали = Истина; + ЗаголовокПодсистемы.Высота = 1; + + Иначе + Если СтрокаПорядкаВывода.ЭтоПродолжение Тогда + ПодсистемаПредставление = ПодсистемаПредставление + " " + НСтр("ru = '(продолжение)'"); + КонецЕсли; + + ГруппаПодсистемы.ОтображатьЗаголовок = Истина; + ГруппаПодсистемы.Заголовок = ПодсистемаПредставление; + ГруппаПодсистемы.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; + ГруппаПодсистемы.ШрифтЗаголовка = ШрифтЗаголовка; КонецЕсли; - Для Н = 2 По СтрокаПорядкаВывода.УровеньВложенности Цикл - ГруппаПодсистемы.Заголовок = " " + ГруппаПодсистемы.Заголовок; - КонецЦикла; СтрокаДерева.ГруппаФормы = ГруппаПодсистемы; Возврат ГруппаПодсистемы; - КонецФункции &НаСервере -Функция ДобавитьЭлементыВариантаОтчета(ПеременныеКонтекста, Вариант, ВГруппу, УровеньВложенности = 0) +Функция ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, Вариант, ВГруппу, УровеньВложенности = 0) // Уникальное имя добавляемого элемента - ДобавленоЭлементов = ДобавленоЭлементов + 1; - НадписьИмя = "ДобавленныйЭлемент_" + Формат(ДобавленоЭлементов, "ЧГ=0"); + ВыведеноЭлементовВариантов = ВыведеноЭлементовВариантов + 1; + НадписьИмя = "ДобавленныйЭлемент_" + Формат(ВыведеноЭлементовВариантов, "ЧГ=0"); - ГруппаВариантаИмя = "Группа_" + НадписьИмя; - ГруппаВарианта = Элементы.Вставить(ГруппаВариантаИмя, Тип("ГруппаФормы"), ВГруппу); - ЗаполнитьЗначенияСвойств(ГруппаВарианта, ПеременныеКонтекста.Шаблоны.ГруппаВарианта); - - // Добавление пустой картинки для отступа. - Если УровеньВложенности > 1 Тогда - КартинкаИмя = "КартинкаОтступа_" + НадписьИмя; - Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), ГруппаВарианта); - ЗаполнитьЗначенияСвойств(Картинка, ПеременныеКонтекста.Шаблоны.КартинкаОтступа); - Картинка.Ширина = УровеньВложенности - 1; + Если РежимНастройки Тогда + ГруппаВариантаИмя = "Группа_" + НадписьИмя; + ГруппаВарианта = Элементы.Вставить(ГруппаВариантаИмя, Тип("ГруппаФормы"), ВГруппу); + ЗаполнитьЗначенияСвойств(ГруппаВарианта, ПараметрыЗаполнения.Шаблоны.ГруппаВарианта); + Иначе + ГруппаВарианта = ВГруппу; КонецЕсли; // Добавление флажка (для быстрого доступа не используется) Если РежимНастройки Тогда ФлажокИмя = "Флажок_" + НадписьИмя; - РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Истина); - ПеременныеКонтекста.ДобавляемыеРеквизиты.Добавить(РеквизитФормы); + РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Ложь); + ПараметрыЗаполнения.ДобавляемыеРеквизиты.Добавить(РеквизитФормы); Флажок = Элементы.Вставить(ФлажокИмя, Тип("ПолеФормы"), ГруппаВарианта); Флажок.Вид = ВидПоляФормы.ПолеФлажка; Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Флажок.Видимость = (ПеременныеКонтекста.ИмяГруппы <> "БыстрыйДоступ"); + Флажок.Видимость = (ПараметрыЗаполнения.ИмяГруппы <> "БыстрыйДоступ"); Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении"); КонецЕсли; - // Добавление картинки (используется только для быстрого доступа) - Если ПеременныеКонтекста.ИмяГруппы = "БыстрыйДоступ" Тогда - КартинкаИмя = "Картинка_" + НадписьИмя; - Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), ГруппаВарианта); - ЗаполнитьЗначенияСвойств(Картинка, ПеременныеКонтекста.Шаблоны.КартинкаБыстрогоДоступа); - КонецЕсли; - // Добавление надписи-гиперссылки варианта отчета Надпись = Элементы.Вставить(НадписьИмя, Тип("ДекорацияФормы"), ГруппаВарианта); - ЗаполнитьЗначенияСвойств(Надпись, ПеременныеКонтекста.Шаблоны.НадписьВарианта); + ЗаполнитьЗначенияСвойств(Надпись, ПараметрыЗаполнения.Шаблоны.НадписьВарианта); Надпись.Заголовок = СокрЛП(Вариант.Наименование); Если ЗначениеЗаполнено(Вариант.Описание) Тогда Надпись.Подсказка = СокрЛП(Вариант.Описание); КонецЕсли; Если ЗначениеЗаполнено(Вариант.Автор) Тогда - Надпись.Подсказка = Надпись.Подсказка + Символы.ПС + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор)); + Надпись.Подсказка = СокрЛ(Надпись.Подсказка + Символы.ПС) + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор)); КонецЕсли; Надпись.УстановитьДействие("Нажатие", "ВариантНажатие"); - Если НЕ Вариант.Видимость Тогда + Если Не Вариант.Видимость Тогда Надпись.ЦветТекста = ЦветСкрытыхВариантов; КонецЕсли; - Если ПеременныеКонтекста.ИмяГруппы <> "СмТакже" - И (Вариант.Важный ИЛИ ПеременныеКонтекста.ИмяГруппы = "БыстрыйДоступ") - И Вариант.Видимость Тогда + Если Вариант.Важный + И ПараметрыЗаполнения.ИмяГруппы <> "СмТакже" + И ПараметрыЗаполнения.ИмяГруппы <> "БыстрыйДоступ" Тогда Надпись.Шрифт = ШрифтЖирный; КонецЕсли; + СоставПодсказки = Новый Массив; + ОпределитьСоставПодсказкиВарианта(ПараметрыЗаполнения, Вариант, СоставПодсказки, Надпись); + ВывестиПодсказкуВарианта(Надпись, СоставПодсказки); + Если РежимНастройки Тогда - Для Каждого КлючИЗначение Из ПеременныеКонтекста.КонтекстноеМеню Цикл + Для Каждого КлючИЗначение Из ПараметрыЗаполнения.КонтекстноеМеню Цикл КомандаИмя = КлючИЗначение.Ключ; КнопкаИмя = КомандаИмя + "_" + НадписьИмя; Кнопка = Элементы.Вставить(КнопкаИмя, Тип("КнопкаФормы"), Надпись.КонтекстноеМеню); @@ -1433,7 +1880,7 @@ СтрокаТаблицы = ДобавленныеВарианты.Добавить(); КонецЕсли; ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант); - СтрокаТаблицы.ГруппаУровня2Имя = ПеременныеКонтекста.ИмяГруппы; + СтрокаТаблицы.ГруппаУровня2Имя = ПараметрыЗаполнения.ИмяГруппы; СтрокаТаблицы.НадписьИмя = НадписьИмя; Возврат Надпись; @@ -1441,16 +1888,120 @@ КонецФункции &НаСервере -Функция ДобавитьПустуюДекорацию(ПеременныеКонтекста, ВГруппу) +Процедура ОпределитьСоставПодсказкиВарианта(ПараметрыЗаполнения, Вариант, СоставПодсказки, Надпись) + ОписаниеВыведено = Ложь; + Если ПараметрыЗаполнения.ИспользоватьПодсветку Тогда + ПараметрыПодсветки = ПараметрыЗаполнения.РезультатПоиска.ПодсветкаВариантов.Получить(Вариант.Ссылка); + Если ПараметрыПодсветки <> Неопределено Тогда + Если ПараметрыПодсветки.НаименованиеВарианта.КоличествоНайденныхСлов > 0 Тогда + Надпись.Заголовок = СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованиеВарианта); + КонецЕсли; + Если ПараметрыПодсветки.Описание.КоличествоНайденныхСлов > 0 Тогда + СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.Описание, СоставПодсказки); + ОписаниеВыведено = Истина; + КонецЕсли; + Если ПараметрыПодсветки.НаименованияПользовательскихНастроек.КоличествоНайденныхСлов > 0 Тогда + Если СоставПодсказки.Количество() > 0 Тогда + СоставПодсказки.Добавить(Символы.ПС); + КонецЕсли; + СоставПодсказки.Добавить(НСтр("ru = 'Сохраненные настройки:'") + " "); + СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПользовательскихНастроек, СоставПодсказки); + СоставПодсказки.Добавить("."); + КонецЕсли; + Если ПараметрыПодсветки.НаименованияПолей.КоличествоНайденныхСлов > 0 Тогда + Если СоставПодсказки.Количество() > 0 Тогда + СоставПодсказки.Добавить(Символы.ПС); + КонецЕсли; + СоставПодсказки.Добавить(НСтр("ru = 'Поля:'") + " "); + СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПолей, СоставПодсказки); + СоставПодсказки.Добавить("."); + КонецЕсли; + Если ПараметрыПодсветки.НаименованияПараметровИОтборов.КоличествоНайденныхСлов > 0 Тогда + Если СоставПодсказки.Количество() > 0 Тогда + СоставПодсказки.Добавить(Символы.ПС); + КонецЕсли; + СоставПодсказки.Добавить(НСтр("ru = 'Настройки:'") + " "); + СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПараметровИОтборов, СоставПодсказки); + СоставПодсказки.Добавить("."); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ПоказыватьОписание = (ПоказыватьПодсказки <> 0 И Не ПустаяСтрока(Вариант.Описание)); + Если Не ОписаниеВыведено И ПоказыватьОписание Тогда + Если СоставПодсказки.Количество() > 0 Тогда + СоставПодсказки.Добавить(Символы.ПС); + КонецЕсли; + СоставПодсказки.Добавить(СокрЛП(Вариант.Описание)); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ВывестиПодсказкуВарианта(Надпись, СоставПодсказки) + Если СоставПодсказки.Количество() = 0 Тогда + Возврат; + КонецЕсли; - ДобавленоЭлементов = ДобавленоЭлементов + 1; - ДекорацияИмя = "ПустаяДекорация_" + Формат(ДобавленоЭлементов, "ЧГ=0"); + ФорматированнаяСтрока = Новый ФорматированнаяСтрока(СоставПодсказки); + + Надпись.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Надпись.РасширеннаяПодсказка.Заголовок = ФорматированнаяСтрока; + //Надпись.РасширеннаяПодсказка.РастягиватьПоВертикали = Ложь; + Надпись.РасширеннаяПодсказка.РастягиватьПоГоризонтали = Истина; + Надпись.РасширеннаяПодсказка.ЦветТекста = ЦветПодсказки; +КонецПроцедуры + +&НаСервере +Функция СформироватьСтрокуСПодсветкой(ОбластьПоиска, Содержимое = Неопределено) + ВозвращатьФорматированнуюСтроку = Ложь; + Если Содержимое = Неопределено Тогда + ВозвращатьФорматированнуюСтроку = Истина; + Содержимое = Новый Массив; + КонецЕсли; + + ИсходныйТекст = ОбластьПоиска.Значение; + + ОбластьПоиска.ПодсветкаСлов.СортироватьПоЗначению(НаправлениеСортировки.Возр); + КоличествоОткрыто = 0; + ПозицияНачалаОбычногоТекста = 1; + ПозицияНачалаПодсветки = 0; + Для Каждого ЭлементСписка Из ОбластьПоиска.ПодсветкаСлов Цикл + Подсвечивать = (ЭлементСписка.Представление = "+"); + КоличествоОткрыто = КоличествоОткрыто + ?(Подсвечивать, 1, -1); + Если Подсвечивать И КоличествоОткрыто = 1 Тогда + ПозицияНачалаПодсветки = ЭлементСписка.Значение; + ФрагментОбычногоТекста = Сред(ИсходныйТекст, ПозицияНачалаОбычногоТекста, ПозицияНачалаПодсветки - ПозицияНачалаОбычногоТекста); + Содержимое.Добавить(ФрагментОбычногоТекста); + ИначеЕсли Не Подсвечивать И КоличествоОткрыто = 0 Тогда + ПозицияНачалаОбычногоТекста = ЭлементСписка.Значение; + ПодсвечиваемыйФрагмент = Сред(ИсходныйТекст, ПозицияНачалаПодсветки, ПозицияНачалаОбычногоТекста - ПозицияНачалаПодсветки); + Содержимое.Добавить(Новый ФорматированнаяСтрока(ПодсвечиваемыйФрагмент, , , ЦветПодсветкиНайденныхСлов)); + КонецЕсли; + КонецЦикла; + Если ПозицияНачалаОбычногоТекста <= СтрДлина(ИсходныйТекст) Тогда + ФрагментОбычногоТекста = Сред(ИсходныйТекст, ПозицияНачалаОбычногоТекста); + Содержимое.Добавить(ФрагментОбычногоТекста); + КонецЕсли; + + Если ВозвращатьФорматированнуюСтроку Тогда + Возврат Новый ФорматированнаяСтрока(Содержимое); + Иначе + Возврат Неопределено; + КонецЕсли; +КонецФункции + +&НаСервере +Функция ДобавитьПустуюДекорацию(ПараметрыЗаполнения, ВГруппу) + + ПараметрыЗаполнения.ДобавленоПустыхДекораций = ПараметрыЗаполнения.ДобавленоПустыхДекораций + 1; + ДекорацияИмя = "ПустаяДекорация_" + Формат(ПараметрыЗаполнения.ДобавленоПустыхДекораций, "ЧГ=0"); Декорация = Элементы.Вставить(ДекорацияИмя, Тип("ДекорацияФормы"), ВГруппу); Декорация.Вид = ВидДекорацииФормы.Надпись; Декорация.Заголовок = " "; + Декорация.РастягиватьПоГоризонтали = Истина; Возврат Декорация; КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form similarity index 52% rename from SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form rename to SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form index 6a3dffc54..a9f5e075f 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form @@ -1,152 +1,73 @@ + + <key>ru</key> + <value>Параметры администрирования</value> + + + ПоясняющаяНадпись + 109 + + <key>ru</key> + <value>Поясняющая надпись</value> + + true + true + + true + + + ПоясняющаяНадписьРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ПоясняющаяНадписьКонтекстноеМеню + 110 + true + + Label + true + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + Top + + - НастройкаСоединения + ГруппаАдминистрированиеИБ 24 - Порты - 73 - - НомераПортов - 26 - - ПортPOP3 - 12 - true - true - - true - - - ПортPOP3 - - - ru - Порт сервера POP3 - - - ПортPOP3ExtendedTooltip - 80 - Label - true - true - - Left - - - - ПортPOP3КонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - Normal - - - - ПортSMTP - 14 - true - true - - true - - - ПортSMTP - - Left - - ru - Порт сервера SMTP - - - ПортSMTPExtendedTooltip - 81 - Label - true - true - - Left - - - - ПортSMTPКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - Normal - - - true - true - - true - + ГруппаЗаголовков + 91 + + ДекорацияИмяПользователя + 93 <key>ru</key> - <value>Номера портов</value> + <value>Имя пользователя:</value> - - ru - Номера портов - - - НомераПортовExtendedTooltip - 79 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - УстановитьПортыПоУмолчанию - 25 true true true - false - УстановитьПортыПоУмолчаниюExtendedTooltip - 82 + ДекорацияИмяПользователяРасширеннаяПодсказка + 95 Label true true @@ -154,31 +75,61 @@ Left - UsualButton - Form.Command.УстановитьПортыПоУмолчанию - Normal - Auto + + ДекорацияИмяПользователяКонтекстноеМеню + 94 + true + + Label true true - UserCmds - Auto + + Left + + + + ДекорацияПароль + 96 + + <key>ru</key> + <value>Пароль:</value> + + true + true + + true + + + ДекорацияПарольРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ДекорацияПарольКонтекстноеМеню + 97 + true + + Label + true + true + + Left + true true true - - <key>ru</key> - <value>Порты</value> - - - ru - Порты - + 22 - ПортыExtendedTooltip - 78 + ГруппаЗаголовковРасширеннаяПодсказка + 92 Label true true @@ -188,6 +139,7 @@ UsualGroup + Vertical Auto true true @@ -196,26 +148,333 @@ - ГруппаДлительностьОжидания - 57 - - ДлительностьОжиданияСервера - 28 + РежимРаботы + 31 + + НеразделенныйРежим + 33 + + ИмяАдминистратораИнформационнойБазы + 99 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + ИмяАдминистратораИнформационнойБазы + + None + + ИмяАдминистратораИнформационнойБазыРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + ИмяАдминистратораИнформационнойБазыКонтекстноеМеню + 100 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПарольНеразделенногоАдминистратораИБ + 36 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораИнформационнойБазы + + None + + ПарольНеразделенногоАдминистратораИБExtendedTooltip + 47 + Label + true + true + + Left + + + + ПарольНеразделенногоАдминистратораИБКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - ДлительностьОжиданияСервера - + + <key>ru</key> + <value>Неразделенный режим</value> + ru - Время ожидания сервера до разрыва соединения в секундах (от 10 до 600) + Неразделенный режим - ДлительностьОжиданияСервераExtendedTooltip - 84 + НеразделенныйРежимРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Page + + Vertical + + + + РазделенныйРежим + 32 + + АдминистраторИБ + 25 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + АдминистраторИБ + + None + + ru + Администратор информационной базы, от имени которого выполняется принудительное отключение сеансов + + + АдминистраторИБExtendedTooltip + 49 + Label + true + true + + Left + + + + АдминистраторИБКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + true + true + Normal + + + + ПарольАдминистратораИБ + 27 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораИнформационнойБазы + + None + + ru + Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов + + + ПарольАдминистратораИБExtendedTooltip + 50 + Label + true + true + + Left + + + + ПарольАдминистратораИБКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Разделенный режим</value> + + + ru + Разделенный режим + + + РазделенныйРежимРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + РежимРаботыExtendedTooltip + 44 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Администратор информационной базы</value> + + + ГруппаАдминистрированиеИБРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаАдминистрированиеКластера + 76 + + ГруппаПараметрыКластера + 9 + + ИмяВКластере + 102 + false + + true + + + ИмяВКластере + + + ИмяВКластереРасширеннаяПодсказка + 104 Label true true @@ -224,8 +483,8 @@ - ДлительностьОжиданияСервераКонтекстноеМеню - 29 + ИмяВКластереКонтекстноеМеню + 103 true InputField @@ -234,37 +493,29 @@ Left true - 7 true true - true + true true true true - - 10 - - - 600 - Normal - - НадписьСекунд - 71 - - <key>ru</key> - <value>секунд</value> - + + ИмяАдминистратораКластера + 10 true true true + + ИмяАдминистратораКластера + - НадписьСекундExtendedTooltip - 85 + ИмяАдминистратораКластераExtendedTooltip + 54 Label true true @@ -273,15 +524,107 @@ - НадписьСекундКонтекстноеМеню - 72 + ИмяАдминистратораКластераКонтекстноеМеню + 11 true - Label - true - true - - Left + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПарольАдминистратораКластера + 12 + true + true + + true + + + ПарольАдминистратораКластера + + + ПарольАдминистратораКластераExtendedTooltip + 55 + Label + true + true + + Left + + + + ПарольАдминистратораКластераКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПортКластераСерверов + 17 + true + true + + true + + + ПортКластера + + + ПортКластераСерверовExtendedTooltip + 59 + Label + true + true + + Left + + + + ПортКластераСерверовКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + + ru + ЧГ=0 + + true + true + true + Normal true @@ -291,15 +634,11 @@ <key>ru</key> - <value>Группа длительность ожидания</value> + <value>Параметры авторизации кластера серверов</value> - - ru - Группа длительность ожидания - - ГруппаДлительностьОжиданияExtendedTooltip - 83 + ГруппаПараметрыКластераРасширеннаяПодсказка + 53 Label true true @@ -309,6 +648,364 @@ UsualGroup + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПараметрыУправления + 78 + + ТипПодключения + 114 + + <key>ru</key> + <value>Подключение к кластеру серверов</value> + + true + true + + true + + + ТипПодключения + + + OnChange + ТипПодключенияПриИзменении + + + ТипПодключенияРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ТипПодключенияКонтекстноеМеню + 115 + true + + InputField + Enter + true + Left + true + + 28 + true + true + true + true + true + true + true + + + ru + COM-соединение с агентом сервера + + + COM + + + + + ru + Через сервер администрирования (ras) + + + RAS + + + Normal + + + + ГруппаТипПодключения + 85 + + ГруппаCOM + 61 + + АдресАгентаСервера + 82 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + АдресАгентаСервера + + + АдресАгентаСервераРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + АдресАгентаСервераКонтекстноеМеню + 83 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПортАгентаСервера + 19 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортАгентаСервера + + + ПортАгентаСервераExtendedTooltip + 60 + Label + true + true + + Left + + + + ПортАгентаСервераКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + + ru + ЧГ=0 + + true + true + true + Normal + + + true + true + + true + + + ГруппаCOMРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Page + + auto + + + + ГруппаRAS + 63 + + АдресСервераАдминистрирования + 68 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + АдресСервераАдминистрирования + + + АдресСервераАдминистрированияРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + АдресСервераАдминистрированияКонтекстноеМеню + 69 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПортСервераАдминистрирования + 73 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортСервераАдминистрирования + + + ПортСервераАдминистрированияРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ПортСервераАдминистрированияКонтекстноеМеню + 74 + true + + InputField + Enter + true + Left + true + + true + true + true + + ru + ЧГ=0 + + true + true + true + Normal + + + true + true + + true + + + ГруппаRASРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + ГруппаТипПодключенияРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Подключение к кластеру серверов через сервер администрирования (ras)</value> + + + ГруппаПараметрыУправленияРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical Auto NormalSeparation true @@ -324,15 +1021,10 @@ <key>ru</key> - <value>Настройка соединения</value> + <value>Параметры администрирования кластера</value> - - - ru - Настройка соединения - - НастройкаСоединенияExtendedTooltip + ГруппаАдминистрированиеКластераРасширеннаяПодсказка 77 Label true @@ -354,29 +1046,22 @@ - Дополнительно - 55 + ГруппаКоманднойПанели + 107 - ГруппаСерверВходящейПочты - 68 - - СпособPOP3Аутентификации - 48 + КоманднаяПанель + 105 + + OK + 30 true true true - - СпособPOP3Аутентификации - - - ru - Способ аутентификации на POP3 сервере - - СпособPOP3АутентификацииExtendedTooltip - 88 + OKРасширеннаяПодсказка + 40 Label true true @@ -384,271 +1069,26 @@ Left - - СпособPOP3АутентификацииКонтекстноеМеню - 49 - true - - InputField - Enter - true - Left - true - - 16 - true - true - true - true - true - - - Enum.СпособыPOP3Аутентификации.EnumValue.APOP - - - - - Enum.СпособыPOP3Аутентификации.EnumValue.CramMD5 - - - - - Enum.СпособыPOP3Аутентификации.EnumValue.Обычная - - - Normal - + Form.Command.OK + Auto + true + true + true + UserCmds + Auto - - ГруппаОставлятьКопииСообщенийНаСервере - 54 - - ОставлятьКопииСообщенийНаСервере - 52 - true - true - - true - - - ОставлятьКопииСообщенийНаСервере - - Right - - ru - Требуется оставлять копии сообщений на сервере - - - OnChange - ОставлятьКопииСообщенийНаСервереПриИзменении - - - ОставлятьКопииСообщенийНаСервереExtendedTooltip - 90 - Label - true - true - - Left - - - - ОставлятьКопииСообщенийНаСервереКонтекстноеМеню - 53 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаПериодХраненияСообщенийНаСервере - 63 - - УдалятьСообщенияССервера - 61 - - <key>ru</key> - <value>Удалять сообщения на сервере через:</value> - - true - true - - true - - - УдалятьСообщенияССервера - - Right - - ru - Выполнять автоматическое удаление старых сообщений с сервера - - - OnChange - УдалятьСообщенияССервераПриИзменении - - - УдалятьСообщенияССервераExtendedTooltip - 92 - Label - true - true - - Left - - - - УдалятьСообщенияССервераКонтекстноеМеню - 62 - true - - CheckBoxField - Enter - true - Left - true - - - - ОставлятьКопииСообщенийЧислоДней - 50 - - <key>ru</key> - <value>Удалять с сервера через n дней</value> - - true - true - - true - - - ОставлятьКопииСообщенийЧислоДней - - None - - ru - Оставлять копии сообщений на сервере указанное количество дней (от 1 до 600) - - - ОставлятьКопииСообщенийЧислоДнейExtendedTooltip - 93 - Label - true - true - - Left - - - - ОставлятьКопииСообщенийЧислоДнейКонтекстноеМеню - 51 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - true - - 1 - - - 600 - - Normal - - - - НадписьДней - 69 - - <key>ru</key> - <value>дней</value> - - true - true - - true - - - НадписьДнейExtendedTooltip - 94 - Label - true - true - - Left - - - - НадписьДнейКонтекстноеМеню - 70 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа период хранения сообщений на сервере</value> - - - ru - Группа период хранения сообщений на сервере - - - ГруппаПериодХраненияСообщенийНаСервереExtendedTooltip - 91 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - + + Справка + 23 true true true - - <key>ru</key> - <value>Транспорт сообщений</value> - + false - ГруппаОставлятьКопииСообщенийНаСервереExtendedTooltip - 89 + СправкаExtendedTooltip + 42 Label true true @@ -656,32 +1096,48 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + Отмена + 112 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto true true true - - <key>ru</key> - <value>Сервер входящей почты</value> - - - ru - Группа сервер входящей почты - - ГруппаСерверВходящейПочтыExtendedTooltip - 87 + КоманднаяПанельРасширеннаяПодсказка + 106 Label true true @@ -689,455 +1145,9 @@ Left - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - СерверИсходящейПочты - 16 - - SMTPАутентификацияУстановлена - 22 - true - true - - true - - - SMTPАутентификацияУстановлена - - Right - - OnChange - SMTPАутентификацияУстановленаПриИзменении - - - SMTPАутентификацияУстановленаExtendedTooltip - 96 - Label - true - true - - Left - - - - SMTPАутентификацияУстановленаКонтекстноеМеню - 23 - true - - CheckBoxField - Enter - true - Left - true - - - - SMTPАутентификация - 38 - true - true - - true - - - SMTPАутентификация - - None - - OnChange - SMTPАутентификацияПриИзменении - - - SMTPАутентификацияExtendedTooltip - 97 - Label - true - true - - Left - - - - SMTPАутентификацияКонтекстноеМеню - 39 - true - - RadioButtonField - Left - Enter - true - Left - true - - 1 - - - ru - Аналогично серверу входящей почты - - - Enum.ВариантыSMTPАутентификации.EnumValue.АналогичноPOP3 - - - - - ru - Задать параметры аутентификации - - - Enum.ВариантыSMTPАутентификации.EnumValue.ЗадаетсяПараметрами - - - - - ru - Зайти на сервер входящей почты перед отправкой - - - Enum.ВариантыSMTPАутентификации.EnumValue.POP3ПередSMTP - - - Vertical - - - - ГруппаАутентификацияSMTP - 40 - - ГруппаПустаяСтраница - 44 - - ПустоеПоле - 45 - true - true - - true - - - ПустойРеквизит - - None - - ПустоеПолеExtendedTooltip - 100 - Label - true - true - - Left - - - - ПустоеПолеКонтекстноеМеню - 46 - true - - LabelField - Enter - true - Left - true - - 20 - true - true - false - - - true - true - - true - - - <key>ru</key> - <value>Группа пустая страница</value> - - - ru - Группа пустая страница - - - ГруппаПустаяСтраницаExtendedTooltip - 99 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ГруппаПараметры - 1 - - ПользовательSMTP - 4 - true - true - - true - - - ПользовательSMTP - - - ru - Имя пользователя для дополнительной аутентификации на SMTP сервере - - - ПользовательSMTPExtendedTooltip - 102 - Label - true - true - - Left - - - - ПользовательSMTPКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - true - Normal - - - - ПарольSMTP - 2 - true - true - - true - - - ПарольSMTP - - - ru - Имя пользователя для дополнительной аутентификации на SMTP сервере - - - ПарольSMTPExtendedTooltip - 103 - Label - true - true - - Left - - - - ПарольSMTPКонтекстноеМеню - 3 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - true - true - Normal - - - - СпособSMTPАутентификации - 6 - true - true - - true - - - СпособSMTPАутентификации - - - ru - Способ аутентификации на сервере SMTP - - - СпособSMTPАутентификацииExtendedTooltip - 104 - Label - true - true - - Left - - - - СпособSMTPАутентификацииКонтекстноеМеню - 7 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - true - - - Enum.СпособыSMTPАутентификации.EnumValue.CramMD5 - - - - - Enum.СпособыSMTPАутентификации.EnumValue.Login - - - - - Enum.СпособыSMTPАутентификации.EnumValue.Plain - - - - - Enum.СпособыSMTPАутентификации.EnumValue.ПоУмолчанию - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>SMTP аутентификация</value> - - - ru - Требуется SMTP аутентификация - - - ГруппаПараметрыExtendedTooltip - 101 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Группа аутентификация SMTP</value> - - - ru - Группа аутентификация SMTP - - - ГруппаАутентификацияSMTPExtendedTooltip - 98 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Сервер исходящей почты</value> - - - - ru - Сервер исходящей почты - - - СерверИсходящейПочтыExtendedTooltip - 95 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto + CommandBar + + Right true @@ -1145,17 +1155,9 @@ true - - <key>ru</key> - <value>Дополнительно</value> - - - ru - Дополнительно - - ДополнительноExtendedTooltip - 86 + ГруппаКоманднойПанелиРасширеннаяПодсказка + 108 Label true true @@ -1178,87 +1180,6 @@ ФормаКоманднаяПанель -1 - - ОК - 8 - true - true - - true - - false - - ОКExtendedTooltip - 74 - Label - true - true - - Left - - - Form.Command.ЗаполнитьДопПараметрыИВернуться - Auto - true - true - true - UserCmds - Auto - - - Отмена - 10 - true - true - - true - - false - - ОтменаExtendedTooltip - 75 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 9 - true - true - - true - - false - - СправкаExtendedTooltip - 76 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Right @@ -1269,9 +1190,12 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + LockOwner true - true true Vertical true @@ -1281,66 +1205,10 @@ auto true - СпособSMTPАутентификации + ИмяАдминистратораКластера <key>ru</key> - <value>Способ SMTP аутентификации</value> - - 1 - - EnumRef.СпособыSMTPАутентификации - - - true - - - true - - true - - - ПользовательSMTP - - <key>ru</key> - <value>Пользователь SMTP</value> - - 2 - - String - - - - true - - - true - - true - - - ПарольSMTP - - <key>ru</key> - <value>Пароль SMTP</value> - - 3 - - String - - - - true - - - true - - true - - - ПортSMTP - - <key>ru</key> - <value>Порт SMTP</value> + <value>Имя администратора кластера</value> 4 @@ -1353,13 +1221,12 @@ true - true - ПортPOP3 + ПарольАдминистратораКластера <key>ru</key> - <value>Порт POP3</value> + <value>Пароль администратора кластера</value> 5 @@ -1372,35 +1239,20 @@ true - true - СпособPOP3Аутентификации + ПортАгентаСервера <key>ru</key> - <value>POP3 аутентификация</value> - - 6 - - EnumRef.СпособыPOP3Аутентификации - - - true - - - true - - true - - - SMTPАутентификацияУстановлена - - <key>ru</key> - <value>SMTP серверу требуется проверка подлинности</value> + <value>Порт агента сервера</value> 7 - Boolean + Number + + 5 + true + true @@ -1408,19 +1260,18 @@ true - true - ДлительностьОжиданияСервера + ПортКластера <key>ru</key> - <value>Длительность ожидания сервера</value> + <value>Порт кластера серверов</value> 8 Number - 3 + 5 true @@ -1430,22 +1281,16 @@ true - ShowError - true - ОставлятьКопииСообщенийЧислоДней + АдминистраторИБ <key>ru</key> - <value>Оставлять копии сообщений</value> + <value>Администратор ИБ</value> - 9 + 1 - Number - - 3 - true - + CatalogRef.Пользователи true @@ -1453,13 +1298,30 @@ true - true - Подпись + ПарольАдминистратораИнформационнойБазы <key>ru</key> - <value>Подпись</value> + <value>Пароль администратора информационной базы</value> + + 2 + + String + + + + true + + + true + + + + АдресСервераАдминистрирования + + <key>ru</key> + <value>Адрес сервера администрирования</value> 11 @@ -1472,17 +1334,19 @@ true - true - SMTPАутентификация + ПортСервераАдминистрирования <key>ru</key> - <value>SMTPАутентификация</value> + <value>Порт сервера администрирования</value> - 13 + 12 - EnumRef.ВариантыSMTPАутентификации + Number + + 5 + true @@ -1490,13 +1354,81 @@ true - true - ПодписьДлительностьОжидания + АдресАгентаСервера <key>ru</key> - <value>Подпись длительность ожидания</value> + <value>Адрес агента сервера</value> + + 6 + + String + + + + true + + + true + + + + ИмяВКластере + + <key>ru</key> + <value>Имя в кластере</value> + + 13 + + String + + + + true + + + true + + + + ИмяАдминистратораИнформационнойБазы + + <key>ru</key> + <value>Имя администратора информационной базы</value> + + 3 + + String + + + + true + + + true + + + + ПараметрыАдминистрирования + + <key>ru</key> + <value>Параметры администрирования</value> + + 9 + + + true + + + true + + + + ТипПодключения + + <key>ru</key> + <value>Тип подключения</value> 14 @@ -1509,33 +1441,9 @@ true - true - ПустойРеквизит - - <key>ru</key> - <value>Пустой реквизит</value> - - 15 - - String - - - - true - - - true - - true - - - ОставлятьКопииСообщенийНаСервере - - <key>ru</key> - <value>Оставлять копии сообщений на сервере</value> - + ТребуетсяВводПараметровАдминистрирования 10 Boolean @@ -1546,136 +1454,81 @@ true - true - - - СписокSMTPАутентификация_СП - - <key>ru</key> - <value>Список значений перечислений SMTPАутентификация. Используется для оптимизации обращений к перечислению SMTPАутентификация.</value> - - 12 - - ValueList - - - true - - - true - - true - - - - - - СписокСпособSMTPАутентификации_СП - - <key>ru</key> - <value>Список способ SMTPАутентификации СП</value> - - 16 - - ValueList - - - true - - - true - - true - - - - - - Ссылка - - <key>ru</key> - <value>Ссылка</value> - - 17 - - CatalogRef.УчетныеЗаписиЭлектроннойПочты - - - true - - - true - - true - - - УдалятьСообщенияССервера - - <key>ru</key> - <value>Удалять сообщения с сервера</value> - - 18 - - Boolean - - - true - - - true - - true - ЗаполнитьДопПараметрыИВернуться + OK <key>ru</key> - <value>ОК</value> + <value>OK</value> 1 ru - Сохранить параметры и вернуться к основной форме + OK true - ЗаполнитьДопПараметрыИВернутьсяВыполнить + Записать Auto Auto - УстановитьПортыПоУмолчанию + Отмена <key>ru</key> - <value>Установить стандартные порты</value> + <value>Отмена</value> 2 ru - Устананавливает стандартные номера портов: -POP3: 110 -SMTP: 25 + Отмена true - УстановитьПортыПоУмолчаниюВыполнить + Отмена Auto Auto - Ссылка + ПараметрыАдминистрирования + + + + ЗапрашиватьПараметрыАдминистрированияИБ - CatalogRef.УчетныеЗаписиЭлектроннойПочты + Boolean + + true + + + ЗапрашиватьПараметрыАдминистрированияКластера + + Boolean + + true + + + Заголовок + + String + + + + + ПоясняющаяНадпись + + String + diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html new file mode 100644 index 000000000..55f2a0746 --- /dev/null +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html @@ -0,0 +1,8 @@ + +

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

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

    См. также

    + \ 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..b4c88093b --- /dev/null +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl @@ -0,0 +1,290 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И Параметры.ЗапрашиватьПараметрыАдминистрированияКластера Тогда + ВызватьИсключение НСтр("ru = 'Настройка параметров кластера серверов доступна только в клиент-серверном режиме работы.'"); + КонецЕсли; + + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + + Если Параметры.ПараметрыАдминистрирования = Неопределено Тогда + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + Иначе + ПараметрыАдминистрирования = Параметры.ПараметрыАдминистрирования; + КонецЕсли; + + Если Не ТребуетсяВводПараметровАдминистрирования() Тогда + Возврат; + КонецЕсли; + + Если ДоступноИспользованиеРазделенныхДанных Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени( + ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы); + Если ПользовательИБ <> Неопределено Тогда + ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); + + КонецЕсли; + + Если Не ПустаяСтрока(Параметры.Заголовок) Тогда + Заголовок = Параметры.Заголовок; + КонецЕсли; + + Если ПустаяСтрока(Параметры.ПоясняющаяНадпись) Тогда + Элементы.ПоясняющаяНадпись.Видимость = Ложь; + Иначе + Элементы.ПоясняющаяНадпись.Заголовок = Параметры.ПоясняющаяНадпись; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПараметрыАдминистрирования); + + Элементы.РежимРаботы.ТекущаяСтраница = ?(ДоступноИспользованиеРазделенныхДанных, Элементы.РазделенныйРежим, Элементы.НеразделенныйРежим); + Элементы.ГруппаАдминистрированиеИБ.Видимость = Параметры.ЗапрашиватьПараметрыАдминистрированияИБ; + Элементы.ГруппаАдминистрированиеКластера.Видимость = Параметры.ЗапрашиватьПараметрыАдминистрированияКластера; + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + + ТипПодключения = "RAS"; + Элементы.ТипПодключения.Видимость = Ложь; + Элементы.ГруппаПараметрыУправления.ОтображатьЗаголовок = Истина; + Элементы.ГруппаПараметрыУправления.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение; + + КонецЕсли; + + Элементы.ГруппаТипПодключения.ТекущаяСтраница = ?(ТипПодключения = "COM", Элементы.ГруппаCOM, Элементы.ГруппаRAS); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если Не ТребуетсяВводПараметровАдминистрирования Тогда + Закрыть(ПараметрыАдминистрирования); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если Не Параметры.ЗапрашиватьПараметрыАдминистрированияИБ Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + Возврат; + КонецЕсли; + ИмяПоля = "АдминистраторИБ"; + Иначе + Если ПустаяСтрока(ИмяАдминистратораИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + ИмяПоля = "ИмяАдминистратораИнформационнойБазы"; + КонецЕсли; + ПользовательИБ = Неопределено; + ПолучитьАдминистратораИБ(ПользовательИБ); + Если ПользовательИБ = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, + ИмяПоля,,Отказ); + Возврат; + КонецЕсли; + Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, + ИмяПоля,,Отказ); + Возврат; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ТипПодключенияПриИзменении(Элемент) + + Элементы.ГруппаТипПодключения.ТекущаяСтраница = ?(ТипПодключения = "COM", Элементы.ГруппаCOM, Элементы.ГруппаRAS); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Записать(Команда) + + ОчиститьСообщения(); + + Если Не ПроверитьЗаполнениеНаСервере() Тогда + Возврат; + КонецЕсли; + + // Заполняем структуру настроек + ЗаполнитьЗначенияСвойств(ПараметрыАдминистрирования, ЭтотОбъект); + + ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + + СохранитьПараметрыПодключения(); + + // Восстанавливаем значения паролей + ЗаполнитьЗначенияСвойств(ПараметрыАдминистрирования, ЭтотОбъект); + + Закрыть(ПараметрыАдминистрирования); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПроверитьЗаполнениеНаСервере() + + Возврат ПроверитьЗаполнение(); + +КонецФункции + +&НаСервере +Процедура СохранитьПараметрыПодключения() + + // Сохраняем параметры в константу, пароли очищаем + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьАдминистратораИБ(ПользовательИБ = Неопределено) + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + ПользовательИБ = Неопределено; + КонецЕсли; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + АдминистраторИБ.ИдентификаторПользователяИБ); + Иначе + Если ПустаяСтрока(ИмяАдминистратораИнформационнойБазы) Тогда + ПользовательИБ = Неопределено; + КонецЕсли; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Новый УникальныйИдентификатор(ИмяАдминистратораИнформационнойБазы)); + КонецЕсли; + + ИмяАдминистратораИнформационнойБазы = ?(ПользовательИБ = Неопределено, "", ПользовательИБ.Имя); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования) + + Если ТипПодключения = "COM" Тогда + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + КонецЕсли; + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + + ПроверитьПараметрыАдминистрированияФайловойБазы(); + + Иначе + + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + ПроверитьПараметрыАдминистрированияНаСервере(); + Иначе + АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, + Параметры.ЗапрашиватьПараметрыАдминистрированияКластера, Параметры.ЗапрашиватьПараметрыАдминистрированияИБ); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПараметрыАдминистрированияНаСервере() + + АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, + Параметры.ЗапрашиватьПараметрыАдминистрированияКластера, Параметры.ЗапрашиватьПараметрыАдминистрированияИБ); + +КонецПроцедуры + +&НаСервере +Функция ТребуетсяВводПараметровАдминистрирования() + + ТребуетсяВводПараметровАдминистрирования = Истина; + + Если Параметры.ЗапрашиватьПараметрыАдминистрированияИБ И Не Параметры.ЗапрашиватьПараметрыАдминистрированияКластера Тогда + + КоличествоПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей().Количество(); + + Если КоличествоПользователей > 0 Тогда + + // Вычисляем актуальное имя пользователя, даже если оно было ранее изменено в текущем сеансе; + // Например, для подключения к текущей ИБ через внешнее соединение из этого сеанса; + // Во всех остальных случаях достаточно получить ПользователиИнформационнойБазы.ТекущийПользователь() + ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + Если ТекущийПользователь = Неопределено Тогда + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + КонецЕсли; + + Если ТекущийПользователь.АутентификацияСтандартная И Не ТекущийПользователь.ПарольУстановлен + И Пользователи.ЭтоПолноправныйПользователь(ТекущийПользователь, Истина) Тогда + + ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы = ТекущийПользователь.Имя; + ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы = ""; + + ТребуетсяВводПараметровАдминистрирования = Ложь; + + КонецЕсли; + + ИначеЕсли КоличествоПользователей = 0 Тогда + + ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы = ""; + ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы = ""; + + ТребуетсяВводПараметровАдминистрирования = Ложь; + + КонецЕсли; + + КонецЕсли; + + Возврат ТребуетсяВводПараметровАдминистрирования; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПараметрыАдминистрированияФайловойБазы() + + Если Параметры.ЗапрашиватьПараметрыАдминистрированияИБ Тогда + + // В базовых версиях проверку подключения не осуществляем; + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Если ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда + Возврат; + КонецЕсли; + + ИмяCOMСоединителя = ПараметрыРаботыКлиента.ИмяCOMСоединителя; + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + СтрокаПодключения = "Usr=""" + ИмяАдминистратораИнформационнойБазы + """;Pwd=""" + ПарольАдминистратораИнформационнойБазы + """"; + + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + + ComConnector = Новый COMОбъект(ИмяCOMСоединителя); + СтрокаСоединенияИнформационнойБазы = СтрокаСоединения + СтрокаПодключения; + Соединение = ComConnector.Connect(СтрокаСоединенияИнформационнойБазы); + + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/ПараметрыАдминистрированияПрограммы.mdo similarity index 81% rename from SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo rename to SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/ПараметрыАдминистрированияПрограммы.mdo index f26786083..af7b6517f 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 deleted file mode 100644 index 50c777d81..000000000 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form +++ /dev/null @@ -1,969 +0,0 @@ - - - - ГруппаАдминистрирование - 24 - - РежимРаботы - 31 - - РазделениеДанных - 33 - - НеразделенныйАдминистраторИБ - 34 - - <key>ru</key> - <value>Имя пользователя</value> - - true - true - - true - - - НеразделенныйАдминистраторИБ - - - НеразделенныйАдминистраторИБExtendedTooltip - 46 - Label - true - true - - Left - - - - НеразделенныйАдминистраторИБКонтекстноеМеню - 35 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ПарольНеразделенногоАдминистратораИБ - 36 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольАдминистратораИБ - - - ПарольНеразделенногоАдминистратораИБExtendedTooltip - 47 - Label - true - true - - Left - - - - ПарольНеразделенногоАдминистратораИБКонтекстноеМеню - 37 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Разделение данных</value> - - - ru - Разделение данных - - - РазделениеДанныхExtendedTooltip - 45 - Label - true - true - - Left - - - Page - - Vertical - - - - НетРазделенияДанных - 32 - - АдминистраторИБ - 25 - - <key>ru</key> - <value>Имя пользователя</value> - - true - true - - true - - - АдминистраторИБ - - - ru - Администратор информационной базы, от имени которого выполняется принудительное отключение сеансов - - - АдминистраторИБExtendedTooltip - 49 - Label - true - true - - Left - - - - АдминистраторИБКонтекстноеМеню - 26 - true - - InputField - Enter - true - Left - true - - true - true - true - false - true - true - true - Normal - - - - ПарольАдминистратораИБ - 27 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольАдминистратораИБ - - - ru - Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов - - - ПарольАдминистратораИБExtendedTooltip - 50 - Label - true - true - - Left - - - - ПарольАдминистратораИБКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Нет разделения данных</value> - - - НетРазделенияДанныхExtendedTooltip - 48 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - РежимРаботыExtendedTooltip - 44 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Администратор информационной базы:</value> - - - ГруппаАдминистрированиеExtendedTooltip - 43 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - ГруппаКластерТребуетАвторизации - 39 - - КластерТребуетАвторизации - 7 - true - true - - true - - - КластерТребуетАвторизации - - Right - - OnChange - КластерТребуетАвторизацииПриИзменении - - - КластерТребуетАвторизацииExtendedTooltip - 52 - Label - true - true - - Left - - - - КластерТребуетАвторизацииКонтекстноеМеню - 8 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаАвторизацияКластера - 9 - - ИмяАдминистратораКластера - 10 - true - true - - true - - - ИмяАдминистратораКластера - - - ИмяАдминистратораКластераExtendedTooltip - 54 - Label - true - true - - Left - - - - ИмяАдминистратораКластераКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - ПарольАдминистратораКластера - 12 - true - true - - true - - - ПарольАдминистратораКластера - - - ПарольАдминистратораКластераExtendedTooltip - 55 - 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> - - - ГруппаАвторизацияКластераExtendedTooltip - 53 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - ГруппаКластерТребуетАвторизацииExtendedTooltip - 51 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаНестандартныеПорты - 38 - - НестандартныеПорты - 14 - true - true - - true - - - НестандартныеПорты - - Right - - OnChange - НестандартныеПортыПриИзменении - - - НестандартныеПортыExtendedTooltip - 57 - Label - true - true - - Left - - - - НестандартныеПортыКонтекстноеМеню - 15 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаПорты - 16 - - ПортКластераСерверов - 17 - true - true - - true - - - ПортКластераСерверов - - - ПортКластераСерверовExtendedTooltip - 59 - Label - true - true - - Left - - - - ПортКластераСерверовКонтекстноеМеню - 18 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПортАгентаСервера - 19 - true - true - - true - - - ПортАгентаСервера - - - ПортАгентаСервераExtendedTooltip - 60 - 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> - - - ГруппаПортыExtendedTooltip - 58 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - ГруппаНестандартныеПортыExtendedTooltip - 56 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаOK - 30 - true - true - - true - - - ФормаOKExtendedTooltip - 40 - Label - true - true - - Left - - - Form.Command.OK - Auto - true - true - true - UserCmds - Auto - - - ФормаОтмена - 29 - true - true - - true - - - ФормаОтменаExtendedTooltip - 41 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 23 - true - true - - true - - false - - СправкаExtendedTooltip - 42 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - - FillCheckProcessingAtServer - ОбработкаПроверкиЗаполненияНаСервере - - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - КластерТребуетАвторизации - - <key>ru</key> - <value>Кластер требует авторизации</value> - - 3 - - Boolean - - - true - - - true - - - - ИмяАдминистратораКластера - - <key>ru</key> - <value>Имя администратора кластера</value> - - 4 - - String - - - - true - - - true - - - - ПарольАдминистратораКластера - - <key>ru</key> - <value>Пароль администратора кластера</value> - - 5 - - String - - - - true - - - true - - - - НестандартныеПорты - - <key>ru</key> - <value>Подключение осуществляется по нестандартным портам</value> - - 6 - - Boolean - - - true - - - true - - - - ПортАгентаСервера - - <key>ru</key> - <value>Порт агента сервера</value> - - 7 - - Number - - 5 - true - - - - true - - - true - - - - ПортКластераСерверов - - <key>ru</key> - <value>Порт кластера серверов</value> - - 8 - - Number - - 5 - true - - - - true - - - true - - - - АдминистраторИБ - - <key>ru</key> - <value>Администратор ИБ</value> - - 1 - - CatalogRef.Пользователи - - - true - - - true - - - - ПарольАдминистратораИБ - - <key>ru</key> - <value>Пароль администратора ИБ</value> - - 2 - - String - - - - true - - - true - - - - НеразделенныйАдминистраторИБ - - <key>ru</key> - <value>Неразделенный администратор ИБ</value> - - 9 - - String - - - - true - - - true - - - - OK - - <key>ru</key> - <value>OK</value> - - 1 - - ru - OK - - - true - - - - Записать - - - Auto - Auto - - - - - - diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html deleted file mode 100644 index c3763f873..000000000 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html +++ /dev/null @@ -1,9 +0,0 @@ - -

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

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

     

    -

    См. также

    - \ 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 92dff3b43..000000000 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl +++ /dev/null @@ -1,175 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Настройка параметров серверной ИБ доступна только в клиент-серверном режиме работы.'"); - Возврат; - КонецЕсли; - - ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени( - ПараметрыАдминистрирования.ИмяАдминистратораИБ); - Если ПользовательИБ <> Неопределено Тогда - ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; - КонецЕсли; - - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных; - Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); - АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); - КонецЕсли; - ПарольАдминистратораИБ = ПараметрыАдминистрирования.ПарольАдминистратораИБ; - - ИмяАдминистратораКластера = ПараметрыАдминистрирования.ИмяАдминистратораКластера; - ПарольАдминистратораКластера = ПараметрыАдминистрирования.ПарольАдминистратораКластера; - ПортАгентаСервера = ПараметрыАдминистрирования.ПортАгентаСервера; - ПортКластераСерверов = ПараметрыАдминистрирования.ПортКластераСерверов; - - НестандартныеПорты = ПортКластераСерверов <> 0 ИЛИ ПортАгентаСервера <> 0; - КластерТребуетАвторизации = НЕ ПустаяСтрока(ИмяАдминистратораКластера); - - Элементы.ГруппаПорты.Доступность = НестандартныеПорты; - Элементы.ГруппаАвторизацияКластера.Доступность = КластерТребуетАвторизации; - -КонецПроцедуры - -&НаСервере -Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда - Возврат; - КонецЕсли; - ИмяПоля = "АдминистраторИБ"; - Иначе - Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда - Возврат; - КонецЕсли; - ИмяПоля = "НеразделенныйАдминистраторИБ"; - КонецЕсли; - ПользовательИБ = ПолучитьАдминистратораИБ(); - Если ПользовательИБ = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, - ИмяПоля,,Отказ); - Возврат; - КонецЕсли; - Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, - ИмяПоля,,Отказ); - Возврат; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура КластерТребуетАвторизацииПриИзменении(Элемент) - - УстановитьСостояниеПолей() - -КонецПроцедуры - -&НаКлиенте -Процедура НестандартныеПортыПриИзменении(Элемент) - - УстановитьСостояниеПолей(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура Записать(Команда) - - ОчиститьСообщения(); - Если Не СохранитьПараметрыПодключения() Тогда - Возврат; - КонецЕсли; - - Оповестить("Запись_ПараметрыАдминистрированияИБ"); - Закрыть(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура УстановитьСостояниеПолей() - - Элементы.ГруппаПорты.Доступность = НестандартныеПорты; - Элементы.ГруппаАвторизацияКластера.Доступность = КластерТребуетАвторизации; - -КонецПроцедуры - -&НаСервере -Функция СохранитьПараметрыПодключения() - - Если НЕ ПроверитьЗаполнение() Тогда - Возврат Ложь; - КонецЕсли; - - ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - - ПользовательИБ = ПолучитьАдминистратораИБ(); - Если ПользовательИБ <> Неопределено Тогда - ИмяАдминистратораИБ = ПользовательИБ.Имя; - Иначе - ИмяАдминистратораИБ = ""; - КонецЕсли; - ПараметрыАдминистрирования.ИмяАдминистратораИБ = ИмяАдминистратораИБ; - ПараметрыАдминистрирования.ПарольАдминистратораИБ = ПарольАдминистратораИБ; - - Если КластерТребуетАвторизации Тогда - ПараметрыАдминистрирования.ИмяАдминистратораКластера = ИмяАдминистратораКластера; - ПараметрыАдминистрирования.ПарольАдминистратораКластера = ПарольАдминистратораКластера; - Иначе - ПараметрыАдминистрирования.ИмяАдминистратораКластера = ""; - ПараметрыАдминистрирования.ПарольАдминистратораКластера = ""; - КонецЕсли; - - Если НестандартныеПорты Тогда - ПараметрыАдминистрирования.ПортКластераСерверов = ПортКластераСерверов; - ПараметрыАдминистрирования.ПортАгентаСервера = ПортАгентаСервера; - Иначе - ПараметрыАдминистрирования.ПортКластераСерверов = 0; - ПараметрыАдминистрирования.ПортАгентаСервера = 0; - КонецЕсли; - - СоединенияИБ.ЗаписатьПараметрыАдминистрированияИБ(ПараметрыАдминистрирования); - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция ПолучитьАдминистратораИБ() - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда - Возврат Неопределено; - КонецЕсли; - Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - АдминистраторИБ.ИдентификаторПользователяИБ); - Иначе - Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда - Возврат Неопределено; - КонецЕсли; - Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ)); - КонецЕсли; -КонецФункции - diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html index bb872ceb6..a6b61880f 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -1,3 +1,4 @@ - -

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

    -

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

    \ No newline at end of file + +

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

    +

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

    +

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

    \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 7c3c5e62f..fc77834d4 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -130,8 +130,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантыИспользованияПроксиСервераПриИзменении(Элемент) @@ -157,8 +158,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ДополнительныеПараметрыПроксиСервера(Команда) @@ -199,8 +201,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура ИнициализироватьЭлементыФормы(Форма, НастройкиПрокси) @@ -398,3 +401,5 @@ СохранитьНастройкиПроксиСервера(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Form.form b/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Form.form index c233adb20..fd04a6e73 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Form.form +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Form.form @@ -34,13 +34,21 @@ true - - Enum.ДействияПриСохраненииСЭП.EnumValue.Спрашивать + + ru + Спрашивать + + + Спрашивать - - Enum.ДействияПриСохраненииСЭП.EnumValue.СохранятьВсеПодписи + + ru + Сохранять все подписи + + + СохранятьВсеПодписи Vertical @@ -498,7 +506,8 @@ 1 - EnumRef.ДействияПриСохраненииСЭП + String + true diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Help/ru.html b/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Help/ru.html index 984fdc498..9ae6b1c3a 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 b82157964..a8c46ba27 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Module.bsl +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭП/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -50,7 +50,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборСертификата") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПерсональныеСертификатыДляШифрования") Тогда Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда Возврат; @@ -64,8 +64,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ЛичныйСертификатНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -98,8 +99,9 @@ ОтпечатокЛичногоСертификатаДляШифрования = ""; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -119,8 +121,9 @@ ОткрытьФорму("ОбщаяФорма.НастройкиКриптографии", , ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция СохранитьНастройки() @@ -130,7 +133,7 @@ КонецЕсли; ПерсональныеНастройки = ЭлектроннаяПодпись.ПерсональныеНастройки(Истина); - ЗаполнитьЗначенияСвойств(ПерсональныеНастройки, ЭтаФорма); + ЗаполнитьЗначенияСвойств(ПерсональныеНастройки, ЭтотОбъект); ЭлектроннаяПодпись.СохранитьПерсональныеНастройки(ПерсональныеНастройки); Возврат Истина; @@ -150,3 +153,5 @@ ОткрытьФорму("ОбщаяФорма.ПерсональныеСертификатыДляШифрования", ПараметрыФормы, ЭтотОбъект); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Help/ru.html b/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Help/ru.html index 73dc42651..bb85206c8 100644 --- a/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Help/ru.html +++ b/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

    См. также: Настройка ЭП и шифрования, Настройка программы, Общая информация о формах.

    \ No newline at end of file diff --git a/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Module.bsl b/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Module.bsl index 270ac0df8..10cd81001 100644 --- a/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Module.bsl +++ b/SSL/src/CommonForms/ПерсональныеСертификатыДляШифрования/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -17,8 +17,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СертификатыЭП +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСертификатыЭП &НаКлиенте Процедура СертификатыЭПВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -32,8 +33,9 @@ ВыбратьИЗакрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОткрытьСертификат(Команда) @@ -53,8 +55,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыбратьИЗакрыть() @@ -66,13 +69,17 @@ РезультатВыбора = Новый Структура("Отпечаток", ТекущиеДанные.Отпечаток); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( - "ЭЦП", - "ОтпечатокЛичногоСертификатаДляШифрования", - РезультатВыбора.Отпечаток); + ЗапомнитьВыбранныйОтпечаток(РезультатВыбора.Отпечаток); ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗапомнитьВыбранныйОтпечаток(Отпечаток) + ЧастьНастроек = Новый Структура("ОтпечатокЛичногоСертификатаДляШифрования", Отпечаток); + ЭлектроннаяПодпись.СохранитьПерсональныеНастройки(ЧастьНастроек); + ОбновитьПовторноИспользуемыеЗначения(); +КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca deleted file mode 100644 index 77b5284df..000000000 --- a/SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - НастройкиПечатныхФорм - - - - - НастройкиПечатныхФорм.Печатать - Equal - false - - - - - ЦветТекста - style:ТекстЗапрещеннойЯчейкиЦвет - - - false - Шрифт - - - - - diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 92ffca574..0dd35bb05 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -1872,7 +1872,7 @@ ruПерейти к документу... - 8 + 3 ru Перейти к документу... @@ -1899,7 +1899,7 @@ ru Перейти к макетам печатных форм - 3 + 4 ru Перейти к управлению макетами @@ -1929,7 +1929,7 @@ ru Установить флажки - 4 + 5 ru Установить флажки @@ -1954,7 +1954,7 @@ ru Снять флажки - 5 + 6 ru Снять флажки @@ -1979,7 +1979,7 @@ ru Показать / Скрыть настройку комплекта - 6 + 7 ru Показать / Скрыть настройку количества копий @@ -2004,7 +2004,7 @@ ru Сохранить... - 7 + 8 ru Сохранить на диске или в качестве присоединенного файла к объекту @@ -2052,7 +2052,7 @@ ru Изменить макет... - 11 + 10 ru Открыть макет для редактирования @@ -2078,7 +2078,7 @@ ru Редактирование - 14 + 11 ru Включает или отключает режим редактирования печатной формы diff --git a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html index a71da645c..89819aea6 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html +++ b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html @@ -1,4 +1,38 @@ - -

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

    -

     

    -

     

    \ No newline at end of file + +

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

    +

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

    +

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

    +

    Вывод на принтер

    +

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

    +

    Количество копий

    +

    Укажите количество Копий. Выбранное количество копий запоминается. Для комплектов документов количество копий зависит от настроек комплекта.

    +

    Редактирование печатной формы

    +

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

    +

    Сохранение печатных форм

    +

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

    +

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

    +

    Сформированные печатные формы документа можно Отправить в качестве вложений в электронном письме.

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

    Переход к нужному документу

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

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

    +

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

    +

    Печать комплекта

    +

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

    +

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

    +

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

    +
    • В окне Настраиваемый комплект слева находится панель настройки количества копий, которая состоит из столбцов: +
      •   - в этом столбце с помощью флажков производится выбор для печати,  +
      • Печатная форма; +
      • количество Копий.
    • Для того чтобы настроить печать комплекта, используйте кнопку Настройка комплекта. С помощью команд выпадающего меню настройки можно Установить или Снять все флажки, поменять порядок печатных форм в комплекте (Переместить вверх/вниз) или Сбросить настройки комплекта. +
    • Выберите нужную печатную форму из комплекта для просмотра. Включите флажок для печати этой печатной формы. Проставьте необходимое количество копий для каждой печатной формы. Настройки будут сохранены. +
    • Кроме этого, можно изменить количество Копий комплекта. +
    • Для удобства просмотра печатной формы можно отключить панель настройки количества копий с помощью кнопки Показать/Скрыть настройку количества копий.
    \ No newline at end of file diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index 5c6595ec6..3f02ee91f 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -1,15 +1,25 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Перем КоллекцияПечатныхФорм; + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + // проверка входных параметров + Если Не ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда + ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(Параметры.ПараметрКоманды) = Тип("Массив") Или ОбщегоНазначения.ЗначениеСсылочногоТипа(Параметры.ПараметрКоманды), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра ПараметрКоманды при вызове метода УправлениеПечатьюКлиент.ВыполнитьКомандуПечати. + |Ожидалось: Массив, ЛюбаяСсылка. + |Передано: %1'"), ТипЗнч(Параметры.ПараметрКоманды))); + КонецЕсли; + // поддержка обратной совместимости с 2.1.3 ПараметрыПечати = Параметры.ПараметрыПечати; Если Параметры.ПараметрыПечати = Неопределено Тогда @@ -75,7 +85,16 @@ Если ВыбранноеЗначение.Свойство("Получатели") Тогда Получатели = ВыбранноеЗначение.Получатели; КонецЕсли; - РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения( , Получатели, ПараметрыОтправки.Тема, ПараметрыОтправки.Текст, СписокВложений, Истина); + + ПараметрыНовогоПисьма = Новый Структура; + ПараметрыНовогоПисьма.Вставить("Получатель", Получатели); + ПараметрыНовогоПисьма.Вставить("Тема", ПараметрыОтправки.Тема); + ПараметрыНовогоПисьма.Вставить("Текст", ПараметрыОтправки.Текст); + ПараметрыНовогоПисьма.Вставить("Вложения", СписокВложений); + ПараметрыНовогоПисьма.Вставить("УдалятьФайлыПослеОтправки", Истина); + + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыНовогоПисьма); КонецЕсли; КонецЕсли; @@ -126,8 +145,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КопийПриИзменении(Элемент) @@ -137,8 +157,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиПечатныхФорм +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиПечатныхФорм &НаКлиенте Процедура НастройкиПечатныхФормПриИзменении(Элемент) @@ -194,8 +215,9 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Сохранить(Команда) @@ -207,14 +229,7 @@ &НаКлиенте Процедура Отправить(Команда) - ПараметрыФормы = Новый Структура; - ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений"; - Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда - ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); - ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма"; - КонецЕсли; - - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект); + ОтправитьПечатныеФормыПоПочте(); КонецПроцедуры @@ -282,8 +297,30 @@ ПереключитьРедактированиеТекущейПечатнойФормы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НастройкиПечатныхФорм.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НастройкиПечатныхФорм.Печатать"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры &НаСервере Процедура СформироватьПечатныеФормы(КоллекцияПечатныхФорм, ИменаМакетов, Отказ) @@ -430,7 +467,13 @@ ЕстьРазрешенноеРедактирование = ЕстьРазрешенноеРедактирование(); - ВозможнаОтправкаПоПочте = ЕстьРазрешенныйВывод И РаботаСПочтовымиСообщениями.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0; + ДоступнаОтправкаПисем = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + ДоступнаОтправкаПисем = МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем(); + КонецЕсли; + ВозможнаОтправкаПоПочте = ЕстьРазрешенныйВывод И ДоступнаОтправкаПисем; + ЕстьДанныеДляПечати = ЕстьДанныеДляПечати(); Элементы.КнопкаПерейтиКДокументу.Видимость = ОбъектыПечати.Количество() > 1; @@ -601,7 +644,7 @@ Функция ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения) Перем ЗаписьZipФайла, ИмяАрхива; - Результат = Новый СписокЗначений; + Результат = Новый Массив; // подготовка архива Если НастройкиСохранения.УпаковатьВАрхив Тогда @@ -661,7 +704,13 @@ Иначе ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); - Результат.Добавить(ПутьВоВременномХранилище, ИмяФайла); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ИмяФайла); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); + Если ТипФайла = ТипФайлаТабличногоДокумента.ANSITXT Тогда + ОписаниеФайла.Вставить("Кодировка", "windows-1251"); + КонецЕсли; + Результат.Добавить(ОписаниеФайла); КонецЕсли; КонецЦикла; @@ -673,7 +722,10 @@ ФайлАрхива = Новый Файл(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); - Результат.Добавить(ПутьВоВременномХранилище, ПолучитьИмяФайлаДляАрхива()); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ПолучитьИмяФайлаДляАрхива()); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); + Результат.Добавить(ОписаниеФайла); КонецЕсли; УдалитьФайлы(ИмяВременнойПапки); @@ -776,10 +828,10 @@ Для Каждого ФайлДляЗаписи Из ФайлыВоВременномХранилище Цикл #Если ВебКлиент Тогда - ПолучитьФайл(ФайлДляЗаписи.Значение, ФайлДляЗаписи.Представление); + ПолучитьФайл(ФайлДляЗаписи.АдресВоВременномХранилище, ФайлДляЗаписи.Представление); #Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла(НастройкиФорматаСохранения.Расширение); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.Значение); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище); ДвоичныеДанные.Записать(ИмяВременногоФайла); ЗапуститьПриложение(ИмяВременногоФайла); #КонецЕсли @@ -792,7 +844,7 @@ #Если ВебКлиент Тогда Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл - ПолучитьФайл(ФайлДляЗаписи.Значение, ФайлДляЗаписи.Представление); + ПолучитьФайл(ФайлДляЗаписи.АдресВоВременномХранилище, ФайлДляЗаписи.Представление); КонецЦикла; Возврат; #КонецЕсли @@ -829,7 +881,7 @@ Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Папка) + ФайлДляЗаписи.Представление; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.Значение); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище); ДвоичныеДанные.Записать(ПолноеИмяФайла); КонецЦикла; @@ -840,7 +892,7 @@ &НаСервере Процедура ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, ОбъектДляПрисоединения) Для Каждого Файл Из ФайлыВоВременномХранилище Цикл - УправлениеПечатью.ПриПрисоединенииПечатнойФормыКОбъекту(ОбъектДляПрисоединения, Файл.Представление, Файл.Значение); + УправлениеПечатью.ПриПрисоединенииПечатнойФормыКОбъекту(ОбъектДляПрисоединения, Файл.Представление, Файл.АдресВоВременномХранилище); КонецЦикла; КонецПроцедуры @@ -1056,3 +1108,32 @@ КонецЦикла; КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПечатныеФормыПоПочте() + ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена(УчетнаяЗаписьНастроена, ДополнительныеПараметры) Экспорт + + Если УчетнаяЗаписьНастроена <> Истина Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений"; + Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда + ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); + ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма"; + КонецЕсли; + + ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl index 7a03af336..94a582d15 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -59,8 +59,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -78,8 +79,9 @@ УстановитьВыборДляВсехПолучателей(Ложь); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ФорматВложенийНажатие(Элемент, СтандартнаяОбработка) @@ -89,8 +91,9 @@ ОткрытьФорму("ОбщаяФорма.ВыборФорматаВложений", ПараметрыОткрытия, ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Получатели +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПолучатели &НаКлиенте Процедура ПолучателиПередНачаломИзменения(Элемент, Отказ) @@ -102,8 +105,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьТаблицуПолучателейИзСтроки(Знач СписокПолучателей) @@ -223,4 +227,4 @@ КонецЦикла; КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl index 83b2d3970..5d99720d6 100644 --- a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодключитьКонечнуюТочку(Команда) @@ -31,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПодключитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -99,3 +101,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonForms/ПодписьЭП/Help/ru.html b/SSL/src/CommonForms/ПодписьЭП/Help/ru.html index fe7ab77da..1856062bd 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 b2fcf7788..5c1ab7d6a 100644 --- a/SSL/src/CommonForms/ПодписьЭП/Module.bsl +++ b/SSL/src/CommonForms/ПодписьЭП/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,8 +30,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выгрузить(Команда) @@ -42,3 +43,5 @@ Процедура ОткрытьСертификат(Команда) ЭлектроннаяПодписьКлиент.ОткрытьСертификатПоОтпечаткуИАдресу(Отпечаток, АдресСертификата); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html index 962483d6a..5b0d416bd 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html @@ -1,7 +1,8 @@ - -

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

    -

    Командная панель формы содержит следующие кнопки:

    -
    • Продолжить - эта форма закрывается и письмо отправляется -
    • Отмена - отмена ввода пароля, так же вызывает отмену отправки сообщения -
    •  - показывает эту справку

     

    -

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

    \ 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 5559555fc..2bcc3e93d 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl @@ -21,8 +21,7 @@ // //------------------------------------------------------------------------------ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -56,8 +55,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СохранитьПарольИПродолжитьВыполнить() @@ -83,8 +83,9 @@ СохранитьПарольИПродолжитьВыполнитьЗавершение(Пароль); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура СохранитьПароль(Значение) @@ -108,4 +109,6 @@ ОповеститьОВыборе(Пароль); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПользователиСервиса/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПользователиСервиса/ConditionalAppearance.dcssca deleted file mode 100644 index 05f330821..000000000 --- a/SSL/src/CommonForms/ПользователиСервиса/ConditionalAppearance.dcssca +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - ПользователиСервисаДобавить - - - - - ПользователиСервиса.Доступ - Equal - true - - - - - Доступность - false - - - - - - - ПользователиСервисаДобавить - - - ПользователиСервисаИмя - - - ПользователиСервисаПолноеИмя - - - ПользователиСервисаДоступ - - - - - ПользователиСервиса.Доступ - Equal - true - - - - - ЦветФона - style:НедоступныеДанныеЦвет - - - false - Доступность - false - - - - diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl index ada89a4ee..23723f7cf 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -1,9 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -31,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УстановитьВсе(Команда) @@ -62,8 +64,53 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиСервисаДобавить.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиСервиса.Доступ"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиСервисаДобавить.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиСервисаИмя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиСервисаПолноеИмя.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиСервисаДоступ.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиСервиса.Доступ"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + +КонецПроцедуры &НаКлиенте Процедура ЗапроситьПарольДляАутентификацииВСервисе() @@ -121,3 +168,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПраваДоступа/Help/ru.html b/SSL/src/CommonForms/ПраваДоступа/Help/ru.html new file mode 100644 index 000000000..faa9beb25 --- /dev/null +++ b/SSL/src/CommonForms/ПраваДоступа/Help/ru.html @@ -0,0 +1,20 @@ + +

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

    +

    Открывается по команде Права доступа на панели навигации пользователя (внешнего пользователя).

    +

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

    +

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

    +

    Настройку могут выполнять:

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

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

    +
    • Наименование - наименование группы доступа; +
    • Профиль - наименование профиля группы доступа; +
    • Ответственный - ответственный пользователь.

    Список состоит из вкладок:

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

    Настройка прав доступа

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

    Отчет по правам доступа

    +

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

    +

    См. также:

    +

    Работа с формами

    \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index 42b249e1f..07355e18a 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,7 +15,6 @@ НЕ ПользовательИБПолноправный И ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыДоступа); - Элементы.ГруппыДоступаКонтекстноеМенюИзменитьГруппу.Видимость = ПользовательИБПолноправный ИЛИ ПользовательИБОтветственный; @@ -89,8 +88,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыДоступа &НаКлиенте Процедура ГруппыДоступаПриАктивизацииСтроки(Элемент) @@ -126,8 +126,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВГруппу(Команда) @@ -212,8 +213,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВключитьИсключитьИзГруппы(ГруппаДоступа, ВключитьВГруппуДоступа) Экспорт @@ -268,7 +270,6 @@ КонецПроцедуры - &НаСервере Процедура ВывестиГруппыДоступа() @@ -574,3 +575,5 @@ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПраваДоступа/ПраваДоступа.mdo b/SSL/src/CommonForms/ПраваДоступа/ПраваДоступа.mdo index 9b85c3966..253615beb 100644 --- a/SSL/src/CommonForms/ПраваДоступа/ПраваДоступа.mdo +++ b/SSL/src/CommonForms/ПраваДоступа/ПраваДоступа.mdo @@ -5,6 +5,11 @@ ru Права доступа + + + ru + + PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПраваДоступаУпрощенно/ConditionalAppearance.dcssca deleted file mode 100644 index 4b3cda5df..000000000 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/ConditionalAppearance.dcssca +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - ПрофилиПометка - - - - - AndGroup - - ЗапретИзмененияАдминистративногоДоступа - Equal - true - - - Профили.Профиль - Equal - Справочник.ПрофилиГруппДоступа.Администратор - - - - - - Доступность - false - - - - - - - ПрофилиПометка - - - ПрофилиПрофильПредставление - - - - - AndGroup - - ЗапретИзмененияАдминистративногоДоступа - Equal - true - - - Профили.Профиль - Equal - Справочник.ПрофилиГруппДоступа.Администратор - - - - - - ЦветФона - style:НедоступныеДанныеЦвет - - - false - Доступность - false - - - - diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index 943d5e3ee..29f9a502f 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -1860,7 +1860,7 @@ ru Записать - 2 + 1 ru Записать @@ -1886,7 +1886,7 @@ ru Отчет по правам доступа - 3 + 2 true @@ -1908,7 +1908,7 @@ ru Показывать неиспользуемые виды доступа - 1 + 3 ru Показывать неиспользуемые виды доступа diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html new file mode 100644 index 000000000..0e563d541 --- /dev/null +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html @@ -0,0 +1,21 @@ + +

    Упрощенный режим настройки прав доступа.

    +

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

    +

    Для настройки прав доступа пользователя (внешнего пользователя) воспользуйтесь командой Права доступа панели навигации.

    +

    Профили пользователя

    +

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

    +

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

    +

    Различают основные и дополнительные профили:

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

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

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

    Виды доступа

    +

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

    +

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

    +

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

    +

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

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

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

    +

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

    +

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index f83756587..fc16776ed 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -119,8 +121,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Профили +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПрофили &НаКлиенте Процедура ПрофилиПриАктивизацииСтроки(Элемент) @@ -162,8 +165,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -225,8 +229,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -252,7 +257,6 @@ КонецПроцедуры - &НаКлиенте Процедура ЗначениеДоступаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -293,8 +297,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Записать(Команда) @@ -320,8 +325,63 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПрофилиПометка.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Профили.Профиль"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Справочники.ПрофилиГруппДоступа.Администратор; + + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПрофилиПометка.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПрофилиПрофильПредставление.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗапретИзмененияАдминистративногоДоступа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Профили.Профиль"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Справочники.ПрофилиГруппДоступа.Администратор; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + +КонецПроцедуры // Продолжение обработчика события ПередЗакрытием &НаКлиенте @@ -704,21 +764,14 @@ Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. - НайденПользовательИБ = Ложь; - Для каждого ОписаниеПользователя ИЗ ГруппаДоступаОбъект.Пользователи Цикл - Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) - <> Неопределено Тогда - - НайденПользовательИБ = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если НЕ НайденПользовательИБ Тогда + ОписаниеОшибки = ""; + УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( + ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки); + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда ВызватьИсключение НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, - |которому разрешен доступ к информационной базе.'"); + |которому разрешен вход в программу.'"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -810,3 +863,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/ПраваДоступаУпрощенно.mdo b/SSL/src/CommonForms/ПраваДоступаУпрощенно/ПраваДоступаУпрощенно.mdo index 5c81705ac..841d9cf5c 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/ПраваДоступаУпрощенно.mdo +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/ПраваДоступаУпрощенно.mdo @@ -5,6 +5,11 @@ ru Права доступа + + + ru + + PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form index c28a34f42..5b629e3b1 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form @@ -102,6 +102,7 @@ ru Основная группа
    + true ОсновнаяГруппаExtendedTooltip 35 @@ -228,7 +229,7 @@ RestoreValues Retry SaveValues - 55 + 60 LockWholeInterface true true diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 018014d42..1a2f4a87d 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,34 +12,38 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#Область ОбработчикиСобытийЭлементовШапкиФормы // Обработчик нажатия на гиперссылку. // &НаКлиенте Процедура НажатиеНаГиперСсылку(Элемент) - Для каждого СтрокаВопроса из МассивСоотношенияЭлементовИПараметров Цикл - Если Элемент.Имя = СтрокаВопроса.Значение.Имя Тогда - Форма = Неопределено; - Если СтрокаВопроса.Значение.Свойство("Форма", Форма) Тогда - ПараметрыФормы = Неопределено; - Если СтрокаВопроса.Значение.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда - КонецЕсли; - ОткрытьФорму(Форма, ПараметрыФормы, ЭтотОбъект); + ИмяЭлемента = Элемент.Имя; + + Для Каждого СтрокаВопроса Из МассивСоотношенияЭлементовИПараметров Цикл + ПараметрыВопроса = Новый Структура("Имя, Форма, ПараметрыФормы"); + + ЗаполнитьЗначенияСвойств(ПараметрыВопроса, СтрокаВопроса.Значение); + Если ИмяЭлемента = ПараметрыВопроса.Имя Тогда + + Если ПараметрыВопроса.Форма <> Неопределено Тогда + ОткрытьФорму(ПараметрыВопроса.Форма, ПараметрыВопроса.ПараметрыФормы, ЭтотОбъект); КонецЕсли; + Прервать; КонецЕсли; КонецЦикла; + КонецПроцедуры // Инициализирует массив будущих задач, которые необходимо выполнить при закрытии. // &НаКлиенте Процедура ИзменитьМассивБудущихЗадач(Элемент) - ИмяЭлемента = Элемент.Имя; - НайденныйЭлемент = Элементы.Найти(ИмяЭлемента); + ИмяЭлемента = Элемент.Имя; + НайденныйЭлемент = Элементы.Найти(ИмяЭлемента); Если НайденныйЭлемент = Неопределено Тогда Возврат; @@ -49,24 +53,26 @@ Если ТипЗнч(ЗначениеЭлемента) <> Тип("Булево") Тогда Возврат; КонецЕсли; - ИдентификаторМассива = ИдентификаторМассиваЗадачПоИмени(ИмяЭлемента); Если ИдентификаторМассива = Неопределено Тогда Возврат; КонецЕсли; + ЭлементМассива = МассивЗадачНаВыполнениеПослеЗакрытия.НайтиПоИдентификатору(ИдентификаторМассива); + Использование = Неопределено; Если ЭлементМассива.Значение.Свойство("Использование", Использование) Тогда Если ТипЗнч(Использование) = Тип("Булево") Тогда ЭлементМассива.Значение.Использование = ЗначениеЭлемента; КонецЕсли; КонецЕсли; -КонецПроцедуры + +КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Завершить(Команда) @@ -82,105 +88,107 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Создает элементы формы по передаваемым вопросам пользователю. // // Параметры: -// Вопросы - список значений вопросов. +// Вопросы - Массив - Содержит структуры с параметрами значений вопросов. // &НаСервере -Процедура ИнициализироватьЭлементыВФорме(Предупреждения) +Процедура ИнициализироватьЭлементыВФорме(Знач Предупреждения) - ТаблицаПредупреждений = Новый ТаблицаЗначений; + // Добавляем возможно не указанные значения по умолчанию + ТаблицаПредупреждений = ПреобразоватьМассивСтруктурВТаблицуЗначений(Предупреждения); - ПреобразоватьМассивСтруктурВТаблицуЗначений(Предупреждения, ТаблицаПредупреждений); - - Для каждого ТекущееПредупреждение из ТаблицаПредупреждений Цикл - // Пропускаем чтение текущей структуры, если имеется текст для флага и для структуры одновременно. - ТекстФлажка = ""; - ТекстГиперСсылки = ""; - Если ТекущееПредупреждение.ТекстФлажка <> Неопределено - И ТекущееПредупреждение.ТекстГиперСсылки <> Неопределено Тогда + Для Каждого ТекущееПредупреждение Из ТаблицаПредупреждений Цикл + // Элемент на форму добавляем только если указаны или текст для флага, или текст для гиперссылки, но не одновременно + НужнаСсылка = Не ПустаяСтрока(ТекущееПредупреждение.ТекстГиперСсылки); + НуженФлаг = Не ПустаяСтрока(ТекущееПредупреждение.ТекстФлажка); + + Если НужнаСсылка И НуженФлаг Тогда Продолжить; + + ИначеЕсли НужнаСсылка Тогда + СоздатьГиперссылкуНаФорме(ТекущееПредупреждение); + + ИначеЕсли НуженФлаг Тогда + СоздатьФлажокНаФорме(ТекущееПредупреждение); + КонецЕсли; - // Формирование гиперссылки на форме. - Если ТекущееПредупреждение.ТекстГиперСсылки <> Неопределено Тогда - Если Не ПустаяСтрока(ТекущееПредупреждение.ТекстГиперСсылки) Тогда - СоздатьГиперссылкуНаФорме(ТекущееПредупреждение); - КонецЕсли; - КонецЕсли; - - // Формирование флажка на форме. - Если ТекущееПредупреждение.ТекстФлажка <> Неопределено Тогда - Если Не ПустаяСтрока(ТекущееПредупреждение.ТекстФлажка) Тогда - СоздатьФлажокНаФорме(ТекущееПредупреждение); - КонецЕсли; - КонецЕсли; КонецЦикла; - // Формирование окончательного вопроса на форме. - СоздатьОкончательныйВопрос(); + // Окончательно располагаем элементы + ТекстНадписи = НСтр("ru = 'Завершить работу с программой?'"); + + ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ГруппаНадписи = СформироватьГруппуЭлементовФормы(); + + ЭлементПоясняющегоТекста = Элементы.Добавить(ИмяНадписи, Тип("ДекорацияФормы"), ГруппаНадписи); + ЭлементПоясняющегоТекста.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Низ; + ЭлементПоясняющегоТекста.Заголовок = ТекстНадписи; + ЭлементПоясняющегоТекста.Высота = 2; + КонецПроцедуры &НаСервере -Процедура ПреобразоватьМассивСтруктурВТаблицуЗначений(Предупреждения, ТаблицаПредупреждений) +Функция ПреобразоватьМассивСтруктурВТаблицуЗначений(Знач Предупреждения) - ОчищаемыеПредупреждения = Новый Массив; - ТаблицаПредупреждений.Колонки.Добавить("ТекстФлажка"); - ТаблицаПредупреждений.Колонки.Добавить("ПоясняющийТекст"); - ТаблицаПредупреждений.Колонки.Добавить("ТекстГиперссылки"); - ТаблицаПредупреждений.Колонки.Добавить("ДействиеПриУстановленномФлажке"); - ТаблицаПредупреждений.Колонки.Добавить("ДействиеПриНажатииГиперссылки"); - ТаблицаПредупреждений.Колонки.Добавить("Приоритет"); - ТаблицаПредупреждений.Колонки.Добавить("ВывестиОдноПредупреждение"); + // Формируем таблицу, содержащую значения по умолчанию + ТаблицаПредупреждений = Новый ТаблицаЗначений; + КолонкиПредупреждений = ТаблицаПредупреждений.Колонки; + + КолонкиПредупреждений.Добавить("ПоясняющийТекст"); + + КолонкиПредупреждений.Добавить("ТекстФлажка"); + КолонкиПредупреждений.Добавить("ДействиеПриУстановленномФлажке"); + + КолонкиПредупреждений.Добавить("ТекстГиперссылки"); + КолонкиПредупреждений.Добавить("ДействиеПриНажатииГиперссылки"); + + КолонкиПредупреждений.Добавить("Приоритет"); + КолонкиПредупреждений.Добавить("ВывестиОдноПредупреждение"); + + КолонкиПредупреждений.Добавить("РасширеннаяПодсказка"); + КолонкиПредупреждений.Добавить("ОтображениеРасширеннойПодсказки"); + + ОдиночныеПредупреждения = Новый Массив; Для Каждого ЭлементПредупреждения Из Предупреждения Цикл СтрокаТаблицы = ТаблицаПредупреждений.Добавить(); - ЭлементПредупреждения.Свойство("ТекстФлажка", СтрокаТаблицы.ТекстФлажка); - ЭлементПредупреждения.Свойство("ПоясняющийТекст", СтрокаТаблицы.ПоясняющийТекст); - ЭлементПредупреждения.Свойство("ТекстГиперссылки", СтрокаТаблицы.ТекстГиперссылки); - ЭлементПредупреждения.Свойство("ДействиеПриУстановленномФлажке", СтрокаТаблицы.ДействиеПриУстановленномФлажке); - ЭлементПредупреждения.Свойство("ДействиеПриНажатииГиперссылки", СтрокаТаблицы.ДействиеПриНажатииГиперссылки); - ЭлементПредупреждения.Свойство("Приоритет", СтрокаТаблицы.Приоритет); - ЭлементПредупреждения.Свойство("ВывестиОдноПредупреждение", СтрокаТаблицы.ВывестиОдноПредупреждение); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементПредупреждения); - Если СтрокаТаблицы.ВывестиОдноПредупреждение <> Истина Тогда - ОчищаемыеПредупреждения.Добавить(СтрокаТаблицы); + Если СтрокаТаблицы.ВывестиОдноПредупреждение = Истина Тогда + ОдиночныеПредупреждения.Добавить(СтрокаТаблицы); КонецЕсли; - КонецЦикла; - // Поиск обработчиков, которые требуют очистки предупреждений. - Отбор = Новый Структура("ВывестиОдноПредупреждение", Истина); - НайденныеПредупреждения = ТаблицаПредупреждений.НайтиСтроки(Отбор); - Если НайденныеПредупреждения.Количество() <> 0 Тогда - Для Каждого ОчищаемоеПредупреждения Из ОчищаемыеПредупреждения Цикл - ТаблицаПредупреждений.Удалить(ОчищаемоеПредупреждения); - КонецЦикла; + // Если было хоть одно предупреждение, требующее очистки (ВывестиОдноПредупреждение = Истина) то очищаем остальные + Если ОдиночныеПредупреждения.Количество() > 0 Тогда + ТаблицаПредупреждений = ТаблицаПредупреждений.Скопировать(ОдиночныеПредупреждения); КонецЕсли; - ТаблицаПредупреждений.Сортировать("Приоритет убыв"); + ТаблицаПредупреждений.Сортировать("Приоритет УБЫВ"); -КонецПроцедуры + Возврат ТаблицаПредупреждений; +КонецФункции // Формирует на форме группу и возвращает её. // Является дочерней группой для "ОсновнойГруппы". // &НаСервере Функция СформироватьГруппуЭлементовФормы() - ИмяГруппы = ОпределитьИмяНадписиВФорме("ГруппаВФорме"); - ТипГруппы = Тип("ГруппаФормы"); - РодительГруппы = Элементы.ОсновнаяГруппа; + ИмяГруппы = ОпределитьИмяНадписиВФорме("ГруппаВФорме"); + + Группа = Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Элементы.ОсновнаяГруппа); + Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Группа = Элементы.Добавить(ИмяГруппы, ТипГруппы, РодительГруппы); - Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Группа.Отображение = ОтображениеОбычнойГруппы.Нет; - Группа.ОтображатьЗаголовок = Ложь; Группа.РастягиватьПоГоризонтали = Истина; + Группа.ОтображатьЗаголовок = Ложь; + Группа.Отображение = ОтображениеОбычнойГруппы.Нет; Возврат Группа; КонецФункции @@ -188,7 +196,7 @@ // Формирует на форме гиперссылку с поясняющим текстом. // // Параметры: -// СтруктураВопроса - структура передаваемого вопроса. +// СтруктураВопроса - Структура - данные вопроса для формирования // &НаСервере Процедура СоздатьГиперСсылкуНаФорме(СтруктураВопроса) @@ -196,141 +204,199 @@ Если СтруктураВопроса.ПоясняющийТекст <> Неопределено Тогда Если Не ПустаяСтрока(СтруктураВопроса.ПоясняющийТекст) Тогда - ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипНадписи = Тип("ДекорацияФормы"); - РодительНадписи = Группа; + ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ТипНадписи = Тип("ДекорацияФормы"); + + РодительНадписи = Группа; ЭлементПоясняющегоТекста = Элементы.Добавить(ИмяНадписи, ТипНадписи, РодительНадписи); ЭлементПоясняющегоТекста.Заголовок = СтруктураВопроса.ПоясняющийТекст; КонецЕсли; КонецЕсли; - Если СтруктураВопроса.ТекстГиперСсылки <> Неопределено Тогда - Если Не ПустаяСтрока(СтруктураВопроса.ТекстГиперСсылки) Тогда - ИмяГиперСсылки = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипГиперСсылки = Тип("ДекорацияФормы"); - РодительГиперСсылки = Группа; + Если ПустаяСтрока(СтруктураВопроса.ТекстГиперСсылки) Тогда + Возврат; + КонецЕсли; + + // Конструируем гиперссылку + ИмяГиперСсылки = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ТипГиперСсылки = Тип("ДекорацияФормы"); + + РодительГиперСсылки = Группа; - ЭлементГиперСсылки = Элементы.Добавить(ИмяГиперСсылки, ТипГиперСсылки, РодительГиперСсылки); - ЭлементГиперСсылки.Гиперссылка = Истина; - ЭлементГиперСсылки.Заголовок = СтруктураВопроса.ТекстГиперСсылки; - ЭлементГиперСсылки.УстановитьДействие("Нажатие", "НажатиеНаГиперСсылку"); + ЭлементГиперСсылки = Элементы.Добавить(ИмяГиперСсылки, ТипГиперСсылки, РодительГиперСсылки); + ЭлементГиперСсылки.Гиперссылка = Истина; + ЭлементГиперСсылки.Заголовок = СтруктураВопроса.ТекстГиперСсылки; + ЭлементГиперСсылки.УстановитьДействие("Нажатие", "НажатиеНаГиперСсылку"); + + УстановитьРасширеннуюПодсказку(ЭлементГиперСсылки, СтруктураВопроса); + + ФормаГиперСсылки = Неопределено; + ДействиеГиперСсылки = Неопределено; + Если СтруктураВопроса.ДействиеПриНажатииГиперссылки <> Неопределено Тогда + + СтруктураОбработки = СтруктураВопроса.ДействиеПриНажатииГиперссылки; + Если СтруктураОбработки.Свойство("Форма", ФормаГиперСсылки) Тогда + СтруктураМассива = Новый Структура; + СтруктураМассива.Вставить("Имя", ИмяГиперСсылки); + СтруктураМассива.Вставить("Форма", ФормаГиперСсылки); - ФормаГиперСсылки = Неопределено; - ДействиеГиперСсылки = Неопределено; - Если СтруктураВопроса.ДействиеПриНажатииГиперссылки <> Неопределено Тогда - СтруктураОбработки = СтруктураВопроса.ДействиеПриНажатииГиперссылки; - Если СтруктураОбработки.Свойство("Форма", ФормаГиперСсылки) Тогда - СтруктураМассива = Новый Структура; - СтруктураМассива.Вставить("Имя", ИмяГиперСсылки); - СтруктураМассива.Вставить("Форма", ФормаГиперСсылки); - - ПараметрыФормы = Неопределено; - Если СтруктураОбработки.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда - Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда - ПараметрыФормы.Вставить("ЗавершениеРаботыПрограммы", Истина); - ИначеЕсли ПараметрыФормы = Неопределено Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗавершениеРаботыПрограммы", Истина); - КонецЕсли; - СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); - КонецЕсли; - - МассивСоотношенияЭлементовИПараметров.Добавить(СтруктураМассива); + ПараметрыФормы = Неопределено; + Если СтруктураОбработки.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда + Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда + ПараметрыФормы.Вставить("ЗавершениеРаботыПрограммы", Истина); + ИначеЕсли ПараметрыФормы = Неопределено Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗавершениеРаботыПрограммы", Истина); КонецЕсли; + СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); КонецЕсли; + + МассивСоотношенияЭлементовИПараметров.Добавить(СтруктураМассива); КонецЕсли; КонецЕсли; + КонецПроцедуры // Формирует на форме флажок с поясняющим текстом. // // Параметры: -// СтруктураВопроса - структура передаваемого вопроса. +// СтруктураВопроса - структура передаваемого вопроса. // &НаСервере Процедура СоздатьФлажокНаФорме(СтруктураВопроса) ЗначениеПоУмолчанию = Истина; - Группа = СформироватьГруппуЭлементовФормы(); + Группа = СформироватьГруппуЭлементовФормы(); Если СтруктураВопроса.ПоясняющийТекст <> Неопределено Тогда Если Не ПустаяСтрока(СтруктураВопроса.ПоясняющийТекст) Тогда - ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипНадписи = Тип("ДекорацияФормы"); - РодительНадписи = Группа; + ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ТипНадписи = Тип("ДекорацияФормы"); + + РодительНадписи = Группа; ЭлементПоясняющегоТекста = Элементы.Добавить(ИмяНадписи, ТипНадписи, РодительНадписи); ЭлементПоясняющегоТекста.Заголовок = СтруктураВопроса.ПоясняющийТекст; КонецЕсли; КонецЕсли; - Если СтруктураВопроса.ТекстФлажка <> Неопределено Тогда - Если Не ПустаяСтрока(СтруктураВопроса.ТекстФлажка) Тогда - // Добавление реквизита в форму. - ИмяФлажка = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипФлажка = Тип("ПолеФормы"); - РодительФлажка = Группа; + Если ПустаяСтрока(СтруктураВопроса.ТекстФлажка) Тогда + Возврат; + КонецЕсли; + + // Добавляем реквизита в форму. + ИмяФлажка = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ТипФлажка = Тип("ПолеФормы"); + + РодительФлажка = Группа; + + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("Булево")); + Описание = Новый ОписаниеТипов(МассивТипов); + + ДобавляемыеРеквизиты = Новый Массив; + НовыйРеквизит = Новый РеквизитФормы(ИмяФлажка, Описание, , ИмяФлажка, Ложь); + ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + ЭтотОбъект[ИмяФлажка] = ЗначениеПоУмолчанию; + + НовоеПолеФормы = Элементы.Добавить(ИмяФлажка, ТипФлажка, РодительФлажка); + НовоеПолеФормы.ПутьКДанным = ИмяФлажка; + + НовоеПолеФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + НовоеПолеФормы.Заголовок = СтруктураВопроса.ТекстФлажка; + НовоеПолеФормы.Вид = ВидПоляФормы.ПолеФлажка; + + УстановитьРасширеннуюПодсказку(НовоеПолеФормы, СтруктураВопроса); + + // Инициализация элемента в массиве. + ФормаЭлемента = Неопределено; + СтруктураДействия = Неопределено; + + Если СтруктураВопроса.ДействиеПриУстановленномФлажке <> Неопределено Тогда + СтруктураДействия = СтруктураВопроса.ДействиеПриУстановленномФлажке; + Если СтруктураДействия.Свойство("Форма", ФормаЭлемента) Тогда + НовоеПолеФормы.УстановитьДействие("ПриИзменении", "ИзменитьМассивБудущихЗадач"); - МассивТипов = Новый Массив; - МассивТипов.Добавить(Тип("Булево")); - Описание = Новый ОписаниеТипов(МассивТипов); + СтруктураМассива = Новый Структура; + СтруктураМассива.Вставить("Имя", ИмяФлажка); + СтруктураМассива.Вставить("Форма", ФормаЭлемента); + СтруктураМассива.Вставить("Использование", ЗначениеПоУмолчанию); - ДобавляемыеРеквизиты = Новый Массив; - НовыйРеквизит = Новый РеквизитФормы(ИмяФлажка, Описание, , ИмяФлажка, Ложь); - ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); - ИзменитьРеквизиты(ДобавляемыеРеквизиты); - ЭтотОбъект[ИмяФлажка] = ЗначениеПоУмолчанию; - - НовоеПолеФормы = Элементы.Добавить(ИмяФлажка, ТипФлажка, РодительФлажка); - НовоеПолеФормы.ПутьКДанным = ИмяФлажка; - НовоеПолеФормы.Заголовок = СтруктураВопроса.ТекстФлажка; - НовоеПолеФормы.Вид = ВидПоляФормы.ПолеФлажка; - НовоеПолеФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; - - // Инициализация элемента в массиве. - ФормаЭлемента = Неопределено; - СтруктураДействия = Неопределено; - Если СтруктураВопроса.ДействиеПриУстановленномФлажке <> Неопределено Тогда - СтруктураДействия = СтруктураВопроса.ДействиеПриУстановленномФлажке; - Если СтруктураДействия.Свойство("Форма", ФормаЭлемента) Тогда - НовоеПолеФормы.УстановитьДействие("ПриИзменении", "ИзменитьМассивБудущихЗадач"); - - СтруктураМассива = Новый Структура; - СтруктураМассива.Вставить("Имя", ИмяФлажка); - СтруктураМассива.Вставить("Форма", ФормаЭлемента); - СтруктураМассива.Вставить("Использование", ЗначениеПоУмолчанию); - - ПараметрыФормы = Неопределено; - Если СтруктураДействия.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда - СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); - КонецЕсли; - - МассивЗадачНаВыполнениеПослеЗакрытия.Добавить(СтруктураМассива); - КонецЕсли; + ПараметрыФормы = Неопределено; + Если СтруктураДействия.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда + СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); КонецЕсли; + + МассивЗадачНаВыполнениеПослеЗакрытия.Добавить(СтруктураМассива); КонецЕсли; КонецЕсли; -КонецПроцедуры + +КонецПроцедуры +// Устанавливает расширенную подсказку и ее отображение для элемента +// &НаСервере -Процедура СоздатьОкончательныйВопрос() - Группа = СформироватьГруппуЭлементовФормы(); - ОкончательныйВопрос = НСтр("ru = 'Завершить работу с программой?'"); +Процедура УстановитьРасширеннуюПодсказку(ЭлементФормы, Знач СтрокаОписания) + ОписаниеРасширеннойПодсказки = СтрокаОписания.РасширеннаяПодсказка; - ИмяНадписи = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипНадписи = Тип("ДекорацияФормы"); - РодительНадписи = Группа; + Если ОписаниеРасширеннойПодсказки = Неопределено Тогда + Возврат; + КонецЕсли; - ЭлементПоясняющегоТекста = Элементы.Добавить(ИмяНадписи, ТипНадписи, РодительНадписи); - ЭлементПоясняющегоТекста.Заголовок = ОкончательныйВопрос; - ЭлементПоясняющегоТекста.Высота = 2; - ЭлементПоясняющегоТекста.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Низ; -КонецПроцедуры + Если ТипЗнч(ОписаниеРасширеннойПодсказки) <> Тип("Строка") Тогда + // Устанавливаем в расширенную подсказку + ЗаполнитьЗначенияСвойств(ЭлементФормы.РасширеннаяПодсказка, ОписаниеРасширеннойПодсказки); + Если СтрокаОписания.ОтображениеРасширеннойПодсказки <> Неопределено Тогда + ЭлементФормы.ОтображениеПодсказки = ОтображениеПодсказки[СтрокаОписания.ОтображениеРасширеннойПодсказки]; + КонецЕсли; + + Возврат; + КонецЕсли; + + // Добавляем как простой поясняющий текст снизу + ТипУправляемаяФорма = Тип("УправляемаяФорма"); + ФормаТекущегоЭлемента = ЭлементФормы; + Пока ТипЗнч(ФормаТекущегоЭлемента) <> ТипУправляемаяФорма Цикл + ФормаТекущегоЭлемента = ФормаТекущегоЭлемента.Родитель; + КонецЦикла; + ЭлементыФормы = ФормаТекущегоЭлемента.Элементы; + ИмяТекущегоЭлемента = ЭлементФормы.Имя; + + ГруппаЭлемента = ЭлементыФормы.Добавить(ИмяТекущегоЭлемента + "ГруппаПоясняющийТекст", Тип("ГруппаФормы"), ЭлементФормы.Родитель); + ГруппаЭлемента.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаЭлемента.РастягиватьПоГоризонтали = Истина; + ГруппаЭлемента.РастягиватьПоВертикали = Истина; + ГруппаЭлемента.ОтображатьЗаголовок = Ложь; + ГруппаЭлемента.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаЭлемента.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + + ВыравнивающаяГруппа = ЭлементыФормы.Добавить(ИмяТекущегоЭлемента + "ГруппаПоясняющийТекстВыравнивание", Тип("ГруппаФормы"), ГруппаЭлемента); + ВыравнивающаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ВыравнивающаяГруппа.РастягиватьПоГоризонтали = Истина; + ВыравнивающаяГруппа.РастягиватьПоВертикали = Истина; + ВыравнивающаяГруппа.ОтображатьЗаголовок = Ложь; + ВыравнивающаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; + ВыравнивающаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + + ОтступТекста = ЭлементыФормы.Добавить(ИмяТекущегоЭлемента + "ГруппаПоясняющийТекстОтступ", Тип("ДекорацияФормы"), ВыравнивающаяГруппа); + ОтступТекста.Вид = ВидДекорацииФормы.Надпись; + ОтступТекста.Ширина = 1; + + ПоясняющийТекст = ЭлементыФормы.Добавить(ИмяТекущегоЭлемента + "ПоясняющийТекст", Тип("ДекорацияФормы"), ВыравнивающаяГруппа); + ПоясняющийТекст.Вид = ВидДекорацииФормы.Надпись; + ПоясняющийТекст.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; + ПоясняющийТекст.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Верх; + ПоясняющийТекст.РастягиватьПоВертикали = Истина; + ПоясняющийТекст.Заголовок = ОписаниеРасширеннойПодсказки; + + ЭлементыФормы.Переместить(ЭлементФормы, ГруппаЭлемента, ВыравнивающаяГруппа); +КонецПроцедуры // Формирует имя надписи в форме по заголовку. // // Параметры: -// ЗаголовокЭлемента - заголовок. +// ЗаголовокЭлемента - Строка - заголовок. // &НаСервере Функция ОпределитьИмяНадписиВФорме(ЗаголовокЭлемента) @@ -415,3 +481,4 @@ Возврат Результат; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca deleted file mode 100644 index ab380ea9f..000000000 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Список - - - - - Список.ФайлРедактируется - Equal - true - - - Список.ФайлРедактируетТекущийПользователь - Equal - true - - - - - ЦветТекста - style:ФайлЗанятыйТекущимПользователем - - - - - - - Список - - - - - Список.ФайлРедактируется - Equal - true - - - Список.ФайлРедактируетТекущийПользователь - Equal - false - - - - - ЦветТекста - style:ФайлЗанятыйДругимПользователем - - - - diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index 02c7dda93..5dd63f3ff 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -16,8 +16,6 @@ Список None - Delete - SetDeletionMark СписокПодписанЭП 88 @@ -199,6 +197,10 @@ Список.ДатаСоздания + + ru + Дата добавления файла в базу. + СписокДатаСозданияExtendedTooltip 161 @@ -227,6 +229,10 @@ СписокДатаИзменения 100 + + <key>ru</key> + <value>Данные от</value> + true true @@ -237,7 +243,7 @@ ru - Местная дата изменения файла. + Дата изменения данных файла (местное время). СписокДатаИзмененияExtendedTooltip @@ -275,6 +281,10 @@ Список.Автор + + ru + Пользователь, который добавил файл. + СписокАвторExtendedTooltip 163 @@ -315,6 +325,10 @@ Список.Размер + + ru + Размер данных файла. + СписокРазмерExtendedTooltip 164 @@ -340,6 +354,40 @@ true + + СписокСсылка + 165 + true + true + + + Список.Ссылка + + + СписокСсылкаРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 166 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -373,32 +421,9 @@ СписокСтрокаПоиска - 165 - - СписокСтрокаПоискаРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 166 - true - - Список - - true - - - - СписокСостояниеПросмотра 168 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 170 Label true @@ -408,10 +433,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 169 true + Список + + true + + + + СписокСостояниеПросмотра + 171 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 172 + true + ViewStatusAddition Список @@ -420,10 +468,10 @@ СписокУправлениеПоиском - 171 + 174 СписокУправлениеПоискомРасширеннаяПодсказка - 173 + 176 Label true true @@ -433,7 +481,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 172 + 175 true SearchControlAddition @@ -1948,9 +1996,6 @@ OnCreateAtServer ПриСозданииНаСервере - Change - Delete - SetDeletionMark DontBlock true true @@ -2017,10 +2062,7 @@ ЛОЖЬ КАК Зашифрован, ЛОЖЬ КАК ФайлРедактируется, ЛОЖЬ КАК ФайлРедактируетТекущийПользователь -ИЗ - Справочник.Пользователи - Catalog.Пользователи - true + true true true diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html b/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html new file mode 100644 index 000000000..2e36bf66a --- /dev/null +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html @@ -0,0 +1,64 @@ + +

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

    +

    Открывается по команде Присоединенные файлы панели навигации объекта программы.

    +

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

    +
    •  - подписан ЭП. +
    •  - зашифрован. +
    • Наименование - полное имя файла. Значок рядом с наименованием указывает тип файла. +
    • Описание - подробные сведения о файле. +
    • Данные от - дата изменения данных файла (местное время); +
    • Автор - пользователь, который добавил файл; +
    • +
      Размер (байт) - размер данных файла;

    С помощью команды Все действия - Изменить форму можно добавить сведения:

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

    Добавление нового файла

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

    Просмотр карточки файла

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

    Сохранение файла

    +
    • +
      С помощью кнопки  можно сохранить файл в указанный каталог на жестком или сетевом диске.
      +
    • +
      +
      Также можно воспользоваться командой Все действия - Сохранить как.
      +
    • +
      Соответствующей командой меню Все действия  можно Открыть каталог файла в Проводнике Windows;

    Обновление файла

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

    Редактирование присоединенных файлов

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

    ЭП и шифрование

    +

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

    +
    • +

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

      +
    • +

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

      +
    • +

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

      +
    • +

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

      +
    • +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl index 6ce5f37e3..76b68dbe4 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl @@ -1,12 +1,13 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Перем ИмяСправочникаХранилищаФайлов; + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -56,7 +57,6 @@ УстановитьДоступностьКнопок(); - // ТекущаяДата получена не для сохранения в базе данных, а используется // только расчета в динамическом списке местного времени от // универсального времени сохраненного в базе данных, @@ -94,8 +94,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -194,8 +195,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов @@ -368,20 +370,26 @@ Возврат; КонецЕсли; - ОписаниеОповещения = Новый ОписаниеОповещения("ЭППодписатьПодписьСформирована", ЭтотОбъект, ТекущиеДанные); - ПрисоединенныеФайлыСлужебныйКлиент.СформироватьПодписьФайла(ОписаниеОповещения, ТекущиеДанные.Ссылка, ДанныеФайла); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПрисоединенныйФайл", ТекущиеДанные.Ссылка); + ДополнительныеПараметры.Вставить("ДанныеФайла", ДанныеФайла); + ДополнительныеПараметры.Вставить("ОповещениеПользователя"); + ДополнительныеПараметры.Вставить("ОбработчикРезультата", + Новый ОписаниеОповещения("ЭППодписатьПодписьСформирована", ЭтотОбъект)); + + ПрисоединенныеФайлыСлужебныйКлиент.СформироватьПодписьФайла(ДополнительныеПараметры); КонецПроцедуры &НаКлиенте -Процедура ЭППодписатьПодписьСформирована(ПодписьСформирована, ТекущиеДанные) Экспорт - Если ПодписьСформирована Тогда - ЭлектроннаяПодписьКлиент.ИнформироватьОПодписанииОбъекта(ТекущиеДанные.Ссылка); +Процедура ЭППодписатьПодписьСформирована(Результат, Неопределен) Экспорт + + Если Результат.ПодписьСформирована Тогда УстановитьДоступностьКнопок(); КонецЕсли; + КонецПроцедуры - &НаКлиенте Процедура СохранитьВместеСЭП(Команда) @@ -582,8 +590,54 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ФайлРедактируется"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ФайлРедактируетТекущийПользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ФайлРедактируется"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ФайлРедактируетТекущийПользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйДругимПользователем); + +КонецПроцедуры &НаКлиенте Процедура ОткрытьФайл() @@ -764,7 +818,7 @@ ТекстЗапроса = "ВЫБРАТЬ - | Файлы.Ссылка, + | Файлы.Ссылка КАК Ссылка, | Файлы.ПометкаУдаления, | ВЫБОР | КОГДА Файлы.ПометкаУдаления = ИСТИНА @@ -807,6 +861,7 @@ Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", ТекущаяУниверсальнаяДата() - ТекущаяДатаСеанса()); Список.ОсновнаяТаблица = ПолноеИмяСправочника; + Список.ДинамическоеСчитываниеДанных = Истина; КонецПроцедуры @@ -942,3 +997,5 @@ Массив.Удалить(Позиция); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/CommonForms/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index 4cc55b850..f0ec8040a 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -5,6 +5,11 @@ ru Присоединенные файлы + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index 949ab4d31..f7e00e7cf 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -1472,7 +1472,7 @@ ДатаМодификации <key>ru</key> - <value>Дата изменения</value> + <value>Данные от</value> 1 diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html b/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html new file mode 100644 index 000000000..d96b0ed58 --- /dev/null +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html @@ -0,0 +1,66 @@ + +

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

      +

      Сведения о файле

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

      Редактирование присоединенного файла

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

      Сохранение файла

      +
      • +
        С помощью команды Все действия - Сохранить как можно сохранить файл в указанный каталог на жестком или сетевом диске.
        +
      • +
        Соответствующей командой меню Все действия  можно Открыть каталог файла в Проводнике Windows;

      Обновление файла

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

      ЭП и шифрование

      +

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

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

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

      При использовании ЭП и шифрования становятся доступными вкладки:

      +

      ЭП

      +

      На вкладке размещаются сведения об электронной подписи файла:

      +
      • Автор подписи - пользователь, который подписал файл; +
      • Дата подписи - дата подписания файла; +
      • Комментарий - напишите дополнительные сведения о подписи; +
      • Статус - истинность подписи.

      С помощью соответствующих команд можно:

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

      Зашифрован для

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index c12973365..610262a13 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -100,8 +99,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПодписей +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПодписей &НаКлиенте Процедура ТаблицаПодписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -110,8 +110,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СертификатыШифрования +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСертификатыШифрования &НаКлиенте Процедура СертификатыШифрованияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -122,8 +123,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов @@ -131,26 +133,14 @@ &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) - Перем НовоеРасширение; - - Если ЭтоНовый() - ИЛИ ЭтотОбъект.Объект.Зашифрован - ИЛИ ЭтотОбъект.Объект.ПодписанЭП - ИЛИ НЕ ЭтотОбъект.Объект.Редактирует.Пустая() Тогда + Если ЭтоНовый() Или ЭтотОбъект.Объект.Зашифрован Или ЭтотОбъект.Объект.ПодписанЭП Или Не ЭтотОбъект.Объект.Редактирует.Пустая() Тогда Возврат; КонецЕсли; ДанныеФайла = ПолучитьДанныеФайла(ЭтотОбъект.Объект.Ссылка, , Ложь); - ИнформацияОФайле = Новый Структура; - - Если ПрисоединенныеФайлыСлужебныйКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище( - ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда - - ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле); - ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтотОбъект.Объект.Ссылка); - КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьИзФайлаНаДискеЗавершение", ЭтотОбъект); + ПрисоединенныеФайлыСлужебныйКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище(ОписаниеОповещения, ДанныеФайла, УникальныйИдентификатор); КонецПроцедуры @@ -332,7 +322,6 @@ КонецЕсли; КонецПроцедуры - &НаКлиенте Процедура СохранитьВместеСЭП(Команда) @@ -650,8 +639,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Процедура ПроверитьПодписиНаСервере(КоллекцияСтрок) @@ -660,7 +650,6 @@ КонецПроцедуры - &НаСервереБезКонтекста Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, @@ -986,7 +975,6 @@ ФайлЗашифрован, ЭтоНовыйФайл) - Если ЭтоНовыйФайл Тогда ИменаКоманд = Новый Массив; ИменаКоманд.Добавить("СтандартнаяЗаписать"); @@ -1277,19 +1265,31 @@ Процедура СоздатьЭлементыФормы() Элемент = ДобавитьПолеОбъектаНаФорму( - "Наименование", Элементы.ГруппаОбщаяИнформация, Истина, "Имя файла", Ложь); + "Наименование", Элементы.ГруппаОбщаяИнформация, Истина, НСтр("ru = 'Имя файла'"), Ложь); Элемент = ДобавитьПолеОбъектаНаФорму( - "Описание", Элементы.ГруппаОбщаяИнформация, Истина, , Ложь); + "Описание", Элементы.ГруппаОбщаяИнформация, Истина, , Ложь); - ДобавитьПолеОбъектаНаФорму("Автор", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("Изменил", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("Расширение", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("Редактирует", Элементы.ГруппаСведенияЧасть1); + ДобавитьПолеОбъектаНаФорму("Автор", Элементы.ГруппаСведенияЧасть1, , НСтр("ru = 'Автор'"), , , , + НСтр("ru = 'Пользователь, который добавил файл в базу.'")); + + ДобавитьПолеОбъектаНаФорму("Изменил", Элементы.ГруппаСведенияЧасть1, , НСтр("ru = 'Отредактировал'"), , , , + НСтр("ru = 'Последний пользователь, который отредактировал файл.'")); - ДобавитьПолеОбъектаНаФорму("ДатаСоздания", Элементы.ГруппаСведенияЧасть2, , , , Ложь); - ДобавитьПолеНаФорму("ДатаМодификации", Элементы.ГруппаСведенияЧасть2); - ДобавитьПолеОбъектаНаФорму("Размер", Элементы.ГруппаСведенияЧасть2, , , , , 11); + ДобавитьПолеОбъектаНаФорму("Расширение", Элементы.ГруппаСведенияЧасть1, , НСтр("ru = 'Расширение'"), , , , + НСтр("ru = 'Расширение файла.'")); + + ДобавитьПолеОбъектаНаФорму("Редактирует", Элементы.ГруппаСведенияЧасть1, , НСтр("ru = 'Редактирует'"), , , , + НСтр("ru = 'Пользователь, который занял файл для редактирования.'")); + + ДобавитьПолеОбъектаНаФорму("ДатаСоздания", Элементы.ГруппаСведенияЧасть2, , НСтр("ru = 'Создан'"), , , , + НСтр("ru = 'Дата добавления файла в базу.'")); + + ДобавитьПолеНаФорму("ДатаМодификации", Элементы.ГруппаСведенияЧасть2, , НСтр("ru = 'Данные от'"), , , , + НСтр("ru = 'Дата изменения данных файла.'")); + + ДобавитьПолеОбъектаНаФорму("Размер", Элементы.ГруппаСведенияЧасть2, , НСтр("ru = 'Размер (байт)'"), , , 11, + НСтр("ru = 'Размер данных файла.'")); КонецПроцедуры @@ -1364,7 +1364,8 @@ Знач Заголовок = "", Знач ТолькоПросмотр = Истина, Знач ПоказыватьЗаголовок = Истина, - Знач Ширина = 0) + Знач Ширина = 0, + Знач Подсказка = "") Если Контейнер = Неопределено Тогда Контейнер = ЭтотОбъект; @@ -1384,6 +1385,7 @@ Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ТолькоПросмотр = ТолькоПросмотр; Элемент.Ширина = Ширина; + Элемент.Подсказка = Подсказка; Если Не ПустаяСтрока(Заголовок) Тогда Элемент.Заголовок = Заголовок; @@ -1394,7 +1396,14 @@ КонецФункции &НаСервере -Процедура ДобавитьПолеНаФорму(Знач ИмяРеквизита, Знач Контейнер = Неопределено) +Процедура ДобавитьПолеНаФорму(Знач ИмяРеквизита, + Знач Контейнер = Неопределено, + Знач ЗаголовокСверху = Ложь, + Знач Заголовок = "", + Знач ТолькоПросмотр = Истина, + Знач ПоказыватьЗаголовок = Истина, + Знач Ширина = 0, + Знач Подсказка = "") Если Контейнер = Неопределено Тогда Контейнер = ЭтотОбъект; @@ -1402,10 +1411,37 @@ Элемент = Элементы.Добавить("Элемент" + ИмяРеквизита, Тип("ПолеФормы"), Контейнер); Элемент.ПутьКДанным = ИмяРеквизита; - Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + + Если ПоказыватьЗаголовок Тогда + Если ЗаголовокСверху Тогда + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + Иначе + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + КонецЕсли; Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.ТолькоПросмотр = Истина; + Элемент.ТолькоПросмотр = ТолькоПросмотр; + Элемент.Ширина = Ширина; + Элемент.Подсказка = Подсказка; + + Если Не ПустаяСтрока(Заголовок) Тогда + Элемент.Заголовок = Заголовок; + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбновитьИзФайлаНаДискеЗавершение(ИнформацияОФайле, ДополнительныеПараметры) Экспорт + + Если ИнформацияОФайле = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле); + ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтотОбъект.Объект.Ссылка); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo b/SSL/src/CommonForms/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo index 141506a46..b08b7c136 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo @@ -5,6 +5,11 @@ ru Присоединенный файл + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index a6b2c0223..f1c316a8d 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -49,8 +49,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаЗначенийСвойств +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаЗначенийСвойств &НаКлиенте Процедура ТаблицаЗначенийСвойствПриИзменении(Элемент) @@ -85,8 +86,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Записать(Команда) @@ -133,8 +135,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗаписатьИЗакрытьЗавершение(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -248,3 +251,5 @@ Возврат ЗначенияСвойств; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html index 6b6620caf..fb189b1f0 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html @@ -1,3 +1,12 @@ - -

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

      -

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

      \ 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 9c1766529..3bbd5c4a4 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -105,17 +105,18 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТабличныйДокументПриАктивизацииОбласти(Элемент) ОбновитьПометкиКнопокКоманднойПанели(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти +#Область ОбработчикиКомандФормы // Действия с документом @@ -327,7 +328,6 @@ КонецПроцедуры - // Границы &НаКлиенте @@ -540,14 +540,15 @@ ПоказатьВводСтроки(ОписаниеОповещения, Примечание, НСтр("ru = 'Примечание'"), , Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗагрузитьТабличныйДокументИзМетаданных() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - ТабличныйДокумент = МодульУправлениеПечатью.ПолучитьМакет(Параметры.ИмяОбъектаМетаданныхМакета); + ТабличныйДокумент = МодульУправлениеПечатью.МакетПечатнойФормы(Параметры.ИмяОбъектаМетаданныхМакета); КонецЕсли; КонецПроцедуры @@ -840,3 +841,5 @@ Элементы.ТабличныйДокумент.ТекущаяОбласть.ЦветТекста = ВыбранныйЦвет; КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/СертификатЭП/Help/ru.html b/SSL/src/CommonForms/СертификатЭП/Help/ru.html index 62e6cefe5..9a3d3e725 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 a83d17757..be852fe33 100644 --- a/SSL/src/CommonForms/СертификатЭП/Module.bsl +++ b/SSL/src/CommonForms/СертификатЭП/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,8 +27,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выгрузить(Команда) @@ -82,8 +83,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Функция ПолучитьСертификат(МенеджерКриптографии) @@ -110,3 +112,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl index a9121f1b3..5b85e44dd 100644 --- a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -81,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОтправитьДанные(Команда) @@ -891,4 +892,6 @@ ТаблицаПереходовНоваяСтрока(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 909af6c2f..cfae4cace 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 d60867acd..4a40166b4 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -73,8 +73,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВидБазыПриИзменении(Элемент) @@ -120,8 +121,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьНачальныйОбраз(Команда) @@ -159,8 +161,9 @@ ПоказатьПредупреждение(Обработчик, НСтр("ru = 'Создание начального образа успешно завершено.'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СоздатьНачальныйОбразЗавершение(ПараметрыВыполнения) Экспорт @@ -229,3 +232,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl index cd5e387ce..c454e1ace 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -4,8 +4,7 @@ &НаКлиенте Перем ФормаДлительнойОперации; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,12 +20,13 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьКопиюОбласти(Команда) @@ -47,8 +47,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеЗадания() @@ -80,6 +81,8 @@ &НаКлиенте Процедура ОбработатьРезультатВыполненияЗадания() + СнятьМонопольныйРежим(); + Если Не ПустаяСтрока(АдресХранилища) Тогда УдалитьИзВременногоХранилища(АдресХранилища); АдресХранилища = ""; @@ -105,6 +108,8 @@ &НаСервере Процедура ЗаписатьИсключениеНаСервере(Знач ПредставлениеОшибки) + СнятьМонопольныйРежим(); + Событие = РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования(); ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки); СообщениеОбОшибке = ПредставлениеОшибки; @@ -116,6 +121,10 @@ ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ОбщегоНазначения.ЗаблокироватьИБ(); + КонецЕсли; + ПараметрыЗадания = РезервноеКопированиеОбластейДанных.СоздатьПустыеПараметрыВыгрузки(); ПараметрыЗадания.ОбластьДанных = ОбластьДанных; ПараметрыЗадания.ИДКопии = Новый УникальныйИдентификатор; @@ -146,3 +155,14 @@ Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); КонецФункции + +&НаСервереБезКонтекста +Процедура СнятьМонопольныйРежим() + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ОбщегоНазначения.РазблокироватьИБ(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html b/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html new file mode 100644 index 000000000..78d555002 --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html @@ -0,0 +1,7 @@ + +

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

      +
      • С помощью переключателя выберите, как сохранить печатную форму: +
        • Сохранить в папку на компьютер. +
          •   Выберите путь к папке на компьютере.
        • Присоединить к документу.
      • Установите флажки для выбора одного или нескольких форматов, в которых нужно сохранить (присоединить) печатную форму. +
      • Для уменьшения объема сохраненных файлов включите флажок Дополнительно упаковать в архив (zip). +
      • Нажмите Сохранить. Настройки также будут сохранены.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl index 9bfbe4777..ae3242966 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -62,8 +62,9 @@ УстановитьСтраницуМестаСохранения(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантСохраненияПриИзменении(Элемент) @@ -88,8 +89,9 @@ СтандартнаяОбработка = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Сохранить(Команда) @@ -125,8 +127,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УстановитьСтраницуМестаСохранения() @@ -157,4 +160,4 @@ Возврат Результат; КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo b/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo index d2e36d432..f3cea52b0 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo @@ -5,6 +5,11 @@ ru Сохранение печатной формы + + + ru + + PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/ConditionalAppearance.dcssca b/SSL/src/CommonForms/СтруктураПодчиненности/ConditionalAppearance.dcssca deleted file mode 100644 index e24e58636..000000000 --- a/SSL/src/CommonForms/СтруктураПодчиненности/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - ТаблицаДокументов - - - - - ДеревоСтруктурыПодчиненности.Ссылка - Equal - ДокументСсылка - - - - - Шрифт - - - - - diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form index efbcc028b..ee6fe65c5 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form @@ -145,10 +145,6 @@ Left true
      - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html index 72af55e26..1cc070469 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 ec057e7cb..305197a42 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -18,21 +18,14 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) +#КонецОбласти - ТаблицаОтчета.Показать(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) ВывестиСтруктуруПодчиненности(); - ТаблицаОтчета.Показать(); КонецПроцедуры @@ -48,13 +41,12 @@ КонецЕсли; ВывестиСтруктуруПодчиненности(); - ТаблицаОтчета.Показать(); КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции ////////////////////////////////////////////////////////////////////////////////////////////// // Процедуры вывода в табличный документ. @@ -214,7 +206,6 @@ ТаблицаОтчета.Присоединить(ОбластьКартинка); КонецЕсли; - //Вывод документа ОбластьДокумент = Макет.ПолучитьОбласть(?(ЭтоТекущийДокумент,"ТекущийДокумент","Документ")); ОбластьДокумент.Параметры.ПредставлениеДокумента = СтрокаДерева.Представление; @@ -372,7 +363,6 @@ Процедура ВывестиСтруктуруПодчиненности() ОбновитьДеревоСтруктурыПодчиненности(); - ТаблицаОтчета.Показать(); КонецПроцедуры @@ -632,7 +622,6 @@ КонецПроцедуры - &НаСервере Функция ПолучитьСписокДокументовПоКритериюОтбора(ЗначениеКритерияОтбора) @@ -761,7 +750,7 @@ Для Инд = 1 По 3 Цикл ТекстПредставление = ТекстПредставление + ", - | " + ?(МассивРеквизитов.Количество() >= Инд,МассивРеквизитов[инд - 1],"NULL") + " Как ДополнительныйРеквизит" + Инд; + | " + ?(МассивРеквизитов.Количество() >= Инд,МассивРеквизитов[инд - 1],"NULL") + " КАК ДополнительныйРеквизит" + Инд; КонецЦикла; @@ -781,3 +770,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl index c3db0f6ee..8d08c6bbe 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,8 +30,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Установить(Команда) @@ -79,8 +80,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьВедущуюКонечнуюТочкуНаСервере(Отказ, ОшибкаЗаполнения) @@ -98,5 +100,4 @@ КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/CommonForms/УстановкаПодписиЭП/Help/ru.html b/SSL/src/CommonForms/УстановкаПодписиЭП/Help/ru.html index 07cfeec55..7b66e393d 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 d8c623050..01c8ee3c5 100644 --- a/SSL/src/CommonForms/УстановкаПодписиЭП/Module.bsl +++ b/SSL/src/CommonForms/УстановкаПодписиЭП/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,16 +25,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СертификатыЭП +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСертификатыЭП &НаКлиенте Процедура СертификатыЭПВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ОбработкаВыбора(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -59,8 +61,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОбработкаВыбора() @@ -83,3 +86,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonForms/УточнениеКонтактов/ConditionalAppearance.dcssca b/SSL/src/CommonForms/УточнениеКонтактов/ConditionalAppearance.dcssca deleted file mode 100644 index b0b115731..000000000 --- a/SSL/src/CommonForms/УточнениеКонтактов/ConditionalAppearance.dcssca +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - ТаблицаКонтактов - - - - - ТаблицаКонтактов.Адрес - NotFilled - - - - - Доступность - false - - - - - - - ТаблицаКонтактовИзменять - - - - - OrGroup - - ТаблицаКонтактов.Адрес - Equal - ТаблицаКонтактов.ТекущийАдресКонтакта - - - ТаблицаКонтактов.Контакт - NotFilled - - - ТаблицаКонтактов.Адрес - NotFilled - - - - - - Доступность - false - - - false - ТолькоПросмотр - true - - - false - Отображать - false - - - - diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index 7163c00c4..4b7e3898e 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -1,8 +1,11 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -213,8 +216,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОКВыполнить() @@ -223,8 +227,52 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонтактов.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Адрес"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонтактовИзменять.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Адрес"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.ТекущийАдресКонтакта"); + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Контакт"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Адрес"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + +КонецПроцедуры &НаКлиенте Процедура СохранитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -739,5 +787,4 @@ КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/CommonForms/ФайлыВТоме/Form.form b/SSL/src/CommonForms/ФайлыВТоме/Form.form index e6c912279..9f829fab7 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Form.form +++ b/SSL/src/CommonForms/ФайлыВТоме/Form.form @@ -171,6 +171,40 @@ true
      + + Ссылка + 27 + true + true + + + ФайлыВТомах.Ссылка + + + СсылкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 28 + true + + LabelField + Enter + true + Left + true + + true + true + + ФайлыВТомахКоманднаяПанель 13 @@ -186,32 +220,9 @@ ФайлыВТомахСтрокаПоиска - 28 - - ФайлыВТомахСтрокаПоискаРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ФайлыВТомахСтрокаПоискаКонтекстноеМеню - 29 - true - - ФайлыВТомах - - true - - - - ФайлыВТомахСостояниеПросмотра 31 - ФайлыВТомахСостояниеПросмотраРасширеннаяПодсказка + ФайлыВТомахСтрокаПоискаРасширеннаяПодсказка 33 Label true @@ -221,10 +232,33 @@ - ФайлыВТомахСостояниеПросмотраКонтекстноеМеню + ФайлыВТомахСтрокаПоискаКонтекстноеМеню 32 true + ФайлыВТомах + + true + + + + ФайлыВТомахСостояниеПросмотра + 34 + + ФайлыВТомахСостояниеПросмотраРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ФайлыВТомахСостояниеПросмотраКонтекстноеМеню + 35 + true + ViewStatusAddition ФайлыВТомах @@ -233,10 +267,10 @@ ФайлыВТомахУправлениеПоиском - 34 + 37 ФайлыВТомахУправлениеПоискомРасширеннаяПодсказка - 36 + 39 Label true true @@ -246,7 +280,7 @@ ФайлыВТомахУправлениеПоискомКонтекстноеМеню - 35 + 38 true SearchControlAddition @@ -323,6 +357,7 @@ OnClose ПриЗакрытии + 60 DontBlock true true diff --git a/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html new file mode 100644 index 000000000..1d7b3e2c1 --- /dev/null +++ b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html @@ -0,0 +1,12 @@ + +

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

      +

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

      +

      Список вызывается по команде Файлы в томе панели навигации Тома.

      +

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

      +
      • Путь к файлу - подкаталог, в котором хранится файл; +
      • Размер - объем в байтах; +
      • Автор - пользователь, который добавил файл; +
      • Ссылка.

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl index afe8a43c7..e331dcfe4 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl +++ b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -53,8 +53,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПредставлениеХранилищаФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -77,8 +78,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ФайлыВТомах +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыФайлыВТомах &НаКлиенте Процедура ФайлыВТомахВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -98,8 +100,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьДинамическийСписок(Знач ИмяХранилища) @@ -168,4 +171,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/CommonForms/ФайлыВТоме/ФайлыВТоме.mdo b/SSL/src/CommonForms/ФайлыВТоме/ФайлыВТоме.mdo index abc00a8ad..c872206c3 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/ФайлыВТоме.mdo +++ b/SSL/src/CommonForms/ФайлыВТоме/ФайлыВТоме.mdo @@ -5,6 +5,11 @@ ru Файлы в томе + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index 6f0a70ba2..aaa4777ba 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -349,8 +349,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -367,8 +366,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗавершитьРедактирование(Команда) @@ -377,7 +377,23 @@ Или ВладелецФормы = Неопределено Тогда Закрыть(Истина); Иначе - ОповеститьОВыборе(Отчет.КомпоновщикНастроек); + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + + ВариантМодифицирован = Истина; // Для 8.3.4 и ниже. + Если ВариантМодифицирован Тогда + РезультатВыбора.ВариантМодифицирован = Истина; + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + КонецЕсли; + + Если ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + ОповеститьОВыборе(РезультатВыбора); КонецЕсли; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index 32a0260bf..2ac83cfc3 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -26,6 +26,10 @@ Left true
      + + OnChange + КомпоновщикНастроекПользовательскиеНастройкиПриИзменении + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска 11 diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index a3788bc78..b649907e4 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,8 +16,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекПользовательскиеНастройки + +&НаКлиенте +Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент) + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗавершитьРедактирование(Команда) @@ -26,6 +36,23 @@ Или ВладелецФормы = Неопределено Тогда Закрыть(Истина); Иначе - ОповеститьОВыборе(Отчет.КомпоновщикНастроек); + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + + Если ВариантМодифицирован Тогда + РезультатВыбора.ВариантМодифицирован = Истина; + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; // Для 8.3.4 и ниже. + Если ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + ОповеститьОВыборе(РезультатВыбора); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 5a828cea1..c790cc247 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -913,13 +913,38 @@ ГруппаСкрытьПоказатьБыстрыеНастройки 104 - СкрытьПоказатьБыстрыеНастройки - 13 + СкрытьПоказатьНастройкиИДругиеОтчеты + 273 true true true + + СкрытьПоказатьНастройкиИДругиеОтчетыРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + Form.Command.СкрытьПоказатьНастройкиИДругиеОтчеты + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СкрытьПоказатьБыстрыеНастройки + 13 + true + true + СкрытьПоказатьБыстрыеНастройкиExtendedTooltip 145 @@ -938,6 +963,33 @@ UserCmds Auto + + ВсеНастройки + 12 + true + true + + true + + + ВсеНастройкиРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Command.ВсеНастройки + Normal + Picture + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -963,37 +1015,6 @@
      - - НастроитьОтчет - 12 - - <key>ru</key> - <value>Все настройки...</value> - - true - true - - true - - - НастроитьОтчетExtendedTooltip - 147 - Label - true - true - - Left - - - Form.Command.НастроитьОтчет - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - КомандыВариантовПользовательскихНастроек 36 @@ -1169,6 +1190,58 @@ + + ГруппаСкрытьПоказатьПанельОтчетов + 238 + + СкрытьПоказатьПанельОтчетов + 217 + true + true + + + СкрытьПоказатьПанельОтчетовРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.Command.СкрытьПоказатьПанельОтчетов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаСкрытьПоказатьПанельОтчетовРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + + КомандыВариантовОтчета 32 @@ -1580,11 +1653,83 @@ - БыстрыеНастройки - 14 + ПраваяПанель + 275 - Периоды - 31 + СтраницаБыстрыеНастройки + 277 + + Периоды + 170 + true + true + + true + + + <key>ru</key> + <value>Периоды</value> + + + ru + Периоды + + + ПериодыРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БыстрыеНастройки + 172 + true + true + + true + + + <key>ru</key> + <value>Быстрые настройки</value> + + + ru + Быстрые настройки + + + БыстрыеНастройкиРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -1592,15 +1737,15 @@ <key>ru</key> - <value>Периоды</value> + <value>Настройки</value> ru - ПериодыExtendedTooltip - 165 + СтраницаБыстрыеНастройкиРасширеннаяПодсказка + 278 Label true true @@ -1608,19 +1753,142 @@ Left - UsualGroup - + Page + + + CommonPicture.БыстрыеНастройкиОтчета + Vertical - Auto - true - true - Auto - Auto + auto - ПараметрыИОтборы - 18 + СтраницаДругиеОтчеты + 279 + + ГруппаДругиеВариантыОтчета + 240 + true + true + + true + + + <key>ru</key> + <value>Варианты отчета</value> + + + Style.ГруппаВариантовОтчетовЦвет + + + System.DefaultGUIFont + true + false + false + false + + + ru + + + + ГруппаДругиеВариантыОтчетаРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + РазделительГруппВариантов + 242 + + <key>ru</key> + <value> </value> + + true + true + + true + + + РазделительГруппВариантовРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + РазделительГруппВариантовКонтекстноеМеню + 243 + true + + Label + true + true + + Left + + + + ГруппаПохожиеОтчеты + 245 + true + true + + true + + + <key>ru</key> + <value>Отчеты группы</value> + + + Style.ГруппаВариантовОтчетовЦвет + + + System.DefaultGUIFont + true + false + false + false + + + ГруппаПохожиеОтчетыРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + true true @@ -1628,16 +1896,15 @@ <key>ru</key> - <value>Параметры и отборы</value> + <value>Другие отчеты</value> ru - + Страница другие отчеты - true - ПараметрыИОтборыExtendedTooltip - 166 + СтраницаДругиеОтчетыРасширеннаяПодсказка + 280 Label true true @@ -1645,51 +1912,13 @@ Left - UsualGroup - + Page + + + StdPicture.Report + Vertical - Auto - WeakSeparation - true - true - Auto - Auto - - - - ТаблицыСФлажками - 81 - true - true - - true - - - <key>ru</key> - <value>Таблицы с флажками</value> - - - ru - Таблицы с флажками - - - ТаблицыСФлажкамиExtendedTooltip - 167 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + auto true @@ -1699,18 +1928,17 @@ <key>ru</key> - <value>Быстрые настройки</value> + <value>Правая панель</value> ru - + Правая панель - 42 true true - БыстрыеНастройкиExtendedTooltip - 164 + ПраваяПанельРасширеннаяПодсказка + 276 Label true true @@ -1718,13 +1946,9 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto + Pages + + TabsOnTop Auto @@ -1996,26 +2220,10 @@ - ПостоянныеЭлементы + ФормаПараметры <key>ru</key> - <value>Постоянные элементы</value> - - 22 - - ValueList - - - - - - - - - ЭтаФормаПараметры - - <key>ru</key> - <value>Эта форма параметры</value> + <value>Форма параметры</value> 6 @@ -2182,21 +2390,6 @@ true - - СвязьПоТипуОтключена - - <key>ru</key> - <value>Связь по типу отключена</value> - - 17 - - - true - - - true - - СуммаВыделенныхЯчеек @@ -2221,7 +2414,274 @@ <key>ru</key> <value>Есть быстрые настройки</value> + 17 + + Boolean + + + true + + + true + + + + ВариантыПанелиКлючТекущегоВарианта + + <key>ru</key> + <value>Варианты панели ключ текущего варианта</value> + + 22 + + Boolean + + + true + + + true + + + + ВариантыПанели + + <key>ru</key> + <value>Варианты панели</value> + 26 + + ValueTable + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 2 + + String + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ИдентификаторыОбъектовМетаданных + + + + 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> + + 7 + + String + + + + true + + + true + + + + Автор + + <key>ru</key> + <value>Автор</value> + + 6 + + CatalogRef.Пользователи + + + true + + + true + + + + Дополнительный + + <key>ru</key> + <value>Дополнительный</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОтчета + + <key>ru</key> + <value>Имя отчета</value> + + 9 + + String + + + + true + + + true + + + + ИмяГруппы + + <key>ru</key> + <value>Имя группы</value> + + 10 + + String + + + + true + + + true + + + + + ВариантыПанелиНомерЭлемента + + <key>ru</key> + <value>Варианты панели номер элемента</value> + + 27 + + Number + + 10 + + + + true + + + true + + + + ЕстьДругиеОтчеты + + <key>ru</key> + <value>Есть другие отчеты</value> + + 29 + + Boolean + + + true + + + true + + + + НеобходимоОбновитьНастройки + + <key>ru</key> + <value>Необходимо обновить настройки</value> + + 30 Boolean @@ -2233,15 +2693,15 @@ - НастроитьОтчет + ВсеНастройки <key>ru</key> - <value>Изменить настройки...</value> + <value>Все настройки...</value> 1 ru - Изменить текущие настройки отчета... + Все настройки... true @@ -2251,7 +2711,7 @@ - НастроитьОтчет + ВсеНастройки TextPicture @@ -2262,7 +2722,7 @@ СкрытьПоказатьБыстрыеНастройки <key>ru</key> - <value>Быстрые настройки</value> + <value>Настройки</value> 2 @@ -2401,6 +2861,55 @@ Auto Auto + + СкрытьПоказатьПанельОтчетов + + <key>ru</key> + <value>Отчеты</value> + + 8 + + ru + Скрыть показать панель отчетов + + + true + + + StdPicture.Report + + + + СкрытьПоказатьОтчеты + + + TextPicture + Auto + Auto + + + СкрытьПоказатьНастройкиИДругиеОтчеты + + <key>ru</key> + <value>Настройки и другие отчеты</value> + + 9 + + ru + Скрыть показать настройки и другие отчеты + + + true + + + + СкрытьПоказатьНастройкиИДругиеОтчеты + + + TextPicture + Auto + Auto + @@ -2418,6 +2927,14 @@ OnLoadVariantAtServer ПриЗагрузкеВариантаНаСервере + + OnSaveUserSettingsAtServer + ПриСохраненииПользовательскихНастроекНаСервере + + + OnUpdateUserSettingSetAtServer + ПриОбновленииСоставаПользовательскихНастроекНаСервере + ОтчетТабличныйДокумент ОтчетДанныеРасшифровки ОтчетНаименованиеТекущегоВарианта diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html new file mode 100644 index 000000000..f9b58b4d7 --- /dev/null +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -0,0 +1,56 @@ + +

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

      +

      Просмотр отчета

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

      Настройки

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

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

      +

      +

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

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

      +

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

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

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

      +

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

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

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

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

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

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

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

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

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

      +

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

      +

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

      +
      • Для поиска в отчете воспользуйтесь командой Найти. +
      • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета. +
      • Для сохранения результата отчета в файл нажмите . +
      • Нажмите  для того чтобы посчитать сумму чисел в выделенных ячейках.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index a887981f3..706a87cbe 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -4,8 +4,7 @@ &НаКлиенте Перем ПеременныеКлиента; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,10 +12,11 @@ Возврат; КонецЕсли; + ПанельОтчетовКлючВарианта = " - "; + // Локальные переменные ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетМетаданные = ОтчетОбъект.Метаданные(); - СхемаКомпоновкиДанных = ОтчетОбъект.СхемаКомпоновкиДанных; РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); РежимВариантаОтчета = (Параметры.Свойство("КлючВарианта") И Параметры.КлючВарианта <> Неопределено); @@ -49,45 +49,40 @@ УстановитьКлючиФормы(); // Параметры формы - ЭтаФормаПараметры = Новый Структура( + ФормаПараметры = Новый Структура( "КлючНазначенияИспользования, КлючПользовательскихНастроек, |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, - |ФиксированныеНастройки, ОтчетСсылка"); - ЗаполнитьЗначенияСвойств(ЭтаФормаПараметры, Параметры); - Если НЕ ЗначениеЗаполнено(ЭтаФормаПараметры.ОтчетСсылка) Тогда + |ФиксированныеНастройки, ОтчетСсылка, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + Если НЕ ЗначениеЗаполнено(ФормаПараметры.ОтчетСсылка) Тогда ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОбъекта); Если НЕ ЗначениеЗаполнено(ОтчетИнформация.ТекстОшибки) Тогда - ЭтаФормаПараметры.ОтчетСсылка = ОтчетИнформация.Отчет; + ФормаПараметры.ОтчетСсылка = ОтчетИнформация.Отчет; Иначе - ЭтаФормаПараметры.ОтчетСсылка = КлючОбъекта; + ФормаПараметры.ОтчетСсылка = КлючОбъекта; КонецЕсли; КонецЕсли; - ЭтаФормаПараметры = Новый ФиксированнаяСтруктура(ЭтаФормаПараметры); + ФормаПараметры = Новый ФиксированнаяСтруктура(ФормаПараметры); - ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ЭтаФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); + ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); // Скрытие команд вариантов - Если НЕ Параметры.Свойство("ВидимостьКомандВариантовОтчетов", ВидимостьКомандВариантовОтчетов) Тогда - ВидимостьКомандВариантовОтчетов = ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); + Если Не Параметры.Свойство("ВидимостьКомандВариантовОтчетов", ВидимостьКомандВариантовОтчетов) Тогда + ВидимостьКомандВариантовОтчетов = ВариантыОтчетовПовтИсп.ПравоДобавления(); КонецЕсли; // Регистрация элементов, команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек НаборРеквизитов = ПолучитьРеквизиты(); Для Каждого Реквизит Из НаборРеквизитов Цикл - ПостоянныеРеквизиты.Добавить(Реквизит.Имя); + ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); + ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита); КонецЦикла; Для Каждого Команда Из Команды Цикл ПостоянныеКоманды.Добавить(Команда.Имя); КонецЦикла; - НаборЭлементов = Новый Массив; - ДобавитьПодчиненныеЭлементы(НаборЭлементов, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы, Истина); - Для Каждого Элемент Из НаборЭлементов Цикл - ПостоянныеЭлементы.Добавить(Элемент.Имя); - КонецЦикла; - // Скрытие кнопки выбора варианта из расшифровки. Если РежимРасшифровки Тогда Элементы.ФормаЗагрузитьВариант.Видимость = Ложь; @@ -99,6 +94,8 @@ // Приведение зависимых элементов формы к кондиции ВидимостьДоступностьКорректность(); + Элементы.ГруппаДругиеВариантыОтчета.Заголовок = НаименованиеОтчета + " (" + НСтр("ru = 'варианты отчета'") + "):"; + // Механизмы расширения Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); @@ -121,6 +118,9 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) ПеременныеКлиента = Новый Структура; + Если НеобходимоОбновитьНастройки Тогда + ПриОбновленииСоставаПользовательскихНастроекНаСервере(Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -145,9 +145,7 @@ КонецЕсли; Если ИзмененияИзФормыВариантаОтчета <> Неопределено Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(ВыбранноеЗначение, ИзмененияИзФормыВариантаОтчета); - БыстрыеНастройкиЗаполнить(); - + БыстрыеНастройкиЗаполнить(ВыбранноеЗначение); Результат = Истина; КонецЕсли; @@ -161,7 +159,14 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - ФормаОтчетаКлиентПереопределяемый.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ОповещениеОбработано = Ложь; + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + ПанельОтчетовКлючВарианта = " - "; + ВидимостьДоступностьКорректность(); + ОповещениеОбработано = Истина; + КонецЕсли; + + ФормаОтчетаКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); КонецПроцедуры &НаСервере @@ -170,6 +175,8 @@ Возврат; КонецЕсли; + НеобходимоОбновитьНастройки = Истина; + // Вызов переопределяемого модуля ФормаОтчетаПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); @@ -186,9 +193,7 @@ // Заполнение панели быстрых настроек РежимВариантаОтчета = Истина; - ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ЭтаФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройкиКД, Неопределено); - БыстрыеНастройкиЗаполнить(); + ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); // Вызов переопределяемого модуля ФормаОтчетаПереопределяемый.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); @@ -204,16 +209,31 @@ &НаСервере Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) - // Вызов переопределяемого модуля - ФормаОтчетаПереопределяемый.ПередЗагрузкойПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); - Если РежимВариантаОтчета Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеПользовательскиеНастройкиКД, Неопределено); - БыстрыеНастройкиЗаполнить(); - КонецЕсли; + НеобходимоОбновитьНастройки = Истина; // Вызов переопределяемого модуля ФормаОтчетаПереопределяемый.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); + +КонецПроцедуры + +&НаСервере +Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка) + НеобходимоОбновитьНастройки = Ложь; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("Событие", Новый Структура); + ПараметрыЗаполнения.Событие.Вставить("Имя", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); + ПараметрыЗаполнения.Событие.Вставить("СтандартнаяОбработка", СтандартнаяОбработка); + БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + Если ПараметрыЗаполнения.Событие.СтандартнаяОбработка <> СтандартнаяОбработка Тогда + СтандартнаяОбработка = ПараметрыЗаполнения.Событие.СтандартнаяОбработка; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииПользовательскихНастроекНаСервере(Настройки) + ВариантыОтчетов.ПриСохраненииПользовательскихНастроекНаСервере(ЭтотОбъект, Настройки); КонецПроцедуры &НаКлиенте @@ -224,8 +244,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Табличный документ @@ -576,7 +597,7 @@ Возврат; КонецЕсли; - СписокЗначений = ЭтаФорма[Элемент.Имя]; + СписокЗначений = ЭтотОбъект[Элемент.Имя]; ТекущееЗначение = Элемент.ТекущиеДанные.Значение; Если ТекущееЗначение = Новый ОписаниеТипов("Неопределено") Тогда Отказ = Истина; // Запрет пустых значений для типа "Тип". @@ -598,7 +619,7 @@ Процедура Подключаемый_СписокСТипомТип_ПриИзменении(Элемент) ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Элемент.Имя); - СписокЗначений = ЭтаФорма[Элемент.Имя]; + СписокЗначений = ЭтотОбъект[Элемент.Имя]; СписокЗначенийДляСКД = Новый СписокЗначений; ТипОписаниеТипов = Тип("ОписаниеТипов"); ОписаниеТиповНеопределено = Новый ОписаниеТипов("Неопределено"); @@ -622,27 +643,91 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте -Процедура СкрытьПоказатьБыстрыеНастройки(Команда) - +Процедура СкрытьПоказатьНастройкиИДругиеОтчеты(Команда) СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); - Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьБыстрыхНастроек", НЕ Элементы.БыстрыеНастройки.Видимость); - ВидимостьДоступностьКорректность("СкрытьПоказатьБыстрыеНастройки"); + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьПравойПанели", Не Элементы.ПраваяПанель.Видимость); + ВидимостьДоступностьКорректность("СкрытьПоказатьНастройкиИДругиеОтчеты"); ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); - КонецПроцедуры &НаКлиенте -Процедура НастроитьОтчет(Команда) +Процедура СкрытьПоказатьБыстрыеНастройки(Команда) + СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); + ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); + + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьБыстрыхНастроек", Не Элементы.ПанельБыстрыхНастроек.Видимость); + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьПанелиОтчетов", Ложь); + ВидимостьДоступностьКорректность("СкрытьПоказатьБыстрыеНастройки"); + + ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); +КонецПроцедуры + +&НаКлиенте +Процедура СкрытьПоказатьОтчеты(Команда) + СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); + ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); + + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьБыстрыхНастроек", Ложь); + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ВидимостьПанелиОтчетов", Не Элементы.ПанельОтчетов.Видимость); + ВидимостьДоступностьКорректность("СкрытьПоказатьПанельОтчетов"); + + ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантНажатие(Элемент) + Найденные = ВариантыПанели.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); + Если Найденные.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); + ПараметрыОткрытия.Вставить("Раздел", ФормаПараметры.Раздел); + ПараметрыОткрытия.Вставить("Подсистема", ФормаПараметры.Подсистема); + ПараметрыОткрытия.Вставить("ПодсистемаПредставление", ФормаПараметры.ПодсистемаПредставление); + + // Открытие + Если Вариант.Дополнительный Тогда + + ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка); + ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет); + ВариантыОтчетовКлиент.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); + + ИначеЕсли Не ЗначениеЗаполнено(Вариант.ИмяОтчета) Тогда + + ТекстПредупреждения = СтрЗаменить(НСтр("ru = 'Не заполнено имя отчета для варианта ""%1"".'"), "%1", Вариант.Наименование); + ПоказатьПредупреждение(, ТекстПредупреждения); + + Иначе + + Уникальность = "Отчет." + Вариант.ИмяОтчета; + Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + Уникальность = Уникальность + "/КлючВарианта." + Вариант.КлючВарианта; + КонецЕсли; + + ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); + ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); + + ОткрытьФорму("Отчет." + Вариант.ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВсеНастройки(Команда) ПараметрыФормы = Новый Структура; - Для Каждого КлючИЗначение Из ЭтаФормаПараметры Цикл + Для Каждого КлючИЗначение Из ФормаПараметры Цикл ПараметрыФормы.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); @@ -659,7 +744,7 @@ Процедура ИзменитьВариантОтчета(Команда) ПараметрыФормы = Новый Структура; - Для Каждого КлючИЗначение Из ЭтаФормаПараметры Цикл + Для Каждого КлючИЗначение Из ФормаПараметры Цикл ПараметрыФормы.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); @@ -674,15 +759,13 @@ &НаКлиенте Процедура СброситьНастройки(Команда) - Если ВариантМодифицирован = Истина Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Перед сбросом пользовательских настроек необходимо сохранить вариант отчета.'")); - Возврат; - КонецЕсли; - - // Заполнение панели быстрых настроек - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму("СброситьНастройки", Неопределено); - БыстрыеНастройкиЗаполнить(); + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("Событие", Новый Структура); + ПараметрыЗаполнения.Событие.Вставить("Имя", "СброситьНастройки"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("СброситьНастройки", Истина); + БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); КонецПроцедуры &НаКлиенте @@ -702,7 +785,7 @@ Процедура ОтчетСкомпоноватьРезультат(Команда) Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая - ИЛИ ТипЗнч(ЭтаФормаПараметры.ОтчетСсылка) = Тип("Строка") Тогда + Или ТипЗнч(ФормаПараметры.ОтчетСсылка) = Тип("Строка") Тогда СформироватьНепосредственно(); @@ -856,8 +939,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -1366,42 +1450,55 @@ &НаСервере Процедура ВидимостьДоступностьКорректность(Изменения = "") // Быстрые настройки - Если Изменения = "" ИЛИ Изменения = "СкрытьПоказатьБыстрыеНастройки" Тогда + Если Изменения = "" + Или Изменения = "СкрытьПоказатьБыстрыеНастройки" + Или Изменения = "СкрытьПоказатьПанельОтчетов" + Или Изменения = "СкрытьПоказатьНастройкиИДругиеОтчеты" Тогда // Вычисление параметров отображения. ПользовательскиеНастройкиКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; ПоказыватьКомандыВариантовОтчетов = РежимВариантаОтчета И ВидимостьКомандВариантовОтчетов; ЕстьМедленныеНастройки = РежимВариантаОтчета И ПользовательскиеНастройкиКД.Элементы.Количество() > 0; - Если ЕстьБыстрыеНастройки Тогда - ВидимостьБыстрыхНастроек = Неопределено; - ПользовательскиеНастройкиКД.ДополнительныеСвойства.Свойство("ВидимостьБыстрыхНастроек", ВидимостьБыстрыхНастроек); - Если ТипЗнч(ВидимостьБыстрыхНастроек) = Тип("Булево") Тогда - // Видимость определена пользователем. - ПоказыватьГруппуБыстрыхНастроек = ВидимостьБыстрыхНастроек; - Иначе - // По умолчанию: для отчета - Истина (Показывать), для расшифровки - Ложь (Не показывать). - ПоказыватьГруппуБыстрыхНастроек = Не РежимРасшифровки; - КонецЕсли; - Иначе - // Нет быстрых настроек - нечего показывать. - ПоказыватьГруппуБыстрыхНастроек = Ложь; - КонецЕсли; - // Применение параметров отображения. - Элементы.НастроитьОтчет.Видимость = ЕстьМедленныеНастройки; - + Элементы.ВсеНастройки.Видимость = ЕстьМедленныеНастройки; + Элементы.КомандыВариантовОтчета.Видимость = ПоказыватьКомандыВариантовОтчетов; Элементы.КомандыВариантовПользовательскихНастроек.Видимость = ПоказыватьКомандыВариантовОтчетов И ЕстьМедленныеНастройки; - Элементы.СкрытьПоказатьБыстрыеНастройки.Видимость = ЕстьБыстрыеНастройки; - Элементы.СкрытьПоказатьБыстрыеНастройки.Пометка = ПоказыватьГруппуБыстрыхНастроек; - Элементы.БыстрыеНастройки.Видимость = ПоказыватьГруппуБыстрыхНастроек; - Если ПоказыватьГруппуБыстрыхНастроек Тогда - Команды.СкрытьПоказатьБыстрыеНастройки.Подсказка = НСтр("ru = 'Скрыть быстрые настройки'"); - Иначе - Команды.СкрытьПоказатьБыстрыеНастройки.Подсказка = НСтр("ru = 'Показать быстрые настройки'"); + Если ПоказыватьКомандыВариантовОтчетов Тогда + ЗаполнитьПанельОтчета(); КонецЕсли; + ВидимостьПравойПанели = Неопределено; + ПользовательскиеНастройкиКД.ДополнительныеСвойства.Свойство("ВидимостьПравойПанели", ВидимостьПравойПанели); + Если ТипЗнч(ВидимостьПравойПанели) <> Тип("Булево") Тогда + ВидимостьПравойПанели = Истина; + КонецЕсли; + + Элементы.СтраницаБыстрыеНастройки.Видимость = ЕстьБыстрыеНастройки; + Элементы.СтраницаДругиеОтчеты.Видимость = ЕстьДругиеОтчеты; + Если ЕстьБыстрыеНастройки И ЕстьДругиеОтчеты Тогда + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Видимость = Истина; + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Заголовок = НСтр("ru = 'Настройки и другие отчеты'"); + Элементы.ПраваяПанель.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + ИначеЕсли ЕстьБыстрыеНастройки Тогда + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Видимость = Истина; + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Заголовок = НСтр("ru = 'Настройки'"); + Элементы.ПраваяПанель.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + ИначеЕсли ЕстьДругиеОтчеты Тогда + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Видимость = Истина; + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Заголовок = НСтр("ru = 'Другие отчеты'"); + Элементы.ПраваяПанель.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Иначе + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Видимость = Ложь; + ВидимостьПравойПанели = Ложь; + КонецЕсли; + + Если Элементы.ПраваяПанель.Видимость <> ВидимостьПравойПанели Тогда + Элементы.ПраваяПанель.Видимость = ВидимостьПравойПанели; + КонецЕсли; + Элементы.СкрытьПоказатьНастройкиИДругиеОтчеты.Пометка = ВидимостьПравойПанели; + КонецЕсли; // Заголовок @@ -1419,113 +1516,25 @@ КонецПроцедуры &НаСервере -Процедура БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройки, ИзмененияИзФормыВариантаОтчета) +Процедура БыстрыеНастройкиЗаполнить(Знач ПараметрыЗаполнения) - Если НовыеНастройки <> Неопределено Тогда - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.Текст = НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'"); - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - КонецЕсли; + // Вызов переопределяемого модуля. + ФормаОтчетаПереопределяемый.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - Если ТипЗнч(НовыеНастройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - - ПользовательскиеНастройкиМодифицированы = Истина; - - // Включение флажка "ВариантМодифицирован"... - Если ИзмененияИзФормыВариантаОтчета = Истина Тогда - // ... если редактировался вариант отчета. - ВариантМодифицирован = Истина; - ИначеЕсли ИзмененияИзФормыВариантаОтчета = Ложь И ВариантМодифицирован = Ложь Тогда - // ... если в результате изменения пользовательских настроек так же изменился их состав. - ПользовательскиеНастройкиКД = НовыеНастройки.ПользовательскиеНастройки; - КоличествоНовыхНастроек = 0; - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; - Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл - Если ПользовательскаяНастройка.РежимОтображения = Режимы.Недоступный ИЛИ ПользовательскаяНастройка.РежимОтображения = Режимы.Обычный Тогда - Продолжить; - КонецЕсли; - ИдентификаторСКД = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки; - ИдентификаторЭлемента = ПривестиИдентификаторКИмени(ИдентификаторСКД); - Если БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента) = Неопределено Тогда - ВариантМодифицирован = Истина; - Прервать; - КонецЕсли; - КоличествоНовыхНастроек = КоличествоНовыхНастроек + 1; - КонецЦикла; - Если БыстрыйПоискПользовательскихНастроек.Количество() <> КоличествоНовыхНастроек Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - КонецЕсли; - - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки.Настройки); - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеНастройки.ПользовательскиеНастройки); - - ИначеЕсли ТипЗнч(НовыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки); - ИначеЕсли ТипЗнч(НовыеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеНастройки); - ИначеЕсли НовыеНастройки = "СброситьНастройки" Тогда - ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); - ОтчетМетаданные = ОтчетОбъект.Метаданные(); - - // Чтение настроек варианта - КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; - ВариантНастройкиКД = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Найти(КлючТекущегоВарианта); - Если ВариантНастройкиКД = Неопределено Тогда - // Из хранилища - Если ОтчетМетаданные.ХранилищеВариантов = Неопределено Тогда - МенеджерХранилища = ХранилищеВариантовОтчетов; - Иначе - МенеджерХранилища = ХранилищаНастроек[ОтчетМетаданные.ХранилищеВариантов.Имя]; - КонецЕсли; - НастройкиКД = МенеджерХранилища.Загрузить(КлючОбъекта, КлючТекущегоВарианта); - Иначе - // Из метаданных СКД - НастройкиКД = ВариантНастройкиКД.Настройки; - КонецЕсли; - Если НастройкиКД = Неопределено Тогда - // По умолчанию - НастройкиКД = ОтчетОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию; - КонецЕсли; - - АдресСхемыКД = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); - КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКД)); - КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); - - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; + // Запись новых настроек варианта и пользовательских настроек в компоновщик. + БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); - // Удаление элементов - УдаляемыеЭлементы = Новый Массив; - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы, Истина); - Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл - Элементы.Удалить(УдаляемыйЭлемент); - КонецЦикла; + // Удаление элементов старых настроек. + БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); - // Удаление команд - УдаляемыеКоманды = Новый Массив; - Для Каждого Команда Из Команды Цикл - Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда - УдаляемыеКоманды.Добавить(Команда); - КонецЕсли; - КонецЦикла; - Для Каждого Команда Из УдаляемыеКоманды Цикл - Команды.Удалить(Команда); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиЗаполнить() + // Добавление элементов актуальных настроек и загрузка значений. + БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения); - // Элементы управления и их значения. - БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(); - - // Заголовок + // Заголовок и свойства элементов. ВидимостьДоступностьКорректность(); - // Вызов переопределяемого модуля - ФормаОтчетаПереопределяемый.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект); + // Вызов переопределяемого модуля. + ФормаОтчетаПереопределяемый.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); КонецПроцедуры @@ -1543,50 +1552,60 @@ // Формирование отчета. ДопСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); - КлючПараметровПечатиДоКомпоновки = ОтчетТабличныйДокумент.КлючПараметровПечати; + + ПараметрыПечатиДоФормирования = НастройкиОтчета.ПараметрыПечатиПоУмолчанию; + ЗаполнитьЗначенияСвойств(ПараметрыПечатиДоФормирования, ОтчетТабличныйДокумент); + + ИнформацияОбОшибке = Неопределено; Попытка СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто); - ДопСвойства.Удалить("КлючВарианта"); Исключение - ДопСвойства.Удалить("КлючВарианта"); - ПоказатьОшибкиФормирования(ИнформацияОбОшибке()); - ВызватьИсключение; + ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; - ОтчетТабличныйДокумент.КлючПараметровПечати = КлючПараметровПечатиДоКомпоновки; + ДопСвойства.Удалить("КлючВарианта"); + + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, ПараметрыПечатиДоФормирования); + + Если ИнформацияОбОшибке <> Неопределено Тогда + ПоказатьОшибкиФормирования(ИнформацияОбОшибке); + Возврат; + КонецЕсли; // Перезаполнение настроек. - Перезаполнить = Ложь; - Если ДопСвойства.Свойство("ВариантМодифицирован") Тогда - Если ДопСвойства.ВариантМодифицирован = Истина Тогда - Перезаполнить = Истина; - ВариантМодифицирован = Истина; - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; - ДопСвойства.Удалить("ВариантМодифицирован"); + РезультатФормирования = Новый Структура; + РезультатФормирования.Вставить("ВариантМодифицирован", Ложь); + РезультатФормирования.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + Если ВариантыОтчетовКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда + РезультатФормирования.ВариантМодифицирован = Истина; КонецЕсли; - Если ДопСвойства.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда - Если ДопСвойства.ПользовательскиеНастройкиМодифицированы = Истина Тогда - Перезаполнить = Истина; - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; - ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); - КонецЕсли; - Если Перезаполнить Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(Неопределено, Неопределено); - БыстрыеНастройкиЗаполнить(); + Если РезультатФормирования.ВариантМодифицирован + Или ВариантыОтчетовКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда + РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; КонецЕсли; + ДопСвойства.Удалить("ВариантМодифицирован"); + ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); + Если РезультатФормирования.ВариантМодифицирован + Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда + РезультатФормирования.Вставить("Событие", Новый Структура); + РезультатФормирования.Событие.Вставить("Имя", "ПослеФормирования"); + РезультатФормирования.Событие.Вставить("Непосредственно", Истина); + БыстрыеНастройкиЗаполнить(РезультатФормирования); + КонецЕсли; КонецПроцедуры &НаСервере Функция ФоновоеЗаданиеЗапустить() + Если Не ПроверитьЗаполнение() Тогда + Возврат Ложь; + КонецЕсли; ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; ДопСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); // Запуск фонового задания ПараметрыФормированияОтчета = Новый Структура; - ПараметрыФормированияОтчета.Вставить("ОтчетСсылка", ЭтаФормаПараметры.ОтчетСсылка); + ПараметрыФормированияОтчета.Вставить("ОтчетСсылка", ФормаПараметры.ОтчетСсылка); ПараметрыФормированияОтчета.Вставить("Настройки", Отчет.КомпоновщикНастроек.Настройки); ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройки", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); @@ -1687,7 +1706,90 @@ // Сервер &НаСервере -Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения() +Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки); + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.НастройкиКД); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.ПользовательскиеНастройкиКД); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("СброситьНастройки") И ПараметрыЗаполнения.СброситьНастройки = Истина Тогда + ПустойКомпоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустойКомпоновщик.ПользовательскиеНастройки); + КонецЕсли; + + Если ПараметрыЗаполнения.ВариантМодифицирован Тогда + ВариантМодифицирован = Истина; + КонецЕсли; + + Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; + + Если ПараметрыЗаполнения.ВариантМодифицирован + Или ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + Если ПараметрыЗаполнения.Свойство("Событие") И ПараметрыЗаполнения.Событие.Имя = "ПослеФормирования" Тогда + Возврат; + КонецЕсли; + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'"); + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) + + // Удаление элементов. + УдаляемыеЭлементы = Новый Массив; + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.Периоды.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы); + Для Каждого Элемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(Элемент); + КонецЦикла; + + // Удаление команд + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) + Для Каждого ПодчиненныйЭлемент Из Откуда Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") + Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда + ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); + КонецЕсли; + Куда.Добавить(ПодчиненныйЭлемент); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения) // Кэши для быстрого поиска с клиента. СоответствиеПользовательскихНастроек = Новый Соответствие; СоответствиеИменОбъектовМетаданных = Новый Соответствие; @@ -1695,7 +1797,18 @@ ЕстьБыстрыеНастройки = Ложь; - ДобавляемыеРеквизиты = Новый Массив; + // Удаление реквизитов + ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); + ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); + ВсеРеквизиты = ПолучитьРеквизиты(); + Для Каждого Реквизит Из ВсеРеквизиты Цикл + ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); + Если ПостоянныеРеквизиты.НайтиПоЗначению(ПолноеИмяРеквизита) = Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПолноеИмяРеквизита, Реквизит.ТипЗначения); + КонецЕсли; + КонецЦикла; // Локальные переменные для установки значений и свойств после создания реквизитов. ДобавленныеПоляВвода = Новый Структура; @@ -1741,6 +1854,9 @@ КонецЕсли; ИдентификаторСКД = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки; + Если Не ЗначениеЗаполнено(ИдентификаторСКД) Тогда + Продолжить; + КонецЕсли; ИдентификаторЭлемента = ПривестиИдентификаторКИмени(ИдентификаторСКД); СоответствиеПользовательскихНастроек.Вставить(ИдентификаторЭлемента, ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(ПользовательскаяНастройка)); @@ -1751,13 +1867,20 @@ ОбщаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, ИдентификаторСКД); Если ОбщаяНастройка = Неопределено Тогда Продолжить; - ИначеЕсли ПользовательскаяНастройка.РежимОтображения = Режимы.Авто - И ОбщаяНастройка.РежимОтображения <> Режимы.БыстрыйДоступ Тогда - Продолжить; КонецЕсли; КонецЕсли; ТипОбщейНастройки = ТипЗнч(ОбщаяНастройка); + Если ТипОбщейНастройки = Тип("ОтборКомпоновкиДанных") Тогда + НаборыПользовательскихНастроек.Добавить(ПользовательскаяНастройка.Элементы); + Продолжить; + КонецЕсли; + Если Не ЭтоНаборОтбора + И ПользовательскаяНастройка.РежимОтображения = Режимы.Авто + И ОбщаяНастройка.РежимОтображения <> Режимы.БыстрыйДоступ Тогда + Продолжить; + КонецЕсли; + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка); СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); @@ -1907,11 +2030,6 @@ ШаблонГенерации.Вставить("ВыборИзСписка", Ложь); КонецЕсли; - ИначеЕсли ТипОбщейНастройки = Тип("ОтборКомпоновкиДанных") Тогда - - НаборыПользовательскихНастроек.Добавить(ПользовательскаяНастройка.Элементы); - Продолжить; - Иначе Продолжить; @@ -1934,10 +2052,10 @@ КонецЕсли; // Реквизиты. - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"))); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ФлажокИмя, "Булево"); // Флажок. - ИспользованиеОтбора = Элементы.Добавить(ФлажокИмя, Тип("ПолеФормы"), Элементы.ПараметрыИОтборы); + ИспользованиеОтбора = Элементы.Добавить(ФлажокИмя, Тип("ПолеФормы"), Элементы.БыстрыеНастройки); ИспользованиеОтбора.Вид = ВидПоляФормы.ПолеФлажка; ИспользованиеОтбора.Заголовок = ЭлементЗаголовок; ИспользованиеОтбора.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; @@ -1963,13 +2081,13 @@ СтраницаСтандартныйИмя = ШаблонГенерации.Префикс + "_СтраницаСтандартный_" + ИдентификаторЭлемента; СтраницаПроизвольныйИмя = ШаблонГенерации.Префикс + "_СтраницаПроизвольный_" + ИдентификаторЭлемента; - // Реквизиты - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ВидПериодаИмя, Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ПериодПредставлениеИмя, Новый ОписаниеТипов("Строка"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ПериодЗначениеИмя, Новый ОписаниеТипов("СтандартныйПериод"))); + // Реквизиты. + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ВидПериодаИмя, "ПеречислениеСсылка.ДоступныеПериодыОтчета"); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ПериодПредставлениеИмя, "Строка"); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ПериодЗначениеИмя, "СтандартныйПериод"); // Основная Группа - ГруппаСтрок = ?(ШаблонГенерации.Префикс = "Параметр", Элементы.Периоды, Элементы.ПараметрыИОтборы); + ГруппаСтрок = ?(ШаблонГенерации.Префикс = "Параметр", Элементы.Периоды, Элементы.БыстрыеНастройки); Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), ГруппаСтрок); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; @@ -1979,7 +2097,7 @@ Если ШаблонГенерации.ФлажокИспользование Тогда - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеИмя, Новый ОписаниеТипов("Булево"))); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ИспользованиеИмя, "Булево"); // Флажок ПолеФлажка = Элементы.Добавить(ИспользованиеИмя, Тип("ПолеФормы"), Группа); @@ -2120,14 +2238,14 @@ Если ШаблонГенерации.ФлажокИспользование Тогда // Добавление основной группы - Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.ПараметрыИОтборы); + Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.БыстрыеНастройки); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; Группа.Отображение = ОтображениеОбычнойГруппы.Нет; Группа.Заголовок = ЭлементЗаголовок; Группа.ОтображатьЗаголовок = Ложь; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеИмя, Новый ОписаниеТипов("Булево"))); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ИспользованиеИмя, "Булево"); // Флажок ПолеФлажка = Элементы.Добавить(ИспользованиеИмя, Тип("ПолеФормы"), Группа); @@ -2141,12 +2259,12 @@ Иначе - Группа = Элементы.ПараметрыИОтборы; + Группа = Элементы.БыстрыеНастройки; КонецЕсли; // Реквизит - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ЗначениеИмя, ШаблонГенерации.ОписаниеТипов)); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ЗначениеИмя, ШаблонГенерации.ОписаниеТипов); ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; @@ -2231,7 +2349,7 @@ ИменаФлажковИспользование.Вставить(ИдентификаторЭлемента, ?(ШаблонГенерации.ФлажокИспользование, ИспользованиеИмя, "")); // Добавление основной группы - Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.ПараметрыИОтборы); + Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.БыстрыеНастройки); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Группа.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -2248,7 +2366,7 @@ // Флажок. Если ШаблонГенерации.ФлажокИспользование Тогда - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеИмя, Новый ОписаниеТипов("Булево"))); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ИспользованиеИмя, "Булево"); ПолеФлажка = Элементы.Добавить(ИспользованиеИмя, Тип("ПолеФормы"), ГруппаЗаголовокТаблицы); ПолеФлажка.Вид = ВидПоляФормы.ПолеФлажка; @@ -2291,7 +2409,7 @@ КнопкаПодбор.ИмяКоманды = КнопкаПодборИмя; // Таблица. - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТаблицаИмя, Новый ОписаниеТипов("СписокЗначений"))); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя, "СписокЗначений"); ТаблицаФормы = Элементы.Добавить(ТаблицаИмя, Тип("ТаблицаФормы"), Группа); ТаблицаФормы.Отображение = ОтображениеТаблицы.Список; @@ -2385,19 +2503,19 @@ КомандаСортироватьПоУбываниюИмя = ШаблонГенерации.Префикс + "_Команда_СортироватьПоУбыванию_" + ИдентификаторЭлемента; // Реквизиты. - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТаблицаИмя, Новый ОписаниеТипов("ТаблицаЗначений"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Использование", Новый ОписаниеТипов("Булево"), ТаблицаИмя)); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя, "ТаблицаЗначений"); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя + ".Идентификатор", "Строка"); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя + ".Использование", "Булево"); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя + ".Представление", "Строка"); Если ШаблонГенерации.Префикс = "ПорядокКомпоновкиДанных" Тогда - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Направление", Новый ОписаниеТипов("НаправлениеСортировкиКомпоновкиДанных"), ТаблицаИмя)); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя + ".Направление", "НаправлениеСортировкиКомпоновкиДанных"); ИначеЕсли ШаблонГенерации.Префикс = "ВыбранныеПоляКомпоновкиДанных" Тогда - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоГруппа", Новый ОписаниеТипов("Булево"), ТаблицаИмя)); + БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ТаблицаИмя + ".ЭтоГруппа", "Булево"); КонецЕсли; // Группы и элементы - Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.ТаблицыСФлажками); + Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.БыстрыеНастройки); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; Группа.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение; @@ -2533,17 +2651,11 @@ КонецЦикла; КонецЦикла; - // Регистрация старых реквизитов к удалению. - УдаляемыеРеквизиты = Новый Массив; - НаборРеквизитов = ПолучитьРеквизиты(); - Для Каждого Реквизит Из НаборРеквизитов Цикл - Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда - УдаляемыеРеквизиты.Добавить(Реквизит.Имя); - КонецЕсли; + // Удаление старых и добавление новых реквизитов. + Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); КонецЦикла; - - // Изменение реквизитов. - ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); + ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); // Установка значений и связей полей ввода. Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл @@ -2578,11 +2690,11 @@ ЭлементСписка.Значение = Новый ОписаниеТипов(МассивТипов); КонецЕсли; КонецЦикла; - ЭтаФорма[ИмяТаблицы] = СписокЗначений; + ЭтотОбъект[ИмяТаблицы] = СписокЗначений; Иначе - ЭтаФорма[ИмяТаблицы] = ОписаниеРеквизита.Значение; + ЭтотОбъект[ИмяТаблицы] = ОписаниеРеквизита.Значение; КонецЕсли; - ЭтаФорма[ИмяТаблицы].ТипЗначения = ОписаниеРеквизита.ОписаниеТипов; + ЭтотОбъект[ИмяТаблицы].ТипЗначения = ОписаниеРеквизита.ОписаниеТипов; ТаблицаФормы.ПутьКДанным = ИмяТаблицы; Элементы[ОписаниеРеквизита.ИмяКолонкиЗначение].ПутьКДанным = ИмяТаблицы + ".Значение"; // Некоторые обработчики событий можно подключить только после установки связи элементов с данными. @@ -2596,6 +2708,7 @@ ИмяТаблицы = ОписаниеРеквизита.ИмяТаблицы; Таблица = ЭтотОбъект[ИмяТаблицы]; + Таблица.Очистить(); ПользовательскаяНастройка = ОписаниеРеквизита.ПользовательскаяНастройка; ТипОбщейНастройки = ТипЗнч(ПользовательскаяНастройка); @@ -2876,9 +2989,9 @@ КонецЦикла; Если Элементы.Периоды.ПодчиненныеЭлементы.Количество() > 0 Тогда - Элементы.ПараметрыИОтборы.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение; + Элементы.БыстрыеНастройки.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение; Иначе - Элементы.ПараметрыИОтборы.Отображение = ОтображениеОбычнойГруппы.Нет; + Элементы.БыстрыеНастройки.Отображение = ОтображениеОбычнойГруппы.Нет; КонецЕсли; // Сохранение соответствий для быстрого поиска в данные формы. @@ -2889,29 +3002,64 @@ КонецПроцедуры &НаСервере -Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда, Рекурсивно) - Для Каждого ПодчиненныйЭлемент Из Откуда Цикл - Если Рекурсивно И (ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") ИЛИ ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы")) Тогда - ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы, Истина); +Процедура БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, ПолноеИмяРеквизита, ТипРеквизита) + Если ТипЗнч(ТипРеквизита) = Тип("ОписаниеТипов") Тогда + ТипыДобавляемого = ТипРеквизита; + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Строка") Тогда + ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Массив") Тогда + ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Тип") Тогда + МассивТипов = Новый Массив; + МассивТипов.Добавить(ТипРеквизита); + ТипыДобавляемого = Новый ОписаниеТипов(МассивТипов); + Иначе + Возврат; + КонецЕсли; + + ТипыСуществующего = ПараметрыЗаполнения.Реквизиты.Существующие.Получить(ПолноеИмяРеквизита); + Если ОписанияТиповСовпадает(ТипыСуществующего, ТипыДобавляемого) Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(ПолноеИмяРеквизита); + Иначе + ПозицияТочки = Найти(ПолноеИмяРеквизита, "."); + Если ПозицияТочки = 0 Тогда + ПутьКРеквизиту = ""; + КраткоеИмяРеквизита = ПолноеИмяРеквизита; + Иначе + ПутьКРеквизиту = Лев(ПолноеИмяРеквизита, ПозицияТочки - 1); + КраткоеИмяРеквизита = Сред(ПолноеИмяРеквизита, ПозицияТочки + 1); КонецЕсли; - Если ПостоянныеЭлементы.НайтиПоЗначению(ПодчиненныйЭлемент.Имя) = Неопределено Тогда - Куда.Добавить(ПодчиненныйЭлемент); + + ПараметрыЗаполнения.Реквизиты.Добавляемые.Добавить(Новый РеквизитФормы(КраткоеИмяРеквизита, ТипыДобавляемого, ПутьКРеквизиту)); + Если ТипыСуществующего <> Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(ПолноеИмяРеквизита); + ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(ПолноеИмяРеквизита); КонецЕсли; - КонецЦикла; + КонецЕсли; КонецПроцедуры +&НаСервере +Функция ОписанияТиповСовпадает(ОписаниеТипов1, ОписаниеТипов2) + Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ОписаниеТипов1 = ОписаниеТипов2 + Или ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2); +КонецФункции + &НаСервере Процедура УстановитьКлючиФормы() Если ПравоВывода Тогда - ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.ПараметрыПечатиПоУмолчанию); - Уникальность = КлючОбъекта; Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда Уникальность = Уникальность + "/КлючВарианта." + КлючТекущегоВарианта; КонецЕсли; - ОтчетТабличныйДокумент.КлючПараметровПечати = Уникальность; КлючСохраненияПоложенияОкна = Уникальность; + + НастройкиОтчета.ПараметрыПечатиПоУмолчанию.Вставить("КлючПараметровПечати", Уникальность); + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.ПараметрыПечатиПоУмолчанию); КонецЕсли; КонецПроцедуры @@ -2932,29 +3080,24 @@ Иначе - КлючПараметровПечатиДоКомпоновки = ОтчетТабличныйДокумент.КлючПараметровПечати; + ПараметрыПечатиДоФормирования = НастройкиОтчета.ПараметрыПечатиПоУмолчанию; + ЗаполнитьЗначенияСвойств(ПараметрыПечатиДоФормирования, ОтчетТабличныйДокумент); + ОтчетТабличныйДокумент = РезультатФормирования.ОтчетТабличныйДокумент; - ОтчетТабличныйДокумент.КлючПараметровПечати = КлючПараметровПечатиДоКомпоновки; + + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, ПараметрыПечатиДоФормирования); Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); КонецЕсли; ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.ОтчетРасшифровка, УникальныйИдентификатор); - Перезаполнить = Ложь; - Если РезультатФормирования.ВариантМодифицирован = Истина Тогда - Перезаполнить = Истина; - ВариантМодифицирован = Истина; - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(РезультатФормирования.НастройкиКД); - КонецЕсли; - Если РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина Тогда - Перезаполнить = Истина; - ПользовательскиеНастройкиМодифицированы = Истина; - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(РезультатФормирования.ПользовательскиеНастройкиКД); - КонецЕсли; - Если Перезаполнить Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(Неопределено, Неопределено); - БыстрыеНастройкиЗаполнить(); + Если РезультатФормирования.ВариантМодифицирован + Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда + РезультатФормирования.Вставить("Событие", Новый Структура); + РезультатФормирования.Событие.Вставить("Имя", "ПослеФормирования"); + РезультатФормирования.Событие.Вставить("Непосредственно", Ложь); + БыстрыеНастройкиЗаполнить(РезультатФормирования); КонецЕсли; КонецЕсли; @@ -3267,3 +3410,156 @@ Возврат ЗначениеЗаполнено(Значение); КонецЕсли; КонецФункции + +&НаСервере +Процедура ЗаполнитьПанельОтчета() + Если ВариантыПанелиКлючТекущегоВарианта = КлючТекущегоВарианта Тогда + Возврат; + КонецЕсли; + ВариантыПанелиКлючТекущегоВарианта = КлючТекущегоВарианта; + + ТаблицаВывода = РеквизитФормыВЗначение("ВариантыПанели"); + ТаблицаВывода.Колонки.Добавить("ЭлементНадоДобавить", Новый ОписаниеТипов("Булево")); + ТаблицаВывода.Колонки.Добавить("ЭлементНадоОставить", Новый ОписаниеТипов("Булево")); + ТаблицаВывода.Колонки.Добавить("Группа"); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыОтчетов.Автор, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И ВариантыОтчетов.КлючВарианта <> """" + | + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Отчет", ФормаПараметры.ОтчетСсылка); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + Запрос.Текст = ТекстЗапроса; + + ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); + ПоказыватьПодсказки = ОбщиеНастройки.ПоказыватьПодсказки = 1; + + ВидимостьГруппыВариантыОтчета = Ложь; + ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + // Только другие варианты. + Если СтрокаТаблицы.Ссылка = ВариантСсылка Тогда + Продолжить; + КонецЕсли; + ВидимостьГруппыВариантыОтчета = Истина; + ВывестиГиперссылкуВПанель(ТаблицаВывода, СтрокаТаблицы, Элементы.ГруппаДругиеВариантыОтчета, ПоказыватьПодсказки); + КонецЦикла; + + ВидимостьГруппыПохожиеОтчеты = Ложь; + Если ЗначениеЗаполнено(ФормаПараметры.Подсистема) Тогда + Элементы.ГруппаПохожиеОтчеты.Заголовок = ФормаПараметры.ПодсистемаПредставление; + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Подсистемы", Новый Массив); + ПараметрыПоиска.Подсистемы.Добавить(ФормаПараметры.Подсистема); + ПараметрыПоиска.Вставить("ТолькоВидимыеВПанелиОтчетов", Истина); + ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); + ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); + + РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); + + ТаблицаВариантов = РезультатПоиска.ТаблицаЗначений; + ТаблицаВариантов.Колонки.НаименованиеВарианта.Имя = "Наименование"; + ТаблицаВариантов.Сортировать("Наименование"); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + // Только другие варианты. + Если СтрокаТаблицы.Ссылка = ВариантСсылка Тогда + Продолжить; + КонецЕсли; + // Также не показывать вариант "по умолчанию" этого отчета. + Если СтрокаТаблицы.КлючВарианта = "" И СтрокаТаблицы.Отчет = ФормаПараметры.ОтчетСсылка Тогда + Продолжить; + КонецЕсли; + ВидимостьГруппыПохожиеОтчеты = Истина; + ВывестиГиперссылкуВПанель(ТаблицаВывода, СтрокаТаблицы, Элементы.ГруппаПохожиеОтчеты, ПоказыватьПодсказки); + КонецЦикла; + КонецЕсли; + + Элементы.ГруппаДругиеВариантыОтчета.Видимость = ВидимостьГруппыВариантыОтчета; + Элементы.ГруппаПохожиеОтчеты.Видимость = ВидимостьГруппыПохожиеОтчеты; + Элементы.РазделительГруппВариантов.Видимость = ВидимостьГруппыВариантыОтчета И ВидимостьГруппыПохожиеОтчеты; + + НайденныеДляУдаления = ТаблицаВывода.НайтиСтроки(Новый Структура("ЭлементНадоОставить", Ложь)); //ВариантыПанелиНомерЭлемента + Для Каждого СтрокаТаблицы Из НайденныеДляУдаления Цикл + ЭлементВарианта = Элементы.Найти(СтрокаТаблицы.НадписьИмя); + Если ЭлементВарианта <> Неопределено Тогда + Элементы.Удалить(ЭлементВарианта); + КонецЕсли; + ТаблицаВывода.Удалить(СтрокаТаблицы); + КонецЦикла; + + ЕстьДругиеОтчеты = ВидимостьГруппыВариантыОтчета Или ВидимостьГруппыПохожиеОтчеты; + + ТаблицаВывода.Колонки.Удалить("ЭлементНадоОставить"); + ТаблицаВывода.Колонки.Удалить("Группа"); + ЗначениеВРеквизитФормы(ТаблицаВывода, "ВариантыПанели"); +КонецПроцедуры + +&НаСервере +Процедура ВывестиГиперссылкуВПанель(ТаблицаВывода, Вариант, Группа, ПоказыватьПодсказки) + + Найденные = ТаблицаВывода.НайтиСтроки(Новый Структура("Ссылка", Вариант.Ссылка)); + Если Найденные.Количество() > 0 Тогда + СтрокаВывода = Найденные[0]; + СтрокаВывода.ЭлементНадоОставить = Истина; + Возврат; + КонецЕсли; + + СтрокаВывода = ТаблицаВывода.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаВывода, Вариант); + ВариантыПанелиНомерЭлемента = ВариантыПанелиНомерЭлемента + 1; + СтрокаВывода.НадписьИмя = "Вариант" + Формат(ВариантыПанелиНомерЭлемента, "ЧГ="); + СтрокаВывода.Дополнительный = (Вариант.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный); + СтрокаВывода.ИмяГруппы = Группа.Имя; + СтрокаВывода.ЭлементНадоОставить = Истина; + СтрокаВывода.Группа = Группа; + + // Добавление надписи-гиперссылки варианта отчета + Надпись = Элементы.Вставить(СтрокаВывода.НадписьИмя, Тип("ДекорацияФормы"), СтрокаВывода.Группа); + Надпись.Вид = ВидДекорацииФормы.Надпись; + Надпись.Гиперссылка = Истина; + Надпись.РастягиватьПоГоризонтали = Истина; + Надпись.РастягиватьПоВертикали = Ложь; + Надпись.Высота = 1; + Надпись.ЦветТекста = ЦветаСтиля.ВидимыйВариантОтчетаЦвет; + Надпись.Заголовок = СокрЛП(Строка(Вариант.Ссылка)); + Если ЗначениеЗаполнено(Вариант.Описание) Тогда + Надпись.Подсказка = СокрЛП(Вариант.Описание); + КонецЕсли; + Если ЗначениеЗаполнено(Вариант.Автор) Тогда + Надпись.Подсказка = СокрЛ(Надпись.Подсказка + Символы.ПС) + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор)); + КонецЕсли; + Если ПоказыватьПодсказки Тогда + Надпись.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Надпись.РасширеннаяПодсказка.РастягиватьПоГоризонтали = Истина; + Надпись.РасширеннаяПодсказка.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; + КонецЕсли; + Надпись.УстановитьДействие("Нажатие", "ВариантНажатие"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo b/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo index 706c3a8d1..7685291e6 100644 --- a/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo +++ b/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo @@ -5,6 +5,11 @@ ru Форма отчета + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl index a297388d0..626e1f7e2 100644 --- a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события формы ПриЧтенииНаСервере, который // встраивается в формы элементов данных @@ -25,4 +24,6 @@ КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl index d875e7956..bd75d9f35 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Объявляет служебные события подсистемы ОбменДанными: // @@ -494,6 +493,8 @@ // Процедура СинхронизироватьДанныеСПриложениемВИнтернете() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + УстановитьПривилегированныйРежим(Истина); Если Не ЭтоАвтономноеРабочееМесто() Тогда @@ -543,6 +544,11 @@ ЗагрузитьПараметрыИзНачальногоОбраза(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ОтключитьИспользованиеУчетныхЗаписей(); + КонецЕсли; + КонецПроцедуры // Для внутреннего использования @@ -566,9 +572,9 @@ УстановитьПривилегированныйРежим(Истина); - Возврат ЭтоАвтономноеРабочееМесто() - И Не Константы.НастройкаАвтономногоРабочегоМестаЗавершена.Получить() - ; + Возврат Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() + И ЭтоАвтономноеРабочееМесто(); + КонецФункции // Для внутреннего использования @@ -594,15 +600,6 @@ ; КонецФункции -// Для внутреннего использования -// -Функция ОткрытьПомощникНастройкиАвтономногоРабочегоМеста() Экспорт - - Возврат ЭтоАвтономноеРабочееМесто() - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() - ; -КонецФункции - // Для внутреннего использования // Функция РасписаниеСинхронизацииДанныхПоУмолчанию() Экспорт // Каждый час @@ -735,7 +732,6 @@ НачатьТранзакцию(); Попытка - Константы.НастройкаАвтономногоРабочегоМестаЗавершена.Установить(Истина); Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Параметры.Префикс); @@ -753,9 +749,6 @@ СтруктураЗаписи.Вставить("Узел", ПриложениеВСервисе()); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 200); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 200); - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); СтруктураЗаписи.Вставить("WSURLВебСервиса", Параметры.URL); @@ -943,6 +936,32 @@ КонецФункции +// Читает и устанавливает настройку предупреждение о продолжительной синхронизации АРМ +// Параметры: +// ЗначениеФлага - Булево - устанавливаемое значение флага +// ОписаниеНастройки - Структура - принимает значение для описания настройки +// +// Для внутреннего использования +// +Функция ФлагНастройкиВопросаОДолгойСинхронизации(ЗначениеФлага = Неопределено, ОписаниеНастройки = Неопределено) Экспорт + ОписаниеНастройки = Новый Структура; + + ОписаниеНастройки.Вставить("КлючОбъекта", "НастройкиПрограммы"); + ОписаниеНастройки.Вставить("КлючНастроек", "ПоказыватьПредупреждениеОДолгойСинхронизацииАРМ"); + ОписаниеНастройки.Вставить("Представление", НСтр("ru = 'Показывать предупреждение о длительной синхронизации'")); + + ОписаниеНастроек = Новый ОписаниеНастроек; + ЗаполнитьЗначенияСвойств(ОписаниеНастроек, ОписаниеНастройки); + + Если ЗначениеФлага = Неопределено Тогда + // Чтение + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ОписаниеНастроек.КлючОбъекта, ОписаниеНастроек.КлючНастроек, Истина); + КонецЕсли; + + // Запись + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ОписаниеНастроек.КлючОбъекта, ОписаниеНастроек.КлючНастроек, ЗначениеФлага, ОписаниеНастроек); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -966,3 +985,5 @@ Возврат СтандартныеПодсистемыСервер.ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебныйВызовСервера/Module.bsl index 49797e499..acc5074e0 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования // @@ -20,4 +19,6 @@ Возврат АвтономнаяРаботаСлужебный.ПараметрыФормыВыполненияОбменаДанными(); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl new file mode 100644 index 000000000..43f773f99 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -0,0 +1,1901 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Реализация программного администрирования кластера серверов с использованием +// COM-объекта V8*.ComConnector +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область БлокировкаСеансовИЗаданий + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Результат = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора( + ИнформационнаяБаза, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// СвойстваБлокировкиСеансовИЗаданий - Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + а = ИнформационнаяБаза.SessionsDenied; + + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ИнформационнаяБаза, + СвойстваБлокировкиСеансовИЗаданий, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + +КонецПроцедуры + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера, +// ПроверятьПараметрыАдминистрированияКластера - Булево, флаг необходимости проверки параметров администрирования кластера, +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево, флаг необходимости проверки параметров администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина, + ПроверятьПараметрыАдминистрированияКластера = Истина) Экспорт + + Если ПроверятьПараметрыАдминистрированияКластера ИЛИ ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + КонецЕсли; + + Если ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Булево. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Возврат ИнформационнаяБаза.ScheduledJobsDenied; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// БлокировкаРегламентныхЗаданий - Булево, флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.ScheduledJobsDenied = БлокировкаРегламентныхЗаданий; + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства сеансов. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса(). +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ОписаниеИнформационнойБазы = ПолучитьОписаниеИБ( + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере); + + Возврат ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ОписаниеИнформационнойБазы, Фильтр, Истина); + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации сеансов, которые требуется удалить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ОписаниеИнформационнойБазы = ПолучитьОписаниеИБ( + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере); + + Сеансы = ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ОписаниеИнформационнойБазы, Фильтр, Ложь); + + Для Каждого Сеанс Из Сеансы Цикл + + Попытка + + СоединениеСАгентомСервера.TerminateSession(Кластер, Сеанс); + + Исключение + + // Сеанс мог завершиться к моменту вызова TerminateSession. + + ОтборСеансов = Новый Структура("Номер", Сеанс.Номер); + + Если ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ОписаниеИнформационнойБазы, ОтборСеансов, Ложь).Количество() > 0 Тогда + ВызватьИсключение; + Иначе + Продолжить; + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации соединения, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + Возврат ПолучитьСоединения( + COMСоединитель, + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы, + Фильтр, + Истина); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации соединений, которые требуется завершить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации разрываемых соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПроцессыИСоединения = ПолучитьСоединения( + COMСоединитель, + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы, + Фильтр, + Ложь); + + Для Каждого ПроцессИСоединение Из ПроцессыИСоединения Цикл + + Попытка + + ПроцессИСоединение.СоединениеСРабочимПроцессом.Disconnect(ПроцессИСоединение.Соединение); + + Исключение + + // Соединение могло уже завершиться к моменту вызова Disconnect. + + ОтборСоединений = Новый Структура("Номер", ПроцессИСоединение.Соединение.Номер); + + ОписанияСоединений = ПолучитьСоединения( + COMСоединитель, + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы, + ОтборСоединений); + + Если ОписанияСоединений.Количество() > 0 Тогда + ВызватьИсключение; + Иначе + Продолжить; + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы. Если +// для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Если ЗначениеЗаполнено(ИнформационнаяБаза.SecurityProfileName) Тогда + Результат = ИнформационнаяБаза.SecurityProfileName; + Иначе + Результат = ""; + КонецЕсли; + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено; + + Возврат Результат; + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы в качестве профиля +// безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Если ЗначениеЗаполнено(ИнформационнаяБаза.SafeModeSecurityProfileName) Тогда + Результат = ИнформационнаяБаза.SafeModeSecurityProfileName; + Иначе + Результат = ""; + КонецЕсли; + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено; + + Возврат Результат; + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.SecurityProfileName = ИмяПрофиля; + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.SafeModeSecurityProfileName = ИмяПрофиля; + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + Для Каждого ПрофильБезопасности Из СоединениеСАгентомСервера.GetSecurityProfiles(Кластер) Цикл + + Если ПрофильБезопасности.Name = ИмяПрофиля Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Структура, описывающая профиль безопасности, описание - см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + + Результат = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора( + ПрофильБезопасности, + СловарьСвойствПрофиляБезопасности()); + + // Виртуальный каталоги + Результат.Вставить("ВиртуальныеКаталоги", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВиртуальногоКаталога())); + + // Разрешенные COM-классы + Результат.Вставить("COMКлассы", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствCOMКласса())); + + // Внешние компоненты + Результат.Вставить("ВнешниеКомпоненты", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВнешнейКомпоненты())); + + // Внешние модули + Результат.Вставить("ВнешниеМодули", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВнешнегоМодуля())); + + // Приложения ОС + Результат.Вставить("ПриложенияОС", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствПриложенияОС())); + + // Интернет-ресурсы + Результат.Вставить("ИнтернетРесурсы", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствИнтернетРесурса())); + + Возврат Результат; + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая свойства создаваемого профиля безопасности, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = СоединениеСАгентомСервера.CreateSecurityProfile(); + ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = ПолучитьПрофильБезопасности( + СоединениеСАгентомСервера, + Кластер, + СвойстваПрофиляБезопасности.Имя); + + ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = ПолучитьПрофильБезопасности( + СоединениеСАгентомСервера, + Кластер, + ИмяПрофиля); + + СоединениеСАгентомСервера.UnregSecurityProfile(Кластер, ИмяПрофиля); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Создает COM-объект V8*.ComConnector. +// +// Возвращаемое значение: COMОбъект. +// +Функция COMСоединитель() + + #Если Клиент Тогда + Возврат Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); + #Иначе + + Если БезопасныйРежим() Тогда + ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме!'"); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера!'"); + КонецЕсли; + + Возврат Новый COMОбъект(ОбщегоНазначения.ИмяCOMСоединителя()); + + #КонецЕсли + +КонецФункции + +// Устанавливает соединение с агентом сервера. +// +// Параметры: +// COMСоединитель - COMОбъект V8*.ComConnector, +// АдресАгентаСервера - Строка, сетевой адрес агента сервера, +// ПортАгентаСервера - Число, сетевой порт агента сервера (типичное значение 1540). +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс IV8AgentConnection. +// +Функция СоединениеСАгентомСервера(COMСоединитель, Знач АдресАгентаСервера, Знач ПортАгентаСервера) + + СтрокаСоединенияСАгентомСервера = "tcp://" + АдресАгентаСервера + ":" + Формат(ПортАгентаСервера, "ЧГ=0"); + СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(СтрокаСоединенияСАгентомСервера); + Возврат СоединениеСАгентомСервера; + +КонецФункции + +// Возвращает кластер серверов. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// ПортКластера - Число, сетевой порт менеджера кластера (типичное значение 1541), +// ИмяАдминистратораКластера - Строка, имя учетной записи администратора кластера, +// ПарольАдминистратораКластера - Строка, пароль учетной записи администратора кластера. +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс IClusterInfo. +// +Функция ПолучитьКластер(СоединениеСАгентомСервера, Знач ПортКластера, Знач ИмяАдминистратораКластера, Знач ПарольАдминистратораКластера) + + Для Каждого Кластер Из СоединениеСАгентомСервера.GetClusters() Цикл + + Если Кластер.MainPort = ПортКластера Тогда + + СоединениеСАгентомСервера.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера); + + Возврат Кластер; + + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), + СоединениеСАгентомСервера.ConnectionString, + ПортКластера); + +КонецФункции + +// Устанавливает соединение с рабочим процессом. +// +// Параметры: +// COMСоединитель - COMОбъект V8*.ComConnector, +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo. +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс IV8ServerConnection. +// +Функция СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер) + + Для Каждого РабочийПроцесс Из СоединениеСАгентомСервера.GetWorkingProcesses(Кластер) Цикл + Если РабочийПроцесс.Running Тогда + СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="); + Возврат COMСоединитель.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом); + КонецЕсли; + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0")); + +КонецФункции + +// Возвращает описание информационной базы. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяВКластере - Строка, имя информационной базы в кластере серверов. +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс IInfoBaseShort. +// +Функция ПолучитьОписаниеИБ(СоединениеСАгентомСервера, Кластер, Знач ИмяВКластере) + + Для Каждого ОписаниеИнформационнойБазы Из СоединениеСАгентомСервера.GetInfoBases(Кластер) Цикл + + Если ОписаниеИнформационнойБазы.Name = ИмяВКластере Тогда + + Возврат ОписаниеИнформационнойБазы; + + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяВКластере + ); + +КонецФункции + +// Возвращает информационную базу. +// +// Параметры: +// СоединениеСРабочимПроцессом - COMОбъект, реализующий интерфейс IV8ServerConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяВКластере - Строка, имя информационной базы в кластере серверов, +// ИмяАдминистратораИБ - Строка, имя администратора информационной базы, +// ПарольАдминистратораИБ - Строка, пароль администратора информационной базы. +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс IInfoBaseInfo. +// +Функция ПолучитьИБ(СоединениеСРабочимПроцессом, Кластер, Знач ИмяВКластере, Знач ИмяАдминистратораИБ, Знач ПарольАдминистратораИБ) + + СоединениеСРабочимПроцессом.AddAuthentication(ИмяАдминистратораИБ, ПарольАдминистратораИБ); + + Для Каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл + + Если ИнформационнаяБаза.Name = ИмяВКластере Тогда + + Если Не ЗначениеЗаполнено(ИнформационнаяБаза.DBMS) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильные имя и пароль администратора информационной базы %1 в кластере серверов %2:%3 (имя: ""%4"").'"), + ИмяВКластере, + Кластер.HostName, Кластер.MainPort, + ИмяАдминистратораИБ); + + КонецЕсли; + + Возврат ИнформационнаяБаза; + + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяВКластере + ); + +КонецФункции + +// Возвращает сеансы информационной базы. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИнформационнаяБаза - COMОбъект, реализующий интерфейс IInfoBaseInfo, +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство, +// Описания - Булево, если значение равно Ложь, функция вернет массив COMОбъектов, реализующих интерфейс ISessionInfo, +// иначе - массив структур, описывающих свойства сеансов (поля структур - см. возвращаемое значение функции +// АдминистрированиеКластераКлиентСервер.СвойстваСеанса()). +// +// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// +Функция ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ИнформационнаяБаза, Знач Фильтр = Неопределено, Знач Описания = Ложь) + + Сеансы = Новый Массив; + + Словарь = СловарьСвойствСеансов(); + + Для Каждого Сеанс Из СоединениеСАгентомСервера.GetInfoBaseSessions(Кластер, ИнформационнаяБаза) Цикл + + ОписаниеСеанса = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Сеанс, Словарь); + + Если АдминистрированиеКластераКлиентСервер.ПроверитьУсловияФильтра(ОписаниеСеанса, Фильтр) Тогда + + Если Описания Тогда + Сеансы.Добавить(ОписаниеСеанса); + Иначе + Сеансы.Добавить(Сеанс); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Сеансы; + +КонецФункции + +// Возвращает соединения с информационной базой. +// +// Параметры: +// COMСоединитель - COMОбъект V8*.ComConnector, +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяВКластере - Строка, имя информационной базы в кластере серверов, +// ИмяАдминистратораИБ - Строка, имя администратора информационной базы, +// ПарольАдминистратораИБ - Строка, пароль администратора информационной базы, +// Фильтр - Описание условия фильтрации соединения, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство, +// Описания - Булево, если значение равно Ложь, функция вернет массив COMОбъектов, реализующих интерфейс IConnectionShort, +// иначе - массив структур, описывающих свойства соединений (поля структур - см. возвращаемое значение функции +// АдминистрированиеКластераКлиентСервер.СвойстваСоединения()). +// +// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// +Функция ПолучитьСоединения(COMСоединитель, СоединениеСАгентомСервера, Кластер, Знач ИмяВКластере, Знач ИмяАдминистратораИБ, Знач ПарольАдминистратораИБ, Знач Фильтр = Неопределено, Знач Описания = Ложь) + + Соединения = Новый Массив(); + Словарь = СловарьСвойствСоединений(); + + Для Каждого РабочийПроцесс Из СоединениеСАгентомСервера.GetWorkingProcesses(Кластер) Цикл + + Если РабочийПроцесс.Running Тогда + + СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="); + СоединениеСРабочимПроцессом = COMСоединитель.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом); + + СоединениеСРабочимПроцессом.AddAuthentication(ИмяАдминистратораИБ, ПарольАдминистратораИБ); + + Для Каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл + + Если ИнформационнаяБаза.Name = ИмяВКластере Тогда + + Для Каждого Соединение Из СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИнформационнаяБаза) Цикл + + ОписаниеСоединения = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Соединение, Словарь); + + Если АдминистрированиеКластераКлиентСервер.ПроверитьУсловияФильтра(ОписаниеСоединения, Фильтр) Тогда + + Если Описания Тогда + Соединения.Добавить(ОписаниеСоединения); + Иначе + Соединения.Добавить(Новый Структура("СоединениеСРабочимПроцессом, Соединение", СоединениеСРабочимПроцессом, Соединение)); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Возврат Соединения; + +КонецФункции + +// Возвращает профиль безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: COMОбъект, реализующий интерфейс ISecurityProfile. +// +Функция ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + Для Каждого ПрофильБезопасности Из СоединениеСАгентомСервера.GetSecurityProfiles(Кластер) Цикл + + Если ПрофильБезопасности.Name = ИмяПрофиля Тогда + Возврат ПрофильБезопасности; + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""!'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяПрофиля + ); + +КонецФункции + +// Возвращает виртуальные каталоги, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileVirtualDirectory. +// +Функция ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВиртуальныеКаталоги = Новый Массив(); + + Для Каждого ВиртуальныйКаталог Из СоединениеСАгентомСервера.GetSecurityProfileVirtualDirectories(Кластер, ИмяПрофиля) Цикл + + ВиртуальныеКаталоги.Добавить(ВиртуальныйКаталог); + + КонецЦикла; + + Возврат ВиртуальныеКаталоги; + +КонецФункции + +// Возвращает COM-классы, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileCOMClass. +// +Функция ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + COMКлассы = Новый Массив(); + + Для Каждого COMКласс Из СоединениеСАгентомСервера.GetSecurityProfileCOMClasses(Кластер, ИмяПрофиля) Цикл + + COMКлассы.Добавить(COMКласс); + + КонецЦикла; + + Возврат COMКлассы; + +КонецФункции + +// Возвращает внешние компоненты, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileAddIn. +// +Функция ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВнешниеКомпоненты = Новый Массив(); + + Для Каждого ВнешняяКомпонента Из СоединениеСАгентомСервера.GetSecurityProfileAddIns(Кластер, ИмяПрофиля) Цикл + + ВнешниеКомпоненты.Добавить(ВнешняяКомпонента); + + КонецЦикла; + + Возврат ВнешниеКомпоненты; + +КонецФункции + +// Возвращает внешние модули, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileExternalModule. +// +Функция ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВнешниеМодули = Новый Массив(); + + Для Каждого ВнешнийМодуль Из СоединениеСАгентомСервера.GetSecurityProfileUnSafeExternalModules(Кластер, ИмяПрофиля) Цикл + + ВнешниеМодули.Добавить(ВнешнийМодуль); + + КонецЦикла; + + Возврат ВнешниеМодули; + +КонецФункции + +// Возвращает приложения ОС, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileApplication. +// +Функция ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ПриложенияОС = Новый Массив(); + + Для Каждого ПриложениеОС Из СоединениеСАгентомСервера.GetSecurityProfileApplications(Кластер, ИмяПрофиля) Цикл + + ПриложенияОС.Добавить(ПриложениеОС); + + КонецЦикла; + + Возврат ПриложенияОС; + +КонецФункции + +// Возвращает приложения ОС, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Массив(COMОбъект) - массив COM-объектов, реализующих интерфейс ISecurityProfileInternetResource. +// +Функция ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ИнтернетРесурсы = Новый Массив(); + + Для Каждого ИнтернетРесурс Из СоединениеСАгентомСервера.GetSecurityProfileInternetResources(Кластер, ИмяПрофиля) Цикл + + ИнтернетРесурсы.Добавить(ИнтернетРесурс); + + КонецЦикла; + + Возврат ИнтернетРесурсы; + +КонецФункции + +// Перезаписывает свойства профиля безопасности переданными. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект, реализующий интерфейс IV8AgentConnection, +// Кластер - COMОбъект, реализующий интерфейс IClusterInfo, +// ПрофильБезопасности - COMОбъект, реализующий интерфейс ISecurityProfile, +// СвойстваПрофиляБезопасности - Структура, описывающая профиль безопасности. Состав - см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности) + + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ПрофильБезопасности, + СвойстваПрофиляБезопасности, + СловарьСвойствПрофиляБезопасности()); + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + СоединениеСАгентомСервера.RegSecurityProfile(Кластер, ПрофильБезопасности); + + // Виртуальный каталоги + УдаляемыеВиртуальныеКаталоги = ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВиртуальныйКаталог Из УдаляемыеВиртуальныеКаталоги Цикл + СоединениеСАгентомСервера.UnregSecurityProfileVirtualDirectory( + Кластер, + ИмяПрофиля, + УдаляемыйВиртуальныйКаталог.Alias + ); + КонецЦикла; + СоздаваемыеВиртуальныеКаталоги = СвойстваПрофиляБезопасности.ВиртуальныеКаталоги; + Для Каждого СоздаваемыйВиртуальныйКаталог Из СоздаваемыеВиртуальныеКаталоги Цикл + ВиртуальныйКаталог = СоединениеСАгентомСервера.CreateSecurityProfileVirtualDirectory(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВиртуальныйКаталог, + СоздаваемыйВиртуальныйКаталог, + СловарьСвойствВиртуальногоКаталога() + ); + СоединениеСАгентомСервера.RegSecurityProfileVirtualDirectory(Кластер, ИмяПрофиля, ВиртуальныйКаталог); + КонецЦикла; + + // Разрешенные COM-классы + УдаляемыеCOMКлассы = ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйCOMКласс Из УдаляемыеCOMКлассы Цикл + СоединениеСАгентомСервера.UnregSecurityProfileCOMClass( + Кластер, + ИмяПрофиля, + УдаляемыйCOMКласс.Name + ); + КонецЦикла; + СоздаваемыеCOMКлассы = СвойстваПрофиляБезопасности.COMКлассы; + Для Каждого СоздаваемыйCOMКласс Из СоздаваемыеCOMКлассы Цикл + COMКласс = СоединениеСАгентомСервера.CreateSecurityProfileCOMClass(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + COMКласс, + СоздаваемыйCOMКласс, + СловарьСвойствCOMКласса() + ); + СоединениеСАгентомСервера.RegSecurityProfileCOMClass(Кластер, ИмяПрофиля, COMКласс); + КонецЦикла; + + // Внешние компоненты + УдаляемыеВнешниеКомпоненты = ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВнешнийКомпонент Из УдаляемыеВнешниеКомпоненты Цикл + СоединениеСАгентомСервера.UnregSecurityProfileAddIn( + Кластер, + ИмяПрофиля, + УдаляемыйВнешнийКомпонент.Name + ); + КонецЦикла; + СоздаваемыеВнешниеКомпоненты = СвойстваПрофиляБезопасности.ВнешниеКомпоненты; + Для Каждого СоздаваемыйВнешнийКомпонент Из СоздаваемыеВнешниеКомпоненты Цикл + ВнешнийКомпонент = СоединениеСАгентомСервера.CreateSecurityProfileAddIn(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВнешнийКомпонент, + СоздаваемыйВнешнийКомпонент, + СловарьСвойствВнешнейКомпоненты() + ); + СоединениеСАгентомСервера.RegSecurityProfileAddIn(Кластер, ИмяПрофиля, ВнешнийКомпонент); + КонецЦикла; + + // Внешние модули + УдаляемыеВнешниеМодули = ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВнешнийМодуль Из УдаляемыеВнешниеМодули Цикл + СоединениеСАгентомСервера.UnregSecurityProfileUnSafeExternalModule( + Кластер, + ИмяПрофиля, + УдаляемыйВнешнийМодуль.Name + ); + КонецЦикла; + СоздаваемыеВнешниеМодули = СвойстваПрофиляБезопасности.ВнешниеМодули; + Для Каждого СоздаваемыйВнешнийМодуль Из СоздаваемыеВнешниеМодули Цикл + ВнешнийМодуль = СоединениеСАгентомСервера.CreateSecurityProfileUnSafeExternalModule(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВнешнийМодуль, + СоздаваемыйВнешнийМодуль, + СловарьСвойствВнешнегоМодуля() + ); + СоединениеСАгентомСервера.RegSecurityProfileUnSafeExternalModule(Кластер, ИмяПрофиля, ВнешнийМодуль); + КонецЦикла; + + // Приложения ОС + УдаляемыеПриложенияОС = ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемоеПриложениеОС Из УдаляемыеПриложенияОС Цикл + СоединениеСАгентомСервера.UnregSecurityProfileApplication( + Кластер, + ИмяПрофиля, + УдаляемоеПриложениеОС.Name + ); + КонецЦикла; + СоздаваемыеПриложенияОС = СвойстваПрофиляБезопасности.ПриложенияОС; + Для Каждого СоздаваемоеПриложениеОС Из СоздаваемыеПриложенияОС Цикл + ПриложениеОС = СоединениеСАгентомСервера.CreateSecurityProfileApplication(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ПриложениеОС, + СоздаваемоеПриложениеОС, + СловарьСвойствПриложенияОС() + ); + СоединениеСАгентомСервера.RegSecurityProfileApplication(Кластер, ИмяПрофиля, ПриложениеОС); + КонецЦикла; + + // Интернет-ресурсы + УдаляемыеИнтернетРесурсы = ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйИнтернетРесурс Из УдаляемыеИнтернетРесурсы Цикл + СоединениеСАгентомСервера.UnregSecurityProfileInternetResource( + Кластер, + ИмяПрофиля, + УдаляемыйИнтернетРесурс.Name + ); + КонецЦикла; + СоздаваемыеИнтернетРесурсы = СвойстваПрофиляБезопасности.ИнтернетРесурсы; + Для Каждого СоздаваемыйИнтернетРесурс Из СоздаваемыеИнтернетРесурсы Цикл + ИнтернетРесурс = СоединениеСАгентомСервера.CreateSecurityProfileInternetResource(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ИнтернетРесурс, + СоздаваемыйИнтернетРесурс, + СловарьСвойствИнтернетРесурса() + ); + СоединениеСАгентомСервера.RegSecurityProfileInternetResource(Кластер, ИмяПрофиля, ИнтернетРесурс); + КонецЦикла; + +КонецПроцедуры + +// Формирует описание для объекта объектной модели COM-администратора. +// +// Параметры: +// Объект - COMОбъект, +// Словарь - Соответствие, содержит соответствие свойств объекта и в описании: +// Ключ - Имя свойства в описании, +// Значение - Имя свойства объекта. +// +// Возвращаемое значение: Структура, описание объекта объектной модели COM-администратора +// по переданному словарю. +// +Функция ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Знач Объект, Знач Словарь) + + Описание = Новый Структура(); + Для Каждого ФрагментСловаря Из Словарь Цикл + Если ЗначениеЗаполнено(Объект[ФрагментСловаря.Значение]) Тогда + Описание.Вставить(ФрагментСловаря.Ключ, Объект[ФрагментСловаря.Значение]); + Иначе + Описание.Вставить(ФрагментСловаря.Ключ, Неопределено); + КонецЕсли; + КонецЦикла; + + Возврат Описание; + +КонецФункции + +// Формирует описания объектов объектной модели COM-администратора. +// +// Параметры: +// Объекты - Массив(COMОбъект), +// Словарь - Соответствие, содержит соответствие свойств объекта и в описании: +// Ключ - Имя свойства в описании, +// Значение - Имя свойства объекта. +// +// Возвращаемое значение: Массив(Структура), описания объекта объектной модели COM-администратора +// по переданному словарю. +// +Функция ОписанияОбъектовОбъектнойМоделиCOMАдминистратора(Знач Объекты, Знач Словарь) + + Описания = Новый Массив(); + + Для Каждого Объект Из Объекты Цикл + Описания.Добавить(ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Объект, Словарь)); + КонецЦикла; + + Возврат Описания; + +КонецФункции + +// Заполняет свойства объекта объектной модели COM-администратора по свойствам из +// переданного описания. +// +// Параметры: +// Объект - COMОбъект, +// Описание - Структура, описание, используемое для заполнения свойств объекта, +// Словарь - Соответствие, содержит соответствие свойств объекта и в описании: +// Ключ - Имя свойства в описании, +// Значение - Имя свойства объекта. +// +Процедура ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию(Объект, Знач Описание, Знач Словарь) + + Для Каждого ФрагментСловаря Из Словарь Цикл + Объект[ФрагментСловаря.Значение] = Описание[ФрагментСловаря.Ключ]; + КонецЦикла; + +КонецПроцедуры + +// Возвращает соответствие имен свойств информационной базы, описывающих состояние +// блокировки сеансов и регламентных заданий, для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий() + + Результат = Новый Структура(); + + Результат.Вставить("БлокировкаСеансов", "SessionsDenied"); + Результат.Вставить("ДатаС", "DeniedFrom"); + Результат.Вставить("ДатаПо", "DeniedTo"); + Результат.Вставить("Сообщение", "DeniedMessage"); + Результат.Вставить("КодРазрешения", "PermissionCode"); + Результат.Вставить("БлокировкаРегламентныхЗаданий", "ScheduledJobsDenied"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствСеансов() + + Результат = Новый Структура(); + + Результат.Вставить("Номер", "SessionID"); + Результат.Вставить("ИмяПользователя", "UserName"); + Результат.Вставить("ИмяКлиентскогоКомпьютера", "Host"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения", "AppID"); + Результат.Вставить("ИдентификаторЯзыка", "Locale"); + Результат.Вставить("МоментСозданияСеанса", "StartedAt"); + Результат.Вставить("МоментПоследнейАктивностиСеанса", "LastActiveAt"); + Результат.Вставить("БлокировкаСУБД", "blockedByDBMS"); + Результат.Вставить("Блокировка", "blockedByLS"); + Результат.Вставить("Передано", "bytesAll"); + Результат.Вставить("ПереданоЗа5Минут", "bytesLast5Min"); + Результат.Вставить("СерверныхВызовов", "callsAll"); + Результат.Вставить("СерверныхВызововЗа5Минут", "callsLast5Min"); + Результат.Вставить("ДлительностьСерверныхВызовов", "durationAll"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова", "durationCurrent"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут", "durationLast5Min"); + Результат.Вставить("ПереданоСУБД", "dbmsBytesAll"); + Результат.Вставить("ПереданоСУБДЗа5Минут", "dbmsBytesLast5Min"); + Результат.Вставить("ДлительностьВызововСУБД", "durationAllDBMS"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД", "durationCurrentDBMS"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут", "durationLast5MinDBMS"); + Результат.Вставить("СоединениеСУБД", "dbProcInfo"); + Результат.Вставить("ВремяСоединенияСУБД", "dbProcTook"); + Результат.Вставить("МоментЗахватаСоединенияСУБД", "dbProcTookAt"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствСоединений() + + Результат = Новый Структура(); + + Результат.Вставить("Номер", "ConnID"); + Результат.Вставить("ИмяПользователя", "UserName"); + Результат.Вставить("ИмяКлиентскогоКомпьютера", "HostName"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения", "AppID"); + Результат.Вставить("МоментУстановкиСоединения", "ConnectedAt"); + Результат.Вставить("РежимСоединенияСИнформационнойБазой", "IBConnMode"); + Результат.Вставить("РежимСоединенияСБазойДанных", "dbConnMode"); + Результат.Вставить("БлокировкаСУБД", "blockedByDBMS"); + Результат.Вставить("Передано", "bytesAll"); + Результат.Вставить("ПереданоЗа5Минут", "bytesLast5Min"); + Результат.Вставить("СерверныхВызовов", "callsAll"); + Результат.Вставить("СерверныхВызововЗа5Минут", "callsLast5Min"); + Результат.Вставить("ПереданоСУБД", "dbmsBytesAll"); + Результат.Вставить("ПереданоСУБДЗа5Минут", "dbmsBytesLast5Min"); + Результат.Вставить("СоединениеСУБД", "dbProcInfo"); + Результат.Вставить("ВремяСУБД", "dbProcTook"); + Результат.Вставить("МоментЗахватаСоединенияСУБД", "dbProcTookAt"); + Результат.Вставить("ДлительностьСерверныхВызовов", "durationAll"); + Результат.Вставить("ДлительностьВызововСУБД", "durationAllDBMS"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова", "durationCurrent"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД", "durationCurrentDBMS"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут", "durationLast5Min"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут", "durationLast5MinDBMS"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствПрофиляБезопасности() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + Результат.Вставить("ПрофильБезопасногоРежима", "SafeModeProfile"); + Результат.Вставить("ПолныйДоступКПривилегированномуРежиму", "PrivilegedModeInSafeModeAllowed"); + + Результат.Вставить("ПолныйДоступКФайловойСистеме", "FileSystemFullAccess"); + Результат.Вставить("ПолныйДоступКCOMОбъектам", "COMFullAccess"); + Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", "AddInFullAccess"); + Результат.Вставить("ПолныйДоступКВнешнимМодулям", "UnSafeExternalModuleFullAccess"); + Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", "ExternalAppFullAccess"); + Результат.Вставить("ПолныйДоступКИнтернетРесурсам", "InternetFullAccess"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВиртуальногоКаталога() + + Результат = Новый Структура(); + + Результат.Вставить("ЛогическийURL", "Alias"); + Результат.Вставить("ФизическийURL", "PhysicalPath"); + + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("ЧтениеДанных", "AllowedRead"); + Результат.Вставить("ЗаписьДанных", "AllowedWrite"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств COM-класса для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствCOMКласса() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("ФайлМоникер", "FileName"); + Результат.Вставить("CLSID", "ObjectUUID"); + Результат.Вставить("Компьютер", "ComputerName"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВнешнейКомпоненты() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("ХэшСумма", "AddInHash"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВнешнегоМодуля() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("ХэшСумма", "ExternalModuleHash"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствПриложенияОС() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("ШаблонСтрокиЗапуска", "CommandMask"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствИнтернетРесурса() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "Name"); + Результат.Вставить("Описание", "Descr"); + + Результат.Вставить("Протокол", "Protocol"); + Результат.Вставить("Адрес", "Address"); + Результат.Вставить("Порт", "Port"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo new file mode 100644 index 000000000..306f8562d --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + АдминистрированиеКластераCOMКлиентСервер + + ru + Администрирование кластера COMКлиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl new file mode 100644 index 000000000..0f8a71f67 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -0,0 +1,2251 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Клиентские и серверные процедуры и функции общего назначения: +// - Реализация программного администрирования кластера серверов через сервер +// администрирования +// +//////////////////////////////////////////////////////////////////////////////// + +#Если Не ВебКлиент Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +#Область БлокировкаСеансовИЗаданий + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Возврат СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// СвойстваБлокировкиСеансовИЗаданий - Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий(), + СвойстваБлокировкиСеансовИЗаданий); + +КонецПроцедуры + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера, +// ПроверятьПараметрыАдминистрированияКластера - Булево, флаг необходимости проверки параметров администрирования кластера, +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево, флаг необходимости проверки параметров администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина, + ПроверятьПараметрыАдминистрированияКластера = Истина) Экспорт + + + Если ПроверятьПараметрыАдминистрированияКластера Или ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + РабочиеПроцессы = ПолучитьРабочиеПроцессы(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + + КонецЕсли; + + Если ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + Словарь = Новый Структура(); + Словарь.Вставить("БлокировкаСеансов", "sessions-deny"); + + а = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Булево. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура("БлокировкаЗаданий", "scheduled-jobs-deny"); + + СвойстваИБ = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); + Возврат СвойстваИБ.БлокировкаЗаданий; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// БлокировкаРегламентныхЗаданий - Булево, флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + Словарь = Новый Структура("БлокировкаЗаданий", "scheduled-jobs-deny"); + Свойства = Новый Структура("БлокировкаЗаданий", БлокировкаРегламентныхЗаданий); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Свойства); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства сеансов. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса(). +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Возврат ПолучитьСеансы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, Фильтр); + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации сеансов, которые требуется удалить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + Шаблон = "%rac session --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% terminate --session=%session%"; + + Параметры = Новый Соответствие(); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + Сеансы = ПолучитьСеансы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, Фильтр, Ложь); + Для Каждого Сеанс Из Сеансы Цикл + + Попытка + + Параметры.Вставить("session", Сеанс.Получить("session")); + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + + Исключение + + // Сеанс мог завершиться к моменту вызова rac session terminate. + + ОтборСеансов = Новый Структура(); + ОтборСеансов.Вставить("Номер", Сеанс.Получить("session-id")); + + Если ПолучитьСеансы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, ОтборСеансов, Истина).Количество() > 0 Тогда + ВызватьИсключение; + Иначе + Продолжить; + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации соединения, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Возврат ПолучитьСоединения(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, ПараметрыАдминистрированияИБ, Фильтр, Истина); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации соединений, которые требуется завершить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации разрываемых соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + Шаблон = "%rac connection --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% disconnect --process=%process% --connection=%connection% --infobase-user=%?infobase-user% --infobase-pwd=%?infobase-pwd%"; + + Параметры = Новый Структура; + + Параметры = Новый Соответствие(); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Параметры.Вставить("infobase", ИдентификаторИнформационнойБазы); + ЗаполнитьПараметрыАутентификацииВИБ(ПараметрыАдминистрированияИБ, Параметры); + + Соединения = ПолучитьСоединения(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, ПараметрыАдминистрированияИБ, Фильтр, Ложь); + Для Каждого Соединение Из Соединения Цикл + + Попытка + + Параметры.Вставить("process", Соединение.Получить("process")); + Параметры.Вставить("connection", Соединение.Получить("connection")); + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + + Исключение + + // Соединение могло уже завершиться к моменту вызова rac connection disconnect. + + ОтборСоединений = Новый Структура(); + ОтборСоединений.Вставить("Номер", Соединение.Получить("conn-id")); + + ОписанияСоединений = ПолучитьСоединения( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИдентификаторИнформационнойБазы, + ПараметрыАдминистрированияИБ, + ОтборСоединений, + Истина); + + Если ОписанияСоединений.Количество() > 0 Тогда + ВызватьИсключение; + Иначе + Продолжить; + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы. Если +// для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "security-profile-name"); + + Результат = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь).ИмяПрофиля; + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Результат; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы в качестве профиля +// безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "safe-mode-security-profile-name"); + + Результат = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь).ИмяПрофиля; + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Результат; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "security-profile-name"); + + Значения = Новый Структура(); + Значения.Вставить("ИмяПрофиля", ИмяПрофиля); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Значения); + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "safe-mode-security-profile-name"); + + Значения = Новый Структура(); + Значения.Вставить("ИмяПрофиля", ИмяПрофиля); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Значения); + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Возврат (ПрофилиБезопасности.Количество() = 1); + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Структура, описывающая профиль безопасности, описание - см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() <> 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирован профиль безопасности %2!'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + Результат = ПрофилиБезопасности[0]; + Результат = ПреобразоватьЗначенияСвойствИспользованияСписковДоступа(Результат); + + // Виртуальный каталоги + Результат.Вставить("ВиртуальныеКаталоги", + ПолучитьВиртуальныеКаталоги(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Разрешенные COM-классы + Результат.Вставить("COMКлассы", + ПолучитьРазрешенныеCOMКлассы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Внешние компоненты + Результат.Вставить("ВнешниеКомпоненты", + ПолучитьРазрешенныеВнешниеКомпоненты(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Внешние модули + Результат.Вставить("ВнешниеМодули", + ПолучитьРазрешенныеВнешниеМодули(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Приложения ОС + Результат.Вставить("ПриложенияОС", + ПолучитьРазрешенныеПриложенияОС(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Интернет-ресурсы + Результат.Вставить("ИнтернетРесурсы", + ПолучитьРазрешенныеИнтернетРесурсы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + Возврат Результат; + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая свойства создаваемого профиля безопасности, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() = 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 уже зарегистрирован профиль безопасности %2!'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + ОбновитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, СвойстваПрофиляБезопасности, Ложь); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() <> 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирован профиль безопасности %2!'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + ОбновитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, СвойстваПрофиляБезопасности, Истина); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% remove --name=%name%"; + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + Параметры.Вставить("name", ИмяПрофиля); + + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает описания кластеров серверов. +// +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации кластеров серверов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьКластеры(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) + + Шаблон = "%rac cluster list"; + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера); + Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Возврат Результат; + +КонецФункции + +// Возвращает внутренний идентификатор кластера серверов. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение - Строка, внутренний идентификатор кластера серверов. +// +Функция ПолучитьКластер(Знач ПараметрыАдминистрированияКластера) + + Фильтр = Новый Структура("port", ПараметрыАдминистрированияКластера.ПортКластера); + + Кластеры = ПолучитьКластеры(ПараметрыАдминистрированияКластера, Фильтр); + + Если Кластеры.Количество() = 1 Тогда + Возврат Кластеры[0].Получить("cluster"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не обнаружен кластер серверов с портом %1'"), ПараметрыАдминистрированияКластера.ПортКластера); + КонецЕсли; + +КонецФункции + +// Возвращает описания рабочих серверов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации рабочих серверов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРабочиеСерверы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Фильтр = Неопределено) + + Шаблон = "%rac server --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Возврат Результат; + +КонецФункции + +// Возвращает описания информационных баз. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации информационных баз. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьИнформационныеБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Фильтр = Неопределено) + + Шаблон = "%rac infobase summary --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Возврат Результат; + +КонецФункции + +// Возвращает внутренний идентификатор информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Строка, внутренний идентификатор кластера серверов. +// +Функция ПолучитьИнформационнуюБазу(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) + + Фильтр = Новый Структура("name", ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + + ИнформационныеБазы = ПолучитьИнформационныеБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ИнформационныеБазы.Количество() = 1 Тогда + Возврат ИнформационныеБазы[0].Получить("infobase"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирована информационная база %2!'"), ИдентификаторКластера, ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + КонецЕсли; + +КонецФункции + +// Возвращает описания рабочих процессов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации рабочих процессов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРабочиеПроцессы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Фильтр = Неопределено) + + Шаблон = "%rac process --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list --server=%server%"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + Результат = Новый Массив(); + РабочиеСерверы = ПолучитьРабочиеСерверы(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + Для Каждого РабочийСервер Из РабочиеСерверы Цикл + Параметры.Вставить("server", РабочийСервер.Получить("server")); + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + РабочиеПроцессыСервера = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Для Каждого РабочийПроцесс Из РабочиеПроцессыСервера Цикл + Если РабочийПроцесс.Получить("running") Тогда + Результат.Добавить(РабочийПроцесс); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИдентификаторИнформационнойБазы - Строка, внутренний идентификатор информационной базы, +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство, +// ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без +// использования. +// +// Возвращаемое значение: Массив(Структура), Массив(Соответствие) - массив структур, описывающих свойства сеансов (описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()) или массив соответствий, описывающих свойства сеансов в нотации +// утилиты rac (при ИспользоватьСловарь = Ложь). +// +Функция ПолучитьСеансы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Фильтр = Неопределено, Знач ИспользоватьСловарь = Истина) Экспорт + + Шаблон = "%rac session --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list --infobase=%infobase%"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + Параметры.Вставить("infobase", ИдентификаторИнформационнойБазы); + + Если ИспользоватьСловарь Тогда + Словарь = СловарьСвойствСеансов(); + Иначе + Словарь = Неопределено; + Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСеансов()); + КонецЕсли; + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Словарь, Фильтр); + Возврат Результат; + +КонецФункции + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИдентификаторИнформационнойБазы - Строка, внутренний идентификатор информационной базы, +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Фильтр - Описание условия фильтрации соединения, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство, +// ИспользоватьСловарь - Булево, если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без +// использования. +// +// Возвращаемое значение: Массив(Структура), Массив(Соответствие) - массив структур, описывающих свойства соединений (описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()) или массив соответствий, описывающих свойства соединений в нотации +// утилиты rac (при ИспользоватьСловарь = Ложь). +// +Функция ПолучитьСоединения(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач ПараметрыАдминистрированияИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Ложь) Экспорт + + Шаблон = "%rac connection --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list --process=%process% --infobase=%infobase% --infobase-user=%?infobase-user% --infobase-pwd=%?infobase-pwd%"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + Параметры.Вставить("infobase", ИдентификаторИнформационнойБазы); + ЗаполнитьПараметрыАутентификацииВИБ(ПараметрыАдминистрированияИнформационнойБазы, Параметры); + + Если ИспользоватьСловарь Тогда + Словарь = СловарьСвойствСоединений(); + Иначе + Словарь = Неопределено; + Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСоединений()); + КонецЕсли; + + Результат = Новый Массив(); + РабочиеПроцессы = ПолучитьРабочиеПроцессы(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + + Для Каждого РабочийПроцесс Из РабочиеПроцессы Цикл + + Параметры.Вставить("process", РабочийПроцесс.Получить("process")); + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + СоединенияРабочегоПроцесса = ПарсерВывода(ПотокВывода, Словарь, Фильтр); + Для Каждого Соединение Из СоединенияРабочегоПроцесса Цикл + Если Не ИспользоватьСловарь Тогда + Соединение.Вставить("process", РабочийПроцесс.Получить("process")); + КонецЕсли; + Результат.Добавить(Соединение); + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает значения свойств информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Словарь - Структура, соответсвие имен свойств для API и потока вывода утилиты rac. +// +// Возвращаемое значение: Структура - описание информационной базы, составленное по переданному словарю. +// +Функция СвойстваИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Словарь) + + Шаблон = "%rac infobase --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% info --infobase=%infobase% --infobase-user=%?infobase-user% --infobase-pwd=%?infobase-pwd%"; + + Параметры = Новый Соответствие(); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Параметры.Вставить("infobase", ИдентификаторИнформационнойБазы); + ЗаполнитьПараметрыАутентификацииВИБ(ПараметрыАдминистрированияИБ, Параметры); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Словарь); + Возврат Результат[0]; + +КонецФункции + +// Устанавливает значения свойств информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Словарь - Структура, соответсвие имен свойств для API и потока вывода утилиты rac. +// ЗначенияСвойств - Структура, устанавливаемые значения свойств информационной базы: +// Ключ - имя свойства в нотации API, +// Значение - устанавливаемое для свойства значение. +// +Процедура УстановитьСвойстваИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Словарь, Знач ЗначенияСвойств) + + Шаблон = "%rac infobase --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% update --infobase=%infobase% --infobase-user=%?infobase-user% --infobase-pwd=%?infobase-pwd%"; + + Параметры = Новый Соответствие(); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ИдентификаторИнформационнойБазы = ПолучитьИнформационнуюБазу(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Параметры.Вставить("infobase", ИдентификаторИнформационнойБазы); + ЗаполнитьПараметрыАутентификацииВИБ(ПараметрыАдминистрированияИБ, Параметры); + + ЗаполнитьПараметрыПоСловарю(Словарь, ЗначенияСвойств, Параметры, Шаблон); + + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + +КонецПроцедуры + +// Возвращает описания профилей безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации профилей безопасности. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьПрофилиБезопасности(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, СловарьСвойствПрофиляБезопасности(), Фильтр); + Возврат Результат; + +КонецФункции + +// Возвращает описания виртуальных каталогов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации виртуальных каталогов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьВиртуальныеКаталоги(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "directory", // Не локализуется + СловарьСвойствВиртуальногоКаталога()); + +КонецФункции + +// Возвращает описания COM-классов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации COM-классов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРазрешенныеCOMКлассы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "com", // Не локализуется + СловарьСвойствCOMКласса()); + +КонецФункции + +// Возвращает описания внешних компонент. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации внешних компонент. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРазрешенныеВнешниеКомпоненты(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "addin", // Не локализуется + СловарьСвойствВнешнейКомпоненты()); + +КонецФункции + +// Возвращает описания внешних модулей. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации внешних модулей. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРазрешенныеВнешниеМодули(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "module", // Не локализуется + СловарьСвойствВнешнегоМодуля()); + +КонецФункции + +// Возвращает описания приложений ОС. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации приложений ОС. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРазрешенныеПриложенияОС(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "app", // Не локализуется + СловарьСвойствПриложенияОС()); + +КонецФункции + +// Возвращает описания Интернет-ресурсов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// Фильтр - Структура, параметры фильтрации Интернет-ресурсов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРазрешенныеИнтернетРесурсы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат ПолучитьСписокКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "inet", // Не локализуется + СловарьСвойствИнтернетРесурса()); + +КонецФункции + +// Возвращает описания элементов списка контроля доступа. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// ИмяСписка - Строка, имя списка контроля доступа (acl) в нотации утилиты rac, +// Словарь - Структура, соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании, +// Фильтр - Структура, параметры фильтрации элементов списка контроля доступа. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьСписокКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач Фильтр = Неопределено) + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% acl --name=%name% directory list"; + Шаблон = СтрЗаменить(Шаблон, "directory", ИмяСписка); + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + Параметры.Вставить("name", ИмяПрофиля); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Словарь, Фильтр); + Возврат Результат; + +КонецФункции + +// Обновляет свойства профиля безопасности (включая обновление использования и состава acl'ей). +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// ОчиститьСпискиКонтроляДоступа - Булево, флаг предварительной очистки текущего содержимого acl'ей. +// +Процедура ОбновитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности, Знач ОчиститьСпискиКонтроляДоступа) + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% update "; + + Параметры = Новый Соответствие(); + + ИдентификаторКластера = ПолучитьКластер(ПараметрыАдминистрированияКластера); + Параметры.Вставить("cluster", ИдентификаторКластера); + + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + ЗаполнитьПараметрыПоСловарю(СловарьСвойствПрофиляБезопасности(Ложь), СвойстваПрофиляБезопасности, Параметры, Шаблон); + + ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + + СловарьСвойствИспользованияСписковКонтроляДоступа = СловарьСвойствИспользованияСписокКонтроляДоступа(); + Для Каждого ФрагментСловаря Из СловарьСвойствИспользованияСписковКонтроляДоступа Цикл + УстановитьИспользованиеСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ФрагментСловаря.Значение, Не СвойстваПрофиляБезопасности[ФрагментСловаря.Ключ]); + КонецЦикла; + + // Виртуальный каталоги + ИмяСписка = "directory"; + ТекущийСловарь = СловарьСвойствВиртуальногоКаталога(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеВиртуальныеКаталоги = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемыйВиртуальныйКаталог Из УдаляемыеВиртуальныеКаталоги Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемыйВиртуальныйКаталог.ЛогическийURL); + КонецЦикла; + КонецЕсли; + СоздаваемыеВиртуальныеКаталоги = СвойстваПрофиляБезопасности.ВиртуальныеКаталоги; + Для Каждого СоздаваемыйВиртуальныйКаталог Из СоздаваемыеВиртуальныеКаталоги Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемыйВиртуальныйКаталог); + КонецЦикла; + + // Разрешенные COM-классы + ИмяСписка = "com"; + ТекущийСловарь = СловарьСвойствCOMКласса(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеCOMКлассы = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемыйCOMКласс Из УдаляемыеCOMКлассы Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемыйCOMКласс.Имя); + КонецЦикла; + КонецЕсли; + СоздаваемыеCOMКлассы = СвойстваПрофиляБезопасности.COMКлассы; + Для Каждого СоздаваемыйCOMКласс Из СоздаваемыеCOMКлассы Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемыйCOMКласс); + КонецЦикла; + + // Внешние компоненты + ИмяСписка = "addin"; + ТекущийСловарь = СловарьСвойствВнешнейКомпоненты(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеВнешниеКомпоненты = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемыйВнешнийКомпонент Из УдаляемыеВнешниеКомпоненты Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемыйВнешнийКомпонент.Имя); + КонецЦикла; + КонецЕсли; + СоздаваемыеВнешниеКомпоненты = СвойстваПрофиляБезопасности.ВнешниеКомпоненты; + Для Каждого СоздаваемыйВнешнийКомпонент Из СоздаваемыеВнешниеКомпоненты Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемыйВнешнийКомпонент); + КонецЦикла; + + // Внешние модули + ИмяСписка = "module"; + ТекущийСловарь = СловарьСвойствВнешнегоМодуля(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеВнешниеМодули = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемыйВнешнийМодуль Из УдаляемыеВнешниеМодули Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемыйВнешнийМодуль.Имя); + КонецЦикла; + КонецЕсли; + СоздаваемыеВнешниеМодули = СвойстваПрофиляБезопасности.ВнешниеМодули; + Для Каждого СоздаваемыйВнешнийМодуль Из СоздаваемыеВнешниеМодули Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемыйВнешнийМодуль); + КонецЦикла; + + // Приложения ОС + ИмяСписка = "app"; + ТекущийСловарь = СловарьСвойствПриложенияОС(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеПриложенияОС = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемоеПриложениеОС Из УдаляемыеПриложенияОС Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемоеПриложениеОС.Имя); + КонецЦикла; + КонецЕсли; + СоздаваемыеПриложенияОС = СвойстваПрофиляБезопасности.ПриложенияОС; + Для Каждого СоздаваемоеПриложениеОС Из СоздаваемыеПриложенияОС Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемоеПриложениеОС); + КонецЦикла; + + // Интернет-ресурсы + ИмяСписка = "inet"; + ТекущийСловарь = СловарьСвойствИнтернетРесурса(); + Если ОчиститьСпискиКонтроляДоступа Тогда + УдаляемыеИнтернетРесурсы = ПолучитьСписокКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь); + Для Каждого УдаляемыйИнтернетРесурс Из УдаляемыеИнтернетРесурсы Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, УдаляемыйИнтернетРесурс.Имя); + КонецЦикла; + КонецЕсли; + СоздаваемыеИнтернетРесурсы = СвойстваПрофиляБезопасности.ИнтернетРесурсы; + Для Каждого СоздаваемыйИнтернетРесурс Из СоздаваемыеИнтернетРесурсы Цикл + СоздатьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, ТекущийСловарь, СоздаваемыйИнтернетРесурс); + КонецЦикла; + +КонецПроцедуры + +// Устанавливает использование acl'а для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// ИмяСписка - Строка, имя списка контроля доступа (acl) в нотации утилиты rac, +// Использование - Булево, флаг использования acl'a. +// +Процедура УстановитьИспользованиеСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Использование) + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% acl --name=%name% directory --access=%access%"; + Шаблон = СтрЗаменить(Шаблон, "directory", ИмяСписка); + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + Параметры.Вставить("name", ИмяПрофиля); + Если Использование Тогда + Параметры.Вставить("access", "list"); + Иначе + Параметры.Вставить("access", "full"); + КонецЕсли; + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + +КонецПроцедуры + +// Удаляет элемент acl'a для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// ИмяСписка - Строка, имя списка контроля доступа (acl) в нотации утилиты rac, +// КлючЭлемента = Строка, значением ключевого свойства элемента acl'a. +// +Процедура УдалитьЭлементСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач КлючЭлемента) + + КлючСписка = КлючиСписковКонтроляДоступа()[ИмяСписка]; + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% acl --name=%name% directory remove --key=%key%"; + Шаблон = СтрЗаменить(Шаблон, "directory", ИмяСписка); + Шаблон = СтрЗаменить(Шаблон, "key", КлючСписка); + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + Параметры.Вставить("name", ИмяПрофиля); + Параметры.Вставить(КлючСписка, КлючЭлемента); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + +КонецПроцедуры + +// Создает элемент acl'a для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, +// ИмяСписка - Строка, имя списка контроля доступа (acl) в нотации утилиты rac, +// Словарь - Структура, соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании, +// СвойстваЭлемента - Структура, значения свойств элемента списка контроля доступа. +// +Процедура СоздатьЭлементСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач СвойстваЭлемента) + + Шаблон = "%rac profile --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% acl --name=%profile_name% directory update"; + Шаблон = СтрЗаменить(Шаблон, "directory", ИмяСписка); + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + Параметры.Вставить("profile_name", ИмяПрофиля); + + ЗаполнитьПараметрыПоСловарю(Словарь, СвойстваЭлемента, Параметры, Шаблон); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + +КонецПроцедуры + +// Выполняет преобразование значений свойств использования списков контроля доступа (используется +// нестандартное форматирование значений при передаче значений в утилиту rac - Истина="full", Ложь="list"). +// +// Параметры: +// СтруктураОписание - Структура, содержащее описание объекта, полученное из потока вывода +// утилиты rac. +// +// Возвращаемое значение: Структура, в которой значения "full" и "list" преобразованы в Истина и Ложь. +// +Функция ПреобразоватьЗначенияСвойствИспользованияСписковДоступа(Знач СтруктураОписание) + + Словарь = СловарьСвойствИспользованияСписокКонтроляДоступа(); + + Результат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураОписание Цикл + + Если Словарь.Свойство(КлючИЗначение.Ключ) Тогда + + Если КлючИЗначение.Значение = "list" Тогда + + Значение = Ложь; + + ИначеЕсли КлючИЗначение.Значение = "full" Тогда + + Значение = Истина; + + КонецЕсли; + + Результат.Вставить(КлючИЗначение.Ключ, Значение); + + Иначе + + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Преобразует значение встроенного языка к нотации консольного клиента сервера +// администрирования +// +// Параметры: +// Значение - произвольный, значение, которое необходимо преобразовать +// +// Возвращаемое значение: +// Строка, значение, приведенное к нотации консольного клиента сервера администрирования +// +Функция ПривестиЗначение(Знач Значение, Знач ИмяПараметра = "") + + Если ТипЗнч(Значение) = Тип("Дата") Тогда + Возврат XMLСтрока(Значение); + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Булево") Тогда + + Если ПустаяСтрока(ИмяПараметра) Тогда + ФорматнаяСтрока = "БЛ=off; БИ=on"; + Иначе + ФорматнаяСтрока = СловарьФорматированияБулевыхСвойств()[ИмяПараметра]; + КонецЕсли; + + Возврат Формат(Значение, ФорматнаяСтрока); + + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Число") Тогда + Возврат Формат(Значение, "ЧРД=,; ЧН=0; ЧГ=0; ЧО=1"); + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Строка") Тогда + Если Найти(Значение, """") > 0 Или Найти(Значение, " ") > 0 Или Найти(Значение, "-") > 0 Или Найти(Значение, "!") > 0 Тогда + Возврат """" + СтрЗаменить(Значение, """", """""") + """"; + КонецЕсли; + КонецЕсли; + + Возврат Строка(Значение); + +КонецФункции + +// Преобразует элемент потока вывода, содержащий значение к нотации консольного клиента +// сервера администрирования, к значению встроенного языка +// +// Параметры: +// ЭлементВывода - строка, элемент потока вывода, содержащий значение к нотации консольного клиента +// сервера администрирования +// +// Возвращаемое значение: +// Произвольный, значение встроенного языка +// +Функция ПривестиЭлементВывода(ЭлементВывода) + + Если Лев(ЭлементВывода, 1) = """" Тогда + ЭлементВывода = Прав(ЭлементВывода, СтрДлина(ЭлементВывода) - 1); + КонецЕсли; + + Если Прав(ЭлементВывода, 1) = """" Тогда + ЭлементВывода = Лев(ЭлементВывода, СтрДлина(ЭлементВывода) - 1); + КонецЕсли; + + ЭлементВывода = СтрЗаменить(ЭлементВывода, """""", """"); + + Если ПустаяСтрока(ЭлементВывода) Тогда + Возврат Неопределено; + КонецЕсли; + + Если ЭлементВывода = "on" Или ЭлементВывода = "yes" Тогда + Возврат Истина; + КонецЕсли; + + Если ЭлементВывода = "off" Или ЭлементВывода = "no" Тогда + Возврат Ложь; + КонецЕсли; + + Если СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ЭлементВывода) Тогда + Возврат Число(ЭлементВывода); + КонецЕсли; + + Попытка + Возврат XMLЗначение(Тип("Дата"), ЭлементВывода); + Исключение + // Обработка исключения не требуется. Ожидаемое исключение - ошибка + // преобразования к типу Дата + КонецПопытки; + + Возврат ЭлементВывода; + +КонецФункции + +// Запускает консольный клиент сервера администрирования для выполнения команды. +// +// Параметры: +// Шаблон - строка, шаблон командной строки (уникален для каждой команды) +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ЗначенияПараметров - структура, содержащая значения параметров, которые должны +// быть подставлены в шаблон +// +// Возвращаемое значение: +// Строка, результат перенаправления стандартного потока вывода при запуске утилиты rac. +// +Функция ВыполнитьКоманду(Знач Шаблон, Знач ПараметрыАдминистрированияКластера, Знач ЗначенияПараметров = Неопределено) + + #Если Сервер Тогда + + Если БезопасныйРежим() Тогда + ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме!'"); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера!'"); + КонецЕсли; + + #КонецЕсли + + СистемнаяИнформация = Новый СистемнаяИнформация(); + + // Подставим в командную строку путь до утилиты rac и адрес сервера ras + Клиент = ПолучитьКлиентСервераАдминистрирования(); + ФайлКлиента = Новый Файл(Клиент); + Если Не ФайлКлиента.Существует() Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: файл %1 не найден! + | + |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном + |компьютере клиент сервера администрирования (rac). + |Для его установки: + |- Для компьютеров с ОС Windows требуется перестановить платформу, установив компонент ""Администрирование сервера 1С:Предприятия""; + |- Для компьютеров с ОС Linux требуется установить пакет 1c-enterprise83-server*.'"), + ФайлКлиента.ПолноеИмя); + + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования) Тогда + Сервер = СокрЛП(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования); + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования) Тогда + Сервер = Сервер + ":" + ПривестиЗначение(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования); + Иначе + Сервер = Сервер + ":1545"; + КонецЕсли; + Иначе + Сервер = ""; + КонецЕсли; + + КоманднаяСтрока = """" + Клиент + """ " + СтрЗаменить(Шаблон, "%rac", Сервер); + + // Подставим в командную строку значения параметров + Если ЗначениеЗаполнено(ЗначенияПараметров) Тогда + Для Каждого Параметр Из ЗначенияПараметров Цикл + // Заполним значение параметра + КоманднаяСтрока = СтрЗаменить(КоманднаяСтрока, "%" + Параметр.Ключ + "%", ПривестиЗначение(Параметр.Значение, Параметр.Ключ)); + Если ЗначениеЗаполнено(Параметр.Значение) Тогда + // Это мог быть необязательный параметр + КоманднаяСтрока = СтрЗаменить(КоманднаяСтрока, "%?" + Параметр.Ключ + "%", ПривестиЗначение(Параметр.Значение, Параметр.Ключ)); + Иначе + // Если необязательный параметр не установлен - вообще вырежем его из командной строки + КоманднаяСтрока = СтрЗаменить(КоманднаяСтрока, "--" + Параметр.Ключ + "=%?" + Параметр.Ключ + "%", ""); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Перенаправление stdout и stderr + ФайлПотокаВывода = ПолучитьИмяВременногоФайла("out"); + ФайлПотокаОшибок = ПолучитьИмяВременногоФайла("err"); + КоманднаяСтрока = КоманднаяСтрока + " > """ + ФайлПотокаВывода + """ 2>""" + ФайлПотокаОшибок + """"; + + Если (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + + // Для Windows выполняем запуск через cmd.exe (для перенаправления stdout и stderr) + КоманднаяСтрока = "cmd /c " + " """ + КоманднаяСтрока + """"; + + #Если Сервер Тогда + + ЗапуститьПриложение(КоманднаяСтрока, КаталогИсполняемыхФайловПлатформы(), Истина); + + #Иначе + + // Для Windows-клиента используем Wscript.Shell, чтобы избежать появления окон с cmd + + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.Run(КоманднаяСтрока, 0, Истина); + + #КонецЕсли + + Иначе + + // Для ОС Linux просто запускаем команду + + ЗапуститьПриложение(КоманднаяСтрока, КаталогИсполняемыхФайловПлатформы(), Истина); + + КонецЕсли; + + ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, ПолучитьКодировкуСтандартныхПотоков()); + ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); + + Если ЗначениеЗаполнено(ПотокОшибок) Тогда + + ВызватьИсключение ПотокОшибок; + + Иначе + + ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, ПолучитьКодировкуСтандартныхПотоков()); + ПотокВывода = ЧтениеПотокаВывода.Прочитать(); + Если ПотокВывода = Неопределено Тогда + ПотокВывода = ""; + КонецЕсли; + + Возврат ПотокВывода; + + КонецЕсли; + +КонецФункции + +// Возвращает каталог исполняемых файлов платформы +// +// Возвращаемое значение: +// Строка, каталог исполняемых файлов платформы +// +Функция КаталогИсполняемыхФайловПлатформы() Экспорт + + Результат = КаталогПрограммы(); + СимволСлеша = ПолучитьРазделительПути(); + + Если Не Прав(Результат, 1) = СимволСлеша Тогда + Результат = Результат + СимволСлеша; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает путь к консольному клиенту сервера администрирования +// +// Возвращаемое значение: +// Строка, путь к консольному клиенту сервера администрирования +// +Функция ПолучитьКлиентСервераАдминистрирования() Экспорт + + КаталогЗапуска = КаталогИсполняемыхФайловПлатформы(); + Клиент = КаталогЗапуска + "rac"; + + СисИнфо = Новый СистемнаяИнформация(); + Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + Клиент = Клиент + ".exe"; + КонецЕсли; + + Возврат Клиент; + +КонецФункции + +// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС +// +// Возвращаемое значение: +// КодировкаТекста, кодировка стандартных потоков вывода и ошибок +// +Функция ПолучитьКодировкуСтандартныхПотоков() Экспорт + + СисИнфо = Новый СистемнаяИнформация(); + Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + Кодировка = КодировкаТекста.OEM; + Иначе + Кодировка = КодировкаТекста.Системная; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +// Преобразует перенаправленный поток вывода консольного клиента сервера +// администрирования к массиву соответствий (элементы массива - объекты, +// ключи соответствия - имена свойств, значения соответствия - значения свойств) +// +// Параметры: +// ПотокВывода - Строка, перенаправленный поток вывода, +// Словарь - Структура, выступающая в качестве словаря сопоставления имен свойств объектов +// В нотации утилиты rac и в нотации API, +// Фильтр - Структура, условия фильтрации объектов (только для потоков вывода команд, возвращающих +// коллекции объектов). +// +// Возвращаемое значение: +// Массив(Соответствие) +// +Функция ПарсерВывода(Знач ПотокВывода, Знач Словарь, Знач Фильтр = Неопределено) + + Результат = Новый Массив(); + ЭлементРезультата = Новый Соответствие(); + + РазмерВывода = СтрЧислоСтрок(ПотокВывода); + Для Шаг = 1 По РазмерВывода Цикл + ЭлементПотока = СтрПолучитьСтроку(ПотокВывода, Шаг); + ЭлементПотока = СокрЛП(ЭлементПотока); + ПоложениеРазделителя = Найти(ЭлементПотока, ":"); + Если ПоложениеРазделителя > 0 Тогда + + ИмяСвойства = СокрЛП(Лев(ЭлементПотока, ПоложениеРазделителя - 1)); + ЗначениеСвойства = ПривестиЭлементВывода(СокрЛП(Прав(ЭлементПотока, СтрДлина(ЭлементПотока) - ПоложениеРазделителя))); + ЭлементРезультата.Вставить(ИмяСвойства, ЗначениеСвойства); + + Иначе + + Если ЭлементРезультата.Количество() > 0 Тогда + + ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр); + + ЭлементРезультата = Новый Соответствие(); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ЭлементРезультата.Количество() > 0 Тогда + ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Преобразует элемент перенаправленного потока вывода консольного клиента сервера администрирования +// к соответствию. Ключи соответсвия - имена свойств, значения соответствия - значения свойств. +// +// Параметры: +// ЭлементРезультата - Строка, элемент потока вывода, +// Результата - Массив, в который должен быть добавлен распарсенный объект, +// Словарь - Структура, выступающая в качестве словаря сопоставления имен свойств объектов +// В нотации утилиты rac и в нотации API, +// Фильтр - Структура, условия фильтрации объектов (только для потоков вывода команд, возвращающих +// коллекции объектов). +// +Процедура ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр) + + Если Словарь <> Неопределено Тогда + Объект = РазобратьЭлементВывода(ЭлементРезультата, Словарь); + Иначе + Объект = ЭлементРезультата; + КонецЕсли; + + Если Фильтр <> Неопределено И Не АдминистрированиеКластераКлиентСервер.ПроверитьУсловияФильтра(Объект, Фильтр) Тогда + Возврат; + КонецЕсли; + + Результат.Добавить(Объект); + +КонецПроцедуры + +// Разбирает элемент перенаправленного потока вывода консольного клиента сервера администрирования. +// +// Параметры: +// ЭлементВывода - Строка, элемент перенаправленного потока вывода клиента сервера администрирования, +// Словарь - Структура, выступающая в качестве словаря сопоставления имен свойств объектов +// В нотации утилиты rac и в нотации API. +// +// Возвращаемое значение: Структура, ключи - имена свойств в нотации API, значения - значения свойств +// из перенаправленного потока вывода. +// +Функция РазобратьЭлементВывода(Знач ЭлементВывода, Знач Словарь) + + Результат = Новый Структура(); + + Для Каждого ФрагментСловаря Из Словарь Цикл + + Результат.Вставить(ФрагментСловаря.Ключ, ЭлементВывода[ФрагментСловаря.Значение]); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Добавляет в параметры запуска rac'a параметры аутентификации администратора кластера. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Параметры - Соответствие, формируемое соответствие параметров запуска rac'a. +// +Процедура ЗаполнитьПараметрыАутентификацииВКластере(Знач ПараметрыАдминистрированияКластера, Параметры) + + Параметры.Вставить("cluster-user", ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера); + Параметры.Вставить("cluster-pwd", ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + +КонецПроцедуры + +// Добавляет в параметры запуска rac'a параметры аутентификации администратора информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметры - Соответствие, формируемое соответствие параметров запуска rac'a. +// +Процедура ЗаполнитьПараметрыАутентификацииВИБ(Знач ПараметрыАдминистрированияИБ, Параметры) + + Параметры.Вставить("infobase-user", ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы); + Параметры.Вставить("infobase-pwd", ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + +КонецПроцедуры + +// Дополняет параметры запуска rac'a по словарю. +// +// Параметры: +// Словарь - Структура, выступающая в качестве словаря сопоставления имен свойств объектов в +// нотации rac'a и в нотации API. +// Источник - Структура, ключ - имя свойства в нотации API, значение - значение свойства, +// Параметры - Соответствие, собираемые параметры запуска rac'a, +// Шаблон - Строка, шаблон команды для запуска rac'a. +// +Процедура ЗаполнитьПараметрыПоСловарю(Знач Словарь, Знач Источник, Параметры, Шаблон) + + Для Каждого ФрагментСловаря Из Словарь Цикл + + Шаблон = Шаблон + " --" + ФрагментСловаря.Значение + "=%" + ФрагментСловаря.Значение + "%"; + Параметры.Вставить(ФрагментСловаря.Значение, Источник[ФрагментСловаря.Ключ]); + + КонецЦикла; + +КонецПроцедуры + +// Преобразует фильтр в нотацию утилиты rac. +// +// Параметры: +// Фильтр - Структура, Массив(Структура), фильтр в нотации API, +// Словарь - Структура, описание соответствия имен свойств в нотации API и в нотации утилиты rac. +// +// Возвращаемое значение: Структура, Массив(Структура) - фильтр в нотации утилиты rac. +// +Функция ФильтрВНотациюRac(Знач Фильтр, Знач Словарь) + + Если Фильтр = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если Словарь = Неопределено Тогда + Возврат Фильтр; + КонецЕсли; + + Результат = Новый Массив(); + + Для Каждого Условие Из Фильтр Цикл + + Если ТипЗнч(Условие) = Тип("КлючИЗначение") Тогда + + Результат.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Словарь[Условие.Ключ], ВидСравнения.Равно, Условие.Значение)); + + ИначеЕсли ТипЗнч(Условие) = Тип("Структура") Тогда + + Результат.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Словарь[Условие.Свойство], Условие.ВидСравнения, Условие.Значение)); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает соответствие имен свойств информационной базы, описывающих состояние +// блокировки сеансов и регламентных заданий, для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий() + + Результат = Новый Структура(); + + Результат.Вставить("БлокировкаСеансов", "sessions-deny"); + Результат.Вставить("ДатаС", "denied-from"); + Результат.Вставить("ДатаПо", "denied-to"); + Результат.Вставить("Сообщение", "denied-message"); + Результат.Вставить("КодРазрешения", "permission-code"); + Результат.Вставить("БлокировкаРегламентныхЗаданий", "scheduled-jobs-deny"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствСеансов() + + Результат = Новый Структура(); + + Результат.Вставить("Номер", "session-id"); + Результат.Вставить("ИмяПользователя", "user-name"); + Результат.Вставить("ИмяКлиентскогоКомпьютера", "host"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения", "app-id"); + Результат.Вставить("ИдентификаторЯзыка", "locale"); + Результат.Вставить("МоментСозданияСеанса", "started-at"); + Результат.Вставить("МоментПоследнейАктивностиСеанса", "last-active-at"); + Результат.Вставить("БлокировкаСУБД", "blocked-by-dbms"); + Результат.Вставить("Блокировка", "blocked-by-ls"); + Результат.Вставить("Передано", "bytes-all"); + Результат.Вставить("ПереданоЗа5Минут", "bytes-last-5min"); + Результат.Вставить("СерверныхВызовов", "calls-all"); + Результат.Вставить("СерверныхВызововЗа5Минут", "calls-last-5min"); + Результат.Вставить("ДлительностьСерверныхВызовов", "duration-all"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова", "duration-current"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут", "duration-last-5min"); + Результат.Вставить("ПереданоСУБД", "dbms-bytes-all"); + Результат.Вставить("ПереданоСУБДЗа5Минут", "dbms-bytes-last-5min"); + Результат.Вставить("ДлительностьВызововСУБД", "duration-all-dbms"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД", "duration-current-dbms"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут", "duration-last-3min-dbms"); + Результат.Вставить("СоединениеСУБД", "db-proc-info"); + Результат.Вставить("ВремяСоединенияСУБД", "db-proc-took"); + Результат.Вставить("МоментЗахватаСоединенияСУБД", "db-proc-took-at"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствСоединений() + + Результат = Новый Структура(); + + Результат.Вставить("Номер", "conn-id"); + Результат.Вставить("ИмяПользователя", "user-name"); + Результат.Вставить("ИмяКлиентскогоКомпьютера", "host"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения", "app-id"); + Результат.Вставить("МоментУстановкиСоединения", "connected-at"); + Результат.Вставить("РежимСоединенияСИнформационнойБазой", "ib-conn-mode"); + Результат.Вставить("РежимСоединенияСБазойДанных", "db-conn-mode"); + Результат.Вставить("БлокировкаСУБД", "blocked-by-dbms"); + Результат.Вставить("Передано", "bytes-all"); + Результат.Вставить("ПереданоЗа5Минут", "bytes-last-5min"); + Результат.Вставить("СерверныхВызовов", "calls-all"); + Результат.Вставить("СерверныхВызововЗа5Минут", "calls-last-5min"); + Результат.Вставить("ПереданоСУБД", "dbms-bytes-all"); + Результат.Вставить("ПереданоСУБДЗа5Минут", "dbms-bytes-last-5min"); + Результат.Вставить("СоединениеСУБД", "db-proc-info"); + Результат.Вставить("ВремяСУБД", "db-proc-took"); + Результат.Вставить("МоментЗахватаСоединенияСУБД", "db-proc-took-at"); + Результат.Вставить("ДлительностьСерверныхВызовов", "duration-all"); + Результат.Вставить("ДлительностьВызововСУБД", "duration-all-dbms"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова", "duration-current"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД", "duration-current-dbms"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут", "duration-last-5min"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут", "duration-last-5min-dbms"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствПрофиляБезопасности(Знач ВключаяСвойстваИспользованияСписковКонтроляДоступа = Истина) + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + Результат.Вставить("ПрофильБезопасногоРежима", "config"); + Результат.Вставить("ПолныйДоступКПривилегированномуРежиму", "priv"); + + Если ВключаяСвойстваИспользованияСписковКонтроляДоступа Тогда + + СловарьСвойствИспользованияСписковКонтроляДоступа = СловарьСвойствИспользованияСписокКонтроляДоступа(); + + Для Каждого ФрагментСловаря Из СловарьСвойствИспользованияСписковКонтроляДоступа Цикл + Результат.Вставить(ФрагментСловаря.Ключ, ФрагментСловаря.Значение); + КонецЦикла; + + КонецЕсли; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствИспользованияСписокКонтроляДоступа() + + Результат = Новый Структура(); + + Результат.Вставить("ПолныйДоступКФайловойСистеме", "directory"); + Результат.Вставить("ПолныйДоступКCOMОбъектам", "com"); + Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", "addin"); + Результат.Вставить("ПолныйДоступКВнешнимМодулям", "module"); + Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", "app"); + Результат.Вставить("ПолныйДоступКИнтернетРесурсам", "inet"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВиртуальногоКаталога() + + Результат = Новый Структура(); + + Результат.Вставить("ЛогическийURL", "alias"); + Результат.Вставить("ФизическийURL", "physicalPath"); + + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("ЧтениеДанных", "allowedRead"); + Результат.Вставить("ЗаписьДанных", "allowedWrite"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств COM-класса для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствCOMКласса() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("ФайлМоникер", "fileName"); + Результат.Вставить("CLSID", "id"); + Результат.Вставить("Компьютер", "host"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВнешнейКомпоненты() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("ХэшСумма", "hash"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствВнешнегоМодуля() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("ХэшСумма", "hash"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствПриложенияОС() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("ШаблонСтрокиЗапуска", "wild"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя свойства в API (см. АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса()), +// Значение - Строка, имя свойства объекта. +// +Функция СловарьСвойствИнтернетРесурса() + + Результат = Новый Структура(); + + Результат.Вставить("Имя", "name"); + Результат.Вставить("Описание", "descr"); + + Результат.Вставить("Протокол", "protocol"); + Результат.Вставить("Адрес", "url"); + Результат.Вставить("Порт", "port"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает имена ключевых свойств acl'ей (в нотации утилиты rac). +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// Ключ - Строка, имя acl'a, +// Значение - Строка, имя ключевого свойства. +// +Функция КлючиСписковКонтроляДоступа() + + Результат = Новый Структура(); + + Результат.Вставить("directory", "alias"); + Результат.Вставить("com", "name"); + Результат.Вставить("addin", "name"); + Результат.Вставить("module", "name"); + Результат.Вставить("inet", "name"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает правила форматирования булевых свойств в соответствии с нотацией +// утилиты rac. +// +// Возвращаемое значение: ФиксированноеСоответствие: +// Ключ - Строка, имя свойства, +// Значение - Строка, форматная строка для значений свойства. +// +Функция СловарьФорматированияБулевыхСвойств() + + ФорматOnOff = "БЛ=off; БИ=on"; + ФорматYesNo = "БЛ=no; БИ=yes"; + + Результат = Новый Соответствие(); + + // Свойства блокировки сеансов и заданий + Словарь = СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий(); + Результат.Вставить(Словарь.БлокировкаСеансов, ФорматOnOff); + Результат.Вставить(Словарь.БлокировкаРегламентныхЗаданий, ФорматOnOff); + + // Свойства профиля безопасности + Словарь = СловарьСвойствПрофиляБезопасности(Ложь); + Результат.Вставить(Словарь.ПрофильБезопасногоРежима, ФорматYesNo); + Результат.Вставить(Словарь.ПолныйДоступКПривилегированномуРежиму, ФорматYesNo); + + // Свойства виртуального каталога + Словарь = СловарьСвойствВиртуальногоКаталога(); + Результат.Вставить(Словарь.ЧтениеДанных, ФорматYesNo); + Результат.Вставить(Словарь.ЗаписьДанных, ФорматYesNo); + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo new file mode 100644 index 000000000..a5741dd4e --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + АдминистрированиеКластераRASКлиентСервер + + ru + Администрирование кластера RASКлиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl new file mode 100644 index 000000000..1a9de9ba3 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -0,0 +1,1336 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Клиентские и серверные процедуры и функции общего назначения: +// - Программный интерфейс для администрированию кластера серверов +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область КонструкторыПараметровПрограммногоИнтерфейса + +// Конструктор структуры, описывающей параметры подключения к администрируемому +// кластеру серверов. +// +// Возвращаемое значение: Структура, поля: +// ТипПодключения - Строка, возможные значения: +// "COM" - при подключении к агенту сервера с использованием COM-объекта V8*.ComConnector, +// "RAS" - при подключении к серверу администрирования (ras) с использованием консольного +// клиента сервера администрирования (rac), +// АдресАгентаСервера - Строка, сетевой адрес агента сервера (только при ТипПодключения = "COM"), +// ПортАгентаСервера - Число, сетевой порт агента сервера (только при ТипПодключения = "COM"), +// типичное значение - 1540, +// АдресСервераАдминистрирования - Строка, сетевой адрес сервера администрирования ras (только +// при ТипПодключения = "RAS"), +// ПортСервераАдминистрирования - Число, сетевой порт сервера администрирования ras (только при +// ТипПодключения = "RAS"), типичное значение - 1545, +// ПортКластера - Число, сетевой порт менеджера администрируемого кластера, типичное значение -1541, +// ИмяАдминистратораКластера - Строка, имя учетной записи администратора кластера (если для кластера +// не задан список администраторов - используется пустая строка), +// ПарольАдминистратораКластера - Строка, пароль учетной записи администратора кластера (если +// для кластера не задан список администраторов или для учетной записи не установлен пароль - +// используется пустая строка), +// +Функция ПараметрыАдминистрированияКластера() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ТипПодключения", "COM"); // "COM" или "RAS" + + // Только для "COM" + Результат.Вставить("АдресАгентаСервера", ""); + Результат.Вставить("ПортАгентаСервера", 1540); + + // Только для "RAS" + Результат.Вставить("АдресСервераАдминистрирования", ""); + Результат.Вставить("ПортСервераАдминистрирования", 1545); + + Результат.Вставить("ПортКластера", 1541); + Результат.Вставить("ИмяАдминистратораКластера", ""); + Результат.Вставить("ПарольАдминистратораКластера", ""); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей параметры подключения к администрируемой информационной +// базе кластера. +// +// Возвращаемое значение: Структура, поля: +// ИмяВКластере - Строка, имя администрируемой информационной базы в кластере серверов, +// ИмяАдминистратораИнформационнойБазы - Строка, имя пользователя информационной базы с правами +// администратора (если для информационной базы не задан список пользователей ИБ - используется +// пустая строка), +// ПарольАдминистратораИнформационнойБазы - Строка, пароль пользователя информационной базы +// с правами администратора (если для информационной базы не задан список пользователей ИБ или +// для пользователя ИБ не установлен пароль - используется пустая строка). +// +Функция ПараметрыАдминистрированияИнформационнойБазыКластера() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ИмяВКластере", ""); + Результат.Вставить("ИмяАдминистратораИнформационнойБазы", ""); + Результат.Вставить("ПарольАдминистратораИнформационнойБазы", ""); + + Возврат Результат; + +КонецФункции + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера, +// ПроверятьПараметрыАдминистрированияКластера - Булево, флаг необходимости проверки параметров администрирования кластера, +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево, флаг необходимости проверки параметров администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияКластера = Истина, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + МенеджерАдминистрирования.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, ПроверятьПараметрыАдминистрированияИнформационнойБазы, ПроверятьПараметрыАдминистрированияКластера); + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаСеансовИРегламентныхЗаданий + +// Конструктор структуры, описывающей свойства блокировки сеансов и регламентных заданий +// информационной базы. +// +// Возвращаемое значение: Структура, поля: +// БлокировкаСеансов - Булево, флаг установки блокировки новых сеансов с информационной базой, +// ДатаС - Дата(Дата и время) - момент начала блокировки новых сеансов с информационной базой, +// ДатаПо - Дата(Дата и время) - момент окончания блокировки новых сеансов с информационной базой, +// Сообщение - Строка, сообщение, отображаемое пользователю при попытке установки нового сеанса +// с информационной базой при установленной блокировке новых сеансов, +// КодРазрешения - Строка, код обхода блокировки новых сеансов с информационной базой, +// БлокировкаРегламентныхЗаданий - Булево, флаг блокировки выполнения регламентных заданий +// информационной базы. +// +Функция СвойстваБлокировкиСеансовИРегламентныхЗаданий() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("БлокировкаСеансов"); + Результат.Вставить("ДатаС"); + Результат.Вставить("ДатаПо"); + Результат.Вставить("Сообщение"); + Результат.Вставить("КодРазрешения"); + Результат.Вставить("БлокировкаРегламентныхЗаданий"); + + Возврат Результат; + +КонецФункции + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Результат = МенеджерАдминистрирования.БлокировкаСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + + Если Результат.ДатаС = ПустаяДата() Тогда + Результат.ДатаС = Неопределено; + КонецЕсли; + + Если Результат.ДатаПо = ПустаяДата() Тогда + Результат.ДатаПо = Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодРазрешения) Тогда + Результат.КодРазрешения = ""; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодРазрешения) Тогда + Результат.КодРазрешения = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// СвойстваБлокировкиСеансовИЗаданий - Структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + УстанавливаемаяБлокировка = Новый Структура(); + Для Каждого Свойство Из СвойстваБлокировкиСеансовИЗаданий Цикл + УстанавливаемаяБлокировка.Вставить(Свойство.Ключ, Свойство.Значение); + КонецЦикла; + + Если УстанавливаемаяБлокировка.ДатаС = Неопределено Тогда + УстанавливаемаяБлокировка.ДатаС = ПустаяДата(); + КонецЕсли; + Если УстанавливаемаяБлокировка.ДатаПо = Неопределено Тогда + УстанавливаемаяБлокировка.ДатаПо = ПустаяДата(); + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + УстанавливаемаяБлокировка); + +КонецПроцедуры + +// Снимает блокировку сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +Процедура СнятьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + СвойстваБлокировки = СвойстваБлокировкиСеансовИРегламентныхЗаданий(); + СвойстваБлокировки.БлокировкаСеансов = Ложь; + СвойстваБлокировки.ДатаС = Неопределено; + СвойстваБлокировки.ДатаПо = Неопределено; + СвойстваБлокировки.Сообщение = ""; + СвойстваБлокировки.КодРазрешения = ""; + СвойстваБлокировки.БлокировкаРегламентныхЗаданий = Ложь; + + УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + СвойстваБлокировки); + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: Булево. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Результат = МенеджерАдминистрирования.БлокировкаРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// БлокировкаРегламентныхЗаданий - Булево, флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + БлокировкаРегламентныхЗаданий); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Конструктор структуры, описывающей свойства сеанса информационной базы. +// +// Возвращаемое значение: Структура, поля: +// Номер - Число, номер сеанса. Уникален среди всех сеансов информационной базы, +// ИмяПользователя - Строка, имя аутентифицированного пользователя информационной базы, +// ИмяКлиентскогоКомпьютера - Строка, имя или сетевой адрес компьютера, установившего +// сеанс с информационной базой, +// ИдентификаторКлиентскогоПриложения - Строка, идентификатор приложения, установившего сеанс. +// Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(), +// ИдентификаторЯзыка - Строка, идентификатор языка интерфейса, +// МоментСозданияСеанса - Дата(Дата и время) - момент установки сеанса, +// МоментПоследнейАктивностиСеанса - Дата(Дата и время) - момент последней активности сеанса, +// Блокировка - Число, номер сеанса, который является причиной ожидания управляемой транзакционной +// блокировки, в том случае, если сеанс выполняет установку управляемых транзакционных блокировок +// и ожидает снятия блокировок, установленных другим сеансом (иначе - значение равно 0), +// БлокировкаСУБД - Число, номер сеанса, который является причиной ожидания транзакционной +// блокировки, в том случае, если сеанс исполняет запрос к СУБД и ожидает транзакционную +// блокировку, установленную другим сеансом (иначе - значение равно 0), +// Передано - Число, объем данных, переданных меду сервером 1С:Предприятия и клиентским приложением +// данного сеанса с момента начала сеанса (в байтах), +// ПереданоЗа5Минут - Число, объем данных, переданных между сервером 1С:Предприятия и клиентским +// приложением данного сеанса за последние 5 минут (в байтах), +// СерверныхВызовов - Число, количество вызовов сервера 1С:Предприятия от имена данного сеанса с +// момента начала сеанса, +// СерверныхВызововЗа5Минут - Число, количество вызовов сервера 1С:Предприятия от имени данного сеанса +// за последние 5 минут, +// ДлительностьСерверныхВызовов - Число, время исполнения вызовов сервера 1С:Предприятия от имени +// данного сеанса с момента начала сеанса (в секундах), +// ДлительностьТекущегоСерверногоВызова - Число, интервал времени в миллисекундах, прошедший с момента начала +// обращения, в случае, если сеанс выполняется вызов сервера 1С:Предприятия (иначе - значение равно 0), +// ДлительностьСерверныхВызововЗа5Минут - Число, время исполнения вызовов сервера 1С:Предприятия от имени +// данного сеанса за последние 5 минут (в миллисекундах), +// ПереданоСУБД - Число, количество данных, переданных и полученных от СУБД от имени данного сеанса с +// момента начала сеанса (в байтах), +// ПереданоСУБДЗа5Минут - Число, количество данных, переданных и полученных от СУБД от имени данного сеанса +// за последние 5 минут (в байтах), +// ДлительностьВызововСУБД - Число, время исполнения запросов к СУБД от имени данного сеанса с момента начала +// сеанса (в миллисекундах), +// ДлительностьТекущегоВызоваСУБД - Число, интервал времени в миллисекундах, прошедший с начала выполнения +// запроса в случае, если сеанс выполняет запрос к СУБД (иначе - значение равно 0), +// ДлительностьВызововСУБДЗа5Минут - Число, суммарное время исполнения запросов к СУБД от имени данного сеанса +// за последние 5 минут (в миллисекундах). +// СоединениеСУБД - Строка, номер соединения с СУБД в терминах СУБД в том случае, если в момент получения списка +// сеансов выполняется запрос к СУБД, открыта транзакция или определены временные таблицы (т.е. захвачено +// соединение с СУБД). Если соединение с СУБД не захвачено - значение равно пустой строке, +// ВремяСоединенияСУБД - Число, время соединения с СУБД с момента захвата (в миллисекундах). Если соединение с +// СУБД не захвачено - значение равно 0, +// МоментЗахватаСоединенияСУБД - Дата(Дата и время), момент времени, когда соединение с СУБД было последний раз +// захвачено другим сеансом. +// +Функция СвойстваСеанса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Номер"); + Результат.Вставить("ИмяПользователя"); + Результат.Вставить("ИмяКлиентскогоКомпьютера"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения"); + Результат.Вставить("ИдентификаторЯзыка"); + Результат.Вставить("МоментСозданияСеанса"); + Результат.Вставить("МоментПоследнейАктивностиСеанса"); + Результат.Вставить("Блокировка"); + Результат.Вставить("БлокировкаСУБД"); + Результат.Вставить("Передано"); + Результат.Вставить("ПереданоЗа5Минут"); + Результат.Вставить("СерверныхВызовов"); + Результат.Вставить("СерверныхВызововЗа5Минут"); + Результат.Вставить("ДлительностьСерверныхВызовов"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут"); + Результат.Вставить("ПереданоСУБД"); + Результат.Вставить("ПереданоСУБДЗа5Минут"); + Результат.Вставить("ДлительностьВызововСУБД"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут"); + Результат.Вставить("СоединениеСУБД"); + Результат.Вставить("ВремяСоединенияСУБД"); + Результат.Вставить("МоментЗахватаСоединенияСУБД"); + + Возврат Результат; + +КонецФункции + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства сеансов. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСеанса(). +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СеансыИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Описание условия фильтрации сеансов, которые требуется удалить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УдалитьСеансыИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Конструктор структуры, описывающей свойства соединения с информационной базой. +// +// Возвращаемое значение: Структура, поля: +// Номер - Число, номер соединения с информационной базой, +// ИмяПользователя - Строка, имя пользователя 1С:Предприятия, подсоединенного к информационной базе, +// ИмяКлиентскогоКомпьютера - Строка, имя компьютера, с которого установлено соединение, +// ИдентификаторКлиентскогоПриложения - Строка, идентификатор приложения, установившего соединение. +// Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(), +// МоментУстановкиСоединения - Дата(Дата и время), момент установки соединения, +// РежимСоединенияСИнформационнойБазой - Число, режим соединения с информационной базой (0 - +// разделяемый, 1 - монопольный), +// РежимСоединенияСБазойДанных - Число, режим соединения с базой данных (0 - соединение не установлено, +// 1 - разделяемый, 2 - монопольный), +// БлокировкаСУБД - Число, идентификатор соединения, блокирующего работу данного соединения в СУБД, +// Передано - Число, объем данных, полученных и отправленных соединением, +// ПереданоЗа5Минут - Число, объем данных, полученных и отправленных соединением за последние 5 минут, +// СерверныхВызовов - Число, количество серверных вызовов, +// СерверныхВызововЗа5Минут - Число, количество серверных вызовов соединения за последние 5 минут, +// ПереданоСУБД - Число, объем данных, переданных между сервером 1С:Предприятия и сервером баз данных, +// с момента установки данного соединения, +// ПереданоСУБДЗа5Минут - Число, объем данных, переданных между сервером 1С:Предприятия и сервером баз +// данных за последние 5 минут, +// СоединениеСУБД - Строка, идентификатор процесса соединения с СУБД (если на момент получения списка +// соединений данное соединение выполняло обращение к серверу СУБД, в противном случае - значение равно пустой +// строке). Идентификатор возвращается в терминах сервера СУБД. +// ВремяСУБД - Число, время в секундах, в течении которого выполняется обращение к серверу СУБД (если на момент +// получения списка соединений данное соединение выполняло обращение к серверу СУБД, в противном случае - значение +// равно 0), +// МоментЗахватаСоединенияСУБД - Дата(Дата и время) - момент последнего захвата соединения с сервером СУБД, +// ДлительностьСерверныхВызовов - Число, длительность всех серверных вызовов соединения, +// ДлительностьВызововСУБД - Число, время вызовов СУБД, инициированных соединением, +// ДлительностьТекущегоСерверногоВызова - Число, длительность текущего серверного вызова, +// ДлительностьТекущегоВызоваСУБД - Число, длительность текущего вызова сервера СУБД, +// ДлительностьСерверныхВызововЗа5Минут - Число, длительность серверных вызовов соединения за последние 5 минут, +// ДлительностьВызововСУБДЗа5Минут - Число, длительность вызовов соединения СУБД за последние 5 минут. +// +Функция СвойстваСоединения() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Номер"); + Результат.Вставить("ИмяПользователя"); + Результат.Вставить("ИмяКлиентскогоКомпьютера"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения"); + Результат.Вставить("МоментУстановкиСоединения"); + Результат.Вставить("РежимСоединенияСИнформационнойБазой"); + Результат.Вставить("РежимСоединенияСБазойДанных"); + Результат.Вставить("БлокировкаСУБД"); + Результат.Вставить("Передано"); + Результат.Вставить("ПереданоЗа5Минут"); + Результат.Вставить("СерверныхВызовов"); + Результат.Вставить("СерверныхВызововЗа5Минут"); + Результат.Вставить("ПереданоСУБД"); + Результат.Вставить("ПереданоСУБДЗа5Минут"); + Результат.Вставить("СоединениеСУБД"); + Результат.Вставить("ВремяСУБД"); + Результат.Вставить("МоментЗахватаСоединенияСУБД"); + Результат.Вставить("ДлительностьСерверныхВызовов"); + Результат.Вставить("ДлительностьВызововСУБД"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут"); + + Возврат Результат; + +КонецФункции + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Описание условия фильтрации соединения, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СоединенияСИнформационнойБазой( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Описание условия фильтрации соединений, которые требуется завершить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации разрываемых соединений. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.РазорватьСоединенияСИнформационнойБазой( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы. Если +// для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: Строка, имя профиля безопасности, назначенного для информационной базы в качестве профиля +// безопасности безопасного режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач ИмяПрофиля = "") Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьПрофильБезопасностиИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + ИмяПрофиля); + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// ИмяПрофиля - Строка, имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач ИмяПрофиля = "") Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + ИмяПрофиля); + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиСуществует( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецФункции + +// Конструктор структуры, описывающей свойства профиля безопасности +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя профиля безопасности, +// Описание - Строка, описание профиля безопасности, +// ПрофильБезопасногоРежима - Булево, определяет возможность использования профиля безопасности +// в качестве профиля безопасности безопасного режима (как при указании в качестве профиля +// безопасного режима для информационной базы, так и при вызове +// УстановитьБезопасныйРежим(<Имя профиля>) из кода конфигурации, +// ПолныйДоступКПривилегированномуРежиму - Булево, определяет возможность установки +// привилегированного режима из безопасного режима данного профиля безопасности, +// ПолныйДоступКФайловойСистеме - Булево, определяет наличие ограничений на доступ к файловой +// системе. При установке значения равным Ложь, доступ будет предоставлен только к каталогам файловой +// системы, перечисленным в свойстве ВиртуальныеКаталоги, +// ПолныйДоступКCOMОбъектам - Булево, определяет наличие ограничений на доступ к использованию +// COMОбъектов. При установке значения равным Ложь, доступ будет предоставлен только к COM-классам, +// перечисленным в свойстве COMКлассы, +// ПолныйДоступКВнешнимКомпонентам - Булево, определяет наличие ограничений на доступ к использованию +// внешних компонент. При установке значения равным Ложь, доступ будет предоставлен только к внешним +// компонентам, перечисленным в свойстве ВнешниеКомпоненты, +// ПолныйДоступКВнешнимМодулям - Булево, определяет наличие ограничений на доступ к использованию +// внешних модулей (внешние отчеты и обработки, вызовы Выполнить() и Вычислить()) в небезопасном режиме. +// При установке значения равным Ложь, будет предоставлена возможность использовать в небезопасном +// режиме только внешние модули, перечисленные в свойстве ВнешниеМодули, +// ПолныйДоступКПриложениямОперационнойСистемы - Булево, определяет наличие ограничений на доступ к +// использованию приложений операционной системы. При установке значения равным Ложь, будет предоставлена +// возможность использовать только приложения операционной системы, перечисленные в свойстве ПриложенияОС, +// ПолныйДоступКИнтернетРесурсам - Булево, определяет наличие ограничений на доступ к использованию +// Интернет-ресурсов. При установке значения равным Ложь, будет предоставлена возможность использовать +// только Интернет-ресурсы, перечисленные в свойстве ИнтернетРесурсы, +// ВиртуальныеКаталоги - Массив(Структура), массив структур, описывающих виртуальные каталоги, к которых +// предоставляется доступ при установке ПолныйДоступКФайловойСистеме = Ложь. Описания полей структур - +// см. АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога(), +// COMКлассы - Массив(Структура), массив структур, описывающих COM-классы, к которым предоставляется +// доступ при установке ПолныйДоступКCOMОбъектам = Ложь. Описания полей структур - см. +// АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса(), +// ВнешниеКомпоненты - Массив(Структура), массив структур, описывающих внешние компоненты, к которым предоставляется +// доступ при установке ПолныйДоступКВнешнимКомпонентам = Ложь. Описания полей структур - см. +// АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты(), +// ВнешниеМодули - Массив(Структура), массив структур, описывающих внешние модули, к которым предоставляется +// доступ в небезопасном режиме при установке ПолныйДоступКВнешнимМодулям = Ложь. Описания полей структур - см. +// АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля(), +// ПриложенияОС - Массив(Структура), массив структур, описывающих приложения операционной системы, к которым +// предоставляется доступ при установке ПолныйДоступКПриложениямОперационнойСистемы = Ложь. Описания полей +// структур - см. АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС(), +// ИнтернетРесурсы - Массив(Структура), массив структур, описывающих Интернет-ресурсы, к которым предоставляется +// доступ при установке ПолныйДоступКИнтернетРесурсам = Ложь. Описания полей структур - см. +// АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса(). +// +Функция СвойстваПрофиляБезопасности() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя", ""); + Результат.Вставить("Описание", ""); + Результат.Вставить("ПрофильБезопасногоРежима", Ложь); + Результат.Вставить("ПолныйДоступКПривилегированномуРежиму", Ложь); + + Результат.Вставить("ПолныйДоступКФайловойСистеме", Ложь); + Результат.Вставить("ПолныйДоступКCOMОбъектам", Ложь); + Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", Ложь); + Результат.Вставить("ПолныйДоступКВнешнимМодулям", Ложь); + Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", Ложь); + Результат.Вставить("ПолныйДоступКИнтернетРесурсам", Ложь); + + Результат.Вставить("ВиртуальныеКаталоги", Новый Массив()); + Результат.Вставить("COMКлассы", Новый Массив()); + Результат.Вставить("ВнешниеКомпоненты", Новый Массив()); + Результат.Вставить("ВнешниеМодули", Новый Массив()); + Результат.Вставить("ПриложенияОС", Новый Массив()); + Результат.Вставить("ИнтернетРесурсы", Новый Массив()); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства виртуального каталога. +// +// Возвращаемое значение: Структура, поля: +// ЛогическийURL - Строка, логический URL каталога, +// ФизическийURL - Строка, физический URL каталога на сервере для размещения данных +// виртуального каталога. +// Описание - Строка, описание виртуального каталога, +// ЧтениеДанных - Булево, флаг разрешения чтения данных из виртуального каталога, +// ЗаписьДанных - Булево, флаг разрешения записи данных в виртуальный каталог. +// +Функция СвойстваВиртуальногоКаталога() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ЛогическийURL"); + Результат.Вставить("ФизическийURL"); + + Результат.Вставить("Описание"); + + Результат.Вставить("ЧтениеДанных"); + Результат.Вставить("ЗаписьДанных"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства COM-класса. +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя COM-класса, используется в качестве ключа при поиске, +// Описание - Строка, описание COM-класса, +// ФайлМоникер - Строка, имя файла, по которому создается объект методом глобального контекста +// ПолучитьCOMОбъект() с пустым значением второго параметра, +// CLSID - Строка, представление идентификатора COM-класса в формате системного реестра MS Windows +// без фигурных скобок, по которому он может быть создан операционной системой, +// Компьютер - Строка, имя компьютера, на котором может быть создан COM-объект. +// +Функция СвойстваCOMКласса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ФайлМоникер"); + Результат.Вставить("CLSID"); + Результат.Вставить("Компьютер"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства внешней компоненты. +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя внешней компоненты, используется в качестве ключа для поиска, +// Описание - Строка, описание внешней компоненты, +// ХэшСумма - Строка, контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом +// SHA-1 и преобразованная к строке base64. +// +Функция СвойстваВнешнейКомпоненты() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ХэшСумма"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства внешнего модуля. +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя внешнего модуля, используется в качестве ключа для поиска, +// Описание - Строка, описание внешнего модуля, +// ХэшСумма - Строка, контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом +// SHA-1 и преобразованная к строке base64. +// +Функция СвойстваВнешнегоМодуля() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ХэшСумма"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства приложения операционной системы. +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя приложения операционной системы, используется в качестве ключа для поиска, +// Описание - Строка, описание приложения операционной системы, +// ШаблонСтрокиЗапуска - Строка, шаблон строки запуска приложения (состоит из последовательности +// шаблонных слов, разделенных пробелами). +// +Функция СвойстваПриложенияОС() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ШаблонСтрокиЗапуска"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей Интернет-ресурс. +// +// Возвращаемое значение: Структура, поля: +// Имя - Строка, имя Интернет-ресурса, используется в качестве ключа для поиска, +// Описание - Строка, описание Интернет-ресурса, +// Протокол - Строка, разрешаемый сетевой протокол. Возможные значения: +// HTTP, +// HTTPS, +// FTP, +// FTPS, +// POP3, +// SMTP, +// IMAP, +// Адрес - Строка, сетевой адрес Интернет-ресурса без указания протокола и порта, +// Порт - Число, сетевой порт Интернет-ресурса. +// +Функция СвойстваИнтернетРесурса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("Протокол"); + Результат.Вставить("Адрес"); + Результат.Вставить("Порт"); + + Возврат Результат; + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: Структура, описывающая профиль безопасности, описание - см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасности( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая свойства создаваемого профиля безопасности, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.СоздатьПрофильБезопасности( + ПараметрыАдминистрированияКластера, + СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// СвойстваПрофиляБезопасности - Структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьСвойстваПрофиляБезопасности( + ПараметрыАдминистрированияКластера, + СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка, имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УдалитьПрофильБезопасности( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Проверяет значения свойств объекта на соответствие условиям, указанным в фильтре. +// +// Параметры: +// ПроверяемыйОбъект - Структура: +// Ключ - Имя свойства,значение которого сравнивается с фильтром, +// Значение - Значение свойства, которое сравнивается с фильтром, +// Фильтр - Описание условия фильтрации объектов. +// Варианты: +// 1. Массив структур, описывающих условия фильтра. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация, +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства (см. выше), значение - значение, с которым выполняется +// сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на равенство. +// +// Возвращаемое значение: Булево, Истина если значения свойств объекта удовлетворяют условиям, указанным в фильтре, +// Ложь - если не удовлетворяют. +// +Функция ПроверитьУсловияФильтра(Знач ПроверяемыйОбъект, Знач Фильтр = Неопределено) Экспорт + + Если Фильтр = Неопределено Или Фильтр.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + ВыполненоУсловий = 0; + + Для Каждого Условие Из Фильтр Цикл + + Если ТипЗнч(Условие) = Тип("Структура") Тогда + + Поле = Условие.Свойство; + ТребуемоеЗначение = Условие.Значение; + ВидСравненияЗначений = Условие.ВидСравнения; + + ИначеЕсли ТипЗнч(Условие) = Тип("КлючИЗначение") Тогда + + Поле = Условие.Ключ; + ТребуемоеЗначение = Условие.Значение; + ВидСравненияЗначений = ВидСравнения.Равно; + + Иначе + + ВызватьИсключение НСтр("ru = 'Некорректно задан фильтр!'"); + + КонецЕсли; + + ПроверяемоеЗначение = ПроверяемыйОбъект[Поле]; + УсловиеВыполнено = ПроверитьУсловиеФильтра(ПроверяемоеЗначение, ВидСравненияЗначений, ТребуемоеЗначение); + + Если УсловиеВыполнено Тогда + ВыполненоУсловий = ВыполненоУсловий + 1; + Иначе + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ВыполненоУсловий = Фильтр.Количество(); + +КонецФункции + +// Проверяет значения на соответствие условиям, указанным в фильтре. +// +// Параметры: +// ПроверяемоеЗначение - Число, Строка, Дата, Булево - значение, которое сравнивается с условием, +// ВидСравненияЗначений - значение системного перечисления ВидСравнения, вид сравнения значений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается проверяемое значение. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение. +// +// Возвращаемое значение: Булево, Истина если значение удовлетворяет условиям, Ложь - если не удовлетворяет. +// +Функция ПроверитьУсловиеФильтра(Знач ПроверяемоеЗначение, Знач ВидСравненияЗначений, Знач Значение) + + Если ВидСравненияЗначений = ВидСравнения.Равно Тогда + + Возврат ПроверяемоеЗначение = Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеРавно Тогда + + Возврат ПроверяемоеЗначение <> Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Больше Тогда + + Возврат ПроверяемоеЗначение > Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.БольшеИлиРавно Тогда + + Возврат ПроверяемоеЗначение >= Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Меньше Тогда + + Возврат ПроверяемоеЗначение < Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.МеньшеИлиРавно Тогда + + Возврат ПроверяемоеЗначение <= Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ВСписке Тогда + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + + Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено; + + ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда + + Возврат Значение.Найти(ПроверяемоеЗначение) <> Неопределено; + + КонецЕсли; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеВСписке Тогда + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + + Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) = Неопределено; + + ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда + + Возврат Значение.Найти(ПроверяемоеЗначение) = Неопределено; + + КонецЕсли; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Интервал Тогда + + Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение < Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяГраницы Тогда + + Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение <= Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяНачало Тогда + + Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение < Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяОкончание Тогда + + Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение <= Значение.По; + + КонецЕсли; + +КонецФункции + +// Возвращает общий модуль, реализующий программный интерфейс для администрирования кластера +// серверов, соответствующий типу подключения к администрируемому кластеру серверов. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: ОбщийМодуль. +// +Функция МенеджерАдминистрирования(Знач ПараметрыАдминистрирования) + + Если ПараметрыАдминистрирования.ТипПодключения = "COM" Тогда + + Возврат АдминистрированиеКластераCOMКлиентСервер; + + ИначеЕсли ПараметрыАдминистрирования.ТипПодключения = "RAS" Тогда + + Возврат АдминистрированиеКластераRASКлиентСервер; + + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный тип подключения: %1!'"), ПараметрыАдминистрирования.ТипПодключения); + + КонецЕсли; + +КонецФункции + +// Возвращает дату, соответствующую пустой дате в реестре кластера серверов. +// +// Возвращаемое значение: Дата(Дата и время). +// +Функция ПустаяДата() + + Возврат Дата('00010101'); + +КонецФункции + +#КонецОбласти + + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/АдминистрированиеКластераКлиентСервер.mdo b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/АдминистрированиеКластераКлиентСервер.mdo new file mode 100644 index 000000000..fb4539dec --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/АдминистрированиеКластераКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + АдминистрированиеКластераКлиентСервер + + ru + Администрирование кластера клиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 5634e6651..f490d640a 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -3,16 +3,15 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс -// Возвращает версию адресных объектов, записанную при последнем обновлении. +// Возвращает версии адресных объектов, записанные при последнем обновлении. // Если записи об адресном объекте нет - возвращается дата 01.09.2008 // // Возвращаемое значение -// Массив соответствий: ключ - номер адресного объекта, значение - дата выпуска версии +// СписокЗначений - в ключе помещается номер адресного объекта, в значении - дата выпуска версии. // -Функция ПолучитьВерсииАдресныхОбъектов() Экспорт +Функция ВерсииАдресныхОбъектов() Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ @@ -42,7 +41,7 @@ РезультатЗапроса= Запрос.ВыполнитьПакет(); - АдресныеОбъекты = РезультатЗапроса[0].Выгрузить().ВыгрузитьКолонку("АдресныйОбъект"); + АдресныеОбъекты = РезультатЗапроса[0].Выгрузить().ВыгрузитьКолонку("АдресныйОбъект"); УстановленныеВерсии = РезультатЗапроса[1].Выгрузить(); Результат = Новый СписокЗначений; @@ -91,29 +90,50 @@ АдресныеСведения.Колонки.Добавить("КодУлицыВКоде"); АдресныеСведения.Колонки.Добавить("ПризнакАктуальности"); + ИндексПоКоду = АдресныеСведения.Индексы.Добавить("Код"); + + // Имена файлов приведены к верхнему регистру + ИмяФайлаАльтернативныхНазваний = ? (ЗагрузкаСВеб, "ALTN", "ALTNAMES"); Постфикс = ? (ЗагрузкаСВеб, КодАдресногоОбъекта, ""); + СобытиеЖурналаРегистрации = СобытиеЖурналаРегистрации() + "." + НСтр("ru = 'Загрузка из файлов'"); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начата загрузка адресного классификатора по региону %1 из каталога ""%2""'"), + КодАдресногоОбъекта, ПутьКДаннымНаСервере + )); + ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, - ПутьКДаннымНаСервере + "KLADR" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб); + ПутьКДаннымНаСервере + "KLADR" + Постфикс, АдресныеСведения, АльтернативныеНазвания); ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, - ПутьКДаннымНаСервере + "STREET" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб, - 5); + ПутьКДаннымНаСервере + "STREET" + Постфикс, АдресныеСведения, АльтернативныеНазвания, 5); ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, - ПутьКДаннымНаСервере + "DOMA" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб, - 6); + ПутьКДаннымНаСервере + "DOMA" + Постфикс, АдресныеСведения, АльтернативныеНазвания, 6); ЗаполнитьАльтернативныеНазвания(ПутьКДаннымНаСервере + ИмяФайлаАльтернативныхНазваний + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб); - Если АдресныеСведения.Количество() = 0 Тогда - Возврат; - КонецЕсли; + // Записываем классификатор с выравниванием кода + АдресныеСведения.Индексы.Удалить(ИндексПоКоду); + Для Каждого Элемент Из АдресныеСведения Цикл + Элемент.Код = Лев(Строка(Элемент.Код) + "000000000000000000000", 21); + КонецЦикла; - ЗаписатьКлассификатор(КодАдресногоОбъекта, АдресныеСведения); + НаборАдресныхСведений = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей(); + НаборАдресныхСведений.Отбор.КодАдресногоОбъектаВКоде.Использование = Истина; + НаборАдресныхСведений.Отбор.КодАдресногоОбъектаВКоде.Значение = Число(КодАдресногоОбъекта); + НаборАдресныхСведений.Загрузить(АдресныеСведения); + НаборАдресныхСведений.Записать(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружен адресный классификатор по региону %1, %2 записей.'"), + КодАдресногоОбъекта, АдресныеСведения.Количество() + )); КонецПроцедуры // Процедура очищает адресные сведений по переданным адресным объектам. @@ -276,7 +296,7 @@ Возврат Результат; КонецЕсли; - // 1.Найдем записи по индексу, а также записи родительских элементов, и сохраним всё во временных таблицах + // 1.Найдем записи по индексу, а также записи родительских элементов, и сохраним все во временных таблицах МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; @@ -559,24 +579,24 @@ // По переданным элементам адреса указывает, загружен ли КЛАДР по соответствующим элементам. // // Параметры: -// КодАдресногоЭлемента - Число - код адресного элемента, по которому ищутся компоненты адреса +// КодАдресногоЭлемента - Число - код адресного элемента, по которому ищутся компоненты адреса // Дом - Строка - номер дома, если требуется // Корпус - Строка - номер корпуса, если требуется // Квартира - Строка - номер квартиры, если требуется // // Возвращаемое значение: -// Структура с полями: -// Индекс - Строка - индекс адреса по переданным параметрам -// Регион - Строка - регион по переданному коду -// Район - Строка - район по переданному коду -// Город - Строка - город по переданному коду -// НаселенныйПункт - Строка - населенный пункт по переданному коду -// Улица - Строка - улица по переданному коду -// Дом - Строка - переданный номер дома -// Корпус - Строка - переданный номер корпуса -// Квартира - Строка - переданный номер квартиры +// Структура - с полями: +// * Индекс - Строка - индекс адреса по переданным параметрам +// * Регион - Строка - регион по переданному коду +// * Район - Строка - район по переданному коду +// * Город - Строка - город по переданному коду +// * НаселенныйПункт - Строка - населенный пункт по переданному коду +// * Улица - Строка - улица по переданному коду +// * Дом - Строка - переданный номер дома +// * Корпус - Строка - переданный номер корпуса +// * Квартира - Строка - переданный номер квартиры // -Функция ПолучитьСтруктуруАдреса(КодАдресногоЭлемента, Дом = "", Корпус = "", Квартира = "") Экспорт +Функция СтруктураАдреса(КодАдресногоЭлемента, Дом = "", Корпус = "", Квартира = "") Экспорт СтруктураАдреса = Новый Структура(); ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты(КодАдресногоЭлемента, СтруктураАдреса); @@ -594,7 +614,7 @@ Запрос.УстановитьПараметр("Код", КодАдресногоЭлемента); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда - Индекс = ПолучитьИндекс(СтруктураАдреса.Регион, + Индекс = ИндексАдреса(СтруктураАдреса.Регион, СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица, Дом, Корпус); Иначе @@ -611,7 +631,7 @@ КонецФункции -// Определяет индекс по переданным региону, району, городу, населенному пункту, улице, дому и корпусу +// Определяет индекс по переданным региону, району, городу, населенному пункту, улице, дому и корпусу. // // Параметры: // НазваниеРегиона - название региона с сокращением @@ -626,91 +646,55 @@ // Возвращаемое значение: // Строка - шестизначный почтовый индекс // -Функция ПолучитьИндекс(Знач НазваниеРегиона, Знач НазваниеРайона, Знач НазваниеГорода, Знач НазваниеНаселенногоПункта, Знач НазваниеУлицы, Знач НомерДома, Знач НомерКорпуса, РодительИндекса = Неопределено) Экспорт +Функция ИндексАдреса(Знач НазваниеРегиона, Знач НазваниеРайона, Знач НазваниеГорода, Знач НазваниеНаселенногоПункта, Знач НазваниеУлицы, Знач НомерДома, Знач НомерКорпуса, РодительИндекса = Неопределено) Экспорт РодительИндекса = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); - Индекс = ""; - Загружен = СтруктураЗагруженныхЭлементовАдреса( - НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); - Регион = ПолучитьАдресныйЭлемент(НазваниеРегиона, 1, РодительИндекса); - Если Регион.Код > 0 Тогда - РодительИндекса = Регион; - Если Не ПустаяСтрока(Регион.Индекс) Тогда - Индекс = Регион.Индекс; - КонецЕсли; - // Если регионы загружены, но указанный регион не найден, - // значит он некорректен, возвращаем пустой индекс - ИначеЕсли Регион.Код = 0 И Загружен.Регион И Не ПустаяСтрока(НазваниеРегиона) Тогда + ОбъектАдреса = Новый Структура; + ОбъектАдреса.Вставить("Индекс", "-"); // Заранее некорректный индекс для поиска вариантов + ОбъектАдреса.Вставить("Регион", НазваниеРегиона); + ОбъектАдреса.Вставить("Район", НазваниеРайона); + ОбъектАдреса.Вставить("Город", НазваниеГорода); + ОбъектАдреса.Вставить("НаселенныйПункт", НазваниеНаселенногоПункта); + ОбъектАдреса.Вставить("Улица", НазваниеУлицы); + ОбъектАдреса.Вставить("НомерДома", НомерДома); + ОбъектАдреса.Вставить("НомерКорпуса", НомерКорпуса); + + РезультатАнализа = АнализСоответствияАдресаКлассификатору(ОбъектАдреса); + + Если РезультатАнализа.Варианты.Количество() = 0 Тогда + // Нет ни одного варианта Возврат ""; КонецЕсли; + Вариант = РезультатАнализа.Варианты[0]; - Район = ПолучитьАдресныйЭлемент(НазваниеРайона, 2, РодительИндекса); - Если Район.Код > 0 Тогда - РодительИндекса = Район; - Если Не ПустаяСтрока(Район.Индекс) Тогда - Индекс = Район.Индекс; - КонецЕсли; - // Если районы загружены, но указанный район не найден, - // значит он некорректен, возвращаем пустой индекс - ИначеЕсли Район.Код = 0 И Загружен.Район И Не ПустаяСтрока(НазваниеРайона) Тогда - Возврат ""; + // Восстанавливаем данные по коду-идентификатору в РодительИндекса + Запрос = Новый Запрос( " + |ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ГДЕ + | АдресныйКлассификатор.Код = &Код + |"); + Запрос.УстановитьПараметр("Код", Вариант.Код); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(РодительИндекса, Выборка); КонецЕсли; - Город = ПолучитьАдресныйЭлемент(НазваниеГорода, 3, РодительИндекса); - Если Город.Код > 0 Тогда - РодительИндекса = Город; - Если Не ПустаяСтрока(Город.Индекс) Тогда - Индекс = Город.Индекс; - КонецЕсли; - // Если города загружены, но указанный город не найден, - // значит он некорректен, возвращаем пустой индекс - ИначеЕсли Город.Код = 0 И Загружен.Город И Не ПустаяСтрока(НазваниеГорода) Тогда - Возврат ""; - КонецЕсли; - - НаселенныйПункт = ПолучитьАдресныйЭлемент(НазваниеНаселенногоПункта, 4, РодительИндекса); - Если НаселенныйПункт.Код > 0 Тогда - РодительИндекса = НаселенныйПункт; - Если Не ПустаяСтрока(НаселенныйПункт.Индекс) Тогда - Индекс = НаселенныйПункт.Индекс; - КонецЕсли; - // Если населенные пункты загружены, но указанный населенный пункт не найден, - // значит он некорректен, возвращаем пустой индекс - ИначеЕсли НаселенныйПункт.Код = 0 И Загружен.НаселенныйПункт И Не ПустаяСтрока(НазваниеНаселенногоПункта) Тогда - Возврат ""; - КонецЕсли; - - Улица = ПолучитьАдресныйЭлемент(НазваниеУлицы, 5, РодительИндекса); - Если Улица.Код > 0 Тогда - ИндексУлицы = ПолучитьИндексПоУлицеДомуКорпусу(Улица, НомерДома, НомерКорпуса); - Если Не ПустаяСтрока(ИндексУлицы) Тогда - Индекс = ИндексУлицы; - КонецЕсли; - Иначе - // Если улицы загружены, но указанная улица не найдена, - // значит она некорректна, возвращаем пустой индекс - Если Загружен.Улица И Не ПустаяСтрока(НазваниеУлицы) Тогда - Возврат ""; - Иначе - // Если улица не указана - то пытаемся вместо неё подставить что-нибудь - // из более высокого уровня - Если НаселенныйПункт.Код > 0 Тогда - Улица = НаселенныйПункт; - ИначеЕсли Город.Код > 0 Тогда - Улица = Город; - ИначеЕсли Район.Код > 0 Тогда - Улица = Район; - КонецЕсли; - ИндексДомаКорпуса = ПолучитьИндексПоУлицеДомуКорпусу(Улица, НомерДома, НомерКорпуса); - Если Не ПустаяСтрока(ИндексДомаКорпуса) Тогда - Индекс = ИндексДомаКорпуса; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Индекс; - + Возврат Вариант.Индекс; КонецФункции // Обработчик автоподбора в адресном элементе ввода. @@ -757,18 +741,20 @@ КонецФункции +// Устарело. Необходимо использовать АнализСоответствияАдресаКлассификатору +// // Проверяет соответствие адреса КЛАДР по переданным индексу, региону, району, городу, населенному пункту, // улице, дому и корпусу, при этом выводит все поля по каждому найденному элементу адреса // // Параметры: // УказанныйИндекс - Строка - индекс -// НазваниеРегиона - Строка - название региона(с сокращением) -// НазваниеРайона - Строка - название района(с сокращением) -// НазваниеГорода - Строка - название города(с сокращением) -// НазваниеНаселенногоПункта - Строка - название населенного пункта(с сокращением) -// НазваниеУлицы - Строка - название улицы(с сокращением) -// НомерДома - Строка - номер дома, для которого необходимо получить индекс -// НомерКорпуса - Строка - номер корпуса +// НазваниеРегиона - Строка - название региона (с сокращением) +// НазваниеРайона - Строка - название района (с сокращением) +// НазваниеГорода - Строка - название города (с сокращением) +// НазваниеНаселенногоПункта - Строка - название населенного пункта (с сокращением) +// НазваниеУлицы - Строка - название улицы (с сокращением) +// НомерДома - Строка - номер дома (владения, домовладения), для которого необходимо получить индекс +// НомерКорпуса - Строка - номер корпуса (строения, литеры) // // Возвращаемое значение: // Структура с полями: @@ -780,368 +766,683 @@ // Улица - Структура - структура полей найденной улицы // Дом - Структура - структура полей найденного дома // ЕстьОшибки - Булево - найдены ли ошибки при проверке -// СтруктураОшибок - Структура - структура в которой в качестве ключа выступает название элемента +// СтруктураОшибок - Структура - структура в которой в качестве ключа выступает название элемента (например ) // а в качестве значения - подробный текст ошибки. // Функция ПроверитьСоответствиеАдресаКЛАДРу(Знач УказанныйИндекс = "", Знач НазваниеРегиона = "", Знач НазваниеРайона = "", Знач НазваниеГорода = "", Знач НазваниеНаселенногоПункта = "", Знач НазваниеУлицы = "", Знач НомерДома = "", Знач НомерКорпуса = "") Экспорт - // Проверяем основные адресные элементы - Родитель = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); - Регион = ПолучитьАдресныйЭлемент(НазваниеРегиона, 1, Родитель); - Если Регион.Код > 0 Тогда - Родитель = Регион; - КонецЕсли; - Район = ПолучитьАдресныйЭлемент(НазваниеРайона, 2, Родитель); - Если Район.Код > 0 Тогда - Родитель = Район; - КонецЕсли; - Город = ПолучитьАдресныйЭлемент(НазваниеГорода, 3, Родитель); - Если Город.Код > 0 Тогда - Родитель = Город; - КонецЕсли; - НаселенныйПункт = ПолучитьАдресныйЭлемент(НазваниеНаселенногоПункта, 4, Родитель); - Если НаселенныйПункт.Код > 0 Тогда - Родитель = НаселенныйПункт; - КонецЕсли; - Улица = ПолучитьАдресныйЭлемент(НазваниеУлицы, 5, Родитель); - Если Улица.Код > 0 Тогда - Родитель = Улица; + ОбъектАдреса = Новый Структура; + + ОбъектАдреса.Вставить("Индекс", УказанныйИндекс); + ОбъектАдреса.Вставить("Регион", НазваниеРегиона); + ОбъектАдреса.Вставить("Район", НазваниеРайона); + ОбъектАдреса.Вставить("Город", НазваниеГорода); + ОбъектАдреса.Вставить("НаселенныйПункт", НазваниеНаселенногоПункта); + ОбъектАдреса.Вставить("Улица", НазваниеУлицы); + ОбъектАдреса.Вставить("НомерДома", НомерДома); + ОбъектАдреса.Вставить("НомерКорпуса", НомерКорпуса); + + РезультатАнализа = АнализСоответствияАдресаКлассификатору(ОбъектАдреса); + + ЕстьОшибки = РезультатАнализа.Ошибки.Количество() > 0; + Результат = Новый Структура; + Результат.Вставить("ЕстьОшибки", ЕстьОшибки); + Результат.Вставить("СтруктураОшибок", РезультатАнализа.Ошибки); + + Результат.Вставить("Индекс", ""); + Результат.Вставить("Регион", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + Результат.Вставить("Район", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + Результат.Вставить("Город", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + Результат.Вставить("НаселенныйПункт", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + Результат.Вставить("Улица", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + Результат.Вставить("Дом", АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса() ); + + Если РезультатАнализа.Варианты.Количество() = 0 Тогда + // Нет ни одного варианта + Возврат Результат; КонецЕсли; - Индекс = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); - НомерИндекса = ПолучитьИндекс(НазваниеРегиона, - НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома, НомерКорпуса, Индекс); + // Восстанавливаем данные по коду - идентификатору + Вариант = РезультатАнализа.Варианты.Найти(УказанныйИндекс, "Индекс"); + Если Вариант = Неопределено Тогда + // Нет точного совпадения, вернем первого + Вариант = РезультатАнализа.Варианты[0]; + Результат.Вставить("Индекс", Вариант.Индекс); + Иначе + // Нашли точно + Результат.Вставить("Индекс", УказанныйИндекс); + КонецЕсли; - // Восстанавливаем населенный пункт, который мог потеряться - Если ПустаяСтрока(НазваниеНаселенногоПункта) И НаселенныйПункт.Код = 0 И Улица.Код <> 0 Тогда - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Сокращение КАК Сокращение, - | АдресныйКлассификатор.Индекс КАК Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = &КодНаселенногоПунктаВКоде - | И АдресныйКлассификатор.ТипАдресногоЭлемента = 4 - | - | // Полное использование индекса - | И АдресныйКлассификатор.КодУлицыВКоде = 0 - |"); - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Родитель.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Родитель.КодРайонаВКоде); - Запрос.УстановитьПараметр("КодГородаВКоде", Родитель.КодГородаВКоде); - Запрос.УстановитьПараметр("КодНаселенногоПунктаВКоде", Родитель.КодНаселенногоПунктаВКоде); - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - НаселенныйПункт = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - НаселенныйПункт.Вставить(Колонка.Имя, Выборка[Колонка.Имя]); - КонецЦикла; - КонецЕсли; + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Адрес.Код КАК Код, + | Адрес.Наименование КАК Наименование, + | Адрес.Сокращение КАК Сокращение, + | Адрес.Индекс КАК Индекс, + | Адрес.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | Адрес.КодРайонаВКоде КАК КодРайонаВКоде, + | Адрес.КодГородаВКоде КАК КодГородаВКоде, + | Адрес.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | Адрес.КодУлицыВКоде КАК КодУлицыВКоде, + | Адрес.ПризнакАктуальности КАК ПризнакАктуальности, + | Адрес.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | + | Улица.Код КАК УлицаКод, + | Улица.Наименование КАК УлицаНаименование, + | Улица.Сокращение КАК УлицаСокращение, + | Улица.Индекс КАК УлицаИндекс, + | Улица.КодАдресногоОбъектаВКоде КАК УлицаКодАдресногоОбъектаВКоде, + | Улица.КодРайонаВКоде КАК УлицаКодРайонаВКоде, + | Улица.КодГородаВКоде КАК УлицаКодГородаВКоде, + | Улица.КодНаселенногоПунктаВКоде КАК УлицаКодНаселенногоПунктаВКоде, + | Улица.КодУлицыВКоде КАК УлицаКодУлицыВКоде, + | Улица.ПризнакАктуальности КАК УлицаПризнакАктуальности, + | Улица.ТипАдресногоЭлемента КАК УлицаТипАдресногоЭлемента, + | + | НаселенныйПункт.Код КАК НаселенныйПунктКод, + | НаселенныйПункт.Наименование КАК НаселенныйПунктНаименование, + | НаселенныйПункт.Сокращение КАК НаселенныйПунктСокращение, + | НаселенныйПункт.Индекс КАК НаселенныйПунктИндекс, + | НаселенныйПункт.КодАдресногоОбъектаВКоде КАК НаселенныйПунктКодАдресногоОбъектаВКоде, + | НаселенныйПункт.КодРайонаВКоде КАК НаселенныйПунктКодРайонаВКоде, + | НаселенныйПункт.КодГородаВКоде КАК НаселенныйПунктКодГородаВКоде, + | НаселенныйПункт.КодНаселенногоПунктаВКоде КАК НаселенныйПунктКодНаселенногоПунктаВКоде, + | НаселенныйПункт.КодУлицыВКоде КАК НаселенныйПунктКодУлицыВКоде, + | НаселенныйПункт.ПризнакАктуальности КАК НаселенныйПунктПризнакАктуальности, + | НаселенныйПункт.ТипАдресногоЭлемента КАК НаселенныйПунктТипАдресногоЭлемента, + | + | Город.Код КАК ГородКод, + | Город.Наименование КАК ГородНаименование, + | Город.Сокращение КАК ГородСокращение, + | Город.Индекс КАК ГородИндекс, + | Город.КодАдресногоОбъектаВКоде КАК ГородКодАдресногоОбъектаВКоде, + | Город.КодРайонаВКоде КАК ГородКодРайонаВКоде, + | Город.КодГородаВКоде КАК ГородКодГородаВКоде, + | Город.КодНаселенногоПунктаВКоде КАК ГородКодНаселенногоПунктаВКоде, + | Город.КодУлицыВКоде КАК ГородКодУлицыВКоде, + | Город.ПризнакАктуальности КАК ГородПризнакАктуальности, + | Город.ТипАдресногоЭлемента КАК ГородТипАдресногоЭлемента, + | + | Район.Код КАК РайонКод, + | Район.Наименование КАК РайонНаименование, + | Район.Сокращение КАК РайонСокращение, + | Район.Индекс КАК РайонИндекс, + | Район.КодАдресногоОбъектаВКоде КАК РайонКодАдресногоОбъектаВКоде, + | Район.КодРайонаВКоде КАК РайонКодРайонаВКоде, + | Район.КодГородаВКоде КАК РайонКодГородаВКоде, + | Район.КодНаселенногоПунктаВКоде КАК РайонКодНаселенногоПунктаВКоде, + | Район.КодУлицыВКоде КАК РайонКодУлицыВКоде, + | Район.ПризнакАктуальности КАК РайонПризнакАктуальности, + | Район.ТипАдресногоЭлемента КАК РайонТипАдресногоЭлемента, + | + | Регион.Код КАК РегионКод, + | Регион.Наименование КАК РегионНаименование, + | Регион.Сокращение КАК РегионСокращение, + | Регион.Индекс КАК РегионИндекс, + | Регион.КодАдресногоОбъектаВКоде КАК РегионКодАдресногоОбъектаВКоде, + | Регион.КодРайонаВКоде КАК РегионКодРайонаВКоде, + | Регион.КодГородаВКоде КАК РегионКодГородаВКоде, + | Регион.КодНаселенногоПунктаВКоде КАК РегионКодНаселенногоПунктаВКоде, + | Регион.КодУлицыВКоде КАК РегионКодУлицыВКоде, + | Регион.ПризнакАктуальности КАК РегионПризнакАктуальности, + | Регион.ТипАдресногоЭлемента КАК РегионТипАдресногоЭлемента + | + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК Адрес + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Улица + |ПО + | Улица.ТипАдресногоЭлемента = 5 + | И Улица.КодАдресногоОбъектаВКоде = Адрес.КодАдресногоОбъектаВКоде + | И Улица.КодРайонаВКоде = Адрес.КодРайонаВКоде + | И Улица.КодГородаВКоде = Адрес.КодГородаВКоде + | И Улица.КодНаселенногоПунктаВКоде = Адрес.КодНаселенногоПунктаВКоде + | И Улица.КодУлицыВКоде = Адрес.КодУлицыВКоде + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК НаселенныйПункт + |ПО + | НаселенныйПункт.ТипАдресногоЭлемента = 4 + | И НаселенныйПункт.КодАдресногоОбъектаВКоде = Адрес.КодАдресногоОбъектаВКоде + | И НаселенныйПункт.КодРайонаВКоде = Адрес.КодРайонаВКоде + | И НаселенныйПункт.КодГородаВКоде = Адрес.КодГородаВКоде + | И НаселенныйПункт.КодНаселенногоПунктаВКоде = Адрес.КодНаселенногоПунктаВКоде + | И НаселенныйПункт.КодУлицыВКоде = 0 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Город + |ПО + | Город.ТипАдресногоЭлемента = 3 + | И Город.КодАдресногоОбъектаВКоде = Адрес.КодАдресногоОбъектаВКоде + | И Город.КодРайонаВКоде = Адрес.КодРайонаВКоде + | И Город.КодГородаВКоде = Адрес.КодГородаВКоде + | И Город.КодНаселенногоПунктаВКоде = 0 + | И Город.КодУлицыВКоде = 0 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Район + |ПО + | Район.ТипАдресногоЭлемента = 2 + | И Район.КодАдресногоОбъектаВКоде = Адрес.КодАдресногоОбъектаВКоде + | И Район.КодРайонаВКоде = Адрес.КодРайонаВКоде + | И Район.КодГородаВКоде = 0 + | И Район.КодНаселенногоПунктаВКоде = 0 + | И Район.КодУлицыВКоде = 0 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Регион + |ПО + | Регион.ТипАдресногоЭлемента = 1 + | И Регион.КодАдресногоОбъектаВКоде = Адрес.КодАдресногоОбъектаВКоде + | И Регион.КодРайонаВКоде = 0 + | И Регион.КодГородаВКоде = 0 + | И Регион.КодНаселенногоПунктаВКоде = 0 + | И Регион.КодУлицыВКоде = 0 + | + |ГДЕ + | Адрес.Код = &Код + |"); + Запрос.УстановитьПараметр("Код", Вариант.Код); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.Регион, Выборка, "Регион"); + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.Район, Выборка, "Район"); + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.Город, Выборка, "Город"); + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.НаселенныйПункт, Выборка, "НаселенныйПункт"); + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.Улица, Выборка, "Улица"); + ЗаполнитьСтруктуруАдресаПоВыборке(Результат.Дом, Выборка); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверка адреса с возможно неуникальными полями на каком-то уровне. +// +// Параметры: +// ОбъектАдреса - Структура - Содержит поля адреса: +// * Индекс - Строка - наименование с сокращением части адреса +// * Регион - Строка - наименование с сокращением части адреса +// * Район - Строка - наименование с сокращением части адреса +// * Город - Строка - наименование с сокращением части адреса +// * НаселенныйПункт - Строка - наименование с сокращением части адреса +// * Улица - Строка - наименование с сокращением части адреса, +// * НомерДома - Строка - значение номера дома (совместимость с КЛАДР) +// * НомерКорпуса - Строка - значение номера корпуса (совместимость с КЛАДР) +// +// Возвращаемое значение: +// Структура - Результаты анализа. Содержит поля +// * Ошибки - Структура - Описание ошибок, ключ - идентификатор части адреса (имя поля из ОбъектАдреса), +// значение - текст ошибки. Если нет ошибок, то возвращается пустая структура +// * Варианты - ТаблицаЗначений - Варианты адресных объектов, успешно прошедших проверку. Колонки: +// ** Код - Число - код адресного объекта +// ** Индекс - Строка - почтовый индекс адресного объекта +// +Функция АнализСоответствияАдресаКлассификатору(Знач ОбъектАдреса) Экспорт + Результат = Новый Структура("Варианты, Ошибки", Новый ТаблицаЗначений, Новый Структура); + + ВариантыАдреса = Результат.Варианты; + ВариантыАдреса.Колонки.Добавить("Код", Новый ОписаниеТипов("Число")); + ВариантыАдреса.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Строка")); + ВариантыАдреса.Индексы.Добавить("Код"); + ВариантыАдреса.Индексы.Добавить("Индекс"); + + Ошибки = Результат.Ошибки; + + // Регион должен быть указан всегда, иначе дальше не проверяем + Если ПустаяСтрока(ОбъектАдреса.Регион) Тогда + Ошибки.Вставить("Регион", НСтр("ru = 'Не указан регион адреса.'")); + Возврат Результат; + КонецЕсли; + + // 1. Проверка объекта на присутствие в классификаторе до улицы + + Запрос = Новый Запрос; + + // Регион + ЧастиНазвания = НаименованиеИСокращение(ОбъектАдреса.Регион); + Запрос.УстановитьПараметр("РегионНаименование", ЧастиНазвания.Наименование); + Запрос.УстановитьПараметр("РегионСокращение", ЧастиНазвания.Сокращение); + СтрокаСортировки = ""; + + // Район + РайонУстановлен = Не ПустаяСтрока(ОбъектАдреса.Район); + Если РайонУстановлен Тогда + ЧастиНазвания = НаименованиеИСокращение(ОбъектАдреса.Район); + Запрос.УстановитьПараметр("РайонНаименование", ЧастиНазвания.Наименование); + Запрос.УстановитьПараметр("РайонСокращение", ЧастиНазвания.Сокращение); - КонецЕсли; - - // Восстанавливаем город, который мог потеряться - Если ПустаяСтрока(НазваниеГорода) И Город.Код = 0 И НаселенныйПункт.Код <> 0 Тогда - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Сокращение КАК Сокращение, - | АдресныйКлассификатор.Индекс КАК Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде - | И АдресныйКлассификатор.ТипАдресногоЭлемента = 3 - | - | // Полное использование индекса - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = 0 - | И АдресныйКлассификатор.КодУлицыВКоде = 0 - |"); - - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Родитель.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Родитель.КодРайонаВКоде); - Запрос.УстановитьПараметр("КодГородаВКоде", Родитель.КодГородаВКоде); - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - Город = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Город.Вставить(Колонка.Имя, Выборка[Колонка.Имя]); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - // Восстанавливаем район, который мог потеряться - Если ПустаяСтрока(НазваниеРайона) И Район.Код = 0 И Город.Код <> 0 Тогда - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Сокращение КАК Сокращение, - | АдресныйКлассификатор.Индекс КАК Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.ТипАдресногоЭлемента = 2 - | - | // Полное использование индекса - | И АдресныйКлассификатор.КодГородаВКоде = 0 - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = 0 - | И АдресныйКлассификатор.КодУлицыВКоде = 0 - |"); - - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Родитель.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Родитель.КодРайонаВКоде); - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - Район = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Район.Вставить(Колонка.Имя, Выборка[Колонка.Имя]); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - // Сохраняем в структуру - СтруктураПроверки = Новый Структура; - СтруктураПроверки.Вставить("Регион", Регион); - СтруктураПроверки.Вставить("Район", Район); - СтруктураПроверки.Вставить("Город", Город); - СтруктураПроверки.Вставить("НаселенныйПункт", НаселенныйПункт); - СтруктураПроверки.Вставить("Улица", Улица); - СтруктураПроверки.Вставить("Индекс", Индекс); - - // А теперь записываем ошибки - ЕстьОшибки = Ложь; - СтруктураОшибок = Новый Структура; - Если Не ПустаяСтрока(НазваниеРегиона) И Регион.Код = 0 Тогда - ЕстьОшибки = Истина; - СообщениеОбОшибке = НСтр("ru='Регион ""%НазваниеРегиона%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НазваниеРегиона%", НазваниеРегиона); - СтруктураОшибок.Вставить("Регион", СообщениеОбОшибке); - КонецЕсли; - Если Не ПустаяСтрока(НазваниеРайона) И Район.Код = 0 Тогда - ЕстьОшибки = Истина; - СообщениеОбОшибке = НСтр("ru='Район ""%НазваниеРайона%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НазваниеРайона%", НазваниеРайона); - СтруктураОшибок.Вставить("Район", СообщениеОбОшибке); - КонецЕсли; - Если Не ПустаяСтрока(НазваниеГорода) И Город.Код = 0 Тогда - ЕстьОшибки = Истина; - СообщениеОбОшибке = НСтр("ru='Город ""%НазваниеГорода%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НазваниеГорода%", НазваниеГорода); - СтруктураОшибок.Вставить("Город", СообщениеОбОшибке); - КонецЕсли; - Если Не ПустаяСтрока(НазваниеНаселенногоПункта) И НаселенныйПункт.Код = 0 Тогда - ЕстьОшибки = Истина; - СообщениеОбОшибке = НСтр("ru='Населенный пункт ""%НазваниеНаселенногоПункта%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НазваниеНаселенногоПункта%", НазваниеНаселенногоПункта); - СтруктураОшибок.Вставить("НаселенныйПункт", СообщениеОбОшибке); - КонецЕсли; - Если Не ПустаяСтрока(НазваниеУлицы) И Улица.Код = 0 Тогда - ЕстьОшибки = Истина; - СообщениеОбОшибке = НСтр("ru='Улица ""%НазваниеУлицы%"" не найдена в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НазваниеУлицы%", НазваниеУлицы); - СтруктураОшибок.Вставить("Улица", СообщениеОбОшибке); - КонецЕсли; - - // Теперь проверяем номер дома и корпуса - Если Не (ПустаяСтрока(НомерДома) И ПустаяСтрока(НомерКорпуса)) Тогда - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.Индекс КАК Индекс - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 6 - | И АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = &КодНаселенногоПунктаВКоде - | И АдресныйКлассификатор.КодУлицыВКоде = &КодУлицыВКоде + ТаблицаРайон = " + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Район + |ПО + | Район.Наименование = &РайонНаименование + | И Район.Сокращение = &РайонСокращение + | И Район.ТипАдресногоЭлемента = 2 + | И Район.КодАдресногоОбъектаВКоде = Регион.КодАдресногоОбъектаВКоде + | И Район.КодГородаВКоде = 0 + | И Район.КодНаселенногоПунктаВКоде = 0 + | И Район.КодУлицыВКоде = 0 |"; - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Улица.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Улица.КодРайонаВКоде); - Запрос.УстановитьПараметр("КодГородаВКоде", Улица.КодГородаВКоде); - Запрос.УстановитьПараметр("КодНаселенногоПунктаВКоде", Улица.КодНаселенногоПунктаВКоде); - Запрос.УстановитьПараметр("КодУлицыВКоде", Улица.КодУлицыВКоде); + + СтрокаСортировки = СтрокаСортировки + ", Район.Наименование УБЫВ, Район.Сокращение УБЫВ"; + Иначе + ТаблицаРайон = ""; + КонецЕсли; + + // Город + ГородУстановлен = Не ПустаяСтрока(ОбъектАдреса.Город); + Если ГородУстановлен Тогда + ЧастиНазвания = НаименованиеИСокращение(ОбъектАдреса.Город); + Запрос.УстановитьПараметр("ГородНаименование", ЧастиНазвания.Наименование); + Запрос.УстановитьПараметр("ГородСокращение", ЧастиНазвания.Сокращение); - Выборка = Запрос.Выполнить().Выбрать(); - ЕстьДома = (Выборка.Количество() > 0); - КодДома = 0; - Пока Выборка.Следующий() Цикл + ТаблицаГород = " + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Город + |ПО + | Город.Наименование = &ГородНаименование + | И Город.Сокращение = &ГородСокращение + | И Город.ТипАдресногоЭлемента = 3 + | И Город.КодАдресногоОбъектаВКоде = Регион.КодАдресногоОбъектаВКоде + | И Город.КодРайонаВКоде = " + ?(РайонУстановлен, "Район.КодРайонаВКоде", "0") + " + | И Город.КодНаселенногоПунктаВКоде = 0 + | И Город.КодУлицыВКоде = 0 + |"; - Если НЕ ПустаяСтрока(Выборка.Индекс) Тогда - Интервал = Врег(СокрЛП(Выборка.Наименование)); - - Если НомерДомаВИнтервале(СокрЛП(НомерДома), Интервал) Тогда - КодДома = Выборка.Код; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "К", "") + СокрЛП(НомерКорпуса), Интервал)) Тогда - КодДома = Выборка.Код; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "/", "") + СокрЛП(НомерКорпуса), Интервал)) Тогда - КодДома = Выборка.Код; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "стр", "") + СокрЛП(НомерКорпуса), Интервал)) Тогда - КодДома = Выборка.Код; - - КонецЕсли; - + СтрокаСортировки = СтрокаСортировки + ", Город.Наименование УБЫВ, Город.Сокращение УБЫВ"; + Иначе + ТаблицаГород = ""; + КонецЕсли; + + // Населенный пункт + НаселенныйПунктУстановлен = Не ПустаяСтрока(ОбъектАдреса.НаселенныйПункт); + Если НаселенныйПунктУстановлен Тогда + ЧастиНазвания = НаименованиеИСокращение(ОбъектАдреса.НаселенныйПункт); + Запрос.УстановитьПараметр("НаселенныйПунктНаименование", ЧастиНазвания.Наименование); + Запрос.УстановитьПараметр("НаселенныйПунктСокращение", ЧастиНазвания.Сокращение); + + ТаблицаНаселенныйПункт = " + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК НаселенныйПункт + |ПО + | НаселенныйПункт.Наименование = &НаселенныйПунктНаименование + | И НаселенныйПункт.Сокращение = &НаселенныйПунктСокращение + | И НаселенныйПункт.ТипАдресногоЭлемента = 4 + | И НаселенныйПункт.КодАдресногоОбъектаВКоде = Регион.КодАдресногоОбъектаВКоде + | И НаселенныйПункт.КодРайонаВКоде = " + ?(РайонУстановлен, "Район.КодРайонаВКоде", "0") + " + | И НаселенныйПункт.КодГородаВКоде = " + ?(ГородУстановлен, "Город.КодГородаВКоде", "0") + " + | И НаселенныйПункт.КодУлицыВКоде = 0 + |"; + + СтрокаСортировки = СтрокаСортировки + ", НаселенныйПункт.Наименование УБЫВ, НаселенныйПункт.Сокращение УБЫВ"; + Иначе + ТаблицаНаселенныйПункт = ""; + КонецЕсли; + + // Населенный пункт + УлицаУстановлена = Не ПустаяСтрока(ОбъектАдреса.Улица); + Если УлицаУстановлена Тогда + ЧастиНазвания = НаименованиеИСокращение(ОбъектАдреса.Улица); + Запрос.УстановитьПараметр("УлицаНаименование", ЧастиНазвания.Наименование); + Запрос.УстановитьПараметр("УлицаСокращение", ЧастиНазвания.Сокращение); + + ТаблицаУлица = " + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Улица + |ПО + | Улица.Наименование = &УлицаНаименование + | И Улица.Сокращение = &УлицаСокращение + | И Улица.ТипАдресногоЭлемента = 5 + | И Улица.КодАдресногоОбъектаВКоде = Регион.КодАдресногоОбъектаВКоде + | И Улица.КодРайонаВКоде = " + ?(РайонУстановлен, "Район.КодРайонаВКоде", "0") + " + | И Улица.КодГородаВКоде = " + ?(ГородУстановлен, "Город.КодГородаВКоде", "0") + " + | И Улица.КодНаселенногоПунктаВКоде = " + ?(НаселенныйПунктУстановлен, "НаселенныйПункт.КодНаселенногоПунктаВКоде", "0") + " + |"; + + СтрокаСортировки = СтрокаСортировки + ", Улица.Наименование УБЫВ, Улица.Сокращение УБЫВ"; + Иначе + ТаблицаУлица = ""; + КонецЕсли; + + Запрос.Текст = " + |ВЫБРАТЬ + | """" КАК Индекс, + | + | Регион.Наименование КАК РегионНаименование, Регион.Сокращение КАК РегионСокращение, // Только для контроля + | Регион.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | Регион.Индекс КАК РегионИндекс + | + |" + ?(РайонУстановлен, " + | , Район.Наименование КАК РайонНаименование, Район.Сокращение КАК РайонСокращение // Только для контроля + | , Район.Индекс КАК РайонИндекс + | , Район.КодРайонаВКоде КАК КодРайонаВКоде + | , ВЫБОР КОГДА Район.Наименование ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК РайонНеНайден + | ", " + | , """" КАК РайонИндекс + | , 0 КАК КодРайонаВКоде + | , ЛОЖЬ КАК РайонНеНайден + |") + " + |" + ?(ГородУстановлен, " + | , Город.Наименование КАК ГородНаименование, Город.Сокращение КАК ГородСокращение // Только для контроля + | , Город.Индекс КАК ГородИндекс + | , Город.КодГородаВКоде КАК КодГородаВКоде + | , ВЫБОР КОГДА Город.Наименование ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ГородНеНайден + | ", " + | , """" КАК ГородИндекс + | , 0 КАК КодГородаВКоде + | , ЛОЖЬ КАК ГородНеНайден + |") + " + |" + ?(НаселенныйПунктУстановлен, " + | , НаселенныйПункт.Наименование КАК НаселенныйПунктНаименование, НаселенныйПункт.Сокращение КАК НаселенныйПунктСокращение // Только для контроля + | , НаселенныйПункт.Индекс КАК НаселенныйПунктИндекс + | , НаселенныйПункт.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде + | , ВЫБОР КОГДА НаселенныйПункт.Наименование ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК НаселенныйПунктНеНайден + | ", " + | , """" КАК НаселенныйПунктИндекс + | , 0 КАК КодНаселенногоПунктаВКоде + | , ЛОЖЬ КАК НаселенныйПунктНеНайден + |") + " + |" + ?(УлицаУстановлена, " + | , Улица.Наименование КАК УлицаНаименование, Улица.Сокращение КАК УлицаСокращение // Только для контроля + | , Улица.Индекс КАК УлицаИндекс + | , Улица.КодУлицыВКоде КАК КодУлицыВКоде + | , ВЫБОР КОГДА Улица.Наименование ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК УлицаНеНайдена + | ", " + | , """" КАК УлицаИндекс + | , 0 КАК КодУлицыВКоде + | , ЛОЖЬ КАК УлицаНеНайдена + |") + " + | + |," + ?(УлицаУстановлена, "Улица.Код", + ?(НаселенныйПунктУстановлен, "НаселенныйПункт.Код", + ?(ГородУстановлен, "Город.Код", + ?(РайонУстановлен, "Район.Код", + "Регион.Код")))) + " + | КАК КодКлассификатора + | + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК Регион + |" + ТаблицаРайон + " + |" + ТаблицаГород + " + |" + ТаблицаНаселенныйПункт + " + |" + ТаблицаУлица + " + |ГДЕ + | Регион.Наименование = &РегионНаименование + | И Регион.Сокращение = &РегионСокращение + |УПОРЯДОЧИТЬ ПО + | Регион.Наименование УБЫВ, Регион.Сокращение УБЫВ + |" + СтрокаСортировки + " + |"; + + Выборка = Запрос.Выполнить().Выбрать(); + + // Может вернуться больше чем одна запись, это правильно - нарушение уникальности на одном уровне подчиненности допустимо + ЕстьЗаписи = Выборка.Следующий(); + Если Не ЕстьЗаписи Тогда + // Нет региона, дальше не ищем + Ошибки.Вставить("Регион", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Регион") ); + Возврат Результат; + КонецЕсли; + + // Для анализа результата поиска достаточно проверить первую запись, они упорядочены по максимальному соответствию + Если РайонУстановлен И Выборка.РайонНеНайден Тогда + Ошибки.Вставить("Район", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Район") ); + КонецЕсли; + + Если ГородУстановлен И Выборка.ГородНеНайден Тогда + Ошибки.Вставить("Город", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Город") ); + КонецЕсли; + + Если НаселенныйПунктУстановлен И Выборка.НаселенныйПунктНеНайден Тогда + Ошибки.Вставить("НаселенныйПункт", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "НаселенныйПункт") ); + КонецЕсли; + + Если УлицаУстановлена И Выборка.УлицаНеНайдена Тогда + Ошибки.Вставить("Улица", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Улица") ); + КонецЕсли; + + Если Ошибки.Количество() > 0 Тогда + // Не определили адресный объект, вариантов нет + Возврат Результат; + КонецЕсли; + + // 2. Проверяем дома по всем найденным записям. Если хоть в одной записи дом найден, то считаем адрес корректным + + // Сводная таблица для проверки + СтрокаКолонокИндексов = "РегионИндекс, РайонИндекс, ГородИндекс, НаселенныйПунктИндекс, УлицаИндекс"; + СтрокаКолонокКодов = "КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде"; + СтрокаВсеКолонки = СтрокаКолонокИндексов + ", " + СтрокаКолонокКодов; + + ТаблицаКодов = Новый ТаблицаЗначений; + ТипЧисло = Новый ОписаниеТипов("Число"); + ТипСтрока = Новый ОписаниеТипов("Строка"); + Для Каждого КлючЗначение Из Новый Структура(СтрокаКолонокКодов) Цикл + ТаблицаКодов.Колонки.Добавить(КлючЗначение.Ключ, ТипЧисло); + КонецЦикла; + Для Каждого КлючЗначение Из Новый Структура(СтрокаКолонокИндексов) Цикл + ТаблицаКодов.Колонки.Добавить(КлючЗначение.Ключ, ТипСтрока); + КонецЦикла; + + Пока ЕстьЗаписи Цикл + ЗаполнитьЗначенияСвойств(ТаблицаКодов.Добавить(), Выборка, СтрокаВсеКолонки); + КодКлассификатора = Выборка.КодКлассификатора; + Если ЗначениеЗаполнено(КодКлассификатора) Тогда + Вариант = ВариантыАдреса.Добавить(); + Вариант.Код = КодКлассификатора; + Вариант.Индекс = ПочтовыйИндексПоИерархии(Выборка); + КонецЕсли; + ЕстьЗаписи = Выборка.Следующий(); + КонецЦикла; + + Если ПустаяСтрока(ОбъектАдреса.НомерДома) И ПустаяСтрока(ОбъектАдреса.НомерКорпуса) Тогда + // Не указаны для проверки, возвращаем варианты без домов + Возврат Результат; + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | " + СтрокаВсеКолонки + " + |ПОМЕСТИТЬ + | ТаблицаКодов + |ИЗ + | &ТаблицаКодов КАК ПараметрТаблица + |ИНДЕКСИРОВАТЬ ПО + | " + СтрокаКолонокКодов + " + |; + |ВЫБРАТЬ + | Дома.Код КАК КодКлассификатора, + | Дома.Наименование КАК Наименование, + | Дома.Индекс КАК Индекс, + | ТаблицаКодов.РегионИндекс КАК РегионИндекс, + | ТаблицаКодов.РайонИндекс КАК РайонИндекс, + | ТаблицаКодов.ГородИндекс КАК ГородИндекс, + | ТаблицаКодов.НаселенныйПунктИндекс КАК НаселенныйПунктИндекс, + | ТаблицаКодов.УлицаИндекс КАК УлицаИндекс + |ИЗ + | ТаблицаКодов + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК Дома + |ПО + | Дома.ТипАдресногоЭлемента = 6 + | И Дома.КодАдресногоОбъектаВКоде = ТаблицаКодов.КодАдресногоОбъектаВКоде + | И Дома.КодРайонаВКоде = ТаблицаКодов.КодРайонаВКоде + | И Дома.КодГородаВКоде = ТаблицаКодов.КодГородаВКоде + | И Дома.КодНаселенногоПунктаВКоде = ТаблицаКодов.КодНаселенногоПунктаВКоде + | И Дома.КодУлицыВКоде = ТаблицаКодов.КодУлицыВКоде + | + |ГДЕ + | НЕ Дома.ТипАдресногоЭлемента ЕСТЬ NULL + |"); + Запрос.УстановитьПараметр("ТаблицаКодов", ТаблицаКодов); + + РезультатВыборки = Запрос.Выполнить(); + Если РезультатВыборки.Пустой() Тогда + // Нет данных о домах - не считаем ошибкой, варианты остаются из старшего объекта + Возврат Результат; + КонецЕсли; + + // 2.1 Получаем все возможные описания зданий из упакованных строк + + ВсеВариантыЗданий = Новый ТаблицаЗначений; + ВсеВариантыЗданий.Колонки.Добавить("КодКлассификатора", ТипЧисло); + ВсеВариантыЗданий.Колонки.Добавить("Описание", ТипСтрока); + ВсеВариантыЗданий.Колонки.Добавить("Индекс", ТипСтрока); + + ВсеВариантыЗданий.Колонки.Добавить("ЭтоДиапазон", Новый ОписаниеТипов("Булево") ); + + Выборка = РезультатВыборки.Выбрать(); + Пока Выборка.Следующий() Цикл + + // Индекс - ближайший по иерархии + Индекс = ПочтовыйИндексПоИерархии(Выборка); + + // Идентификатор записи + КодКлассификатора = Выборка.КодКлассификатора; + + // Разбиваем на детальные описания + ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Выборка.Наименование, ",", Символы.ПС)), " ", "")); + Для НомерСтроки = 1 По СтрЧислоСтрок(ВариантыОписаний) Цикл + Описание = ВРег( СокрЛП( СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки) )); + Если Не ПустаяСтрока(Описание) Тогда + НоваяСтрока = ВсеВариантыЗданий.Добавить(); + НоваяСтрока.КодКлассификатора = КодКлассификатора; + НоваяСтрока.Описание = Описание; + НоваяСтрока.Индекс = Индекс; + НоваяСтрока.ЭтоДиапазон = ЭтоДиапазон(Описание); КонецЕсли; - КонецЦикла; - Если КодДома = 0 Тогда - Дом = Новый Структура("Код, Наименование, Сокращение, ТипАдресногоЭлемента, Индекс, - |КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, - |ПризнакАктульности", - 0, "", "", 0, "", 0, 0, 0, 0, 0, 0); + КонецЦикла; - Иначе - Запрос.Текст = " - |ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Сокращение КАК Сокращение, - | АдресныйКлассификатор.Индекс КАК Индекс, - | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, - | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, - | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 6 - | И АдресныйКлассификатор.Код = &КодДома - |"; - Запрос.УстановитьПараметр("КодДома", КодДома); - - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Дом = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); - Иначе - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - Дом = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Дом.Вставить(Колонка.Имя, Выборка[Колонка.Имя]); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - СтруктураПроверки.Вставить("Дом", Дом); - - // Дополнительная проверка на упакованные дома с данными ФИАС - Если КодДома=0 Тогда - ДополнительнаяПроверка = ДанныеЗданияПоДомуИКорпусу(Улица, НомерДома, НомерКорпуса); - Если ДополнительнаяПроверка.ЕстьЗдания Тогда - Если ДополнительнаяПроверка.Код<>Неопределено Тогда // Нашли - КодДома = ДополнительнаяПроверка.Код; - КонецЕсли; - Иначе - ЕстьДома = Ложь; - КонецЕсли; - КонецЕсли; - - // Если по улице нет домов в КЛАДР - считаем, что ошибки нет - // Если же по улице есть дома, и код дома не найден - то ошибка. - Если КодДома = 0 И ЕстьДома Тогда - ЕстьОшибки = Истина; - Если ПустаяСтрока(НомерДома) Тогда - СообщениеОбОшибке = НСтр("ru='Корпус (строение и т.п.) ""%НомерКорпуса%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НомерКорпуса%", НомерКорпуса); - СтруктураОшибок.Вставить("Корпус", СообщениеОбОшибке); - ИначеЕсли ПустаяСтрока(НомерКорпуса) ТОгда - СообщениеОбОшибке = НСтр("ru='Дом (владение и.т.п.) ""%НомерДома%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НомерДома%", НомерДома); - СтруктураОшибок.Вставить("Дом", СообщениеОбОшибке); - Иначе - СообщениеОбОшибке = НСтр("ru='Дом (владение и.т.п.) ""%НомерДома%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НомерДома%", НомерДома); - СтруктураОшибок.Вставить("Дом", СообщениеОбОшибке); - СообщениеОбОшибке = НСтр("ru='Корпус (строение и т.п.) ""%НомерКорпуса%"" не найден в адресном классификаторе.'"); - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%НомерКорпуса%", НомерКорпуса); - СтруктураОшибок.Вставить("Корпус", СообщениеОбОшибке); - КонецЕсли; - КонецЕсли; - + // 2.2 Оставляем во всех вариантах только строки, подходящие для нашего дома + + НомерДомаСтрокой = ВРег(СокрЛП(СтрЗаменить(ОбъектАдреса.НомерДома, " ", ""))); + НомерКорпусаСтрокой = ВРег(СокрЛП(СтрЗаменить(ОбъектАдреса.НомерКорпуса, " ", ""))); + + ДомУстановлен = Не ПустаяСтрока(НомерДомаСтрокой); + КорпусУстановлен = Не ПустаяСтрока(НомерКорпусаСтрокой); + + Если (Не ДомУстановлен) И (Не КорпусУстановлен) Тогда + // Не указаны дома для проверки + Возврат Результат; КонецЕсли; - // Проверка индекса - Если Не ПустаяСтрока(УказанныйИндекс) Тогда - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Индекс КАК Индекс - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.Индекс = &УказанныйИндекс - |"); - Запрос.УстановитьПараметр("УказанныйИндекс", УказанныйИндекс); - Если Запрос.Выполнить().Пустой() Тогда - СтруктураОшибок.Вставить("Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Индекс ""%1"" не найден в адресном классификаторе.'"), УказанныйИндекс)); - ЕстьОшибки = Истина; + // Все варианты совместимости: + // номер дома может означать Дом, Владение, Домовладение + // номер корпуса - Корпус, Строение, Литер, Сооружение, Участок + ВариантыДома = Новый Структура("Дом, Владение, Домовладение"); + ВариантыКорпуса = Новый Структура("Корпус, Строение, Литер, Сооружение, Участок"); + + КэшОписанияЗданий = Новый Соответствие; + ТипыЧастейЗдания = ТипыЧастейЗдания(); + + Позиция = ВсеВариантыЗданий.Количество() - 1; + Пока Позиция >= 0 Цикл + Вариант = ВсеВариантыЗданий[Позиция]; + + Если ДомУстановлен Тогда - ИначеЕсли НомерИндекса <> УказанныйИндекс Тогда - СтруктураОшибок.Вставить("Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Индекс ""%1"" не соответствует введенному адресу.'"), УказанныйИндекс)); - ЕстьОшибки = Истина; + // Проверяем все варианты дома и все варианты корпуса + Для Каждого КлючЗначениеДом Из ВариантыДома Цикл + ВариантПодходит = Ложь; + + Если КорпусУстановлен Тогда + // Проверяем все варианты второй части + Для Каждого КлючЗначениеКорпус Из ВариантыКорпуса Цикл + Здание = Новый Структура; + Здание.Вставить(КлючЗначениеДом.Ключ, НомерДомаСтрокой); + Здание.Вставить(КлючЗначениеКорпус.Ключ, НомерКорпусаСтрокой); + Если ВариантДомаКорпусаПодходит(Здание, Вариант, ТипыЧастейЗдания, КэшОписанияЗданий) Тогда + ВариантПодходит = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + // Проверяем только дом + Здание = Новый Структура; + Здание.Вставить(КлючЗначениеДом.Ключ, НомерДомаСтрокой); + Если ВариантДомаКорпусаПодходит(Здание, Вариант, ТипыЧастейЗдания, КэшОписанияЗданий) Тогда + ВариантПодходит = Истина; + КонецЕсли; + КонецЕсли; + + Если ВариантПодходит Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Иначе + // Проверяем только все варианты корпуса + ВариантПодходит = Ложь; + Для Каждого КлючЗначениеКорпус Из ВариантыКорпуса Цикл + Здание = Новый Структура; + Здание.Вставить(КлючЗначениеКорпус.Ключ, НомерКорпусаСтрокой); + Если ВариантДомаКорпусаПодходит(Здание, Вариант, ТипыЧастейЗдания, КэшОписанияЗданий) Тогда + ВариантПодходит = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Если Не ВариантПодходит Тогда + ВсеВариантыЗданий.Удалить(Вариант); + КонецЕсли; + + Позиция = Позиция - 1; + КонецЦикла; + + Если ВсеВариантыЗданий.Количество() = 0 Тогда + // Не нашли ни одного варианта для здания + Если КорпусУстановлен Тогда + Ошибки.Вставить("Корпус", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Корпус") ); + + ИначеЕсли ДомУстановлен Тогда + Ошибки.Вставить("Дом", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Дом") ); КонецЕсли; - КонецЕсли; + + Возврат Результат; + КонецЕсли; - СтруктураПроверки.Вставить("ЕстьОшибки", ЕстьОшибки); - СтруктураПроверки.Вставить("СтруктураОшибок", СтруктураОшибок); - Возврат СтруктураПроверки; + // 3. Проверяем индекс + Если ПустаяСтрока(ОбъектАдреса.Индекс) Тогда + // Нет данных для проверки + Возврат Результат; + КонецЕсли; + + // Варианты кодов будут перезаполнены по домам + ВариантыАдреса.Очистить(); + + // Во всех оставшихся вариантах ищем сначала точное описание дома, затем - в диапазонах + ВсеВариантыЗданий.Сортировать("ЭтоДиапазон, Описание"); + ИндексыСуществуют = Ложь; + ИндексНайден = Ложь; + Для Каждого Вариант Из ВсеВариантыЗданий Цикл + Если Не ПустаяСтрока(Вариант.Индекс) Тогда + ИндексыСуществуют = Истина; + КонецЕсли; + + Если ОбъектАдреса.Индекс = Вариант.Индекс Тогда + // Нашли точное соответствие по индексу + ИндексНайден = Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(Вариант.КодКлассификатора) Тогда + ВариантРезультата = ВариантыАдреса.Добавить(); + ВариантРезультата.Индекс = Вариант.Индекс; + ВариантРезультата.Код = Вариант.КодКлассификатора; + КонецЕсли; + КонецЦикла; + + Если ИндексыСуществуют И (Не ИндексНайден) Тогда + // Не нашли совпадения по индексу, диагностируем ошибку + Ошибки.Вставить("Индекс", ТекстОшибкиПоискаВИерархииКлассификатора(ОбъектАдреса, "Индекс") ); + КонецЕсли; + + Возврат Результат; КонецФункции // Проверяет - загружен ли адресный элемент в базу. @@ -1304,7 +1605,7 @@ // Возвращаемое значение: // Строка - имя и адресное сокращение. // -Функция ПолучитьИмяИАдресноеСокращение(Знач СтрокаЭлемента, АдресноеСокращение) Экспорт +Функция ИмяИАдресноеСокращение(Знач СтрокаЭлемента, АдресноеСокращение) Экспорт Буфер = СокрП(СтрокаЭлемента); ПозицияПослПробела = Найти(Буфер, " "); @@ -1320,30 +1621,24 @@ Запрос = Новый Запрос(" |ВЫБРАТЬ - | ВЫБОР - | КОГДА КОЛИЧЕСТВО(ВсеСокращения.Сокращение)>0 - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК СокращенияЗагружены, - | ВЫБОР - | КОГДА 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - | ИЗ - | РегистрСведений.АдресныеСокращения - | ГДЕ - | Сокращение = &Сокращение - | ) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК СокращениеНайдено + | КОЛИЧЕСТВО(ВсеСокращения.Сокращение) КАК КоличествоСокращений, + | ЕСТЬNULL(СУММА(ПоискСокращения.ФлагСокращения), 0) КАК ФлагСокращения |ИЗ | РегистрСведений.АдресныеСокращения КАК ВсеСокращения + |ЛЕВОЕ СОЕДИНЕНИЕ ( + | ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК ФлагСокращения + | ИЗ + | РегистрСведений.АдресныеСокращения + |) КАК ПоискСокращения + |ПО + | Сокращение = &Сокращение |"); Запрос.УстановитьПараметр("Сокращение", Сред(СтрокаЭлемента, ПозицияПослПробела + 1)); Результат = Запрос.Выполнить().Выгрузить()[0]; - Если Результат.СокращенияЗагружены И Не Результат.СокращениеНайдено Тогда + Если Результат.КоличествоСокращений > 0 И Результат.ФлагСокращения = 0 Тогда + // Сокращения загружены, но нужного нет Возврат СтрокаЭлемента; КонецЕсли; @@ -1394,7 +1689,7 @@ // Возвращаемое значение: // Строка - наименование региона. // -Функция ПолучитьНаименованиеРегионаПоКоду(КодРегиона) Экспорт +Функция НаименованиеРегионаПоКоду(КодРегиона) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТипАдресногоЭлемента", 1); @@ -1430,7 +1725,7 @@ // Возвращаемое значение: // Число - код региона. // -Функция ПолучитьКодРегионаПоНаименованию(Регион) Экспорт +Функция КодРегионаПоНаименованию(Регион) Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ @@ -1605,16 +1900,92 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Устаревшие процедуры и функции + +// Устарела. Следует использовать ВерсииАдресныхОбъектов. +// +Функция ПолучитьВерсииАдресныхОбъектов() Экспорт + + Возврат ВерсииАдресныхОбъектов(); + +КонецФункции + +// Устарела. Следует использовать СтруктураАдреса. +// +Функция ПолучитьСтруктуруАдреса(КодАдресногоЭлемента, Дом = "", Корпус = "", Квартира = "") Экспорт + + Возврат СтруктураАдреса(КодАдресногоЭлемента, Дом, Корпус, Квартира); + +КонецФункции + +// Устарела. Следует использовать ИндексАдреса. +// +Функция ПолучитьИндекс(Знач НазваниеРегиона, Знач НазваниеРайона, Знач НазваниеГорода, Знач НазваниеНаселенногоПункта, + Знач НазваниеУлицы, Знач НомерДома, Знач НомерКорпуса, РодительИндекса = Неопределено) Экспорт + + Возврат ИндексАдреса(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, + НазваниеУлицы, НомерДома, НомерКорпуса, РодительИндекса); + +КонецФункции + +// Устарела. Следует использовать ИмяИАдресноеСокращение. +// +Функция ПолучитьИмяИАдресноеСокращение(Знач СтрокаЭлемента, АдресноеСокращение) Экспорт + + Возврат ИмяИАдресноеСокращение(СтрокаЭлемента, АдресноеСокращение); + +КонецФункции + +// Устарела. Следует использовать НаименованиеРегионаПоКоду. +// +Функция ПолучитьНаименованиеРегионаПоКоду(КодРегиона) Экспорт + + Возврат НаименованиеРегионаПоКоду(КодРегиона); + +КонецФункции + +// Устарела. Следует использовать КодРегионаПоНаименованию. +// +Функция ПолучитьКодРегионаПоНаименованию(Регион) Экспорт + + Возврат КодРегионаПоНаименованию(Регион); + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +// Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "АдресныйКлассификатор"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "АдресныйКлассификатор"); + +КонецПроцедуры + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Проверка обновления + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(РазрешенияБезопасностиПроверкиОбновления())); КонецПроцедуры @@ -1625,8 +1996,33 @@ ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Набор разрешений профилей безопасности для проверки наличия обновления КЛАДР на сайте 1С +// +// Возвращаемое значение: +// Массив - необходимые разрешения +// +Функция РазрешенияБезопасностиПроверкиОбновления() Экспорт + + АдресФайлаВерсий = ОбщегоНазначенияКлиентСервер.СтруктураURI( + АдресныйКлассификаторКлиентСервер.ПутьКФайлуОписаниюДанныхКЛАДР() + ); + + Протокол = ВРег(АдресФайлаВерсий.Схема); + Адрес = АдресФайлаВерсий.Хост; + Порт = АдресФайлаВерсий.Порт; + Описание = НСтр("ru = 'Проверка обновления адресного классификатора.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) + ); + + Возврат Разрешения; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -1642,17 +2038,25 @@ // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.1.1"; - Обработчик.Процедура = "АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня"; - Обработчик.НачальноеЗаполнение = Истина; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; КонецЕсли; - + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.1.1"; + Обработчик.Процедура = "АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.0.1.11"; Обработчик.Процедура = "АдресныйКлассификатор.РазложитьАдресныеОбъектыПоЭлементам"; Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.44"; + Обработчик.Процедура = "АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня"; + Обработчик.ОбщиеДанные = Истина; + КонецПроцедуры // Загружает адресные объекты первого уровня по макету @@ -1810,7 +2214,7 @@ КонецЦикла; КонецЕсли; - ВерсииХранимыхСведений = ПолучитьВерсииАдресныхОбъектов(); + ВерсииХранимыхСведений = ВерсииАдресныхОбъектов(); ТекущиеВерсии = Новый Соответствие; Для Каждого ЭлементСписка Из ВерсииХранимыхСведений Цикл ТекущиеВерсии.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); @@ -2020,37 +2424,48 @@ // Путь заканчивается слешем (обратным или прямым) // АдресныеСведения - ТаблицаЗначений - таблица, которая заполняется загружаемыми элементами // АльтернативныеНазвания - ТаблицаЗначений -// ЗагрузкаСВеб - Булево. Признак того, нужно ли строить индекс и позиционироваться на 1й элемент региона // ТипАдресногоЭлемента - Число - уровень адресного объекта. // // Возвращаемое значение: // Булево - Истина, если адресные сведения загружены, Ложь - Иначе. // -Функция ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, ПутьКДаннымНаСервере, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб, Знач ТипАдресногоЭлемента=Неопределено) - Перем ФайлИндексаКлассификатора; +Функция ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, ПутьКДаннымНаСервере, АдресныеСведения, АльтернативныеНазвания, Знач ТипАдресногоЭлемента=Неопределено) + // Имена файлов на диске уже приведены к верхнему регистру ФайлАдресногоКлассификатора = ПутьКДаннымНаСервере + ".DBF"; + ФайлИндексаКлассификатора = ПутьКДаннымНаСервере + ".CDX"; - Если Не ЗагрузкаСВеб Тогда - ФайлИндексаКлассификатора = ПутьКДаннымНаСервере + ".CDX"; - ФайлИндекса = Новый Файл (ФайлИндексаКлассификатора); - Если НЕ ФайлИндекса.Существует() Тогда - xB = Новый XBase(ФайлАдресногоКлассификатора); - xB.Кодировка = КодировкаXBase.OEM; - - Если xB.Открыта() Тогда - // Для загрузки сразу группы адресных сведений удобно пользоваться индексом по всему поле CODE - xB.Индексы.Добавить("IDXCODE", "CODE", Истина); - xB.СоздатьИндексныйФайл(ФайлИндексаКлассификатора); - xB.ЗакрытьФайл(); - Иначе - Возврат Ложь; - КонецЕсли; + // Для загрузки сразу всей группы адресных сведений нужен индекс по всему поле CODE + НужнаИндексация = Истина; + ФайлИндекса = Новый Файл(ФайлИндексаКлассификатора); + Если ФайлИндекса.Существует() Тогда + ФайлДанных = Новый XBase(ФайлАдресногоКлассификатора, ФайлИндексаКлассификатора, Истина); + Если Не ФайлДанных.Открыта() Тогда + Возврат Ложь; + КонецЕсли; + + Если ФайлДанных.Индексы.Найти("IDXCODE") <> Неопределено Тогда + НужнаИндексация = Ложь; КонецЕсли; КонецЕсли; - xB = Новый XBase(ФайлАдресногоКлассификатора, ФайлИндексаКлассификатора, Истина); - xB.Кодировка = КодировкаXBase.OEM; + Если НужнаИндексация Тогда + ФайлДанных = Новый XBase(ФайлАдресногоКлассификатора); + Если Не ФайлДанных.Открыта() Тогда + Возврат Ложь; + КонецЕсли; + + // Строим индекс по коду, уникальный, дубли кодов буду пропущены + ФайлДанных.Индексы.Добавить("IDXCODE", "CODE", Истина); + ФайлДанных.СоздатьИндексныйФайл(ФайлИндексаКлассификатора); + ФайлДанных.ЗакрытьФайл(); + КонецЕсли; + + ФайлДанных = Новый XBase(ФайлАдресногоКлассификатора, ФайлИндексаКлассификатора, Истина); + ФайлДанных.Кодировка = КодировкаXBase.OEM; + Если Не ФайлДанных.Открыта() Тогда + Возврат Ложь; + КонецЕсли; // Если мы загружаем улицы или дома, то тип адресного элемента Если ТипАдресногоЭлемента <> Неопределено Тогда @@ -2059,54 +2474,41 @@ ТипАдресногоЭлементаУстановлен = Ложь; КонецЕсли; - Если Не xB.Открыта() Тогда - Возврат Ложь; - КонецЕсли; + // Встаем на первую запись индекса, дубли пропускаются из за уникальности индекса + ФайлДанных.ТекущийИндекс = ФайлДанных.Индексы.Найти("IDXCODE"); + ФайлДанных.Найти(КодАдресногоОбъекта, "="); - Контроль = Новый Соответствие; - ЕстьОшибки = Ложь; + ЕстьНеуникальныеКодыФайла = Ложь; - Если Не ЗагрузкаСВеб Тогда - xB.ТекущийИндекс = xB.Индексы.Найти("IDXCODE"); - xB.Найти (КодАдресногоОбъекта, "="); - КонецЕсли; - - Пока Не xB.ВКонце() Цикл - Код = xB.CODE; + Пока Не ФайлДанных.ВКонце() Цикл + Код = ФайлДанных.CODE; - Если Контроль[Код] = НеОпределено Тогда - Контроль[Код] = 0; + Если Лев(Код, 2) <> КодАдресногоОбъекта Тогда + Прервать; + КонецЕсли; + + Если ТипАдресногоЭлементаУстановлен Тогда + ПризнакАктуальности = Сред(Код, 16, 2); + Иначе + ТипАдресногоЭлемента = ПолучитьТипАдресногоЭлементаПоКоду(Код); + ПризнакАктуальности = Сред(Код, 12, 2); + КонецЕсли; + + // Если это альтернативное название, то заносим сведения в отдельную таблицу + // альтернативных наименований (для номеров домов альтернативных наименований нет) + Если (ТипАдресногоЭлемента <> 6) + И (ПризнакАктуальности <> "00") + И (ПризнакАктуальности <> "99") + Тогда - Если Лев(Код, 2) <> КодАдресногоОбъекта Тогда - Прервать; - КонецЕсли; - - Если ТипАдресногоЭлементаУстановлен Тогда - ПризнакАктуальности = Сред(Код, 16, 2); - Иначе - ТипАдресногоЭлемента = ПолучитьТипАдресногоЭлементаПоКоду(Код); - ПризнакАктуальности = Сред(Код, 12, 2); - КонецЕсли; - - // Если это альтернативное название, то заносим сведения в отдельную таблицу - // альтернативных наименований (для номеров домов альтернативных наименований нет) - Если (ТипАдресногоЭлемента <> 6) - И (ПризнакАктуальности <> "00") - И (ПризнакАктуальности <> "99") - Тогда - - СтрокаАльтернативныхНазваний = АльтернативныеНазвания.Добавить(); - СтрокаАльтернативныхНазваний.Код = Код; - СтрокаАльтернативныхНазваний.Наименование = СокрЛП(xB.NAME); - СтрокаАльтернативныхНазваний.Сокращение = СокрЛП(xB.SOCR); - СтрокаАльтернативныхНазваний.Индекс = СокрЛП(xB.INDEX); - - xB.Следующая(); - Продолжить; - КонецЕсли; + СтрокаАльтернативныхНазваний = АльтернативныеНазвания.Добавить(); + СтрокаАльтернативныхНазваний.Код = Код; + СтрокаАльтернативныхНазваний.Наименование = СокрЛП(ФайлДанных.NAME); + СтрокаАльтернативныхНазваний.Сокращение = СокрЛП(ФайлДанных.SOCR); + СтрокаАльтернативныхНазваний.Индекс = СокрЛП(ФайлДанных.INDEX); + Иначе НоваяСтрока = АдресныеСведения.Добавить(); - НоваяСтрока.Код = Код; НоваяСтрока.ТипАдресногоЭлемента = ТипАдресногоЭлемента; @@ -2116,35 +2518,28 @@ НоваяСтрока.КодНаселенногоПунктаВКоде = Число(Сред(Код, 9, 3)); Если ТипАдресногоЭлемента <= 4 Тогда - НоваяСтрока.КодУлицыВКоде = 0; - НоваяСтрока.ПризнакАктуальности = Число(Сред(Код, 12, 2)); + НоваяСтрока.КодУлицыВКоде = 0; + НоваяСтрока.ПризнакАктуальности = Число(Сред(Код, 12, 2)); + ИначеЕсли ТипАдресногоЭлемента = 5 Тогда - НоваяСтрока.КодУлицыВКоде = Число(Сред(Код, 12, 4)); - НоваяСтрока.ПризнакАктуальности = Число(Сред(Код, 16, 2)); + НоваяСтрока.КодУлицыВКоде = Число(Сред(Код, 12, 4)); + НоваяСтрока.ПризнакАктуальности = Число(Сред(Код, 16, 2)); + Иначе - НоваяСтрока.КодУлицыВКоде = Число(Сред(Код, 12, 4)); - НоваяСтрока.ПризнакАктуальности = 0; + НоваяСтрока.КодУлицыВКоде = Число(Сред(Код, 12, 4)); + НоваяСтрока.ПризнакАктуальности = 0; + КонецЕсли; - НоваяСтрока.Наименование = СокрЛП(xB.NAME); - НоваяСтрока.Индекс = xB.INDEX; - НоваяСтрока.Сокращение = СокрЛП(xB.SOCR); - - xB.Следующая(); - Иначе - ЕстьОшибки = Истина; + НоваяСтрока.Наименование = СокрЛП(ФайлДанных.NAME); + НоваяСтрока.Индекс = ФайлДанных.INDEX; + НоваяСтрока.Сокращение = СокрЛП(ФайлДанных.SOCR); КонецЕсли; + ФайлДанных.Следующая(); КонецЦикла; - xB.ЗакрытьФайл(); - - Если ЕстьОшибки Тогда - СтрокаОшибки = НСтр("ru = 'В файле адресного классификатора %1 есть ошибки уникальности кодов'"); - ПараметрыВСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, ПутьКДаннымНаСервере); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ПараметрыВСтроке); - КонецЕсли; - + ФайлДанных.ЗакрытьФайл(); Возврат Истина; КонецФункции @@ -2161,6 +2556,7 @@ // Булево - Истина, если заполнились альтернативные названия, Ложь - иначе. /// Функция ЗаполнитьАльтернативныеНазвания(ПутьКДаннымНаСервере, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб) + // Имена файлов на диске уже приведены к верхнему регистру Если АльтернативныеНазвания.Количество() = 0 Тогда Возврат Истина; @@ -2214,10 +2610,8 @@ Код = Лев(АльтернативныйОбъект.Код, СтрДлина(АльтернативныйОбъект.Код) - 2) + "00"; - КоличествоЭлементов = АдресныеСведения.НайтиСтроки(Новый Структура("Код", Код)).Количество(); - // Если уже имеется элемент с таким кодом, то пропускаем его - Если КоличествоЭлементов > 0 Тогда + Если АдресныеСведения.Найти(Код, "Код") <> Неопределено Тогда Продолжить; КонецЕсли; @@ -2257,7 +2651,6 @@ КонецЕсли; - Если СтрокаТаблицы <> Неопределено Тогда Если ЗначениеЗаполнено(СокрЛП(АльтернативныйОбъект.Индекс)) Тогда ИндексААО = " : " + АльтернативныйОбъект.Индекс; @@ -2286,36 +2679,6 @@ КонецФункции -// Процедура для заполнения данных с 2-го по 4-й уровень классификации: -// -// Параметры: -// КодАдресногоОбъекта - Cтрока - код адресного объекта в формате NN -// АдресныеСведения - ТаблицаЗначений - записи, повторяющие структуру РС АдресныйКлассификатор; -// которые переносятся в регистр -// -Процедура ЗаписатьКлассификатор(КодАдресногоОбъекта, АдресныеСведения) - - Для Каждого Элемент Из АдресныеСведения Цикл - - КодСтрока = Строка(Элемент.Код); - ДлинаСтрокиКода = СтрДлина(КодСтрока); - - Для Индекс = ДлинаСтрокиКода По 20 Цикл - КодСтрока = КодСтрока + "0"; - КонецЦикла; - - Элемент.Код = КодСтрока; - - КонецЦикла; - - НаборАдресныхСведений = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей(); - НаборАдресныхСведений.Отбор.КодАдресногоОбъектаВКоде.Использование = Истина; - НаборАдресныхСведений.Отбор.КодАдресногоОбъектаВКоде.Значение = Число(КодАдресногоОбъекта); - НаборАдресныхСведений.Загрузить(АдресныеСведения); - НаборАдресныхСведений.Записать(); - -КонецПроцедуры - // Функция получает уровень адресного элемента (всего 6 уровней) в иерархической системе классификации по его коду // формат кода: // _2__3___3___3___4____4____ @@ -2615,12 +2978,12 @@ // В качестве дополнения может быть задан элемент "родитель" // // Параметры: -// НазваниеЭлемента - название адресного элемента ( с сокращением) -// ТипЭлемента - тип искомого адресного элемента -// ЭлементРодитель - элемент "родитель" +// НазваниеЭлемента - Строка - Название адресного элемента с сокращением +// ТипЭлемента - Число - Тип искомого адресного элемента (1 - регион, 2 - район и т.п.) +// ЭлементРодитель - Структура - Описывает родительский элемент // // Возвращаемое значение: -// Найденный элемент справочника Адресный классификатор или пустая ссылка в случае неудачи +// Найденная структура классификатора или пустая структура в случае неудачи // Функция ПолучитьАдресныйЭлемент(Знач НазваниеЭлемента, ТипЭлемента, ЭлементРодитель) @@ -2631,7 +2994,7 @@ // смотрим есть ли в имени адресное сокращение этого уровня // если есть, то ищем по наименованию и адресному сокращению АдресноеСокращение = ""; - НазваниеЭлемента = ПолучитьИмяИАдресноеСокращение(НазваниеЭлемента, АдресноеСокращение); + НазваниеЭлемента = ИмяИАдресноеСокращение(НазваниеЭлемента, АдресноеСокращение); Запрос = Новый Запрос(); @@ -2864,279 +3227,6 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с адресным кодом -// Функция определяет входимость числа в заданный диапазон -// При этом диапазон задается как это описано в комментарии к функции ЧислоВИнтервале -// -// Параметры: -// Номер - (число, строка) номер дома с корпусом -// Интервал - (строка), интервал чисел (домов) -// ТочноеСоответствие - (булево) номер дома должен точно соответствовать номеру в интервале -// или допускается наличие дробей и произвольных букв после номера дома -// -// Возвращаемое значение: -// Истина - если заданное число входит в диапазон, -// Ложь - если не входит -// -Функция ВходитВИнтервал(Знач Номер, Интервал, ТочноеСоответствие) - - Если ПустаяСтрока("" + Номер) Тогда - Возврат Ложь; - КонецЕсли; - - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Номер, Ложь) Тогда - // Проверяем вхождение конкретного номера дома в интервал (отбрасывая букву "К" - означающую "корпус") - НомерБезЛишнихСимволов = СтрЗаменить(ВРЕГ(СтрЗаменить("" + Номер, " ", "")), "К", ""); - ИнтервалБезЛишнихСимволов = СтрЗаменить(ВРЕГ(СтрЗаменить("" + Интервал, " ", "")), "К", ""); - НомерВходитВИнтервал = (НомерБезЛишнихСимволов = ИнтервалБезЛишнихСимволов); - Если НомерВходитВИнтервал Тогда - Возврат Истина; - // Если номер был числом, но не найден в интервале, то этот номер действительно не входит в интервал - ИначеЕсли ТипЗнч(Номер) = Тип("Число") Тогда - Возврат Ложь; - // Если же строковый номер не найден в интервале, то попробуем отбросить то что следовало - // за числовой частью номер и проверить вхождение числовой части номера дома в интервал. - Иначе - Если ТочноеСоответствие Тогда - Возврат Ложь; - Иначе - // Обрезаем то, что следует за косой чертой - Если Найти(Номер, "\") > 0 Тогда - Номер = Лев(Номер, Найти(Номер, "\") - 1); - ИначеЕсли Найти(Номер, "/") > 0 Тогда - Номер = Лев(Номер, Найти(Номер, "/") - 1); - КонецЕсли; - Номер = ОставитьТолькоЦифрыВСтроке(Номер, "К"); - Интервал = СтрЗаменить(Интервал, "К", ""); - КонецЕсли; - КонецЕсли; - Иначе - Если Не ТочноеСоответствие Тогда - //Обрезаются возможные значения "ДВЛД"(домовладение) и "ВЛД"(владение). - Если Найти(Интервал, "ДВЛД") <> 0 Тогда - Интервал = СтрЗаменить(Интервал, "ДВЛД", ""); - ИначеЕсли Найти(Интервал, "ВЛД") <> 0 Тогда - Интервал = СтрЗаменить(Интервал, "ВЛД", ""); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Номер = Число(Номер); - - ТолькоЧислоИнтервал = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Интервал, Ложь); - - Если ТолькоЧислоИнтервал Тогда - Если Номер = Число(Интервал) Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Если Найти(Интервал,"Ч") > 0 Тогда // диапазон четных чисел - Интервал = СтрЗаменить(Интервал, "Ч", ""); - Четность = 2; - - ИначеЕсли Найти(Интервал,"Н") > 0 Тогда // диапазон нечетных чисел - Интервал = СтрЗаменить(Интервал, "Н", ""); - Четность = 1; - - ИначеЕсли (Найти(Интервал, "-") = 0) И ТолькоЧислоИнтервал Тогда - // интервал это дом представленный в виде строки - Возврат Ложь; - - Иначе - Четность=0; - - КонецЕсли; - - Интервал = СтрЗаменить(Интервал, ")", ""); // на всякий случай уберем скобки - Интервал = СтрЗаменить(Интервал, "(", ""); - Позиция = Найти(Интервал, "-"); - Попали = 0; - - Если Позиция <> 0 Тогда - ЛеваяЧасть = Лев(Интервал, Позиция - 1); - ПраваяЧасть = Сред(Интервал, Позиция + 1); - МинЗначение = Число(ОставитьТолькоЦифрыВСтроке(ЛеваяЧасть)); - МаксЗначение = Число(ОставитьТолькоЦифрыВСтроке(ПраваяЧасть)); - Если (Номер >= МинЗначение) И (Номер <= МаксЗначение) Тогда - Попали = 1; - КонецЕсли; - - ИначеЕсли ПустаяСтрока(Интервал) Тогда - // случай когда интервал был равен Ч или Н - Попали = 1; - - Иначе - Если СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Интервал, Ложь) Тогда - Если Номер = Число(ОставитьТолькоЦифрыВСтроке(Интервал)) Тогда - Попали = 1; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Если (Попали = 1) И ( - ((Четность = 2) И (Номер % 2 = 0)) ИЛИ - ((Четность = 1) И (Номер % 2 = 1)) ИЛИ - (Четность = 0)) Тогда - Возврат Истина; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Функция определяет входимость: -// 1. Номера дома (представленного в виде строки) -// где Номер дома, это строка вида: -// <СтрокаДом> пример: 58А, 32/1, 50А/8 -// -// 2. Номера дома и номера корпуса (строения), в виде строки: -// <СтрокаДом>к<СтрокаКорпус>, пример: 32к1 это дом 32 корпус 1, -// <СтрокаДом>/<СтрокаКорпус>, пример: 32/1 это дом 32 корпус 1, -// <СтрокаДом>стр<СтрокаКорпус>, пример: 32стр1 это дом 32 корпус 1, -// -// 3. Числа (номера дома) в заданный интервал чисел -// При этом интервал задается строкой вида: -// <Диапазон>[,<Диапазон>] -// где Диапазон, это строка вида: -// [Ч/Н]<Число>[-<Число>] -// Префикс Ч или Н диапазона обозначает четность и нечетность входящих в него чисел -// Пример: в интервал Ч12-14,Н1-5,20-29 входят числа 1,3,5,12,14 и все с 20 по 29 -// -// Параметры: -// Номер - (число, строка) номер дома с корпусом -// Интервал - (строка), интервал чисел (домов) -// ТочноеСоответствие - (булево) номер дома должен точно соответствовать номеру в интервале -// или допускается наличие дробей и произвольных букв после номера дома -// -// Истина - если заданное число входит в диапазон, -// Ложь - если не входит -// -Функция НомерДомаВИнтервале(Номер, Знач Интервал, ТочноеСоответствие = Ложь) - - Пока НЕ ПустаяСтрока(Интервал) Цикл - - Позиция = Найти(Интервал, ","); - Если Позиция = 0 Тогда - Возврат ВходитВИнтервал(Номер, Интервал, ТочноеСоответствие); - Иначе - Если ВходитВИнтервал(Номер, СокрЛП(Лев(Интервал, Позиция - 1)), ТочноеСоответствие) Тогда - Возврат Истина; - Иначе - Интервал = Сред(Интервал, Позиция + 1); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -// Функция определяет индекс по переданным улице, дому и корпусу -// -// Параметры: -// Улица - элемент справочника адресный классификатор с требуемой улицей -// НомерДома - номер дома, для которого необходимо получить индекс -// НомерКорпуса - номер корпуса -// -// Возвращаемое значение: -// Строка - шестизначный почтовый индекс -// -Функция ПолучитьИндексПоУлицеДомуКорпусу(Улица, НомерДома, НомерКорпуса) - - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | АдресныйКлассификатор.Наименование КАК Наименование, - | АдресныйКлассификатор.Индекс КАК Индекс - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 6 - | И АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = &КодНаселенногоПунктаВКоде - | И АдресныйКлассификатор.КодУлицыВКоде = &КодУлицыВКоде - |"); - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Улица.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Улица.КодРайонаВКоде); - Запрос.УстановитьПараметр("КодГородаВКоде", Улица.КодГородаВКоде); - Запрос.УстановитьПараметр("КодНаселенногоПунктаВКоде", Улица.КодНаселенногоПунктаВКоде); - Запрос.УстановитьПараметр("КодУлицыВКоде", Улица.КодУлицыВКоде); - - Выборка = Запрос.Выполнить().Выбрать(); - ИндексДома = ""; - - // Сначала ищем по точному соответствию - Пока Выборка.Следующий() Цикл - - Если НЕ ПустаяСтрока(Выборка.Индекс) Тогда - Интервал = Врег(СокрЛП(Выборка.Наименование)); - - Если НомерДомаВИнтервале(СокрЛП(НомерДома), Интервал, Истина) Тогда - ИндексДома = Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "К", "") - + СокрЛП(НомерКорпуса), Интервал, Истина)) Тогда - Возврат Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "/", "") - + СокрЛП(НомерКорпуса), Интервал, Истина)) Тогда - Возврат Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "стр", "") - + СокрЛП(НомерКорпуса), Интервал, Истина)) Тогда - Возврат Выборка.Индекс; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - // А если не нашлось, то ищем по неточному соответствию - Если ПустаяСтрока(ИндексДома) Тогда - Выборка.Сбросить(); - Пока Выборка.Следующий() Цикл - - Если НЕ ПустаяСтрока(Выборка.Индекс) Тогда - Интервал = Врег(СокрЛП(Выборка.Наименование)); - - Если НомерДомаВИнтервале(СокрЛП(НомерДома), Интервал, Ложь) Тогда - ИндексДома = Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "К", "") - + СокрЛП(НомерКорпуса), Интервал, Ложь)) Тогда - Возврат Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "/", "") - + СокрЛП(НомерКорпуса), Интервал, Ложь)) Тогда - Возврат Выборка.Индекс; - - ИначеЕсли (НомерДомаВИнтервале(СокрЛП(НомерДома) + ?(НЕ ПустаяСтрока(НомерКорпуса), "стр", "") - + СокрЛП(НомерКорпуса), Интервал, Ложь)) Тогда - Возврат Выборка.Индекс; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Если ПустаяСтрока(ИндексДома) Тогда - Возврат Улица.Индекс; - Иначе - Возврат ИндексДома; - КонецЕсли; - - Иначе - Возврат ИндексДома; - КонецЕсли; - -КонецФункции - // Функция по адресу возвращает структуру ограничений // // Параметры: @@ -3188,45 +3278,6 @@ КонецПроцедуры -// Функция оставляет в строке только цифры, отбрасывая все следующие за цифрами буквы и другие символы, -// причём если строка начинается с буквы - то считаем, что -// -// Параметры: -// РазбираемаяСтрока - Строка - строка, из которой будут отбрасываться все не цифровые символы -// ПропускаемыеСимволы - Строка - символы, которые при разборе можно пропустить, на любых других разбор прекращается. -// Например, при разборе "К25СТР1", если пропускаемые символы: -// "" - то возвратится "0", -// "К" - возвратится "25", -// "КСТР" - возвратится "251" -// Возвращаемое значение: -// Строка - строка, состоящая только из цифр, полученных из исходной строки -// -Функция ОставитьТолькоЦифрыВСтроке(РазбираемаяСтрока, ПропускаемыеСимволы = "") - - Цифры = "1234567890"; - ЦифроваяЧасть = ""; - Для НомерСимвола = 1 По СтрДлина(РазбираемаяСтрока) Цикл - ТекущийСимвол = Сред(РазбираемаяСтрока, НомерСимвола, 1); - Если Найти(Цифры, ТекущийСимвол) Тогда - ЦифроваяЧасть = ЦифроваяЧасть + ТекущийСимвол; - Иначе - Если Найти(ПропускаемыеСимволы, ТекущийСимвол) = Неопределено Тогда - Прервать; - Иначе - Продолжить; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Если пустую строку попробовать преобразовать в число - то будет ошибка, - // поэтому в данном случае вместо пустой строки возвращаем строку с нулем. - Если ЦифроваяЧасть = "" Тогда - ЦифроваяЧасть = "0"; - КонецЕсли; - - Возврат ЦифроваяЧасть; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Фоновое задание загрузки данных КЛАДР // @@ -3245,24 +3296,16 @@ Параметры.Вставить("ОбъектыЗагрузки", ОбъектыЗагрузки); Параметры.Вставить("ИсточникДанных", ИсточникДанных); - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - // Описание файлов передаем непосредственно - Параметры.Вставить("ПереданныеФайлы", ПереданныеФайлы); + // Всегда через фоновое + + // Описание файлов передаем в фоновое задание как двоичные данные - другая сессия + Параметры.Вставить("ПереданныеФайлы", ДвоичныеДанныеФайловКЛАДР(ПереданныеФайлы)); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(ИдентификаторХранилища, + "АдресныйКлассификатор.ФоноваяЗагрузкаФайловКЛАДР", Параметры, + НСтр("ru = 'Загрузка адресного классификатора'")); - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторХранилища); - ФоноваяЗагрузкаФайловКЛАДР(Параметры, АдресХранилища); - Результат = Новый Структура("ЗаданиеВыполнено", Истина); - - Иначе - // Описание файлов передаем как двоичные данные - Параметры.Вставить("ПереданныеФайлы", ДвоичныеДанныеФайловКЛАДР(ПереданныеФайлы)); - - Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(ИдентификаторХранилища, - "АдресныйКлассификатор.ФоноваяЗагрузкаФайловКЛАДР", Параметры, - НСтр("ru = 'Загрузка адресного классификатора'")); - - АдресХранилища = Результат.АдресХранилища; - КонецЕсли; + АдресХранилища = Результат.АдресХранилища; Если Результат.ЗаданиеВыполнено Тогда Результат.Вставить("РезультатЗагрузки", ПолучитьИзВременногоХранилища(АдресХранилища)); @@ -3295,18 +3338,22 @@ Если ИсточникДанных = 1 Тогда КаталогФайлов = ИзвлечьФайлыКЛАДРСайт(ПереданныеФайлы); + ИначеЕсли ИсточникДанных = 2 Тогда КаталогФайлов = ИзвлечьФайлыКЛАДРИТС(ПереданныеФайлы); + ИначеЕсли ИсточникДанных = 3 Тогда КаталогФайлов = ИзвлечьФайлыКЛАДРДиск(ПереданныеФайлы); + Иначе ВызватьИсключение НСтр("ru = 'Не поддерживаемый источник данных КЛАДР'"); КонецЕсли; + // После извлечения ожидаем, что все имена файлов - в верхнем регистре + // Определяем версию того, что грузим - Маска = ?(ОбщегоНазначения.ЭтоLinuxСервер(), "[Kk][Ll][Aa][Dd][Rr].[Dd][Bb][Ff]" , "kladr.dbf"); - ФайлыВерсии = НайтиФайлы(КаталогФайлов, Маска, Ложь); - Если ФайлыВерсии.Количество()=0 Тогда + ФайлыВерсии = НайтиФайлы(КаталогФайлов, "KLADR.DBF", Ложь); + Если ФайлыВерсии.Количество() = 0 Тогда ЗагружаемаяВерсия = ТекущаяДатаСеанса(); Иначе ЗагружаемаяВерсия = ФайлыВерсии[0].ПолучитьВремяИзменения(); @@ -3355,8 +3402,25 @@ Данные.Записать(ИмяАрхива); Архив = Новый ЧтениеZipФайла(ИмяАрхива); - Архив.ИзвлечьВсе(СерверныйКаталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + Для Каждого ЭлементАрхива Из Архив.Элементы Цикл + + Расширение = Врег(ЭлементАрхива.Расширение); + Если Расширение = "DBF" Тогда + Архив.Извлечь(ЭлементАрхива, СерверныйКаталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + + // Имена распакованных файлов должны быть всегда в верхнем регистре + Для Каждого РаспакованныйФайл Из НайтиФайлы(СерверныйКаталог, ЭлементАрхива.Имя, Ложь) Цикл + РезультирующееИмя = ВРег(РаспакованныйФайл.Имя); + Если РаспакованныйФайл.Имя <> РезультирующееИмя Тогда + ПереместитьФайл(РаспакованныйФайл.ПолноеИмя, РаспакованныйФайл.Путь + РезультирующееИмя) + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Архив.Закрыть(); УдалитьВременныеФайлы(ИмяАрхива); КонецЦикла; @@ -3365,20 +3429,23 @@ Функция ИзвлечьФайлыКЛАДРИТС(Знач ПереданныеФайлы) // С ИТC приходят файлы *.exe, представляющие собой самораспаковывающийся RAR - // Сейчас они распаковываются на клиенте + // Сейчас они распаковываются на клиенте и здесь мы получаем dbf СерверныйКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); СоздатьКаталог(СерверныйКаталог); Для Каждого Описание Из ПереданныеФайлы Цикл Файл = Новый Файл(Описание.Имя); - Если Врег(Файл.Расширение) <> ".DBF" Тогда - Продолжить; + Расширение = Врег(Файл.Расширение); + + Если Расширение = ".DBF" Тогда + // Имена файлов должны быть всегда в верхнем регистре + ИмяАрхива = СерверныйКаталог + ВРег(Файл.Имя); + + Данные = ?(ТипЗнч(Описание.Хранение) = Тип("Строка"), ПолучитьИзВременногоХранилища(Описание.Хранение), Описание.Хранение); + Данные.Записать(ИмяАрхива); КонецЕсли; - ИмяАрхива = СерверныйКаталог + Файл.Имя; - Данные = ?(ТипЗнч(Описание.Хранение) = Тип("Строка"), ПолучитьИзВременногоХранилища(Описание.Хранение), Описание.Хранение); - Данные.Записать(ИмяАрхива); КонецЦикла; Возврат СерверныйКаталог; @@ -3392,168 +3459,194 @@ Для Каждого Описание Из ПереданныеФайлы Цикл Файл = Новый Файл(Описание.Имя); - Если Врег(Файл.Расширение) <> ".DBF" Тогда - Продолжить; + Расширение = Врег(Файл.Расширение); + + Если Расширение = ".DBF" Тогда + // Имена файлов должны быть всегда в верхнем регистре + ИмяФайла = СерверныйКаталог + ВРег(Файл.Имя); + + Данные = ?(ТипЗнч(Описание.Хранение) = Тип("Строка"), ПолучитьИзВременногоХранилища(Описание.Хранение), Описание.Хранение); + Данные.Записать(ИмяФайла); КонецЕсли; - ИмяФайла = СерверныйКаталог + Файл.Имя; - Данные = ?(ТипЗнч(Описание.Хранение) = Тип("Строка"), ПолучитьИзВременногоХранилища(Описание.Хранение), Описание.Хранение); - Данные.Записать(ИмяФайла); КонецЦикла; Возврат СерверныйКаталог; КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Учет изменений КЛАДР в упаковке домов по данным ФИАС // -// Поиск данных по номеру дома и корпуса. Предназначено для совместимости старых проверок. -// +// Проверяем один вариант здания +// +Функция ВариантДомаКорпусаПодходит(Знач Здание, Знач Вариант, Знач ТипыЧастейЗдания, КэшОписанийЗданий) + + Если Вариант.ЭтоДиапазон Тогда + Если ЗданиеВходитВДиапазон(Здание, Вариант.Описание) Тогда + Возврат Истина; + КонецЕсли; + Иначе + Если ЗданиеВходитВОписание(Здание, Вариант.Описание, Ложь, ТипыЧастейЗдания, КэшОписанийЗданий) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +// Формирует текст ошибки с учетом указанной иерархии. Регион установлен всегда +// +Функция ТекстОшибкиПоискаВИерархииКлассификатора(Знач АдресныйОбъект, Знач ПолеОшибки) + ТекстОшибки = ""; + + Если ПолеОшибки = "Регион" Тогда + ТекстОшибки = НСтр("ru = 'Регион ""%1"" не найден в адресном классификаторе.'"); + + ИначеЕсли ПолеОшибки = "Район" Тогда + ТекстОшибки = НСтр("ru = 'Район ""%2"" не найден в регионе ""%1"" адресного классификатора.'") + + ИначеЕсли ПолеОшибки = "Город" Тогда + РайонУстановлен = Не ПустаяСтрока(АдресныйОбъект.Район); + Если РайонУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Город ""%3"" не найден в районе ""%2"" региона ""%1"" адресного классификатора.'"); + + Иначе + ТекстОшибки = НСтр("ru = 'Город ""%3"" не найден в регионе ""%1"" адресного классификатора.'"); + + КонецЕсли; + + ИначеЕсли ПолеОшибки = "НаселенныйПункт" Тогда + РайонУстановлен = Не ПустаяСтрока(АдресныйОбъект.Район); + ГородУстановлен = Не ПустаяСтрока(АдресныйОбъект.Город); + + Если РайонУстановлен И ГородУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Населенный пункт ""%4"" не найден в городе ""%3"" района ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли РайонУстановлен И Не ГородУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Населенный пункт ""%4"" не найден в районе ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И ГородУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Населенный пункт %4 не найден в городе ""%3"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И Не ГородУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Населенный пункт ""%4"" не найден в регионе ""%1"" адресного классификатора.'"); + + КонецЕсли; + + ИначеЕсли ПолеОшибки = "Улица" Тогда + РайонУстановлен = Не ПустаяСтрока(АдресныйОбъект.Район); + ГородУстановлен = Не ПустаяСтрока(АдресныйОбъект.Город); + НаселенныйПунктУстановлен = Не ПустаяСтрока(АдресныйОбъект.НаселенныйПункт); + + Если РайонУстановлен И ГородУстановлен И НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в населенном пункте ""%4"" города ""%3"" района ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли РайонУстановлен И ГородУстановлен И Не НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в городе ""%3"" района ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли РайонУстановлен И Не ГородУстановлен И НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в населенном пункте ""%4"" района ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли РайонУстановлен И Не ГородУстановлен И Не НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в районе ""%2"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И ГородУстановлен И НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в населенном пункте ""%4"" города ""%3"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И ГородУстановлен И Не НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в городе ""%3"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И Не ГородУстановлен И НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в населенном пункте ""%4"" региона ""%1"" адресного классификатора.'"); + + ИначеЕсли Не РайонУстановлен И Не ГородУстановлен И Не НаселенныйПунктУстановлен Тогда + ТекстОшибки = НСтр("ru = 'Улица ""%5"" не найдена в регионе ""%1"" адресного классификатора.'"); + + КонецЕсли; + + ИначеЕсли ПолеОшибки = "Дом" Тогда + ТекстОшибки = НСтр("ru = 'Дом (владение, домовладение) ""%6"" не найден в адресном классификаторе.'"); + + ИначеЕсли ПолеОшибки = "Корпус" Тогда + ТекстОшибки = НСтр("ru = 'Корпус (строение, литера) ""%7"" для дома (владения, домовладения) ""%6"" не найден в адресном классификаторе.'"); + + ИначеЕсли ПолеОшибки = "Индекс" Тогда + ТекстОшибки = НСтр("ru = 'Индекс ""%8"" не соответствует адресу.'"); + + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, + АдресныйОбъект.Регион, АдресныйОбъект.Район, АдресныйОбъект.Город, АдресныйОбъект.НаселенныйПункт, АдресныйОбъект.Улица, + АдресныйОбъект.НомерДома, АдресныйОбъект.НомерКорпуса, АдресныйОбъект.Индекс + ); + +КонецФункции + +// Разделяет исходный текст на наименование и сокращение. +// Сокращением считается последнее слово, отделенное пробельным символом +// // Параметры: -// Улица - Структура с описанием улицы (коды частей адреса) -// НомерДома - Строка или число с номером дома (владения, домовладения) -// НомерКорпуса - Строка или число с номером корпуса (строения, литеры, сооружения, участка) +// Название - Строка - Полное название, например "Москва г" // -// Возвращаемое значение - структура с полями: -// ЕстьЗдания - Булево - признак того, что на улице есть дома -// Индекс - Строка - почтовый индекс дома. Неопределено, если дом не найден -// Код - Строка - код адресного классификатора дома. Неопределено, если дом не найден +// Возвращаемое значение: +// Структура - содержит поля +// * Наименование - Строка - Наименование, например "Москва". Если сокращение выделить не удалось, то исходное название +// * Сокращение - Строка - Сокращение, например "г". Если сокращение выделить не удалось, то пустая строка // -Функция ДанныеЗданияПоДомуИКорпусу(Знач Улица, Знач НомерДома, Знач НомерКорпуса) +Функция НаименованиеИСокращение(Знач Название) + ТекстПоиска = СокрП(Название); - ВсеВарианты = ВариантыНомеровЗданийУлицы(Улица); - Результат = Новый Структура("ЕстьЗдания, Код, Индекс", ВсеВарианты.Количество()>0); - Если Не Результат.ЕстьЗдания Тогда - Возврат Результат; - КонецЕсли; - - ВсеВарианты.Сортировать("ЭтоДиапазон, Описание"); - - // Перебираем все варианты совместимости: - // номер дома может означать Дом, Владение, Домовладение - // номер корпуса - Корпус, Строение, Литер, Сооружение, Участок - - ВариантыДома = Новый Структура("Дом, Владение, Домовладение"); - ВариантыКорпуса = Новый Структура("Корпус, Строение, Литер, Сооружение, Участок"); - - Если ТипЗнч(НомерДома)=Тип("Число") Тогда - НомерДомаСтрокой = Формат(НомерДома, "ЧГ="); - Иначе - НомерДомаСтрокой = ВРег(СокрЛП(СтрЗаменить(НомерДома, " ", ""))); - КонецЕсли; - - Если ТипЗнч(НомерДома)=Тип("Число") Тогда - НомерКорпусаСтрокой = Формат(НомерКорпуса, "ЧГ="); - Иначе - НомерКорпусаСтрокой = ВРег(СокрЛП(СтрЗаменить(НомерКорпуса, " ", ""))); - КонецЕсли; - - Для Каждого Вариант Из ВсеВарианты Цикл - - Для Каждого КлючЗначениеДом Из ВариантыДома Цикл - Для Каждого КлючЗначениеКорпус Из ВариантыКорпуса Цикл - Здание = Новый Структура; - Здание.Вставить(КлючЗначениеДом.Ключ, НомерДомаСтрокой); - Здание.Вставить(КлючЗначениеКорпус.Ключ, НомерКорпусаСтрокой); - - Если Вариант.ЭтоДиапазон Тогда - Если ЗданиеВходитВДиапазон(Здание, Вариант.Описание) Тогда - Результат.Индекс = Вариант.Индекс; - Результат.Код = Вариант.Код; - Возврат Результат; - КонецЕсли; - Иначе - Если ЗданиеВходитВОписание(Здание, Вариант.Описание, Ложь) Тогда - Результат.Индекс = Вариант.Индекс; - Результат.Код = Вариант.Код; - Возврат Результат; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - + Позиция = СтрДлина(ТекстПоиска); + Пока Позиция > 0 Цикл + Если ПустаяСтрока(Сред(ТекстПоиска, Позиция, 1)) Тогда + Прервать; + КонецЕсли; + Позиция = Позиция - 1; КонецЦикла; + Результат = Новый Структура("Наименование, Сокращение"); + Если Позиция = 0 Тогда + Результат.Наименование = ТекстПоиска; + Результат.Сокращение = ""; + Иначе + Результат.Наименование = СокрП(Лев(ТекстПоиска, Позиция)); + Результат.Сокращение = Сред(ТекстПоиска, Позиция + 1); + КонецЕсли; + Возврат Результат; КонецФункции -// Определяет все описания домов на улице, разбитых до конечного определения или диапазона +// Возвращает флаг того, что переданное описание - диапазон домов // // Параметры: -// Улица - Структура - поля адресного объекта-улицы, для которой запрашиваются все дома +// Описание - Строка - рассматриваемое описание диапазона +// Диапазоном упрощенно считаем или буквы "Н" и "Ч" - все нечетные и четные соответственно +// или строку с дефисом // -// Возвращаемое значение - ТаблицаЗначений с колонками -// Описание - Строка - описание дома или диапазона -// ЭтоДиапазон - Булево - признак того, что описание содержит диапазон -// Индекс - Строка - почтовый индекс -// Код - Строка - код адресного классификатора, соответствующий описанию -// -Функция ВариантыНомеровЗданийУлицы(Знач Улица) - - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | АдресныйКлассификатор.Наименование КАК Описание, - | АдресныйКлассификатор.Код КАК Код, - | АдресныйКлассификатор.Индекс КАК Индекс, - | ЛОЖЬ КАК ЭтоДиапазон - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 6 - | И АдресныйКлассификатор.ПризнакАктуальности = 0 - | - | И АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде - | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде - | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде - | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = &КодНаселенногоПунктаВКоде - | И АдресныйКлассификатор.КодУлицыВКоде = &КодУлицыВКоде - |"); - Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Улица.КодАдресногоОбъектаВКоде); - Запрос.УстановитьПараметр("КодРайонаВКоде", Улица.КодРайонаВКоде); - Запрос.УстановитьПараметр("КодГородаВКоде", Улица.КодГородаВКоде); - Запрос.УстановитьПараметр("КодНаселенногоПунктаВКоде", Улица.КодНаселенногоПунктаВКоде); - Запрос.УстановитьПараметр("КодУлицыВКоде", Улица.КодУлицыВКоде); - - Результат = Запрос.Выполнить().Выгрузить(); - - Позиция = Результат.Количество() - 1; - Пока Позиция>=0 Цикл - Строка = Результат[Позиция]; - Позиция = Позиция - 1; - - // Разбиваем на детальные описания - ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Строка.Описание, ",", Символы.ПС)), " ", "")); - - Для НомерСтроки=1 По СтрЧислоСтрок(ВариантыОписаний) Цикл - Описание = СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки); - - НоваяСтрока = Результат.Добавить(); - НоваяСтрока.Описание = Описание; - НоваяСтрока.Код = Строка.Код; - НоваяСтрока.Индекс = Строка.Индекс; - НоваяСтрока.ЭтоДиапазон = ЭтоДиапазон(Описание); - КонецЦикла; - - Результат.Удалить(Строка); - КонецЦикла; - - Возврат Результат; +// Возвращаемое значение: +// Булево - Истина, если переданная строка может быть рассмотрена как диапазон домов +/// +Функция ЭтоДиапазон(Знач Описание) + Возврат Описание="Н" + Или Описание="Ч" + Или Найти(Описание, "-") > 0 КонецФункции // Проверяет на вхождение дом в диапазон // // Параметры: -// Дом - Структура - описание дома, содержит реквизиты Дом, Корпус -// Описание - Строка - одиночное описание диапазон +// Дом - Структура - Описание дома, содержит поля описывающие дом и корпус +// Описание - Строка - Одиночное описание диапазона // -// Возвращаемые значение - Булево - признак вхождения +// Возвращаемые значение: +// Булево - признак вхождения // Функция ЗданиеВходитВДиапазон(Знач Здание, Знач Описание) ПозицияДефиса = Найти(Описание, "-"); - Если ПозицияДефиса=0 И Описание<>"Н" И Описание<>"Ч" Тогда + Если ПозицияДефиса = 0 И Описание <> "Н" И Описание <> "Ч" Тогда // Это не диапазон Возврат Ложь; КонецЕсли; @@ -3562,30 +3655,30 @@ // Выделяем числовую часть номера НомерДома = ЧисловаяЧастьНомера( ОсновнойНомерЗдания(Здание) ); - Если НомерДома=0 Тогда + Если НомерДома = 0 Тогда // Нет основного номера дома Возврат Ложь; КонецЕсли; ДлинаОписания = СтрДлина(Описание); ТекСимвол = Лев(Описание, 1); - Если ТекСимвол="Н" Тогда + Если ТекСимвол = "Н" Тогда // Нечетный - Если НомерДома%2=0 Тогда + Если НомерДома % 2 = 0 Тогда // Четный номер не может входить в нечетный диапазон Возврат Ложь; - ИначеЕсли ДлинаОписания=1 Тогда + ИначеЕсли ДлинаОписания = 1 Тогда // Все нечетные Возврат Истина; КонецЕсли; Позиция = 2; - ИначеЕсли ТекСимвол="Ч" Тогда + ИначеЕсли ТекСимвол = "Ч" Тогда // Четный - Если НомерДома%2=1 Тогда + Если НомерДома % 2 = 1 Тогда // Нечетный номер не может входить в четный диапазон Возврат Ложь; - ИначеЕсли ДлинаОписания=1 Тогда + ИначеЕсли ДлинаОписания = 1 Тогда // Все четные Возврат Истина; КонецЕсли; @@ -3602,15 +3695,17 @@ // Ищем начало НачДиапазона = 0; - Пока Позиция<ПозицияДефиса Цикл + Пока Позиция < ПозицияДефиса Цикл ТекСимвол = Сред(Описание, Позиция, 1); Позиция = Позиция + 1; - Если ТекСимвол="(" Тогда + Если ТекСимвол = "(" Тогда // Возможное начало диапазона Продолжить; + ИначеЕсли Не ЭтоЦифра(ТекСимвол) Тогда // Это неправильный диапазон Возврат Ложь; + КонецЕсли; НачДиапазона = НачДиапазона * 10 + ТипЧисло.ПривестиЗначение(ТекСимвол); КонецЦикла; @@ -3621,42 +3716,51 @@ Пока Позиция<=ДлинаОписания Цикл ТекСимвол = Сред(Описание, Позиция, 1); Позиция = Позиция + 1; - Если ТекСимвол=")" Тогда + Если ТекСимвол = ")" Тогда // Возможный конец диапазона Прервать; + ИначеЕсли Не ЭтоЦифра(ТекСимвол) Тогда // Это неправильный диапазон Возврат Ложь; + КонецЕсли; КонДиапазона = КонДиапазона * 10 + ТипЧисло.ПривестиЗначение(ТекСимвол); КонецЦикла; - Если НачДиапазона>КонДиапазона Тогда + Если НачДиапазона > КонДиапазона Тогда // Это неправильный диапазон Возврат Ложь; КонецЕсли; - Возврат НомерДома>=НачДиапазона И НомерДома<=КонДиапазона; + Возврат НомерДома >= НачДиапазона И НомерДома <= КонДиапазона; КонецФункции // Проверяет на соответствие дома описанию // // Параметры: -// Здание - Структура - описание дома, содержит реквизиты Дом, Корпус и т.п. -// Описание - Строка - одиночное описание здания -// ПолноеСоответствие - Булево - флаг точного поиска. Если указано Ложь, то поиск происходит только по -// заполненным полям параметра Здание, например под описание -// "Дом 2 корпус 1 строение 6" подойдут "Дом 2 корпус 1" и "Дом 2" +// Здание - Структура - Описание дома, содержит реквизиты Дом, Корпус или подобные +// Описание - Строка - Одиночное описание здания +// ПолноеСоответствие - Булево - Флаг точного поиска. Если указано Ложь, то поиск происходит только по +// заполненным полям параметра Здание, например под описание +// "Дом 2 корпус 1 строение 6" подойдут "Дом 2 корпус 1" и "Дом 2" +// ТипыЧастейЗдания - ТаблицаЗначений - Идентификаторы сокращения зданий, результат функции "ТипыЧастейЗдания" +// Если указано Неопределено, то будет вычислено. +// КэшОписанийЗданий - Соответствие - кэш описаний зданий, заполняется автоматически // // Возвращаемые значение - Булево - признак вхождения // -Функция ЗданиеВходитВОписание(Знач Здание, Знач Описание, Знач ПолноеСоответствие=Истина) +Функция ЗданиеВходитВОписание(Знач Здание, Знач Описание, Знач ПолноеСоответствие = Истина, ТипыЧастейЗдания = Неопределено, КэшОписанийЗданий = Неопределено) // Разбираем в структуру - ЧастиОписания = СтруктураОписанияЗдания(Описание); - Если ЧастиОписания=Неопределено Тогда - // Ошибка разбора строки - Возврат Ложь; + Если КэшОписанийЗданий = Неопределено Тогда + КэшОписанийЗданий = Новый Соответствие; + КонецЕсли; + + ЧастиОписания = КэшОписанийЗданий[Описание]; + Если ЧастиОписания = Неопределено Тогда + ЧастиОписания = СтруктураОписанияЗдания(Описание, ТипыЧастейЗдания); + КэшОписанийЗданий[Описание] = ЧастиОписания; КонецЕсли; // Сравниваем по частям @@ -3664,21 +3768,28 @@ // То, что передали, должно быть в найденном всегда Для Каждого КлючЗначение Из Здание Цикл - Значение = КлючЗначение.Значение; Ключ = КлючЗначение.Ключ; - Если Не ПустаяСтрока(Значение) И ЧастиОписания[Ключ]<>Значение Тогда + Значение = КлючЗначение.Значение; + + Если Не ЧастиОписания.Свойство(Ключ) Тогда Результат = Ложь; Прервать; + + ИначеЕсли Не ПустаяСтрока(Значение) И ЧастиОписания[Ключ] <> Значение Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; - Если ПолноеСоответствие Тогда + Если Результат И ПолноеСоответствие Тогда // Все, что нашли, должно полностью совпадать с переданным Для Каждого КлючЗначение Из ЧастиОписания Цикл Значение = КлючЗначение.Значение; Ключ = КлючЗначение.Ключ; Если Не ПустаяСтрока(Значение) Тогда - Если Не Здание.Свойство(Ключ) Или Здание[Ключ]<>Значение Тогда + Если Не Здание.Свойство(Ключ) Или Здание[Ключ] <> Значение Тогда Результат = Ложь; Прервать; КонецЕсли; @@ -3689,115 +3800,13 @@ Возврат Результат; КонецФункции -// Разбирает строковое описание отдельного здания КЛАДР -// -// Параметры: -// Описание - Строка - описание одиночного здания КЛАДР -// -// Возвращаемое значение: -// Структура - Ключ - идентификатор, значение - номер здания. -// Набор идентификаторов определяется по данным таблицы-результата ТипыЧастейЗдания -// -// Неопределено - если описание не удалось распознать. -// -Функция СтруктураОписанияЗдания(Знач Описание) - Текст = Описание; - Результат = Новый Структура; - - // Все дополнительны части здания - ТипыЧастейЗдания = ТипыЧастейЗдания(); - Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - Результат.Вставить(ТипЧасти.Идентификатор); - КонецЦикла; - - Идентификатор = "Дом"; // по умолчанию для возможно пустого первого - Результат.Вставить(Идентификатор); - - ЕстьЕщеЧасти = Истина; - - Пока ЕстьЕщеЧасти Цикл - // Тип текущей части - Позиция = 1; - Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - Если Лев(Текст, ТипЧасти.Длина)=ТипЧасти.Префикс Тогда - Идентификатор = ТипЧасти.Идентификатор; - Позиция = 1 + ТипЧасти.Длина; - Прервать; - КонецЕсли; - КонецЦикла; - Текст = Сред(Текст, Позиция); - - // Значение части - Позиция = 0; - Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - // Ищем ближайший следующий тип, после которого должно быть значение - ТестПозиции = Найти(Текст, ТипЧасти.Префикс); - Если ТестПозиции>0 // Нашли - И (Позиция=0 Или ТестПозиции<Позиция) // Ближайший - И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) // Со значением - Тогда - Позиция = ТестПозиции; - КонецЕсли; - КонецЦикла; - - ЕстьЕщеЧасти = Позиция>0; - Если ЕстьЕщеЧасти Тогда - Значение = Лев(Текст, Позиция-1); - Текст = Сред(Текст, Позиция); - Иначе - Значение = Текст; - КонецЕсли; - - Результат[Идентификатор] = СтрЗаменить(Значение, "_", "-"); - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Разбирает строковое описание диапазона КЛАДР -// -// Параметры: -// Описание - Строка - описание диапазона домов КЛАДР -// -// Возвращаемое значение: -// Структура с полями: -// Четные - Булево - Истина, если диапазон включает в себя четные дома. -// Нечетные - Булево - Истина, если диапазон включает в себя нечетные дома. -// Состав - Строка - Номера домов через дефис. Пустая строка, если в диапазоне все дома -// -// Неопределено, если описание не удалось распознать. -// -Функция СтруктураОписанияДиапазона(Знач Описание) - Если Не ЭтоДиапазон(Описание) Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = Новый Структура("Четные, Нечетные", Ложь, Ложь); - - ПервыйСимвол = Лев(Описание, 1); - Если ПервыйСимвол="Н" Тогда - Результат.Нечетные = Истина; - Текст = Сред(Описание, 2); - ИначеЕсли ПервыйСимвол="Ч" Тогда - Результат.Четные = Истина; - Текст = Сред(Описание, 2); - Иначе - Результат.Нечетные = Истина; - Результат.Четные = Истина; - Текст = Описание; - КонецЕсли; - - Результат.Вставить("Состав", СокрЛП(СтрЗаменить(СтрЗаменить(Текст, "(", ""), ")", "")) ); - - Возврат Результат; -КонецФункции - // Выделяем числовую часть номера дома // // Параметры: // Номер - Строка, Число - полный номер дома // -// Возвращаемое значение -число с числовой частью номера. Если числовой части нет, то возвращается ноль +// Возвращаемое значение +// Число - Числовая частью номера. Если числовой части нет, то возвращается ноль // Функция ЧисловаяЧастьНомера(Знач Номер) ТипЧисло = Новый ОписаниеТипов("Число"); @@ -3807,7 +3816,7 @@ КонецЕсли; НомерДома = 0; - Для Позиция=1 По СтрДлина(Номер) Цикл + Для Позиция = 1 По СтрДлина(Номер) Цикл ТекСимвол = Сред(Номер, Позиция, 1); Если Не ЭтоЦифра(ТекСимвол) Тогда Прервать; @@ -3821,21 +3830,24 @@ // Определяет тип символа // // Параметры: -// Символ- Строка - анализируемый символ +// Символ - Строка - анализируемый символ // // Возвращаемое значение: // Булево - Истина, если переданный символ является цифрой // Функция ЭтоЦифра(Знач Символ) - Возврат Найти("0123456789", Символ)>0; + + Возврат Найти("0123456789", Символ) > 0; + КонецФункции // Вычисляет основной номер здания выбором из заполненного дом, владение, домовладение // // Параметры: -// Здание - структура - анализируемое здание с полями Дом, Домовладение, Владение +// Здание - Структура - Анализируемое здание с полями Дом, Домовладение, Владение // -// Возвращаемое значение - строка с основным номером здания +// Возвращаемое значение +// Строка - Основной номер здания // Функция ОсновнойНомерЗдания(Знач Здание) Результат = ""; @@ -3855,30 +3867,86 @@ Возврат Результат; КонецФункции -// Возвращает флаг того, что переданное описание - диапазон домов +// Разбирает строковое описание отдельного здания КЛАДР // // Параметры: -// Описание - Строка - рассматриваемое описание диапазона -// Диапазоном упрощенно считаем или буквы "Н" и "Ч" - все нечетные и четные соответственно -// или строку с дефисом +// Описание - Строка - Описание одиночного здания КЛАДР +// ТипыЧастейЗдания - ТаблицаЗначений - Для разбора сокращений, результат функции ТипыЧастейЗдания указано Неопределено, то будет вычислено // -// Возвращаемое значение - Булево - Истина, если переданная строка может быть рассмотрена как диапазон домов -/// -Функция ЭтоДиапазон(Знач Описание) - Возврат Описание="Н" - Или Описание="Ч" - Или Найти(Описание, "-")>0 +// Возвращаемое значение: +// Структура - Ключ - идентификатор, значение - номер здания. +// Набор идентификаторов определяется по данным таблицы-результата ТипыЧастейЗдания +// +// Неопределено - если описание не удалось распознать. +// +Функция СтруктураОписанияЗдания(Знач Описание, ТипыЧастейЗдания = Неопределено) + + Текст = Описание; + Результат = Новый Структура; + + // Все дополнительны части здания + Если ТипыЧастейЗдания = Неопределено Тогда + ТипыЧастейЗдания = ТипыЧастейЗдания(); + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + Результат.Вставить(ТипЧасти.Идентификатор); + КонецЦикла; + КонецЕсли; + + // Идентификатор по умолчанию для возможно пустого первого ключа + Идентификатор = "Дом"; + Результат.Вставить(Идентификатор); + + ЕстьЕщеЧасти = Истина; + + Пока ЕстьЕщеЧасти Цикл + // Тип текущей части + Позиция = 1; + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + Если Лев(Текст, ТипЧасти.Длина) = ТипЧасти.Префикс Тогда + Идентификатор = ТипЧасти.Идентификатор; + Позиция = 1 + ТипЧасти.Длина; + Прервать; + КонецЕсли; + КонецЦикла; + Текст = Сред(Текст, Позиция); + + // Значение части + Позиция = 0; + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + // Ищем ближайший следующий тип, после которого должно быть значение + ТестПозиции = Найти(Текст, ТипЧасти.Префикс); + Если ТестПозиции > 0 // Нашли + И (Позиция = 0 Или ТестПозиции<Позиция) // Ближайший + И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) // Со значением + Тогда + Позиция = ТестПозиции; + КонецЕсли; + КонецЦикла; + + ЕстьЕщеЧасти = Позиция > 0; + Если ЕстьЕщеЧасти Тогда + Значение = Лев(Текст, Позиция-1); + Текст = Сред(Текст, Позиция); + Иначе + Значение = Текст; + КонецЕсли; + + Результат.Вставить(Идентификатор, СтрЗаменить(Значение, "_", "-")); + КонецЦикла; + + Возврат Результат; КонецФункции -// Формирует таблицу префиксов-разделителей данных КЛАДР, типов зданий -// Имеет неявную связь с КонтактнаяИнформацияКлиентСерверПовтИсп.ТипыОбъектовАдресацииАдресаРФ() +// Формирует таблицу префиксов - разделителей данных КЛАДР, типов зданий +// Имеет неявную логическую связь с КонтактнаяИнформацияКлиентСерверПовтИсп.ТипыОбъектовАдресацииАдресаРФ() // -// Возвращаемое значение - ТаблицаЗначений с колонками: -// Префикс - Строка - префикс-разделитель -// Идентификатор - Строка - идентификатор для структуры -// Длина - Число - длина префикса +// Возвращаемое значение - ТаблицаЗначений - Возможные варианты. Содержит колонки: +// * Префикс - Строка - префикс-разделитель +// * Идентификатор - Строка - идентификатор для структуры +// * Длина - Число - длина префикса // Функция ТипыЧастейЗдания() + Результат = НоваяСтрокаТаблицы("ВЛД", "Владение", НоваяСтрокаТаблицы("ДВЛД", "Домовладение", @@ -3886,20 +3954,26 @@ НоваяСтрокаТаблицы("К", "Корпус", НоваяСтрокаТаблицы("СТР", "Строение", НоваяСтрокаТаблицы("СТРОЕНИЕ", "Строение", - НоваяСтрокаТаблицы("ЛИТЕР", "Литер", + НоваяСтрокаТаблицы("ЛИТЕРА", "Литера", + НоваяСтрокаТаблицы("ЛИТЕР", "Литера", НоваяСтрокаТаблицы("СООРУЖЕНИЕ", "Сооружение", НоваяСтрокаТаблицы("УЧАСТОК", "Участок", - "Префикс, Идентификатор, Длина"))))))))); + "Префикс, Идентификатор, Длина")))))))))); - Результат.Индексы.Добавить("Идентификатор"); Результат.Сортировать("Длина УБЫВ, Префикс"); + Возврат Результат; КонецФункции + Функция НоваяСтрокаТаблицы(Знач Префикс, Знач Идентификатор, Знач Таблица) - Если ТипЗнч(Таблица)=Тип("Строка") Тогда + + Если ТипЗнч(Таблица) = Тип("Строка") Тогда + // Список создаваемых колонок Результат = Новый ТаблицаЗначений; Для Каждого КлючЗначение Из Новый Структура(Таблица) Цикл - Результат.Колонки.Добавить(КлючЗначение.Ключ); + ИмяКолонки = КлючЗначение.Ключ; + Результат.Колонки.Добавить(ИмяКолонки); + Результат.Индексы.Добавить(ИмяКолонки); КонецЦикла; Иначе Результат = Таблица; @@ -3913,34 +3987,48 @@ Возврат Результат; КонецФункции -// Возвращает расшифровку всех зданий улиц -// -// Параметры: -// Улица - Структура - поля адресного объекта-улицы, для которой запрашиваются все дома -// -// Возвращаемое значение - ТаблицаЗначений с колонками -// ЭтоДиапазон - Булево - признак того, что описание содержит диапазон -// Значение - Структура - расшифровка данных. Неопределено, если данные не разобраны. -// Описание - Строка - исходное описание -// Индекс - Строка - почтовый индекс -// Код - Строка - код адресного классификатора, соответствующий описанию -// -Функция РасшифровкаВсехЗданийУлицы(Знач Улица) Экспорт - Результат = ВариантыНомеровЗданийУлицы(Улица); - Результат.Колонки.Добавить("Значение"); +Процедура ЗаполнитьСтруктуруАдресаПоВыборке(Знач Приемник, Знач Источник, Знач Префикс = "") + МассивТипов = Новый Массив(1); - Для Каждого Вариант Из Результат Цикл - Если Вариант.ЭтоДиапазон Тогда - Вариант.Значение = СтруктураОписанияДиапазона(Вариант.Описание); + Для Каждого КлючЗначение Из Приемник Цикл + + Имя = КлючЗначение.Ключ; + Тип = ТипЗнч(Приемник[Имя]); + Если Тип = Неопределено Тогда + Приемник[Имя] = Источник[Префикс + Имя]; Иначе - Вариант.Значение = СтруктураОписанияЗдания(Вариант.Описание); + МассивТипов[0] = Тип; + НовыйТип = Новый ОписаниеТипов(МассивТипов); + Приемник[Имя] = НовыйТип.ПривестиЗначение(Источник[Префикс + Имя]); КонецЕсли; + КонецЦикла; - Результат.Сортировать("ЭтоДиапазон, Индекс"); - Возврат Результат; -КонецФункции +КонецПроцедуры +// Возвращает ближайший по иерархии почтовый индекс в выборке с известными полями +// +Функция ПочтовыйИндексПоИерархии(Знач Выборка) + + Индекс = СокрЛП(Выборка.Индекс); + Если ПустаяСтрока(Индекс) Тогда + Индекс = СокрЛП(Выборка.УлицаИндекс); + Если ПустаяСтрока(Индекс) Тогда + Индекс = СокрЛП(Выборка.НаселенныйПунктИндекс); + Если ПустаяСтрока(Индекс) Тогда + Индекс = СокрЛП(Выборка.ГородИндекс); + Если ПустаяСтрока(Индекс) Тогда + Индекс = СокрЛП(Выборка.РайонИндекс); + Если ПустаяСтрока(Индекс) Тогда + Индекс = СокрЛП(Выборка.РегионИндекс); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Индекс; +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Данные для подсистемы КонтактнаяИнформация -разрыв связей подсистем @@ -3958,7 +4046,7 @@ Возврат Результат; КонецФункции -Функция ЗапросДесериализацияАдресаПоПредставлениюКЛАДР(Знач ТаблицаСтранМира = "( ВЫБРАТЬ &НаименованиеРоссии КАК Наименование )") Экспорт +Функция ЗапросДесериализацияАдресаПоПредставлениюКЛАДР(Знач ИсточникСтранМира = Неопределено) Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ @@ -3978,75 +4066,86 @@ |;////////////////////////////////////////////////////////////////////////////// | |ВЫБРАТЬ - | ДанныеАдреса.Позиция КАК Позиция, - | ДанныеАдреса.Значение КАК Значение, - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Сокращение КАК Сокращение, + | РаспознанныеДанные.Позиция КАК Позиция, + | РаспознанныеДанные.Значение КАК Значение, + | РаспознанныеДанные.Наименование КАК Наименование, + | РаспознанныеДанные.Сокращение КАК Сокращение, + | РаспознанныеДанные.Начало КАК Начало, + | РаспознанныеДанные.Длина КАК Длина, + | ЛОЖЬ КАК Обработано, | - | ДанныеАдреса.Начало КАК Начало, - | ДанныеАдреса.Длина КАК Длина, - | ЛОЖЬ КАК Обработано, - | - | МИНИМУМ(АдресныйКлассификатор.ТипАдресногоЭлемента) КАК УровеньПоКлассификатору, + | РаспознанныеДанные.УровеньПоКлассификатору КАК УровеньПоКлассификатору, | ВЫБОР - | КОГДА МИНИМУМ(АдресныйКлассификатор.ТипАдресногоЭлемента) ЕСТЬ NULL ТОГДА ЛОЖЬ + | КОГДА РаспознанныеДанные.УровеньПоКлассификатору ЕСТЬ NULL ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ КАК НайденоПоКлассификатору, | - | МИНИМУМ(АдресныеСокращения.Уровень) КАК УровеньПоСокращениям, + | РаспознанныеДанные.УровеньПоСокращениям КАК УровеньПоСокращениям, | ВЫБОР - | КОГДА МИНИМУМ(АдресныеСокращения.Уровень) ЕСТЬ NULL ТОГДА ЛОЖЬ + | КОГДА РаспознанныеДанные.УровеньПоСокращениям ЕСТЬ NULL ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ КАК НайденоПоСокращениям, - | + | | ВЫБОР - | КОГДА НЕ МИНИМУМ(СтраныМира.Наименование) ЕСТЬ NULL ТОГДА ИСТИНА - | КОГДА ДанныеАдреса.Значение В (&СтраныКлассификатора) ТОГДА ИСТИНА + | КОГДА НЕ РаспознанныеДанные.МинимумСтранМира ЕСТЬ NULL ТОГДА ИСТИНА + | КОГДА РаспознанныеДанные.Значение В (&СтраныКлассификатора) ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК НайденоПоСтранамМира, | | ВЫБОР - | КОГДА ДанныеАдреса.Значение = &НаименованиеРоссии ТОГДА ИСТИНА + | КОГДА РаспознанныеДанные.Значение = &НаименованиеРоссии ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоСтранаРоссия, | | ВЫБОР - | КОГДА ДанныеАдреса.Наименование ПОДОБНО ""[0-9][0-9][0-9][0-9][0-9][0-9]"" ТОГДА ИСТИНА + | КОГДА РаспознанныеДанные.Наименование ПОДОБНО ""[0-9][0-9][0-9][0-9][0-9][0-9]"" ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК НайденоПоИндексу | - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ПО - | АдресныйКлассификатор.Наименование = ДанныеАдреса.Наименование - | И АдресныйКлассификатор.Сокращение = ДанныеАдреса.Сокращение - | И АдресныйКлассификатор.ТипАдресногоЭлемента <= 5 - | И АдресныйКлассификатор.ТипАдресногоЭлемента >= ДанныеАдреса.Позиция0 + |ИЗ ( + | ВЫБРАТЬ + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Значение КАК Значение, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение, | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения - |ПО - | АдресныеСокращения.Сокращение = ДанныеАдреса.Сокращение - | И АдресныеСокращения.Уровень <= 5 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | " + ТаблицаСтранМира + " КАК СтраныМира - |ПО - | СтраныМира.Наименование = ДанныеАдреса.Значение + | ДанныеАдреса.Начало КАК Начало, + | ДанныеАдреса.Длина КАК Длина, | - |СГРУППИРОВАТЬ ПО - | ДанныеАдреса.Позиция, - | ДанныеАдреса.Значение, - | ДанныеАдреса.Наименование, - | ДанныеАдреса.Сокращение, - | ДанныеАдреса.Начало, - | ДанныеАдреса.Длина + | МИНИМУМ(АдресныйКлассификатор.ТипАдресногоЭлемента) КАК УровеньПоКлассификатору, + | МИНИМУМ(АдресныеСокращения.Уровень) КАК УровеньПоСокращениям, + | + | МИНИМУМ(СтраныМира.Наименование) КАК МинимумСтранМира + | + | ИЗ + | ДанныеАдреса КАК ДанныеАдреса + | ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + | ПО + | АдресныйКлассификатор.Наименование = ДанныеАдреса.Наименование + | И АдресныйКлассификатор.Сокращение = ДанныеАдреса.Сокращение + | И АдресныйКлассификатор.ТипАдресногоЭлемента <= 5 + | И АдресныйКлассификатор.ТипАдресногоЭлемента >= ДанныеАдреса.Позиция0 + | ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения + | ПО + | АдресныеСокращения.Сокращение = ДанныеАдреса.Сокращение + | И АдресныеСокращения.Уровень <= 5 + | ЛЕВОЕ СОЕДИНЕНИЕ + | " + ?(ИсточникСтранМира = Неопределено, "( ВЫБРАТЬ &НаименованиеРоссии КАК Наименование )", ИсточникСтранМира) + " КАК СтраныМира + | ПО + | СтраныМира.Наименование = ДанныеАдреса.Значение + | СГРУППИРОВАТЬ ПО + | ДанныеАдреса.Позиция, + | ДанныеАдреса.Значение, + | ДанныеАдреса.Наименование, + | ДанныеАдреса.Сокращение, + | ДанныеАдреса.Начало, + | ДанныеАдреса.Длина + |) КАК РаспознанныеДанные | |УПОРЯДОЧИТЬ ПО - | ДанныеАдреса.Позиция УБЫВ + | РаспознанныеДанные.Позиция УБЫВ |"); Возврат Запрос; @@ -4054,11 +4153,14 @@ Функция ЗапросРезультатыАвтоПодбораНаселенногоПунктаКЛАДР(Знач ВыбиратьСтрок, Знач СкрыватьНеактуальныеАдреса) Экспорт + ОграничениеАктуальности = ?(СкрыватьНеактуальныеАдреса, "И Адреса.ПризнакАктуальности = 0", ""); + ОграничениеСтрок = Формат(ВыбиратьСтрок, "ЧН=; ЧГ="); + Запрос = Новый Запрос(" |ВЫБРАТЬ | КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ - | ТаблицаЗагруженныхРегионов + | ВсеЗагруженныеРегионы |ИЗ | РегистрСведений.АдресныйКлассификатор КАК ЗагруженныеРегионыВнутр |ГДЕ @@ -4074,116 +4176,104 @@ | КодАдресногоОбъектаВКоде |;////////////////////////////////////////////////////////////////////////////////////////// | - |ВЫБРАТЬ + |ВЫБРАТЬ ПЕРВЫЕ " + ОграничениеСтрок + " + | ПодобныеАдреса.Код КАК Код, + | ПодобныеАдреса.Индекс КАК Индекс, + | ПодобныеАдреса.АльтернативныеНазвания КАК АльтернативныеНазвания, + | + | ПодобныеАдреса.Наименование КАК АдресаНаименование, + | ПодобныеАдреса.Сокращение КАК АдресаСокращение, + | | ВЫБОР | КОГДА ЗагруженныеРегионы.КодАдресногоОбъектаВКоде ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК МожноЗагружатьРегион, - | ОтобранныеАдреса.* - | - |ИЗ ( - | - |ВЫБРАТЬ ПЕРВЫЕ " + Формат(ВыбиратьСтрок, "ЧН=; ЧГ=") + " - | - | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, - | - | Адреса.Код КАК Код, - | Адреса.Наименование КАК АдресаНаименование, - | - | ВЫБОР - | КОГДА Адреса.Наименование ПОДОБНО &НачалоСлова СПЕЦСИМВОЛ ""\"" ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК ПоложениеВСтроке, - | + | | ВЫБОР - | КОГДА Адреса.ПризнакАктуальности <> 0 ТОГДА ИСТИНА - | КОГДА Регионы.ПризнакАктуальности <> 0 ТОГДА ИСТИНА - | КОГДА Районы.ПризнакАктуальности <> 0 ТОГДА ИСТИНА - | КОГДА Города.ПризнакАктуальности <> 0 ТОГДА ИСТИНА - | КОГДА НаселенныеПункты.ПризнакАктуальности <> 0 ТОГДА ИСТИНА + | КОГДА ПодобныеАдреса.ПризнакАктуальности <> 0 ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Неактуален, | - | Регионы.Сокращение КАК РегионыСокращение, - | Регионы.Наименование КАК РегионыНаименование, - | Районы.Сокращение КАК РайоныСокращение, - | Районы.Наименование КАК РайоныНаименование, + | НаселенныеПункты.Сокращение КАК НаселенныеПунктыСокращение, + | НаселенныеПункты.Наименование КАК НаселенныеПунктыНаименование, + | | Города.Сокращение КАК ГородаСокращение, | Города.Наименование КАК ГородаНаименование, - | НаселенныеПункты.Сокращение КАК НаселенныеПунктыСокращение, - | НаселенныеПункты.Наименование КАК НаселенныеПунктыНаименование - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК Адреса + | + | Районы.Сокращение КАК РайоныСокращение, + | Районы.Наименование КАК РайоныНаименование, | + | Регионы.Сокращение КАК РегионыСокращение, + | Регионы.Наименование КАК РегионыНаименование + | + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК ПодобныеАдреса + | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.АдресныйКлассификатор КАК Регионы |ПО | Регионы.ТипАдресногоЭлемента = 1 - | И Регионы.КодАдресногоОбъектаВКоде = Адреса.КодАдресногоОбъектаВКоде + | И Регионы.КодАдресногоОбъектаВКоде = ПодобныеАдреса.КодАдресногоОбъектаВКоде | И Регионы.КодРайонаВКоде = 0 | И Регионы.КодГородаВКоде = 0 | И Регионы.КодНаселенногоПунктаВКоде = 0 | И Регионы.КодУлицыВКоде = 0 - | " + ?(СкрыватьНеактуальныеАдреса, "И Регионы.ПризнакАктуальности = 0","") + " | |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныйКлассификатор КАК Районы + | РегистрСведений.АдресныйКлассификатор КАК Районы |ПО | Районы.ТипАдресногоЭлемента = 2 - | И Районы.КодАдресногоОбъектаВКоде = Адреса.КодАдресногоОбъектаВКоде - | И Районы.КодРайонаВКоде = Адреса.КодРайонаВКоде + | И Районы.КодАдресногоОбъектаВКоде = ПодобныеАдреса.КодАдресногоОбъектаВКоде + | И Районы.КодРайонаВКоде = ПодобныеАдреса.КодРайонаВКоде | И Районы.КодГородаВКоде = 0 | И Районы.КодНаселенногоПунктаВКоде = 0 | И Районы.КодУлицыВКоде = 0 - | " + ?(СкрыватьНеактуальныеАдреса, "И Районы.ПризнакАктуальности = 0","") + " | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.АдресныйКлассификатор КАК Города |ПО | Города.ТипАдресногоЭлемента = 3 - | И Города.КодАдресногоОбъектаВКоде = Адреса.КодАдресногоОбъектаВКоде - | И Города.КодРайонаВКоде = Адреса.КодРайонаВКоде - | И Города.КодГородаВКоде = Адреса.КодГородаВКоде + | И Города.КодАдресногоОбъектаВКоде = ПодобныеАдреса.КодАдресногоОбъектаВКоде + | И Города.КодРайонаВКоде = ПодобныеАдреса.КодРайонаВКоде + | И Города.КодГородаВКоде = ПодобныеАдреса.КодГородаВКоде | И Города.КодНаселенногоПунктаВКоде = 0 | И Города.КодУлицыВКоде = 0 - | " + ?(СкрыватьНеактуальныеАдреса, "И Города.ПризнакАктуальности = 0","") + " | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.АдресныйКлассификатор КАК НаселенныеПункты - |ПО - | НаселенныеПункты.ТипАдресногоЭлемента = 4 - | И НаселенныеПункты.КодАдресногоОбъектаВКоде = Адреса.КодАдресногоОбъектаВКоде - | И НаселенныеПункты.КодРайонаВКоде = Адреса.КодРайонаВКоде - | И НаселенныеПункты.КодГородаВКоде = Адреса.КодГородаВКоде - | И НаселенныеПункты.КодНаселенногоПунктаВКоде = Адреса.КодНаселенногоПунктаВКоде - | И НаселенныеПункты.КодУлицыВКоде = 0 - | " + ?(СкрыватьНеактуальныеАдреса, "И НаселенныеПункты.ПризнакАктуальности = 0","") + " - | - |ГДЕ - | Адреса.ТипАдресногоЭлемента <= 4 - | " + ?(СкрыватьНеактуальныеАдреса, "И Адреса.ПризнакАктуальности = 0","") + " - | - | И ( - | // В начале строки - | Адреса.Наименование ПОДОБНО &НачалоТекста СПЕЦСИМВОЛ ""\"" - | ИЛИ - | // В начале слова - | Адреса.Наименование ПОДОБНО &НачалоСлова СПЕЦСИМВОЛ ""\"" - | ) - | - |) ОтобранныеАдреса - | - |ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЗагруженныхРегионов КАК ЗагруженныеРегионы - | |ПО - | ЗагруженныеРегионы.КодАдресногоОбъектаВКоде = ОтобранныеАдреса.КодАдресногоОбъектаВКоде + | НаселенныеПункты.ТипАдресногоЭлемента = 4 + | И НаселенныеПункты.КодАдресногоОбъектаВКоде = ПодобныеАдреса.КодАдресногоОбъектаВКоде + | И НаселенныеПункты.КодРайонаВКоде = ПодобныеАдреса.КодРайонаВКоде + | И НаселенныеПункты.КодГородаВКоде = ПодобныеАдреса.КодГородаВКоде + | И НаселенныеПункты.КодНаселенногоПунктаВКоде = ПодобныеАдреса.КодНаселенногоПунктаВКоде + | И НаселенныеПункты.КодУлицыВКоде = 0 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | ВсеЗагруженныеРегионы КАК ЗагруженныеРегионы + |ПО + | ЗагруженныеРегионы.КодАдресногоОбъектаВКоде = ПодобныеАдреса.КодАдресногоОбъектаВКоде + | + |ГДЕ + | ПодобныеАдреса.ТипАдресногоЭлемента <= 4 + | И ПодобныеАдреса.Наименование ПОДОБНО &НачалоТекста СПЕЦСИМВОЛ ""\"" + | " + ОграничениеАктуальности + " + | + |УПОРЯДОЧИТЬ ПО + | ПодобныеАдреса.Наименование, + | ПодобныеАдреса.ТипАдресногоЭлемента, + | + | Регионы.Наименование, + | Регионы.Сокращение, + | + | Районы.Наименование, + | Районы.Сокращение, + | + | Города.Наименование, + | Города.Сокращение, + | + | НаселенныеПункты.Наименование, + | НаселенныеПункты.Сокращение | - |УПОРЯДОЧИТЬ ПО - | ОтобранныеАдреса.ПоложениеВСтроке, - | ОтобранныеАдреса.РегионыНаименование, - | ОтобранныеАдреса.РайоныНаименование, - | ОтобранныеАдреса.ГородаНаименование, - | ОтобранныеАдреса.НаселенныеПунктыНаименование, - | ОтобранныеАдреса.АдресаНаименование |"); Возврат Запрос; @@ -4193,6 +4283,9 @@ Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + Формат(ВыбиратьСтрок, "ЧН=; ЧГ=") + " + | Улицы.Индекс КАК Индекс, + | Улицы.АльтернативныеНазвания КАК АльтернативныеНазвания, + | | Улицы.Код КАК Код, | | ВЫБОР @@ -4224,7 +4317,8 @@ | ) | |УПОРЯДОЧИТЬ ПО - | Улицы.Наименование + | Неактуален, + | ЕСТЬNULL(Улицы.Наименование, """") + ЕСТЬNULL(Улицы.Сокращение, """") |"); Возврат Запрос; @@ -4364,11 +4458,11 @@ |УПОРЯДОЧИТЬ ПО | Адреса.ПризнакАктуальности, // Актуальные - вперед | - | Адреса.Наименование, - | НаселенныеПункты.Наименование, - | Города.Наименование, - | Районы.Наименование, - | Регионы.Наименование + | ЕСТЬNULL(Адреса.Наименование, """") + ЕСТЬNULL(Адреса.Сокращение, """") + | + ЕСТЬNULL(НаселенныеПункты.Наименование, """") + ЕСТЬNULL(НаселенныеПункты.Сокращение, """") + | + ЕСТЬNULL(Города.Наименование, """") + ЕСТЬNULL(Города.Сокращение, """") + | + ЕСТЬNULL(Районы.Наименование, """") + ЕСТЬNULL(Районы.Сокращение, """") + | + ЕСТЬNULL(Регионы.Наименование, """") + ЕСТЬNULL(Регионы.Сокращение, """") |"; Возврат Запрос; @@ -4414,7 +4508,8 @@ | |УПОРЯДОЧИТЬ ПО | Улицы.ПризнакАктуальности, - | Улицы.Наименование + | + | ЕСТЬNULL(Улицы.Наименование, """") + ЕСТЬNULL(Улицы.Сокращение, """") |"); // Частично известные параметры @@ -4511,15 +4606,16 @@ Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ " + Формат(ВыбиратьСтрок, "ЧН=; ЧГ=") + " | - | Адреса.Код КАК Код, - | Адреса.Индекс КАК Индекс, - | Адреса.ПризнакАктуальности КАК ПризнакАктуальности, - | Адреса.Наименование КАК АдресаНаименование, - | Адреса.Сокращение КАК АдресаСокращение, + | Адреса.Код КАК Код, + | Адреса.Индекс КАК Индекс, + | Адреса.АльтернативныеНазвания КАК АльтернативныеНазвания, + | Адреса.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.Наименование КАК АдресаНаименование, + | Адреса.Сокращение КАК АдресаСокращение, | | ВЫБОР - | КОГДА Адреса.ПризнакАктуальности > 0 ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ + | КОГДА Адреса.ПризнакАктуальности > 0 ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Неактуален, | | " + ?(Уровень = 1, " @@ -4566,6 +4662,13 @@ |"; Запрос.УстановитьПараметр("Регион", ЧастиАдреса.Регион.Наименование); Запрос.УстановитьПараметр("РегионСокращение", ЧастиАдреса.Регион.Сокращение); + + Если ЧастиАдреса.Регион.Свойство("КодКлассификатора") И Не ПустаяСтрока(ЧастиАдреса.Регион.КодКлассификатора) Тогда + Запрос.УстановитьПараметр("РегионКодКлассификатора", ЧастиАдреса.Регион.КодКлассификатора); + Запрос.Текст = Запрос.Текст + "И Регионы.Код = &РегионКодКлассификатора + |"; + КонецЕсли; + КонецЕсли; Если Уровень > 2 И (Не ПустаяСтрока(ЧастиАдреса.Район.Наименование)) Тогда // Город, опираемся на район + регион, район возможно пуст @@ -4584,6 +4687,13 @@ |"; Запрос.УстановитьПараметр("Район", ЧастиАдреса.Район.Наименование); Запрос.УстановитьПараметр("РайонСокращение", ЧастиАдреса.Район.Сокращение); + + Если ЧастиАдреса.Район.Свойство("КодКлассификатора") И Не ПустаяСтрока(ЧастиАдреса.Район.КодКлассификатора) Тогда + Запрос.УстановитьПараметр("РайонКодКлассификатора", ЧастиАдреса.Район.КодКлассификатора); + Запрос.Текст = Запрос.Текст + "И Районы.Код = &РайонКодКлассификатора + |"; + КонецЕсли; + КонецЕсли; Если Уровень > 3 И (Не ПустаяСтрока(ЧастиАдреса.Город.Наименование)) Тогда // Населенный пункт, опираемся на регион + район + город, район возможно пуст, город возможно пуст @@ -4602,6 +4712,13 @@ |"; Запрос.УстановитьПараметр("Город", ЧастиАдреса.Город.Наименование); Запрос.УстановитьПараметр("ГородСокращение", ЧастиАдреса.Город.Сокращение); + + Если ЧастиАдреса.Город.Свойство("КодКлассификатора") И Не ПустаяСтрока(ЧастиАдреса.Город.КодКлассификатора) Тогда + Запрос.УстановитьПараметр("ГородКодКлассификатора", ЧастиАдреса.Город.КодКлассификатора); + Запрос.Текст = Запрос.Текст + "И Города.Код = &ГородКодКлассификатора + |"; + КонецЕсли; + КонецЕсли; Если Уровень > 4 И (Не ПустаяСтрока(ЧастиАдреса.НаселенныйПункт.Наименование)) Тогда // Улица, опираемся на регион + район + город + населенный пункт, возможно пустые @@ -4621,6 +4738,13 @@ |"; Запрос.УстановитьПараметр("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Наименование); Запрос.УстановитьПараметр("НаселенныйПунктСокращение", ЧастиАдреса.НаселенныйПункт.Сокращение); + + Если ЧастиАдреса.НаселенныйПункт.Свойство("КодКлассификатора") И Не ПустаяСтрока(ЧастиАдреса.НаселенныйПункт.КодКлассификатора) Тогда + Запрос.УстановитьПараметр("НаселенныйПунктКодКлассификатора", ЧастиАдреса.НаселенныйПункт.КодКлассификатора); + Запрос.Текст = Запрос.Текст + "И НаселенныеПункты.Код = &НаселенныйПунктКодКлассификатора + |"; + КонецЕсли; + КонецЕсли; Если ПустаяСтрока(Сокращение) Тогда @@ -4768,13 +4892,16 @@ | РегионНаименование, РегионСокращение |") + " | - |ИНДЕКСИРОВАТЬ ПО - | ПредставлениеУлица, ПредставлениеНаселенныйПункт, ПредставлениеГород, ПредставлениеРайон, ПредставлениеРегион |;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |// Основной результат |ВЫБРАТЬ - | * + | Неактуален, Индекс, Код, + | УлицаНаименование, УлицаСокращение, ПредставлениеУлица, + | НаселенныйПунктНаименование, НаселенныйПунктСокращение, ПредставлениеНаселенныйПункт, + | ГородНаименование, ГородСокращение, ПредставлениеГород, + | РайонНаименование, РайонСокращение, ПредставлениеРайон, + | РегионНаименование, РегионСокращение, ПредставлениеРегион |ИЗ | АдресаПоПочтовымИндексам |УПОРЯДОЧИТЬ ПО @@ -4787,33 +4914,46 @@ |;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |// Вспомогательный результат - |ВЫБРАТЬ - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеУлица, """")) ТОГДА - | МИНИМУМ(УлицаНаименование) ИНАЧЕ """" КОНЕЦ КАК УлицаНаименование, - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеУлица, """")) ТОГДА - | МИНИМУМ(УлицаСокращение) ИНАЧЕ """" КОНЕЦ КАК УлицаСокращение, + |ВЫБРАТЬ + | ВЫБОР КОГДА КоличествоУлица = 1 ТОГДА МинимумНаименованиеУлица ИНАЧЕ """" КОНЕЦ КАК УлицаНаименование, + | ВЫБОР КОГДА КоличествоУлица = 1 ТОГДА МинимумСокращениеУлица ИНАЧЕ """" КОНЕЦ КАК УлицаСокращение, | - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеНаселенныйПункт, """")) ТОГДА - | МИНИМУМ(НаселенныйПунктНаименование) ИНАЧЕ """" КОНЕЦ КАК НаселенныйПунктНаименование, - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеНаселенныйПункт, """")) ТОГДА - | МИНИМУМ(НаселенныйПунктСокращение) ИНАЧЕ """" КОНЕЦ КАК НаселенныйПунктСокращение, + | ВЫБОР КОГДА КоличествоНаселенныйПункт = 1 ТОГДА МинимумНаименованиеНаселенныйПункт ИНАЧЕ """" КОНЕЦ КАК НаселенныйПунктНаименование, + | ВЫБОР КОГДА КоличествоНаселенныйПункт = 1 ТОГДА МинимумСокращениеНаселенныйПункт ИНАЧЕ """" КОНЕЦ КАК НаселенныйПунктСокращение, | - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеГород, """")) ТОГДА - | МИНИМУМ(ГородНаименование) ИНАЧЕ """" КОНЕЦ КАК ГородНаименование, - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеГород, """")) ТОГДА - | МИНИМУМ(ГородСокращение) ИНАЧЕ """" КОНЕЦ КАК ГородСокращение, + | ВЫБОР КОГДА КоличествоГород = 1 ТОГДА МинимумНаименованиеГород ИНАЧЕ """" КОНЕЦ КАК ГородНаименование, + | ВЫБОР КОГДА КоличествоГород = 1 ТОГДА МинимумСокращениеГород ИНАЧЕ """" КОНЕЦ КАК ГородСокращение, | - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРайон, """")) ТОГДА - | МИНИМУМ(РайонНаименование) ИНАЧЕ """" КОНЕЦ КАК РайонНаименование, - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРайон, """")) ТОГДА - | МИНИМУМ(РайонСокращение) ИНАЧЕ """" КОНЕЦ КАК РайонСокращение, + | ВЫБОР КОГДА КоличествоРайон = 1 ТОГДА МинимумНаименованиеРайон ИНАЧЕ """" КОНЕЦ КАК РайонНаименование, + | ВЫБОР КОГДА КоличествоРайон = 1 ТОГДА МинимумСокращениеРайон ИНАЧЕ """" КОНЕЦ КАК РайонСокращение, | - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРегион, """")) ТОГДА - | МИНИМУМ(РегионНаименование) ИНАЧЕ """" КОНЕЦ КАК РегионНаименование, - | ВЫБОР КОГДА 1 = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРегион, """")) ТОГДА - | МИНИМУМ(РегионСокращение) ИНАЧЕ """" КОНЕЦ КАК РегионСокращение - |ИЗ - | АдресаПоПочтовымИндексам + | ВЫБОР КОГДА КоличествоРегион = 1 ТОГДА МинимумНаименованиеРегион ИНАЧЕ """" КОНЕЦ КАК РегионНаименование, + | ВЫБОР КОГДА КоличествоРегион = 1 ТОГДА МинимумСокращениеРегион ИНАЧЕ """" КОНЕЦ КАК РегионСокращение + | + |ИЗ ( + | ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеУлица, """")) КАК КоличествоУлица, + | МИНИМУМ(УлицаНаименование) КАК МинимумНаименованиеУлица, + | МИНИМУМ(УлицаСокращение) КАК МинимумСокращениеУлица, + | + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеНаселенныйПункт, """")) КАК КоличествоНаселенныйПункт, + | МИНИМУМ(НаселенныйПунктНаименование) КАК МинимумНаименованиеНаселенныйПункт, + | МИНИМУМ(НаселенныйПунктСокращение) КАК МинимумСокращениеНаселенныйПункт, + | + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеГород, """")) КАК КоличествоГород, + | МИНИМУМ(ГородНаименование) КАК МинимумНаименованиеГород, + | МИНИМУМ(ГородСокращение) КАК МинимумСокращениеГород, + | + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРайон, """")) КАК КоличествоРайон, + | МИНИМУМ(РайонНаименование) КАК МинимумНаименованиеРайон, + | МИНИМУМ(РайонСокращение) КАК МинимумСокращениеРайон, + | + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ПредставлениеРегион, """")) КАК КоличествоРегион, + | МИНИМУМ(РегионНаименование) КАК МинимумНаименованиеРегион, + | МИНИМУМ(РегионСокращение) КАК МинимумСокращениеРегион + | ИЗ + | АдресаПоПочтовымИндексам + |) Подзапрос |"); Возврат Запрос; @@ -4878,4 +5018,5 @@ Возврат Запрос; КонецФункции - \ No newline at end of file + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl index 84c640acc..e00c3fb98 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныйПрограммныйИнтерфейс // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. @@ -25,11 +24,12 @@ // Возвращает версию адресных объектов, записанную при последнем обновлении // Если записи об адресном объекте нет - возвращается дата 01.09.2008 // -// Возвращаемое значение - Массив - Содержит соответствия, где ключ - номер адресного объекта, значение - дата выпуска версии +// Возвращаемое значение: +// Массив - Содержит соответствия, где ключ - номер адресного объекта, значение - дата выпуска версии // -Функция ПолучитьВерсииАдресныхОбъектов() Экспорт +Функция ВерсииАдресныхОбъектов() Экспорт - Возврат АдресныйКлассификатор.ПолучитьВерсииАдресныхОбъектов(); + Возврат АдресныйКлассификатор.ВерсииАдресныхОбъектов(); КонецФункции @@ -62,4 +62,24 @@ Возврат АдресныйКлассификатор.ПолучитьВерсииАдресныхСведений(ТекстXML); -КонецФункции \ No newline at end of file +КонецФункции + +// Данные для запроса разрешений профилей безопасности для проверки наличия обновления КЛАДР на сайте 1С +// +// Возвращаемое значение: +// Массив - идентификаторы необходимых разрешений +// +Функция ЗапросРазрешенийБезопасностиПроверкиОбновленияКЛАДР() Экспорт + + ВладелецРазрешения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.АдресныйКлассификатор"); + Разрешения = АдресныйКлассификатор.РазрешенияБезопасностиПроверкиОбновления(); + + Результат = Новый Массив; + Результат.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, ВладелецРазрешения, Истина) + ); + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 861e7e5bf..fc7023b31 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывает форму загрузки классификатора. Может использоваться как интерфейс. // @@ -18,44 +17,81 @@ КонецПроцедуры -// Проверяет наличие обновлений адресного классификатора на веб сервере +// Проверяет наличие обновлений адресного классификатора на сайте // для тех объектов, которые ранее уже загружались. // -Процедура ОпределитьНеобходимостьОбновленияАдресныхОбъектов() Экспорт +// Параметры: +// Владелец - УправляемаяФорма - форма, из которой производится проверка +// +Процедура ОпределитьНеобходимостьОбновленияАдресныхОбъектов(Владелец = Неопределено) Экспорт -#Если ВебКлиент Тогда - Результат = АдресныйКлассификаторВызовСервера.ПроверитьОбновлениеАдресныхОбъектовСервер(); -#Иначе - Результат = АдресныйКлассификаторКлиентСервер.ПроверитьОбновлениеАдресныхОбъектов(); -#КонецЕсли + Если ЗапрашиватьДоступПриИспользовании() Тогда + // Нужен запрос профиля безопасности + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + АдресныйКлассификаторВызовСервера.ЗапросРазрешенийБезопасностиПроверкиОбновленияКЛАДР(), + Владелец, + Новый ОписаниеОповещения("ПолучениеРазрешенияБезопасностиПроверкиНаличияОбновленияАдресныхОбъектов", ЭтотОбъект) + ); + + Иначе + // Разрешения уже получены на всю конфигурацию + Результат = АдресныйКлассификаторКлиентСервер.ПроверитьОбновлениеАдресныхОбъектов(); + ОбработкаНеобходимостиОбновленияАдресныхОбъектов(Результат); + + КонецЕсли; - Если Не Результат.Статус Тогда - ПоказатьПредупреждение(, Результат.СообщениеОбОшибке); +КонецПроцедуры + +// Вызывает форму очистки сведений адресного классификатора по адресным объектам +// +// Параметры: +// Владелец - УправляемаяФорма - форма, из которой осуществляется очистка адресного классификатора. +// +Процедура ОчиститьКлассификатор(Владелец = Неопределено) Экспорт + + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ОчисткаАдресногоКлассификатора", , Владелец); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Обработка информации о существующем обновлении +// +Процедура ОбработкаНеобходимостиОбновленияАдресныхОбъектов(Знач ДанныеОбновления) + + Если Не ДанныеОбновления.Статус Тогда + ПоказатьПредупреждение(, ДанныеОбновления.СообщениеОбОшибке); Возврат; КонецЕсли; - Если Результат.Значение.Количество()=0 Тогда - ПоказатьПредупреждение(, НСтр("ru='Адресный классификатор не заполнен.'")); + Если ДанныеОбновления.Значение.Количество()=0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Адресный классификатор не заполнен.'")); Возврат; КонецЕсли; СписокОбновлений = ""; КоличествоАдресныхОбъектов = 0; АдресныеОбъекты = Новый Массив; - Для Каждого АдресныйОбъект Из Результат.Значение Цикл + + Для Каждого АдресныйОбъект Из ДанныеОбновления.Значение Цикл + Если АдресныйОбъект.КодАдресногоОбъекта <> "AL" И АдресныйОбъект.ОбновлениеДоступно Тогда АдресныеОбъекты.Добавить(Лев(АдресныйОбъект.КодАдресногоОбъекта, 2)); СписокОбновлений = СписокОбновлений + Лев(АдресныйОбъект.КодАдресногоОбъекта, 2) + " - " + АдресныйОбъект.Наименование + " " + АдресныйОбъект.Сокращение + Символы.ПС; + КоличествоАдресныхОбъектов = КоличествоАдресныхОбъектов + 1; КонецЕсли; + КонецЦикла; Если КоличествоАдресныхОбъектов = 0 Тогда ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обновление адресного классификатора не требуется. |В программу уже загружены актуальные адресные сведения от %1.'"), - Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D"))); + Формат(ДанныеОбновления.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D"))); Возврат; КонецЕсли; @@ -65,6 +101,7 @@ + Символы.ПС + СписокОбновлений; Оповещение = Новый ОписаниеОповещения("ОпределитьНеобходимостьОбновленияАдресныхОбъектовЗавершение", ЭтотОбъект, АдресныеОбъекты); + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); ПараметрыВопроса.Заголовок = Заголовок; ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; @@ -87,26 +124,28 @@ СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Приступить к обновлению адресного классификатора на версию от %1?'"), - Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D") + Формат(ДанныеОбновления.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D") ) + Символы.ПС + Символы.ПС + Текст, Кнопки, ПараметрыВопроса); КонецПроцедуры -// Вызывает форму очистки сведений адресного классификатора по адресным объектам +// Завершение модального получения подтверждения о получении ресурсов на проверку наличия обновления классификатора // -// Параметры: -// Владелец (УправляемаяФорма) Необязательный. Форма, из которой осуществляется очистка адресного классификатора. -// -Процедура ОчиститьКлассификатор(Владелец = Неопределено) Экспорт +Процедура ПолучениеРазрешенияБезопасностиПроверкиНаличияОбновленияАдресныхОбъектов(Знач РезультатЗакрытия, Знач ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия <> КодВозвратаДиалога.ОК Тогда + // Нет разрешения + Возврат; + КонецЕсли; - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ОчисткаАдресногоКлассификатора", , Владелец); + // Есть разрешение, можно идти на сервер + Результат = АдресныйКлассификаторВызовСервера.ПроверитьОбновлениеАдресныхОбъектовСервер(); + ОбработкаНеобходимостиОбновленияАдресныхОбъектов(Результат); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Завершение модального диалога необходимости обновления +// Завершение модального диалога вопроса необходимости обновления +// Процедура ОпределитьНеобходимостьОбновленияАдресныхОбъектовЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт #Если ВебКлиент Тогда @@ -192,8 +231,9 @@ // Функция ПроверитьНаличиеФайловНаДискеИТС(Знач ПутьКДискуИТС) Экспорт - // если был выбран диск - то убираем последний символ "\" - Если Прав(ПутьКДискуИТС, 1) = "\" Тогда + // Если был выбран диск - то убираем последний символ "\" + ПравыйСимвол = Прав(ПутьКДискуИТС, 1); + Если ПравыйСимвол = "\" Или ПравыйСимвол = "/" Тогда ПутьКДискуИТС = Лев(ПутьКДискуИТС, СтрДлина(ПутьКДискуИТС) - 1); КонецЕсли; @@ -206,6 +246,7 @@ Если ПутьКФайлу = "ALTNAMES.EXE" Тогда Продолжить; КонецЕсли; + ФайлНаДиске = Новый Файл(ПолныйПутьКФайлу); Если Не ФайлНаДиске.Существует() Тогда Возврат Ложь; @@ -232,7 +273,8 @@ ВозможныеПути.Добавить("\1CitsFr\EXE\KLADR\"); ВозможныеПути.Добавить("\1CItsB\EXE\KLADR"); - Если Прав(ПутьКДискуИТС, 1) = "\" Тогда + ПравыйСимвол = Прав(ПутьКДискуИТС, 1); + Если ПравыйСимвол = "\" Или ПравыйСимвол = "/" Тогда ПутьКДискуИТС = Лев(ПутьКДискуИТС, СтрДлина(ПутьКДискуИТС) - 1); КонецЕсли; @@ -442,3 +484,11 @@ КонецФункции #КонецЕсли + +Функция ЗапрашиватьДоступПриИспользовании() + + Возврат Ложь; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl index 02fab8d25..e755a06bc 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl @@ -3,25 +3,24 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. // -// Возвращаемое значение -// Массив структур, в котором каждая структура имеет формат: -// ключ КодАдресногоОбъекта - строка - код адресного объекта -// ключ Наименование - строка - наименование адресного объекта -// ключ Сокращение - строка - сокращение адресного объекта -// ключ Индекс - строка - индекс адресного объекта -// ключ ОбновлениеДоступно - Булево +// Возвращаемое значение: +// Массив - содержит структуры, описывающие адресные объекты, каждая структура имеет формат: +// * КодАдресногоОбъекта - Строка - код адресного объекта +// * Наименование - Строка - наименование адресного объекта +// * Сокращение - Строка - сокращение адресного объекта +// * Индекс - Строка - индекс адресного объекта +// * ОбновлениеДоступно - Булево - флаг доступности обновления // Функция ПроверитьОбновлениеАдресныхОбъектов() Экспорт - ВерсииХранимыхСведений = АдресныйКлассификаторВызовСервера.ПолучитьВерсииАдресныхОбъектов(); + ВерсииХранимыхСведений = АдресныйКлассификаторВызовСервера.ВерсииАдресныхОбъектов(); - Результат = ПолучитьВерсииДоступныеНаСайте1С(); + Результат = ВерсииДоступныеНаСайте1С(); Если НЕ Результат.Статус Тогда Возврат Результат; КонецЕсли; @@ -52,24 +51,36 @@ КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции -// Получает версии доступные на сайте 1С. +// Получает версии, доступные на сайте 1С. // // Возвращаемое значение: -// Структура: -// ключ Статус - Булево - статус наличия доступных версий. -// ключ ДоступныеВерсии - Соответствие - доступные версии. +// Структура - с двумя ключами: +// * Статус - Булево - статус наличия доступных версий. +// * ДоступныеВерсии - Соответствие - доступные версии. // -Функция ПолучитьВерсииДоступныеНаСайте1С() Экспорт +Функция ВерсииДоступныеНаСайте1С() Экспорт URLСтрока = ПутьКФайлуОписаниюДанныхКЛАДР(); + // Обход особенности БТС + СоставАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(URLСтрока); + Если ПустаяСтрока(СоставАдреса.Порт) Тогда + Протокол = ВРег(СоставАдреса.Схема); + Если Протокол = "HTTP" Тогда + СоставАдреса.Порт = 80; + ИначеЕсли Протокол = "HTTPS" Тогда + СоставАдреса.Порт = 443; + КонецЕсли; + URLСтрока = URIПоСтруктуре(СоставАдреса); + КонецЕсли; + #Если Клиент Тогда РезультатПолученияФайлов = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URLСтрока); #Иначе @@ -148,3 +159,29 @@ КонецФункции +// Противоположность ОбщегоНазначенияКлиентСервер.СтруктураURI +Функция URIПоСтруктуре(Знач СтруктураURI) + Результат = ""; + + // Протокол + Если Не ПустаяСтрока(СтруктураURI.Схема) Тогда + Результат = Результат + СтруктураURI.Схема + "://"; + КонецЕсли; + + // Авторизация + Если Не ПустаяСтрока(СтруктураURI.Логин) Тогда + Результат = Результат + СтруктураURI.Логин + ":" + СтруктураURI.Пароль + "@"; + КонецЕсли; + + // Все остальное + Результат = Результат + СтруктураURI.Хост; + Если Не ПустаяСтрока(СтруктураURI.Порт) Тогда + Результат = Результат + ":" + ?(ТипЗнч(СтруктураURI.Порт) = Тип("Число"), Формат(СтруктураURI.Порт, ""), СтруктураURI.Порт); + КонецЕсли; + + Результат = Результат + "/" + СтруктураURI.ПутьНаСервере; + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебныйВМоделиСервиса/Module.bsl index e4dce69bf..fffb9c8a9 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -76,8 +75,9 @@ Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ДатаКЛАДРа(Знач Дескриптор) @@ -111,7 +111,7 @@ РегистрыСведений.АдресныйКлассификатор.ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст(); КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторАдресныхОбъектовXML).Данные; - ВерсииХранимыхСведений = АдресныйКлассификатор.ПолучитьВерсииАдресныхОбъектов(); + ВерсииХранимыхСведений = АдресныйКлассификатор.ВерсииАдресныхОбъектов(); ТекущиеВерсии = Новый Соответствие; Для Каждого ЭлементСписка Из ВерсииХранимыхСведений Цикл ТекущиеВерсии.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); @@ -240,4 +240,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl index 93ef7ebcf..ab23c4c31 100644 --- a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -14,10 +13,16 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( "АнализЖурналаРегистрацииСлужебный"); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "АнализЖурналаРегистрацииСлужебный"); + КонецЕсли; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Заполняет переименования тех объектов метаданных, которые невозможно // автоматически найти по типу, но ссылки на которые требуется сохранять @@ -37,3 +42,43 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.АнализЖурналаРегистрации); + + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "КонтрольЖурналаРегистрации"); + Вариант.НастройкиДляПоиска.ИменаМакетов = "МакетОтчетаПоОшибкамВЖурналеРегистрации"; + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПродолжительностьРаботыРегламентныхЗаданий"); + Вариант.НастройкиДляПоиска.ИменаМакетов = "ПродолжительностьРаботыРегламентныхЗаданий, РасшифровкаРегламентныхЗаданий"; + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "АнализАктивностиПользователей"); + Вариант.Описание = НСтр("ru = 'Позволяет выполнять мониторинг активности пользователей + |в программе (насколько интенсивно и с какими объектами работают пользователи).'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "АктивностьПользователя"); + Вариант.Описание = НСтр("ru = 'Подробная информация о том, + |с какими объектами работал пользователь в программе.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "КонтрольЖурналаРегистрации"); + Вариант.Описание = НСтр("ru = 'Список критичных записей журнала регистрации.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПродолжительностьРаботыРегламентныхЗаданий"); + Вариант.Описание = НСтр("ru = 'Выводит график выполнения регламентных заданий в программе.'"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index b25e3cd7f..d9033b91a 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -3,8 +3,7 @@ // Подсистема "Анкетирование" //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -14,13 +13,16 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "Анкетирование"); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "Анкетирование"); + КонецЕсли; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Первоначальное заполнение и обновление ИБ +#Область СлужебныеПроцедурыИФункции // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // @@ -36,6 +38,73 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.АнализОпроса); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Истина); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, ""); + Вариант.НастройкиДляПоиска.НаименованияПолей = + НСтр("ru = 'Респондент + |Опрос + |Вопрос + |Ответ'"); + Вариант.НастройкиДляПоиска.НаименованияПараметровИОтборов = + НСтр("ru = 'Опрос + |Вид отчета'"); + Вариант.Описание = НСтр("ru = 'Информация о респондентах заполнивших анкеты по опросу, + |количестве ответов на вопросы, количестве данных вариантов ответов.'"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.АналитическийОтчетПоАнкетированию); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПросмотрОтветовПростыеВопросы"); + Вариант.Описание = НСтр("ru = 'Информация о том, как отвечали респонденты на простые вопросы.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПросмотрТабличныхВопросовПлоскийВид"); + Вариант.Описание = НСтр("ru = 'Информация о том, как отвечали респонденты на табличные вопросы. + |Выводится в виде списка с группировками.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПросмотрТабличныхВопросовТабличныйВид"); + Вариант.Описание = НСтр("ru = 'Информация о том, как отвечали респонденты на табличные вопросы. + |Каждый ответ респондента представлен в виде таблицы.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПростыеВопросыКоличествоОтветов"); + Вариант.Описание = НСтр("ru = 'Информация о том, сколько раз был дан вариант ответа на простой вопрос.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПростыеВопросыАгрегируемыеПоказатели"); + Вариант.Описание = НСтр("ru = 'Информация о среднем, минимальном, максимальном ответе на простой вопрос, + |который требует числового ответа.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ТабличныеВопросыКоличествоОтветов"); + Вариант.Описание = НСтр("ru = 'Информация о том, сколько раз был дан варианта ответа для табличных вопросов, + |который требует указания числового значения.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ТабличныеВопросыАгрегируемыеПоказатели"); + Вариант.Описание = НСтр("ru = 'Информация о среднем, минимальном, максимальном ответе в ячейке табличного вопроса, + |который требует указания числового значения.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПростыеВопросыКоличествоОтветовСравнениеПоОпросам"); + Вариант.Описание = НСтр("ru = 'Сравнительный анализ количества данных вариантов ответов + |на простые вопросы в разных опросах.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ТабличныеВопросыАгрегируемыеПоказателиСравнениеПоОпросам"); + Вариант.Описание = НСтр("ru = 'Сравнительный анализ агрегируемых показателей ответов в ячейках + |табличных вопросов разных опросов.'"); + +КонецПроцедуры + //Инвертирует значение реквизита НеПоказыватьВАрхивеАнкет в соответствии с новым названием ПоказыватьВАрхивеАнкет Процедура ИнвертироватьПризнакВключенияВАрхивАнкет() Экспорт @@ -64,7 +133,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Заполнение дерева анкеты @@ -146,7 +214,6 @@ КонецЦикла; - ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда ВыборкаВопросы = Результат.Выбрать(); @@ -2042,4 +2109,4 @@ КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl index 8708692c1..296c6911b 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Создает структуру отбора, для дальнейшей передачи на сервер, //и использования в качестве параметров отбора динамических списков вызываемых форм @@ -21,3 +20,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index 4ce19cc6e..881ee37fd 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Преобразовывает массив в строку, // @@ -79,12 +78,12 @@ ЗначимыеЭлементыДерева = ДеревоАнкеты.ПолучитьЭлементы(); КонецЕсли; - CформироватьНумерациюЭлементовДерева(ЗначимыеЭлементыДерева,1,Новый Массив,ПреобразовыватьФормулировку); + СформироватьНумерациюЭлементовДерева(ЗначимыеЭлементыДерева,1,Новый Массив,ПреобразовыватьФормулировку); КонецПроцедуры //Вызывается рекурсивно при формировании полного кода строк дерева анкеты -Процедура CформироватьНумерациюЭлементовДерева(СтрокиДерева, УровеньРекурсии, МассивПолныйКод, ПреобразовыватьФормулировку) +Процедура СформироватьНумерациюЭлементовДерева(СтрокиДерева, УровеньРекурсии, МассивПолныйКод, ПреобразовыватьФормулировку) Если МассивПолныйКод.Количество() < УровеньРекурсии Тогда МассивПолныйКод.Добавить(0); @@ -109,10 +108,9 @@ Элемент.Формулировка = Элемент.ПолныйКод + Элемент.Формулировка; КонецЕсли; - ПодчиненныеЭлементыСтрокиДерева = Элемент.ПолучитьЭлементы(); Если ПодчиненныеЭлементыСтрокиДерева.Количество() > 0 Тогда - CформироватьНумерациюЭлементовДерева(ПодчиненныеЭлементыСтрокиДерева,?(Элемент.ТипСтроки ="Вопрос",УровеньРекурсии,УровеньРекурсии + 1),МассивПолныйКод,ПреобразовыватьФормулировку); + СформироватьНумерациюЭлементовДерева(ПодчиненныеЭлементыСтрокиДерева,?(Элемент.ТипСтроки ="Вопрос",УровеньРекурсии,УровеньРекурсии + 1),МассивПолныйКод,ПреобразовыватьФормулировку); КонецЕсли; КонецЦикла; @@ -163,4 +161,6 @@ Возврат 0; КонецЕсли; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl index 0b5410acf..1a8ae8a46 100644 --- a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -33,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Регистрирует обработчики поставляемых данных // @@ -116,3 +116,5 @@ ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 6ee05c549..2190c6ccb 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -3,18 +3,17 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получить структуру с описанием формы выполнения задачи. // // Параметры -// ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача. // // Возвращаемое значение: -// Структура – структуру с описанием формы выполнения задачи. +// Структура - структуру с описанием формы выполнения задачи. // -Функция ПолучитьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт +Функция ФормаВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт Если ТипЗнч(ЗадачаСсылка) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда @@ -88,18 +87,18 @@ // ИнфоОПеренаправлении. // // Параметры -// МассивЗадач – Массив – массив задач для перенаправления +// МассивЗадач - Массив - массив задач для перенаправления // ИнфоОПеренаправлении - Структура - содержит новые значения реквизитов адресации задачи // ТолькоПроверка - Булево - если Истина, то функция не будет выполнять // физического перенаправления задач, а только // проверит возможность перенаправления. -// МассивПеренаправленныхЗадач - Массив – массив перенаправленных задач. +// МассивПеренаправленныхЗадач - Массив - массив перенаправленных задач. // Может отличаться по составу элементов от // массива МассивЗадач, если какие-то задачи // не удалось перенаправить. // // Возвращаемое значение: -// Булево – Истина, если перенаправление выполнено успешно. +// Булево - Истина, если перенаправление выполнено успешно. // Функция ПеренаправитьЗадачи(Знач МассивЗадач, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь, МассивПеренаправленныхЗадач = Неопределено) Экспорт @@ -365,10 +364,7 @@ // Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт - // При выполнении в регламентном задании переходим безусловно в привилегированный режим. - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); // Получаем текущее время компьютера сервера - ТекущаяДата() ДатаУведомления = ТекущаяДата(); @@ -410,10 +406,7 @@ // Процедура ПроконтролироватьЗадачи() Экспорт - // При выполнении в регламентном задании переходим безусловно в привилегированный режим. - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); Если ПросроченныеЗадачи.Количество() = 0 Тогда @@ -465,8 +458,25 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Устарела. Следует использовать ФормаВыполненияЗадачи. +// +// Получить структуру с описанием формы выполнения задачи. +// +// Параметры +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача +// +// Возвращаемое значение: +// Структура - структуру с описанием формы выполнения задачи. +// +Функция ПолучитьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт + + Возврат ФормаВыполненияЗадачи(ЗадачаСсылка); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Мониторинг и контроль исполнения @@ -744,8 +754,8 @@ ТекстСообщения = ""; Попытка - РаботаСПочтовымиСообщениями.ОтправитьСообщение( - РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -870,8 +880,8 @@ ПараметрыПисьма.Вставить("Кому", ПочтовыйАдресПолучателя); Попытка - РаботаСПочтовымиСообщениями.ОтправитьСообщение( - РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -1022,3 +1032,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 44f35f816..d51868906 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Команды работы с бизнес-процессами @@ -309,59 +308,6 @@ КонецПроцедуры -// Стандартный обработчик Выбор для списков задач. -// Для вызова из обработчика события таблицы формы Выбор. -// -// Параметры -// аналогичны параметрам обработчика таблицы формы Выбор -// -Процедура СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(ВыбраннаяСтрока) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - Возврат; - КонецЕсли; - СтандартнаяОбработка = НЕ ОткрытьФормуВыполненияЗадачи(ВыбраннаяСтрока); - -КонецПроцедуры - -// Стандартный обработчик ПередНачаломИзменения для списков задач. -// Для вызова из обработчика события таблицы формы ПередНачаломИзменения. -// -// Параметры -// аналогичны параметрам обработчика таблицы формы ПередНачаломИзменения -// -Процедура СписокЗадачПередНачаломИзменения(Элемент, Отказ) Экспорт - - Если ТипЗнч(Элемент.ТекущаяСтрока) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - Возврат; - КонецЕсли; - - Если ОткрытьФормуВыполненияЗадачи(Элемент.ТекущаяСтрока) Тогда - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - -// Открыть форму выполнения задачи, которую предоставляет бизнес-процесс. -// -// Параметры -// ЗадачаСсылка - ЗадачаИсполнителяСсылка - задача. -// -// Возвращаемое значение: -// Булево - Истина, если форма выполнения задачи была найдена и открыта. -// -Функция ОткрытьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт - - ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьФормуВыполненияЗадачи(ЗадачаСсылка); - ИмяФормыВыполненияЗадачи = ""; - Результат = ПараметрыФормы.Свойство("ИмяФормы", ИмяФормыВыполненияЗадачи); - Если Результат Тогда - ОткрытьФорму(ИмяФормыВыполненияЗадачи, ПараметрыФормы.ПараметрыФормы); - КонецЕсли; - Возврат Результат; - -КонецФункции - // Записать и закрыть форму выполнения задачи. // // Параметры @@ -458,44 +404,58 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -/////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в эту подсистему - -// Вызывается при открытии объекта из полнотекстового поиска -// Функция ПриОткрытииОбъекта позволяет настроить -// поведение при открытии результата из списка найденного в полнотекстовом поиске -// Например, это необходимо при использовании подсистемы "Бизнес-процессы и задачи". +// Устарела. Более не требуется. +// +// Стандартный обработчик Выбор для списков задач. +// Для вызова из обработчика события таблицы формы Выбор. // // Параметры -// Значение - объект, найденный в полнотекстовом поиске, например СправочникСсылка -// СтандартнаяОбработка - Булево - по умолчанию Истина. -// Если поведение изменено (по собственной механике делается открытие формы для Значение), -// то СтандартнаяОбработка надо установить в Ложь -// -// При использовании подсистемы "Бизнес-процессы и задачи" нужно -// вписать следующий код: +// аналогичны параметрам обработчика таблицы формы Выбор // -//Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда -// Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда -// СтандартнаяОбработка = Ложь; -// КонецЕсли; -//КонецЕсли; -// -Процедура ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - Если ОткрытьФормуВыполненияЗадачи(Значение) Тогда - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; +Процедура СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Устарела. Более не требуется. +// +// Стандартный обработчик ПередНачаломИзменения для списков задач. +// Для вызова из обработчика события таблицы формы ПередНачаломИзменения. +// +// Параметры +// аналогичны параметрам обработчика таблицы формы ПередНачаломИзменения +// +Процедура СписокЗадачПередНачаломИзменения(Элемент, Отказ) Экспорт + +КонецПроцедуры + +// Устарела. Более не требуется. +// Вместо нее следует вызывать +// +// ПоказатьЗначение(, ЗадачаСсылка); +// +// Открыть форму выполнения задачи, которую предоставляет бизнес-процесс. +// +// Параметры +// ЗадачаСсылка - ЗадачаИсполнителяСсылка - задача. +// +// Возвращаемое значение: +// Булево - Истина, если форма выполнения задачи была найдена и открыта. +// +Функция ОткрытьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт + + ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(ЗадачаСсылка); + ИмяФормыВыполненияЗадачи = ""; + Результат = ПараметрыФормы.Свойство("ИмяФормы", ИмяФормыВыполненияЗадачи); + Если Результат Тогда + ОткрытьФорму(ИмяФормыВыполненияЗадачи, ПараметрыФормы.ПараметрыФормы); + КонецЕсли; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Стандартный обработчик ПометкаУдаления для списков бизнес-процессов. // Для вызова из обработчика события списка ПометкаУдаления. @@ -683,3 +643,5 @@ Оповестить("Запись_ЗадачаИсполнителя", Новый Структура("Перенаправлена", Истина), МассивЗадач); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl index 9e5b1e07e..9bfc5ee5e 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает форму выбора исполнителя. // @@ -39,3 +38,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index 6b573710d..41a3e0d50 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается для обновления данных бизнес-процесса в регистре сведений // ДанныеБизнесПроцессов. @@ -56,4 +55,6 @@ Процедура ПриПолученииФормыВыполненияЗадачи(ИмяБизнесПроцесса, ЗадачаСсылка, ТочкаМаршрутаБизнесПроцесса, ПараметрыФормы) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 120100582..d47cf035b 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Инициализирует общие параметры формы выполнения задачи. // @@ -157,7 +156,7 @@ // // Параметры: // Исполнитель - ПользовательСсылка - исполнитель задачи. -// РольИсполнителя – Справочники.РолиИсполнителей – роль +// РольИсполнителя - Справочники.РолиИсполнителей - роль // ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации - произвольный ссылочный тип. // // Возвращаемое значение: @@ -178,7 +177,7 @@ // Возвращает строковое представление роли РольИсполнителя. // // Параметры -// РольИсполнителя – Справочники.РолиИсполнителей – роль +// РольИсполнителя - Справочники.РолиИсполнителей - роль // ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации - произвольный ссылочный тип. // // Возвращаемое значение: @@ -471,8 +470,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет служебные события подсистемы БизнесПроцессыИЗадачи: // @@ -560,6 +560,11 @@ "БизнесПроцессыИЗадачиСервер"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "БизнесПроцессыИЗадачиСервер"); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -650,8 +655,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -659,7 +665,7 @@ // Устанавливает текстовое описание предмета // // Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // Представление - Строка - сюда необходимо поместить текстовое описание. Процедура ПриОпределенииПредставленияПредмета(СсылкаНаПредмет, Представление) Экспорт @@ -792,18 +798,6 @@ Возврат; КонецЕсли; - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - - Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("Организации") Тогда - - Описание = Описание + - " - |РегистрСведений.ИсполнителиЗадач.Чтение.Организации - |РегистрСведений.ИсполнителиЗадач.Изменение.Организации - |"; - - КонецЕсли; - Описание = Описание + " |БизнесПроцесс.Задание.Чтение.Пользователи @@ -841,6 +835,26 @@ КонецПроцедуры +// Заполняет настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + Отчеты.БизнесПроцессы.НастроитьВариантыОтчета(Настройки); + Отчеты.ЗависшиеЗадачи.НастроитьВариантыОтчета(Настройки); + Отчеты.Задания.НастроитьВариантыОтчета(Настройки); + Отчеты.Задачи.НастроитьВариантыОтчета(Настройки); + Отчеты.ЗадачиИстекающиеНаДату.НастроитьВариантыОтчета(Настройки); + Отчеты.ПросроченныеЗадачи.НастроитьВариантыОтчета(Настройки); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -1521,8 +1535,8 @@ // Возвращает адрес электронной почты пользователя Получатель для рассылки уведомлений о задачах. // // Параметры -// Получатель – СправочникСсылка.Пользователи -// Адрес - Строка – возвращаемый адрес электронной почты. +// Получатель - СправочникСсылка.Пользователи +// Адрес - Строка - возвращаемый адрес электронной почты. // // Процедура ПриПолученииАдресаЭлектроннойПочты(Знач Получатель, Адрес) Экспорт @@ -1553,10 +1567,11 @@ // Процедура ПриОпределенииВнешнейЗадачи(ЗадачаСсылка, ЗадачаВнешняя) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи") Тогда Иначе ЗадачаВнешняя = Ложь; КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index 8a6ebbc98..a2445042b 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события подсистемы. @@ -73,3 +72,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 62591d301..839216210 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует список разделов, в которых размещены команды вызова панели отчетов. // @@ -17,26 +16,35 @@ // Функция ИспользуемыеРазделы() Экспорт Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); - Результат.Колонки.Добавить("Имя", ОписаниеТиповСтрока()); - Результат.Колонки.Добавить("Представление", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("Имя", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("Представление", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("ЗаголовокПанели", ОписаниеТиповСтрока()); - РазделыМетаданные = Новый Массив; + СписокРазделов = Новый СписокЗначений; - ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов(РазделыМетаданные); + ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов(СписокРазделов); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкиПрограммы") Тогда МодульОбработкиПанельАдминистрированияБСП = ОбщегоНазначения.ОбщийМодуль("Обработки.ПанельАдминистрированияБСП"); - МодульОбработкиПанельАдминистрированияБСП.ПриОпределенииРазделовСВариантамиОтчетов(РазделыМетаданные); + МодульОбработкиПанельАдминистрированияБСП.ПриОпределенииРазделовСВариантамиОтчетов(СписокРазделов); КонецЕсли; - Для Каждого РазделМетаданные Из РазделыМетаданные Цикл + Для Каждого ЭлементСписка Из СписокРазделов Цикл + РазделМетаданные = ЭлементСписка.Значение; + Если ЗначениеЗаполнено(ЭлементСписка.Представление) Тогда + ШаблонЗаголовка = ЭлементСписка.Представление; + Иначе + ШаблонЗаголовка = НСтр("ru = 'Отчеты раздела ""%1""'"); + КонецЕсли; + Строка = Результат.Добавить(); - Строка.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); - Строка.Метаданные = РазделМетаданные; - Строка.Имя = РазделМетаданные.Имя; - Строка.Представление = РазделМетаданные.Представление(); + Строка.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); + Строка.Метаданные = РазделМетаданные; + Строка.Имя = РазделМетаданные.Имя; + Строка.Представление = РазделМетаданные.Представление(); + Строка.ЗаголовокПанели = СтрЗаменить(ШаблонЗаголовка, "%1", Строка.Представление); КонецЦикла; Возврат Результат; @@ -104,6 +112,41 @@ //////////////////////////////////////////////////////////////////////////////// // Поддержка переопределяемых модулей +// Вызывает модуль менеджера отчета для заполнения его настроек. +// Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// см. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Параметры: +// Настройки - Коллекция - Передается "как есть" из процедуры НастроитьВариантыОтчетов. +// ОтчетМетаданные - ОбъектМетаданных - Метаданные отчета. +// +// Важно: +// Для использования в модуле менеджера отчета должна быть размещена экспортная процедура по шаблону: +// // Настройки размещения в панели отчетов. +// // +// // Параметры: +// // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// // см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// // НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. +// // см. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// // +// // Описание: +// // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // +// // Вспомогательные методы: +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет поддерживает только этот режим. +// // +// Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт +// НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// КонецПроцедуры +// +Процедура НастроитьОтчетВМодулеМенеджера(Настройки, ОтчетМетаданные) Экспорт + НастройкиОтчета = ОписаниеОтчета(Настройки, ОтчетМетаданные); + Отчеты[ОтчетМетаданные.Имя].НастроитьВариантыОтчета(Настройки, НастройкиОтчета); +КонецПроцедуры + // Формирует описание настроек отчета. // Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // см. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). @@ -152,21 +195,19 @@ // см. "Реквизиты для изменения" функции ДеревоНастроекВариантовОтчетовКонфигурации(). // Функция ОписаниеВарианта(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт - Если ТипЗнч(ОтчетСтрокаДереваИлиЗначениеИлиМетаданные) <> Тип("СтрокаДереваЗначений") Тогда - СтрокаОтчет = ОписаниеОтчета(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные); - Иначе + Если ТипЗнч(ОтчетСтрокаДереваИлиЗначениеИлиМетаданные) = Тип("СтрокаДереваЗначений") Тогда СтрокаОтчет = ОтчетСтрокаДереваИлиЗначениеИлиМетаданные; + Иначе + СтрокаОтчет = ОписаниеОтчета(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные); КонецЕсли; СтрокаВариант = СтрокаОтчет.Строки.Найти(КлючВарианта, "КлючВарианта", Ложь); Если СтрокаВариант = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка получения описания варианта ""%1"" отчета ""%2"", - |он не подключен к подсистеме ""%3""'"), + НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2"".'"), КлючВарианта, - СтрокаОтчет.Метаданные.Имя, - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); + СтрокаОтчет.Метаданные.Имя); КонецЕсли; ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет); @@ -174,6 +215,191 @@ Возврат СтрокаВариант; КонецФункции +// Устанавливает режим вывода Отчетов и Вариантов в панелях отчетов. +// +// Параметры: +// Настройки - Передается "как есть" из процедуры НастроитьВариантыОтчетов. +// ОтчетИлиПодсистема - СтрокаДереваЗначений, ОбъектМетаданных: Отчет, ОбъектМетаданных: Подсистема - +// Описание отчета или подсистемы, для которой устанавливается режим вывода. +// Когда передана подсистема режим устанавливается рекурсивно для всех отчетов из ее состава. +// ВыводитьОтчетыВместоВариантов - Булево, Строка - Режим вывода гиперссылок этого отчета в панели отчетов: +// - Истина, "ПоОтчетам" - Варианты отчета по умолчанию скрыты, а отчет (вариант с пустым ключем) включен и видим. +// - Ложь, "ПоВариантам" - Варианты отчета по умолчанию видимы, а отчет отключен. Как в версии 2.2.1 и ранее. +// +Процедура УстановитьРежимВыводаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ВыводитьОтчетыВместоВариантов) Экспорт + Если ТипЗнч(ВыводитьОтчетыВместоВариантов) <> Тип("Булево") Тогда + ВыводитьОтчетыВместоВариантов = (ВыводитьОтчетыВместоВариантов = ВРег("ПоОтчетам")); + КонецЕсли; + Если ТипЗнч(ОтчетИлиПодсистема) = Тип("СтрокаДереваЗначений") + Или Метаданные.Отчеты.Содержит(ОтчетИлиПодсистема) Тогда + УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ВыводитьОтчетыВместоВариантов); + Иначе + Подсистемы = Новый Массив; + Подсистемы.Добавить(ОтчетИлиПодсистема); + Количество = 1; + ОбработанныеОбъекты = Новый Массив; + Пока Количество > 0 Цикл + Количество = Количество - 1; + Подсистема = Подсистемы[0]; + Подсистемы.Удалить(0); + Для Каждого ВложеннаяПодсистема Из Подсистема.Подсистемы Цикл + Количество = Количество + 1; + Подсистемы.Добавить(ВложеннаяПодсистема); + КонецЦикла; + Для Каждого ОбъектМетаданных Из ОтчетИлиПодсистема.Состав Цикл + Если ОбработанныеОбъекты.Найти(ОбъектМетаданных) = Неопределено Тогда + ОбработанныеОбъекты.Добавить(ОбъектМетаданных); + Если Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда + УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, ОбъектМетаданных, ВыводитьОтчетыВместоВариантов); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для вызова из форм отчетов. + +// Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки. +// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// Настройки - ОбъектМетаданных - Передается "как есть" из процедуры ПриСохраненииПользовательскихНастроекНаСервере. +// +Процедура ПриСохраненииПользовательскихНастроекНаСервере(Форма, Настройки) Экспорт + + РеквизитыФормы = Новый Структура("КлючОбъекта, ВариантСсылка"); + ЗаполнитьЗначенияСвойств(РеквизитыФормы, Форма); + Если Не ЗначениеЗаполнено(РеквизитыФормы.КлючОбъекта) + Или Не ЗначениеЗаполнено(РеквизитыФормы.ВариантСсылка) Тогда + ОтчетОбъект = Форма.РеквизитФормыВЗначение("Отчет"); + ОтчетМетаданные = ОтчетОбъект.Метаданные(); + Если Не ЗначениеЗаполнено(РеквизитыФормы.КлючОбъекта) Тогда + РеквизитыФормы.КлючОбъекта = ОтчетМетаданные.ПолноеИмя(); + КонецЕсли; + Если Не ЗначениеЗаполнено(РеквизитыФормы.ВариантСсылка) Тогда + ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(РеквизитыФормы.КлючОбъекта); + Если НЕ ЗначениеЗаполнено(ОтчетИнформация.ТекстОшибки) Тогда + ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ОтчетСсылка = РеквизитыФормы.КлючОбъекта; + КонецЕсли; + РеквизитыФормы.ВариантСсылка = ПолучитьСсылку(ОтчетСсылка, Форма.КлючТекущегоВарианта); + КонецЕсли; + КонецЕсли; + + КлючНастроек = РеквизитыФормы.КлючОбъекта + "/" + Форма.КлючТекущегоВарианта; + СписокНастроек = ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(КлючНастроек); + КоличествоНастроек = СписокНастроек.Количество(); + ПользовательСсылка = Пользователи.АвторизованныйПользователь(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | * + |ИЗ + | Справочник.ПользовательскиеНастройкиОтчетов КАК ПользовательскиеНастройкиОтчетов + |ГДЕ + | ПользовательскиеНастройкиОтчетов.Вариант = &ВариантСсылка + | И ПользовательскиеНастройкиОтчетов.Пользователь = &ПользовательСсылка + | + |УПОРЯДОЧИТЬ ПО + | ПользовательскиеНастройкиОтчетов.ПометкаУдаления"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВариантСсылка", РеквизитыФормы.ВариантСсылка); + Запрос.УстановитьПараметр("ПользовательСсылка", ПользовательСсылка); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ЭлементСписка = СписокНастроек.НайтиПоЗначению(Выборка.КлючПользовательскойНастройки); + + ПометкаУдаления = (ЭлементСписка = Неопределено); + Если ПометкаУдаления <> Выборка.ПометкаУдаления Тогда + НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + НастройкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления); + КонецЕсли; + Если ПометкаУдаления Тогда + Если КоличествоНастроек = 0 Тогда + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + Если Выборка.Наименование <> ЭлементСписка.Представление Тогда + НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + НастройкаОбъект.Наименование = ЭлементСписка.Представление; + НастройкаОбъект.Записать(); + КонецЕсли; + + СписокНастроек.Удалить(ЭлементСписка); + КоличествоНастроек = КоличествоНастроек - 1; + КонецЦикла; + + Для Каждого ЭлементСписка Из СписокНастроек Цикл + НастройкаОбъект = Справочники.ПользовательскиеНастройкиОтчетов.СоздатьЭлемент(); + НастройкаОбъект.Наименование = ЭлементСписка.Представление; + НастройкаОбъект.КлючПользовательскойНастройки = ЭлементСписка.Значение; + НастройкаОбъект.Вариант = РеквизитыФормы.ВариантСсылка; + НастройкаОбъект.Пользователь = ПользовательСсылка; + НастройкаОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для вызова из события "ПриДобавленииОбработчиковОбновления" конфигурации. + +// Полное обновление индекса поиска вариантов отчетов. +// Следует вызывать из процедуры ПриДобавленииОбработчиковОбновления конфигурации. +// Внимание! Эта процедура должна вызываться только 1 раз - из модуля конечного прикладного решения. +// Не предназначена для вызова из библиотек. +// +// Параметры: +// Обработчики - Коллекция - Передается "как есть" из вызываемой процедуры. +// Версия - Строка - Версия конфигурации, при переходе на которую +// необходимо полностью обновить индекс поиска. +// Рекомендуется указывать последнюю функциональную версию, +// при обновлении на которую были внесены изменения +// в представления объектов метаданных или их реквизитов, +// которые могут выводиться в отчетах. +// Поднимается при необходимости. +// +// Например: +// ВариантыОтчетов.ДобавитьОбработчикиПолногоОбновления(Обработчики, "11.1.7.8"); +// +// Места использования: +// <МодульКонфигурации>.ПриДобавленииОбработчиковОбновления(). +// +// См. также: +// ПодсистемыКонфигурацииПереопределяемый.ПриДобавленииПодсистем(). +// +Процедура ДобавитьОбработчикиПолногоОбновления(Обработчики, Версия) Экспорт + + Если РазрешеноИндексированиеНеразделенныхДанных() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Монопольно", "Отложенно"); + Обработчик.ОбщиеДанные = Истина; + Обработчик.Версия = Версия; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеПолноеОбновлениеОбщихДанных"; + Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, предусмотренных в программе. + |Поиск отчетов временно недоступен.'"); + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.Версия = Версия; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеПолноеОбновлениеРазделенныхДанных"; + Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, сохраненных пользователями. + |Поиск отчетов временно недоступен.'"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для вызова из обработчиков обновления прикладной конфигурации @@ -197,7 +423,7 @@ // Результат, который будет сохранен в хранилище ТаблицаВариантов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПереносВариантовОтчетов", "ТаблицаВариантов", , , ""); - Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") ИЛИ ТаблицаВариантов.Количество() = 0 Тогда + Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") Или ТаблицаВариантов.Количество() = 0 Тогда ТаблицаВариантов = Новый ТаблицаЗначений; ТаблицаВариантов.Колонки.Добавить("Отчет", ОписаниеТиповСтрока()); ТаблицаВариантов.Колонки.Добавить("Вариант", ОписаниеТиповСтрока()); @@ -208,7 +434,7 @@ ТаблицаВариантов.Колонки.Добавить("ИдентификаторАвтора", Новый ОписаниеТипов("УникальныйИдентификатор")); КонецЕсли; - УдалятьВсе = (ИменаОтчетов = "" ИЛИ ИменаОтчетов = "*"); + УдалятьВсе = (ИменаОтчетов = "" Или ИменаОтчетов = "*"); МассивУдаляемыхКлючейОбъектов = Новый Массив; ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); @@ -228,7 +454,7 @@ КонецПопытки; Если ЭлементВыборкиПолучен = Ложь Тогда - Если ИменаОтчетов = "" ИЛИ ИменаОтчетов = "*" Тогда + Если ИменаОтчетов = "" Или ИменаОтчетов = "*" Тогда Прервать; Иначе ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); @@ -246,7 +472,7 @@ ОтчетМетаданные = Метаданные.НайтиПоПолномуИмени(ВыборкаХранилища.КлючОбъекта); Если ОтчетМетаданные <> Неопределено Тогда ХранилищеМетаданные = ОтчетМетаданные.ХранилищеВариантов; - Если ХранилищеМетаданные = Неопределено ИЛИ ХранилищеМетаданные.Имя <> "ХранилищеВариантовОтчетов" Тогда + Если ХранилищеМетаданные = Неопределено Или ХранилищеМетаданные.Имя <> "ХранилищеВариантовОтчетов" Тогда УдалятьВсе = Ложь; Продолжить; КонецЕсли; @@ -259,7 +485,7 @@ ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ВыборкаХранилища.Пользователь); Если ПользовательИБ = Неопределено Тогда Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ВыборкаХранилища.Пользователь, Истина); - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Если Не ЗначениеЗаполнено(Пользователь) Тогда Продолжить; КонецЕсли; ИдентификаторПользователя = Пользователь.ИдентификаторПользователяИБ; @@ -319,7 +545,7 @@ ТаблицаВариантов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПереносВариантовОтчетов", "ТаблицаВариантов", , , ""); КонецЕсли; - Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") ИЛИ ТаблицаВариантов.Количество() = 0 Тогда + Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") Или ТаблицаВариантов.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -469,8 +695,201 @@ ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Добавление обработчиков служебных событий (подписок) + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Содержит настройки размещения вариантов отчетов в панели отчетов. + // + // Параметры: + // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов + // см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() + // + // Описание: + // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); + + // Регистрация изменений в именах вариантов отчетов. + // Используется в обработчиках обновления, в целях контроля ссылочной целостности + // и для сохранения настроек, сделанных администратором для предопределенных вариантов. + // + // Параметры: + // Изменения - ТаблицаЗначений - Изменения в именах вариантов отчетов. + // * Отчет - ОбъектМетаданных - Метаданные отчета, в схеме которого изменилось имя варианта. + // * СтароеИмяВарианта - Строка - Старое имя варианта, до изменения. + // * АктуальноеИмяВарианта - Строка - Текущее (последнее актуальное) имя варианта. + // + // Описание: + // См. ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.ВариантыОтчетов\ПриРегистрацииИзмененийИменВариантовОтчетов"); + +КонецПроцедуры + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныйМодуль = "ВариантыОтчетов"; + + Событие = "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда + Событие = "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий + +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - Обработчики обновления. +// См. описание метода ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(). +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + //////////////////////////////////////////////////////////////////////////////// + // План обновления: + + //////////////////////////////////////////////////////////////////////////////// + // 1. Обновить общие данные. + Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.ВыполнятьВГруппеОбязательных = Ложь; + Обработчик.ОбщиеДанные = Истина; + Обработчик.УправлениеОбработчиками = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОбновитьОбщиеДанные"; + Обработчик.Приоритет = 90; + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // 2. Обновить разделенные данные. + // 2.1. Перевести разделенные данные на версию 2.1.1.0. + Обработчик = Обработчики.Добавить(); + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.УправлениеОбработчиками = Ложь; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.Версия = "2.1.1.0"; + Обработчик.Процедура = "ВариантыОтчетов.ПерейтиКРедакции21"; + Обработчик.Приоритет = 80; + + // 2.2. Перевести разделенные данные на версию 2.1.3.6. + Обработчик = Обработчики.Добавить(); + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.УправлениеОбработчиками = Ложь; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.Версия = "2.1.3.6"; + Обработчик.Процедура = "ВариантыОтчетов.ЗаполнитьСсылкиПредопределенных"; + Обработчик.Приоритет = 80; + + // 2.3. Обновить разделенные данные в локальном режиме. + Обработчик = Обработчики.Добавить(); + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; + Обработчик.Приоритет = 70; + + //////////////////////////////////////////////////////////////////////////////// + // 3. Отложенное обновление. + // 3.1. Заполнить информацию для поиска вариантов отчетов. + + Если РазрешеноИндексированиеНеразделенныхДанных() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Оперативно", "Отложенно"); + Обработчик.ОбщиеДанные = Истина; + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеИнкрементальноеОбновлениеОбщихДанных"; + Обработчик.Комментарий = НСтр("ru = 'Инкрементальное обновление индекса поиска отчетов, предусмотренных в программе. + |Поиск отчетов временно недоступен.'"); + КонецЕсли; + +КонецПроцедуры + +// Возникает при получении исключений поиска ссылок. +Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт + + ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.ВариантыОтчетов.ТабличныеЧасти.Размещение.Реквизиты.РазделИлиГруппа); + +КонецПроцедуры + +// Заполняет переименования тех объектов метаданных, которые невозможно +// автоматически найти по типу, но ссылки на которые требуется сохранять +// в базе данных (например: подсистемы, роли). +// +// См. также: +// ОбщегоНазначения.ДобавитьПереименование(). +// +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт + + Библиотека = "СтандартныеПодсистемы"; + + ОбщегоНазначения.ДобавитьПереименование( + Итог, "2.1.0.2", "Роль.ЧтениеВариантовОтчетов", "Роль.ИспользованиеВариантовОтчетов", Библиотека); + +КонецПроцедуры + +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// См. также: +// СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(). +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Константы.ПараметрыВариантовОтчетов); + Объекты.Добавить(Метаданные.Справочники.ВариантыОтчетов); + Объекты.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); + Объекты.Добавить(Метаданные.Справочники.ПользовательскиеНастройкиОтчетов); + Объекты.Добавить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов); + + КонецЕсли; + +КонецПроцедуры + +// Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок +// при загрузке данных в другую информационную базу. +// +// Параметры: +// Типы - Массив из ОбъектМетаданных +// +Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт + + Типы.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов // Получает объект отчета по ссылке варианта отчета. // @@ -544,190 +963,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Добавление обработчиков служебных событий (подписок) - - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт - - // СЕРВЕРНЫЕ СОБЫТИЯ. - - // Регистрация изменений в именах вариантов отчетов. - // Используется в обработчиках обновления, в целях контроля ссылочной целостности - // и для сохранения настроек, сделанных администратором для предопределенных вариантов. - // - // Параметры: - // Изменения - ТаблицаЗначений - Изменения в именах вариантов отчетов. - // * Отчет - ОбъектМетаданных - Метаданные отчета, в схеме которого изменилось имя варианта. - // * СтароеИмяВарианта - Строка - Старое имя варианта, до изменения. - // * АктуальноеИмяВарианта - Строка - Текущее (последнее актуальное) имя варианта. - // - // Описание: - // В Изменения необходимо добавить описания изменений имен вариантов - // отчетов, подключенных к подсистеме. - // - // Например: - //Процедура ПриРегистрацииИзмененийИменВариантовОтчетов(Изменения) Экспорт - // Переименование = Изменения.Добавить(); - // Переименование.Отчет = Метаданные.Отчеты.<ИмяОтчета>; - // Переименование.СтароеИмяВарианта = "<СтароеИмяВарианта>"; - // Переименование.АктуальноеИмяВарианта = "<АктуальноеИмяВарианта>"; - //КонецПроцедуры - // - // Важно: - // Старое имя варианта резервируется и не может быть использовано в дальнейшем. - // Если изменений было несколько, то каждое изменение необходимо зарегистрировать, - // указывая в актуальном имени варианта последнее (текущее) имя варианта отчета. - // Поскольку имена вариантов отчетов не выводятся в пользовательском интерфейсе, - // то рекомендуется задавать их таким образом, что бы затем не менять. - // - // (То же, что ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов). - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.ВариантыОтчетов\ПриРегистрацииИзмененийИменВариантовОтчетов"); - -КонецПроцедуры - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ВариантыОтчетов"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( - "ВариантыОтчетов"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( - "ВариантыОтчетов"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "ВариантыОтчетов"); - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда - - СерверныеОбработчики["ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"].Добавить( - "ВариантыОтчетов"); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - Обработчики обновления. -// См. описание метода ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(). -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - //////////////////////////////////////////////////////////////////////////////// - // План обновления: - - //////////////////////////////////////////////////////////////////////////////// - // 1. Обновить общие данные. - Обработчик = Обработчики.Добавить(); - Обработчик.ВыполнятьВГруппеОбязательных = Ложь; - Обработчик.ОбщиеДанные = Истина; - Обработчик.УправлениеОбработчиками = Истина; - Обработчик.МонопольныйРежим = Ложь; - Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбновитьОбщиеДанные"; - Обработчик.Приоритет = 90; - - //////////////////////////////////////////////////////////////////////////////// - // 2. Обновить разделенные данные. - // 2.1. Перевести разделенные данные на версию 2.1.1.0. - Обработчик = Обработчики.Добавить(); - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.ОбщиеДанные = Ложь; - Обработчик.УправлениеОбработчиками = Ложь; - Обработчик.МонопольныйРежим = Истина; - Обработчик.Версия = "2.1.1.0"; - Обработчик.Процедура = "ВариантыОтчетов.ПерейтиКРедакции21"; - Обработчик.Приоритет = 80; - - // 2.2. Перевести разделенные данные на версию 2.1.3.6. - Обработчик = Обработчики.Добавить(); - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.ОбщиеДанные = Ложь; - Обработчик.УправлениеОбработчиками = Ложь; - Обработчик.МонопольныйРежим = Истина; - Обработчик.Версия = "2.1.3.6"; - Обработчик.Процедура = "ВариантыОтчетов.ЗаполнитьСсылкиПредопределенных"; - Обработчик.Приоритет = 80; - - // 2.3. Обновить разделенные данные в локальном режиме. - Обработчик = Обработчики.Добавить(); - Обработчик.МонопольныйРежим = Ложь; - Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; - Обработчик.Приоритет = 70; - -КонецПроцедуры - -// Возникает при получении исключений поиска ссылок. -Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт - - ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.ВариантыОтчетов.ТабличныеЧасти.Размещение.Реквизиты.РазделИлиГруппа); - -КонецПроцедуры - -// Заполняет переименования тех объектов метаданных, которые невозможно -// автоматически найти по типу, но ссылки на которые требуется сохранять -// в базе данных (например: подсистемы, роли). -// -// См. также: -// ОбщегоНазначения.ДобавитьПереименование(). -// -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт - - Библиотека = "СтандартныеПодсистемы"; - - ОбщегоНазначения.ДобавитьПереименование( - Итог, "2.1.0.2", "Роль.ЧтениеВариантовОтчетов", "Роль.ИспользованиеВариантовОтчетов", Библиотека); - -КонецПроцедуры - -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// См. также: -// СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(). -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПараметрыВариантовОтчетов); - Объекты.Добавить(Метаданные.Справочники.ВариантыОтчетов); - Объекты.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); - Объекты.Добавить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов); - - КонецЕсли; - -КонецПроцедуры - -// Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок -// при загрузке данных в другую информационную базу. -// -// Параметры: -// Типы - Массив из ОбъектМетаданных -// -Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт - - Типы.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов - // Обновляет варианты дополнительного отчета при его записи. // // Места использования: @@ -735,7 +970,7 @@ // Процедура ПриЗаписиДополнительногоОтчета(ТекущийОбъект, Отказ, ВнешнийОбъект) Экспорт - Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов) Тогда + Если Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа для записи вариантов дополнительного отчета ""%1"".'"), ТекущийОбъект.Наименование); @@ -745,7 +980,7 @@ КонецЕсли; ПометкаУдаления = ТекущийОбъект.ПометкаУдаления; - Если НЕ ТекущийОбъект.ИспользуетХранилищеВариантов ИЛИ НЕ ТекущийОбъект.ДополнительныеСвойства.ПубликацияИспользуется Тогда + Если Не ТекущийОбъект.ИспользуетХранилищеВариантов Или Не ТекущийОбъект.ДополнительныеСвойства.ПубликацияИспользуется Тогда ПометкаУдаления = Истина; КонецЕсли; @@ -791,7 +1026,7 @@ ПометкаУдаленияВарианта = ПометкаУдаления; ЭлементСписка = ПредопределенныеВарианты.НайтиПоЗначению(Выборка.КлючВарианта); - Если НЕ ПометкаУдаленияВарианта И НЕ Выборка.Пользовательский И ЭлементСписка = Неопределено Тогда + Если Не ПометкаУдаленияВарианта И Не Выборка.Пользовательский И ЭлементСписка = Неопределено Тогда // Предопределенный вариант, который не найден в списке предопределенных для данного отчета ПометкаУдаленияВарианта = Истина; КонецЕсли; @@ -799,6 +1034,11 @@ Если Выборка.ПометкаУдаления <> ПометкаУдаленияВарианта Тогда ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + Если ПометкаУдаленияВарианта Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); + Иначе + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); + КонецЕсли; ВариантОбъект.УстановитьПометкуУдаления(ПометкаУдаленияВарианта); КонецЕсли; @@ -807,12 +1047,13 @@ Если Выборка.Наименование <> ЭлементСписка.Представление Тогда ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.Наименование = ЭлементСписка.Представление; + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); ВариантОбъект.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; - Если НЕ ПометкаУдаления Тогда + Если Не ПометкаУдаления Тогда // Зарегистрировать новые Для Каждого ЭлементСписка Из ПредопределенныеВарианты Цикл ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); @@ -822,6 +1063,7 @@ ВариантОбъект.Наименование = ЭлементСписка.Представление; ВариантОбъект.Пользовательский = Ложь; ВариантОбъект.ВидимостьПоУмолчанию = Истина; + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); ВариантОбъект.Записать(); КонецЦикла; КонецЕсли; @@ -970,8 +1212,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Формирует отчет с указанными настройками, используется в фоновых заданиях. Процедура СформироватьОтчет(ПараметрыФормированияОтчета, АдресХранилища) Экспорт @@ -1001,35 +1244,30 @@ ОтчетОбъект.СкомпоноватьРезультат(ТабличныйДокумент, Расшифровка); + ДопСвойства = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; + РезультатФормирования = Новый Структура; РезультатФормирования.Вставить("ОтчетТабличныйДокумент", ТабличныйДокумент); РезультатФормирования.Вставить("ОтчетРасшифровка", Расшифровка); РезультатФормирования.Вставить("ВариантМодифицирован", Ложь); РезультатФормирования.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - ДопСвойства = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; - ВариантМодифицирован = Ложь; - ПользовательскиеНастройкиМодифицированы = Ложь; - Если ДопСвойства.Свойство("ВариантМодифицирован", ВариантМодифицирован) - ИЛИ ДопСвойства.Свойство("ПользовательскиеНастройкиМодифицированы", ПользовательскиеНастройкиМодифицированы) Тогда - - Если ВариантМодифицирован = Истина Тогда - РезультатФормирования.ВариантМодифицирован = Истина; - РезультатФормирования.Вставить("НастройкиКД", ОтчетОбъект.КомпоновщикНастроек.Настройки); - КонецЕсли; - - Если ВариантМодифицирован = Истина ИЛИ ПользовательскиеНастройкиМодифицированы = Истина Тогда - ДопСвойства.Удалить("ВариантМодифицирован"); - ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); - ДопСвойства.Удалить("КлючВарианта"); - РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; - РезультатФормирования.Вставить("ПользовательскиеНастройкиКД", ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки); - КонецЕсли; - + Если ВариантыОтчетовКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда + РезультатФормирования.ВариантМодифицирован = Истина; + РезультатФормирования.Вставить("НастройкиКД", ОтчетОбъект.КомпоновщикНастроек.Настройки); КонецЕсли; - ПоместитьВоВременноеХранилище(РезультатФормирования, АдресХранилища); + Если РезультатФормирования.ВариантМодифицирован + Или ВариантыОтчетовКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда + РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатФормирования.Вставить("ПользовательскиеНастройкиКД", ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + ДопСвойства.Удалить("ВариантМодифицирован"); + ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); + ДопСвойства.Удалить("КлючВарианта"); + + ПоместитьВоВременноеХранилище(РезультатФормирования, АдресХранилища); КонецПроцедуры // Формирует дерево настроек и размещения предопределенных вариантов отчетов. @@ -1049,6 +1287,15 @@ // *** "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. // *** "СмТакже" - Вывод отчета в группе "См. также". // * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. +// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. +// ** НаименованияПолей - Строка - Имена полей варианта отчета. +// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. +// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. +// Имена макетов табличных или текстовых документов, +// из которых требуется извлечь информацию о наименованиях полей. +// Имена перечисляются через запятую. +// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), +// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не ИменаМакетов. // Служебные реквизиты (только для чтения): // * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. // * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. @@ -1069,20 +1316,27 @@ ДеревоВариантов.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); ДеревоВариантов.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); + ДеревоВариантов.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); ДеревоВариантов.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); + ДеревоВариантов.Колонки.Добавить("ВыводитьТолькоОтчет", Новый ОписаниеТипов("Булево")); + + ВыводитьОтчетыВместоВариантов = ГлобальныеНастройки().ВыводитьОтчетыВместоВариантов; + РазрешеноИндексирование = РазрешеноИндексированиеНеразделенныхДанных(); ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); ПодключеныВсеОтчеты = ПодключеныВсеОтчеты(); Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл - Если НЕ ПодключеныВсеОтчеты - И (ОтчетМетаданные.ХранилищеВариантов = Неопределено - ИЛИ ОтчетМетаданные.ХранилищеВариантов.Имя <> "ХранилищеВариантовОтчетов") Тогда - Продолжить; + Если Не ПодключеныВсеОтчеты Тогда + // Проверка подключен ли конкретный отчет. + Если ОтчетМетаданные.ХранилищеВариантов = Неопределено + Или ОтчетМетаданные.ХранилищеВариантов.Имя <> "ХранилищеВариантовОтчетов" Тогда + Продолжить; + КонецЕсли; КонецЕсли; - // Настройки отчета + // Настройки. СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); СтрокаОтчет.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); СтрокаОтчет.Метаданные = ОтчетМетаданные; @@ -1090,60 +1344,274 @@ СтрокаОтчет.ВидимостьПоУмолчанию = Истина; СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); - СтрокаОтчет.СистемнаяИнформация = Новый Структура; - СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); СтрокаОтчет.ОписаниеПолучено = Истина; СтрокаОтчет.ЭтоВариант = Ложь; + СтрокаОтчет.ВыводитьТолькоОтчет = ВыводитьОтчетыВместоВариантов; + СтрокаОтчет.СистемнаяИнформация = Новый Структура; + СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); - // Подсистемы отчета + // Подсистемы. Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); Для Каждого СтрокаПодсистема Из Найденные Цикл СтрокаОтчет.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); КонецЦикла; - // Варианты отчета + // Поиск. + СтрокаОтчет.НастройкиДляПоиска = Новый Структура("НаименованияПолей, НаименованияПараметровИОтборов, ИменаМакетов"); + + // Вариант по умолчанию (последний открытый). + ВариантПоУмолчанию = СтрокаОтчет.Строки.Добавить(); + ВариантПоУмолчанию.Отчет = СтрокаОтчет.Отчет; + ВариантПоУмолчанию.КлючВарианта = ""; + ВариантПоУмолчанию.ЭтоВариант = Истина; + + // Предопределенные варианты. Если СтрокаОтчет.СистемнаяИнформация.ПостроенНаСКД Тогда ОтчетМенеджер = Отчеты[ОтчетМетаданные.Имя]; - ИмяСхемыКД = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных.Имя; - СхемаКД = ОтчетМенеджер.ПолучитьМакет(ИмяСхемыКД); - Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл - Вариант = СтрокаОтчет.Строки.Добавить(); - Вариант.Включен = Истина; - Вариант.Отчет = СтрокаОтчет.Отчет; - Вариант.КлючВарианта = ВариантНастроекКД.Имя; - Вариант.Наименование = ВариантНастроекКД.Представление; - Вариант.Размещение = СтрокаОтчет.Размещение; - Вариант.ЭтоВариант = Истина; - КонецЦикла; - Иначе - Вариант = СтрокаОтчет.Строки.Добавить(); - Вариант.Включен = Истина; - Вариант.Отчет = СтрокаОтчет.Отчет; - Вариант.КлючВарианта = ""; - Вариант.Наименование = СтрокаОтчет.Наименование; - Вариант.Размещение = СтрокаОтчет.Размещение; - Вариант.ЭтоВариант = Истина; + СхемаКД = Неопределено; + ВариантыНастроек = Неопределено; + Попытка + ОтчетОбъект = ОтчетМенеджер.Создать(); + СтрокаОтчет.СистемнаяИнформация.Вставить("ОтчетОбъект", ОтчетОбъект); + СхемаКД = ОтчетОбъект.СхемаКомпоновкиДанных; + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать схему отчета ""%1"":'"); + ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + // Чтение настроек вариантов отчета из схемы. + Если СхемаКД <> Неопределено Тогда + Попытка + ВариантыНастроек = СхемаКД.ВариантыНастроек; + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из схемы:'"); + ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + // Чтение настроек по умолчанию из схемы. + Если РазрешеноИндексирование И СхемаКД <> Неопределено Тогда + Попытка + ВариантПоУмолчанию.СистемнаяИнформация.Вставить("НастройкиКД", СхемаКД.НастройкиПоУмолчанию); + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать настройки по умолчанию отчета ""%1"":'"); + ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + // Чтение настроек вариантов отчета из модуля менеджера (если не получилось из схемы). + Если ВариантыНастроек = Неопределено Тогда + Попытка + ВариантыНастроек = ОтчетМенеджер.ВариантыНастроек(); + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из модуля менеджера:'"); + ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОшибкаПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + // Регистрация найденных вариантов. + Если ВариантыНастроек <> Неопределено Тогда + Для Каждого ВариантНастроекКД Из ВариантыНастроек Цикл + Вариант = СтрокаОтчет.Строки.Добавить(); + Вариант.Отчет = СтрокаОтчет.Отчет; + Вариант.КлючВарианта = ВариантНастроекКД.Имя; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.ЭтоВариант = Истина; + Если РазрешеноИндексирование И ТипЗнч(ВариантНастроекКД) = Тип("ВариантНастроекКомпоновкиДанных") Тогда + Попытка + Вариант.СистемнаяИнформация.Вставить("НастройкиКД", ВариантНастроекКД.Настройки); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать настройки варианта ""%1"" отчета ""%2"":'"), + Вариант.КлючВарианта, + ОтчетМетаданные.Имя) + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; КонецЦикла; - // Условные вызовы подсистем БСП. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - МодульДатыЗапретаИзмененияСлужебный.ПриНастройкеВариантовОтчетов(ДеревоВариантов); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриНастройкеВариантовОтчетов(ДеревоВариантов); - КонецЕсли; + // Подключаемые обработчики подсистем БСП. + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + КонецЦикла; // Переопределяемая часть. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + // Переключение в режим "По вариантам" для отчетов, у которых включен только 1 вариант. + Для Каждого СтрокаОтчет Из ДеревоВариантов.Строки Цикл + ВариантПоУмолчанию = Неопределено; + ВключенныйВариант = Неопределено; + КоличествоВключенныхВариантов = 0; + Для Каждого СтрокаВариант Из СтрокаОтчет.Строки Цикл + ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет); + Если СтрокаВариант.КлючВарианта = "" Тогда + ВариантПоУмолчанию = СтрокаВариант; + Иначе + Если СтрокаВариант.Включен Тогда + КоличествоВключенныхВариантов = КоличествоВключенныхВариантов + 1; + Если КоличествоВключенныхВариантов > 1 Тогда + Прервать; + КонецЕсли; + ВключенныйВариант = СтрокаВариант; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ВариантПоУмолчанию <> Неопределено + И КоличествоВключенныхВариантов = 1 + И ВключенныйВариант <> Неопределено + И Не ВключенныйВариант.ВидимостьПоУмолчанию Тогда + ВариантПоУмолчанию.Включен = Ложь; + ВключенныйВариант.ВидимостьПоУмолчанию = Истина; + КонецЕсли; + КонецЦикла; + Возврат ДеревоВариантов; КонецФункции +// Заполняет описание настроек для строки варианта отчета если оно еще не заполнено. +// +// Параметры: +// СтрокаВариант - СтрокаДерева - Описание настроек варианта отчета. +// СтрокаОтчет - СтрокаДерева - Необязательный. Описание настроек отчета. +// +Процедура ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет = Неопределено) Экспорт + Если СтрокаВариант.ОписаниеПолучено Тогда + Возврат; + КонецЕсли; + + Если СтрокаОтчет = Неопределено Тогда + СтрокаОтчет = СтрокаВариант.Родитель; + КонецЕсли; + + // Флажок изменения настроек + СтрокаВариант.ОписаниеПолучено = Истина; + + // Копирование настроек отчета. + ЗаполнитьЗначенияСвойств(СтрокаВариант, СтрокаОтчет, "Включен, ВидимостьПоУмолчанию, ВыводитьТолькоОтчет"); + + Если СтрокаВариант.КлючВарианта = "" Тогда + // Вариант "по умолчанию". + СтрокаВариант.Наименование = СтрокаОтчет.Наименование; + СтрокаВариант.Описание = СтрокаОтчет.Описание; + Если Не СтрокаВариант.ВыводитьТолькоОтчет Тогда + СтрокаВариант.Включен = Ложь; + КонецЕсли; + Иначе + // Предопределенный вариант. + Если СтрокаВариант.ВыводитьТолькоОтчет Тогда + СтрокаВариант.ВидимостьПоУмолчанию = Ложь; + КонецЕсли; + КонецЕсли; + + СтрокаВариант.Размещение = ОбщегоНазначенияКлиентСервер.СкопироватьСоответствие(СтрокаОтчет.Размещение); + СтрокаВариант.ФункциональныеОпции = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(СтрокаОтчет.ФункциональныеОпции); + СтрокаВариант.НастройкиДляПоиска = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтрокаОтчет.НастройкиДляПоиска); + +КонецПроцедуры + +// Устанавливает режим вывода вариантов отчета в панелях отчетов. +// +// Параметры: +// ДеревоВариантов - ДеревоЗначений - Передается "как есть" из процедуры НастроитьВариантыОтчетов. +// Отчет - СтрокаДереваЗначений, ОбъектМетаданных: Отчет - Описание настроек или метаданные отчета. +// ВыводитьОтчетыВместоВариантов - Булево - Режим вывода в панели отчетов: +// - Истина - По отчетам (варианты скрыты, а отчет включен и видим). +// - Ложь - По вариантам (варианты видимы, а отчет отключен). +// +Процедура УстановитьРежимВыводаОтчетаВПанеляхОтчетов(ДеревоВариантов, Отчет, ВыводитьОтчетыВместоВариантов) + Если ТипЗнч(Отчет) = Тип("СтрокаДереваЗначений") Тогда + СтрокаОтчет = Отчет; + Иначе + СтрокаОтчет = ДеревоВариантов.Строки.Найти(Отчет, "Метаданные", Ложь); + Если СтрокаОтчет = Неопределено Тогда + ПредупреждениеПоВарианту(Неопределено, НСтр("ru = 'Отчет ""%1"" не подключен к подсистеме.'"), Отчет.Имя); + Возврат; + КонецЕсли; + КонецЕсли; + СтрокаОтчет.ВыводитьТолькоОтчет = ВыводитьОтчетыВместоВариантов; +КонецПроцедуры + +// Формирует таблицу замен старых ключей вариантов на актуальные. +// +// Возвращаемое значение: +// ТаблицаЗначений - Таблица изменений имен вариантов. Колонки: +// * ОтчетМетаданные - ОбъектМетаданных: Отчет - Метаданные отчета, в схеме которого изменилось имя варианта. +// * СтароеИмяВарианта - Строка - Старое имя варианта, до изменения. +// * АктуальноеИмяВарианта - Строка - Текущее (последнее актуальное) имя варианта. +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - Ссылка или имя отчета, использующееся для хранения. +// +// См. также: +// ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(). +// Служебное событие "СтандартныеПодсистемы.ВариантыОтчетов\ПриРегистрацииИзмененийИменВариантовОтчетов". +// +Функция ИзмененияКлючей() + + ОписаниеТиповРеквизитаКлючВарианта = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.КлючВарианта.Тип; + + Изменения = Новый ТаблицаЗначений; + Изменения.Колонки.Добавить("Отчет", Новый ОписаниеТипов("ОбъектМетаданных")); + Изменения.Колонки.Добавить("СтароеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); + Изменения.Колонки.Добавить("АктуальноеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); + + // Подключаемые обработчики подсистем БСП. + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриРегистрацииИзмененийИменВариантовОтчетов"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПриРегистрацииИзмененийИменВариантовОтчетов(Изменения); + КонецЦикла; + + // Переопределяемая часть. + ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения); + + Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; + Изменения.Колонки.Добавить("Отчет", Метаданные.Справочники.ПредопределенныеВариантыОтчетов.Реквизиты.Отчет.Тип); + + // Проверить корректность замен. + Для Каждого Изменение Из Изменения Цикл + Изменение.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Изменение.ОтчетМетаданные); + Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.АктуальноеИмяВарианта)); + Если Найденные.Количество() > 0 Тогда + Конфликт = Найденные[0]; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": + |Актуальное имя варианта ""%2"" (старое имя ""%3"") + |так же числится как старое имя ""%4"" (актуальное имя ""%5"").'"), + Строка(Изменение.Отчет), + Изменение.АктуальноеИмяВарианта, + Изменение.СтароеИмяВарианта, + Конфликт.СтароеИмяВарианта, + Конфликт.АктуальноеИмяВарианта); + КонецЕсли; + Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.СтароеИмяВарианта)); + Если Найденные.Количество() > 2 Тогда + Конфликт = Найденные[1]; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": + |Старое имя варианта ""%2"" (актуальное имя ""%3"") + |так же числится как старое имя + |варианта отчета ""%4"" (актуальное имя ""%5"").'"), + Строка(Изменение.Отчет), + Изменение.СтароеИмяВарианта, + Изменение.АктуальноеИмяВарианта, + Строка(Конфликт.ОтчетМетаданные.Представление()), + Конфликт.АктуальноеИмяВарианта); + КонецЕсли; + КонецЦикла; + + Возврат Изменения; +КонецФункции + // Формирует ссылку и тип отчета по полному имени. // // Параметры: @@ -1179,7 +1647,7 @@ Неопределено, НСтр("ru = 'Отчет ""%1"" не найден в программе, он будет значиться как внешний.'"), ОтчетПолноеИмя); - ИначеЕсли НЕ ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда + ИначеЕсли Не ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа к отчету ""%1"".'"), ОтчетПолноеИмя); @@ -1253,13 +1721,13 @@ // Перебор вложенных подсистем родителя Для Каждого ПодсистемаМетаданные Из ПодсистемаРодитель.Подсистемы Цикл - Если НЕ ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс Тогда + Если Не ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс Тогда Продолжить; КонецЕсли; // Состав подсистемы Для Каждого ОтчетМетаданные Из ПодсистемаМетаданные.Состав Цикл - Если НЕ Метаданные.Отчеты.Содержит(ОтчетМетаданные) Тогда + Если Не Метаданные.Отчеты.Содержит(ОтчетМетаданные) Тогда Продолжить; КонецЕсли; @@ -1285,8 +1753,8 @@ // Функция СброситьНастройкиВариантаОтчета(ВариантОбъект) Экспорт Если ВариантОбъект.Пользовательский - ИЛИ ВариантОбъект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний - ИЛИ ВариантОбъект.ПредопределенныйВариант = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка() Тогда + Или ВариантОбъект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний + Или ВариантОбъект.ПредопределенныйВариант = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка() Тогда Возврат Ложь; КонецЕсли; @@ -1307,7 +1775,7 @@ Подсистемы = ?(ДляКорневойСтроки, ИспользуемыеРазделы(), РодительМетаданные.Подсистемы); Приоритет = 0; Для Каждого Подсистема Из Подсистемы Цикл - ПодсистемаМетаданные = ?(ТипЗнч(Подсистема) = Тип("ОбъектМетаданных"), Подсистема, Подсистема.Метаданные); + ПодсистемаМетаданные = ?(ДляКорневойСтроки, Подсистема.Метаданные, Подсистема); Если ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс И ПравоДоступа("Просмотр", ПодсистемаМетаданные) И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) Тогда @@ -1321,7 +1789,9 @@ СтрокаДерева.Представление = ПодсистемаМетаданные.Представление(); СтрокаДерева.РазделСсылка = ?(ДляКорневойСтроки, СтрокаДерева.Ссылка, РазделСсылка); СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); - Если СтрЧислоВхождений(ПриоритетРодителя, ".") > 2 Тогда + Если ДляКорневойСтроки Тогда + СтрокаДерева.ПолноеПредставление = Подсистема.ЗаголовокПанели; + ИначеЕсли СтрЧислоВхождений(ПриоритетРодителя, ".") > 2 Тогда СтрокаДерева.ПолноеПредставление = РодительСтрока.Представление + ": " + СтрокаДерева.Представление; Иначе СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление; @@ -1344,6 +1814,10 @@ // Проверяет свободно ли наименование варианта отчета. Функция НаименованиеЗанято(Отчет, Ссылка, Наименование) Экспорт + Если Наименование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Наименование") Тогда + Возврат Ложь; // Проверка отключается т.к. наименование не изменилось. + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 @@ -1354,13 +1828,15 @@ | ВариантыОтчетов.Отчет = &Отчет | И ВариантыОтчетов.Ссылка <> &Ссылка | И ВариантыОтчетов.Наименование = &Наименование - | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)"; Запрос.УстановитьПараметр("Отчет", Отчет); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Наименование", Наименование); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); УстановитьПривилегированныйРежим(Истина); - Результат = НЕ Запрос.Выполнить().Пустой(); + Результат = Не Запрос.Выполнить().Пустой(); УстановитьПривилегированныйРежим(Ложь); Возврат Результат; @@ -1384,7 +1860,7 @@ Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); УстановитьПривилегированныйРежим(Истина); - Результат = НЕ Запрос.Выполнить().Пустой(); + Результат = Не Запрос.Выполнить().Пустой(); УстановитьПривилегированныйРежим(Ложь); Возврат Результат; @@ -1395,204 +1871,56 @@ Возврат (Метаданные.ХранилищеВариантовОтчетов <> Неопределено И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов"); КонецФункции -// Заполняет описание настроек для строки варианта отчета если оно еще не заполнено. -// -// Параметры: -// СтрокаВариант - СтрокаДерева - Описание настроек варианта отчета. -// СтрокаОтчет - СтрокаДерева - Необязательный. Описание настроек отчета. -// -Процедура ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет = Неопределено) Экспорт - Если СтрокаВариант.ОписаниеПолучено Тогда - Возврат; +// Создает фильтр по реквизиту КлючОбъекта для СтандартноеХранилищеНастроекМенеджер.Выбрать(). +Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Экспорт + Если ИменаОтчетов = "" Или ИменаОтчетов = "*" Тогда + Возврат Неопределено; КонецЕсли; - Если СтрокаОтчет = Неопределено Тогда - СтрокаОтчет = СтрокаВариант.Родитель; - КонецЕсли; - - // Флажок изменения настроек - СтрокаВариант.ОписаниеПолучено = Истина; - - // Копирование настроек отчета - СтрокаВариант.Включен = СтрокаОтчет.Включен; - СтрокаВариант.ВидимостьПоУмолчанию = СтрокаОтчет.ВидимостьПоУмолчанию; - - Если СтрокаВариант.КлючВарианта = "" Тогда - СтрокаВариант.Наименование = СтрокаОтчет.Наименование; - СтрокаВариант.Описание = СтрокаОтчет.Описание; - КонецЕсли; - - СтрокаВариант.Размещение = ОбщегоНазначенияКлиентСервер.СкопироватьСоответствие(СтрокаОтчет.Размещение); - СтрокаВариант.ФункциональныеОпции = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(СтрокаОтчет.ФункциональныеОпции); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа с деревом подсистем из форм - -// Добавляет элементы условного оформления дерева подсистем. -Процедура ДеревоПодсистемДобавитьУсловноеОформление(Форма) Экспорт - Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); - Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); - - Отборы = Новый Соответствие; - Отборы.Вставить("ДеревоПодсистем.Приоритет", ""); - - Оформление = Новый Соответствие; - Оформление.Вставить("ТолькоПросмотр", Истина); - - Поля = "ДеревоПодсистем"; - - ДобавитьЭлементУсловногоОформления(Форма, Отборы, Оформление, Поля); - - Оформление = Новый Соответствие; - Оформление.Вставить("Отображать", Ложь); - - Поля = "ДеревоПодсистемИспользование, ДеревоПодсистемВажность"; - - ДобавитьЭлементУсловногоОформления(Форма, Отборы, Оформление, Поля); - -КонецПроцедуры - -// Добавляет элемент условного оформления. -Функция ДобавитьЭлементУсловногоОформления(Форма, Отборы, Оформление, Поля) - ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформленияКД.Использование = Истина; - - Для Каждого КлючИЗначение Из Отборы Цикл - ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); - ЭлементОтбораКД.ПравоеЗначение = КлючИЗначение.Значение; - ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; - КонецЦикла; - - Для Каждого КлючИЗначение Из Оформление Цикл - ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( - Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), - КлючИЗначение.Значение); - КонецЦикла; - - Если ТипЗнч(Поля) = Тип("Строка") Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ","); - КонецЕсли; - Для Каждого Поле Из Поля Цикл - ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); - ПолеКД.Использование = Истина; - ПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); - КонецЦикла; - - Возврат Истина; -КонецФункции - -// Формирует дерево подсистем по данным варианта-основания. -Функция ДеревоПодсистемСформировать(Форма, ВариантОснование) Экспорт - ДеревоИсточник = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); - - ДеревоПриемник = Форма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); - ДеревоПриемник.Строки.Очистить(); - - РазмещениеПредопределенного = Неопределено; - Если НЕ ВариантОснование.Пользовательский И ВариантОснование.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Тогда - РазмещениеПредопределенного = ВариантОснование.ПредопределенныйВариант.Размещение; - КонецЕсли; - - ДобавитьПодсистемыВДерево(ДеревоПриемник, ДеревоИсточник, ВариантОснование, РазмещениеПредопределенного); - - Возврат ДеревоПриемник; -КонецФункции - -// Добавляет строки дерева-источника в строки дерева-приемника. -Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВариантОснование, РазмещениеПредопределенного) - Для Каждого Источник Из ИсточникРодитель.Строки Цикл - - Приемник = ПриемникРодитель.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(Приемник, Источник); - - Найденные = ВариантОснование.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Приемник.Ссылка)); - НайденВПредопределенном = Ложь; - Если Найденные.Количество() = 0 И РазмещениеПредопределенного <> Неопределено Тогда - НайденВПредопределенном = Истина; - Найденные = РазмещениеПредопределенного.НайтиСтроки(Новый Структура("Подсистема", Приемник.Ссылка)); - КонецЕсли; - Если Найденные.Количество() > 0 Тогда - СтрокаТаблицы = Найденные[0]; - Если СтрокаТаблицы.Важный Тогда - Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеВажный(); - ИначеЕсли СтрокаТаблицы.СмТакже Тогда - Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже(); - Иначе - Приемник.ВажностьПоУмолчанию = ""; - КонецЕсли; - - Приемник.ИспользованиеПоУмолчанию = ?(НайденВПредопределенном ИЛИ СтрокаТаблицы.Использование, 1, 0); - КонецЕсли; - - Приемник.Важность = Приемник.ВажностьПоУмолчанию; - Приемник.Использование = Приемник.ИспользованиеПоУмолчанию; - - // Рекурсия - ДобавитьПодсистемыВДерево(Приемник, Источник, ВариантОснование, РазмещениеПредопределенного); - КонецЦикла; -КонецПроцедуры - -// Сохраняет настройки размещения, измененные пользователем в табличную часть варианта отчета. -// -// Параметры: -// Форма - УправляемаяФорма - Форма, в которой хранятся настройки размещения. -// ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура - Объект варианта отчета. -// Кэш - Структура - Необязательный. -// -Процедура ДеревоПодсистемЗаписать(Форма, ВариантОбъект, Кэш = Неопределено) Экспорт - Если Кэш <> Неопределено И Кэш.Свойство("ИзмененияПодсистем") Тогда - ИзмененияПодсистем = Кэш.ИзмененияПодсистем; + ПозицияРазделителя = Найти(ИменаОтчетов, ","); + Если ПозицияРазделителя = 0 Тогда + КлючОбъекта = ИменаОтчетов; + ИменаОтчетов = ""; Иначе - ДеревоПриемник = Форма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); - ИзмененияПодсистем = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("ИзмененПользователем", Истина), Истина); - Если Кэш <> Неопределено Тогда - Кэш.Вставить("ИзмененияПодсистем", ИзмененияПодсистем); - КонецЕсли; + КлючОбъекта = СокрЛП(Лев(ИменаОтчетов, ПозицияРазделителя - 1)); + ИменаОтчетов = Сред(ИменаОтчетов, ПозицияРазделителя + 1); КонецЕсли; - Если ИзмененияПодсистем.Количество() = 0 Тогда - Возврат; + Если Найти(КлючОбъекта, ".") = 0 Тогда + КлючОбъекта = "Отчет." + КлючОбъекта; КонецЕсли; - Для Каждого Изменение Из ИзмененияПодсистем Цикл - СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Найти(Изменение.Ссылка, "РазделИлиГруппа"); - Если СтрокаТабличнойЧасти = Неопределено Тогда - // Необходимо зарегистрировать настройку размещения варианта безусловно (даже флажок Использование отключен) - // - только тогда эта настройка заменит предопределенную (из неразделенного справочника). - СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Добавить(); - СтрокаТабличнойЧасти.РазделИлиГруппа = Изменение.Ссылка; - ЭтоНоваяСтрока = Истина; - Иначе - ЭтоНоваяСтрока = Ложь; - КонецЕсли; - - Если ЭтоНоваяСтрока ИЛИ Изменение.Использование <> Изменение.ИспользованиеПоУмолчанию Тогда - Если Изменение.Использование = 0 Тогда - СтрокаТабличнойЧасти.Использование = Ложь; - ИначеЕсли Изменение.Использование = 1 Тогда - СтрокаТабличнойЧасти.Использование = Истина; - Иначе - // Оставить как есть - КонецЕсли; - КонецЕсли; - - Если ЭтоНоваяСтрока ИЛИ Изменение.Важность <> Изменение.ВажностьПоУмолчанию Тогда - Если Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеВажный() Тогда - СтрокаТабличнойЧасти.Важный = Истина; - СтрокаТабличнойЧасти.СмТакже = Ложь; - ИначеЕсли Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже() Тогда - СтрокаТабличнойЧасти.Важный = Ложь; - СтрокаТабличнойЧасти.СмТакже = Истина; - Иначе - СтрокаТабличнойЧасти.Важный = Ложь; - СтрокаТабличнойЧасти.СмТакже = Ложь; - КонецЕсли; - КонецЕсли; - КонецЦикла; -КонецПроцедуры + Возврат Новый Структура("КлючОбъекта", КлючОбъекта); +КонецФункции + +// Глобальные настройки подсистемы. +Функция ГлобальныеНастройки() Экспорт + Результат = Новый Структура; + // * ВыводитьОтчетыВместоВариантов - Булево - Умолчание для вывода гиперссылок в панели отчетов: + // - Истина - Варианты отчетов по умолчанию скрыты, а отчеты включены и видимы. + // - Ложь - Значение по умолчанию. Варианты отчетов по умолчанию видимы, а отчеты отключены. + Результат.Вставить("ВыводитьОтчетыВместоВариантов", Ложь); + + ВариантыОтчетовПереопределяемый.ОпределитьГлобальныеНастройки(Результат); + + Возврат Результат; +КонецФункции + +// Глобальные настройки панели отчетов. +Функция ОбщиеНастройкиПанели() Экспорт + ОбщиеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + "ПанельОтчетов"); + Если ОбщиеНастройки = Неопределено Тогда + ОбщиеНастройки = Новый Структура("ПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах"); + ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Истина; + ОбщиеНастройки.ПоказыватьПодсказки = 1; + ОбщиеНастройки.ИскатьВоВсехРазделах = Ложь; + Иначе + ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", Ложь); + КонецЕсли; + Возврат ОбщиеНастройки; +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Журнал регистрации @@ -1651,37 +1979,15 @@ ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Завершение процедуры ""%1"".'"), ПредставлениеПроцедуры); КонецПроцедуры -// Создает фильтр по реквизиту КлючОбъекта для СтандартноеХранилищеНастроекМенеджер.Выбрать(). -Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Экспорт - Если ИменаОтчетов = "" ИЛИ ИменаОтчетов = "*" Тогда - Возврат Неопределено; - КонецЕсли; - - ПозицияРазделителя = Найти(ИменаОтчетов, ","); - Если ПозицияРазделителя = 0 Тогда - КлючОбъекта = ИменаОтчетов; - ИменаОтчетов = ""; - Иначе - КлючОбъекта = СокрЛП(Лев(ИменаОтчетов, ПозицияРазделителя - 1)); - ИменаОтчетов = Сред(ИменаОтчетов, ПозицияРазделителя + 1); - КонецЕсли; - - Если Найти(КлючОбъекта, ".") = 0 Тогда - КлючОбъекта = "Отчет." + КлючОбъекта; - КонецЕсли; - - Возврат Новый Структура("КлючОбъекта", КлючОбъекта); -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработчики стандартных событий // Удаление личных вариантов отчетов при удалении пользователя Процедура ПриУдаленииПользователя(ПользовательОбъект, Отказ) Экспорт Если ПользовательОбъект.ЭтоНовый() - ИЛИ ПользовательОбъект.ОбменДанными.Загрузка - ИЛИ Отказ - ИЛИ НЕ ПользовательОбъект.ПометкаУдаления Тогда + Или ПользовательОбъект.ОбменДанными.Загрузка + Или Отказ + Или Не ПользовательОбъект.ПометкаУдаления Тогда Возврат; КонецЕсли; @@ -1703,6 +2009,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЦикла; КонецПроцедуры @@ -1773,7 +2080,7 @@ // 4. Обновить разделенные данные в модели сервиса. Если Кэш.ОбновитьОбласти И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Обработчик = ПараметрыОбновления.РазделенныеОбработчики.Добавить(); - Обработчик.МонопольныйРежим = Ложь; + Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Версия = "*"; Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; Обработчик.Приоритет = 70; @@ -1829,7 +2136,7 @@ ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); Если ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.УдалитьПользовательский - ИЛИ ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда + Или ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда ВариантОбъект.Пользовательский = Истина; Иначе ВариантОбъект.Пользовательский = Ложь; @@ -1859,7 +2166,7 @@ КонецЕсли; // Варианты поставляются без автора. - Если НЕ ВариантОбъект.Пользовательский Тогда + Если Не ВариантОбъект.Пользовательский Тогда ВариантОбъект.Автор = Неопределено; КонецЕсли; @@ -1878,20 +2185,7 @@ ЗапускПроцедуры(ПредставлениеПроцедуры); // Составить таблицу замен старых ключей вариантов на актуальные. - ОписаниеТиповРеквизитаКлючВарианта = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.КлючВарианта.Тип; - - Изменения = Новый ТаблицаЗначений; - Изменения.Колонки.Добавить("Отчет", Новый ОписаниеТипов("ОбъектМетаданных")); - Изменения.Колонки.Добавить("СтароеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); - Изменения.Колонки.Добавить("АктуальноеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); - - ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения); - - Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; - Изменения.Колонки.Добавить("Отчет", Метаданные.Справочники.ПредопределенныеВариантыОтчетов.Реквизиты.Отчет.Тип); - Для Каждого Изменение Из Изменения Цикл - Изменение.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Изменение.ОтчетМетаданные); - КонецЦикла; + Изменения = ИзмененияКлючей(); // Получить ссылки вариантов отчетов для замены ключей, // исключив из списка замен те варианты отчетов, @@ -1958,6 +2252,7 @@ Пока Выборка.Следующий() Цикл ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); Если ЗначениеЗаполнено(Выборка.ПредопределенныйВариант) Тогда ЗаполнитьЗначенияСвойств(ВариантОбъект, Выборка, "Наименование, КлючВарианта, ПредопределенныйВариант"); Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("УдалитьПредопределенная", Истина)); @@ -1975,6 +2270,105 @@ КонецПроцедуры +// Частичное индекса поиска предопределенных вариантов отчетов - только по изменениям в настройках вариантов. +Процедура ОтложенноеИнкрементальноеОбновлениеОбщихДанных(Параметры = Неопределено) Экспорт + ОтложенноеОбновлениеОбщихДанных(Ложь); +КонецПроцедуры + +// Полное обновление индекса поиска предопределенных вариантов отчетов. +Процедура ОтложенноеПолноеОбновлениеОбщихДанных(Параметры = Неопределено) Экспорт + ОтложенноеОбновлениеОбщихДанных(Истина); +КонецПроцедуры + +// Обновление индекса поиска предопределенных вариантов отчетов. +Процедура ОтложенноеОбновлениеОбщихДанных(Полное) + Если Не РазрешеноИндексированиеНеразделенныхДанных() Тогда + Возврат; + КонецЕсли; + Если Полное Тогда + ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление общих данных (полное)'"); + Иначе + ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление общих данных (по изменениям)'"); + КонецЕсли; + ЗапускПроцедуры(ПредставлениеПроцедуры); + + ДеревоВариантов = ДеревоНастроекВариантовОтчетовКонфигурации(); + + ТекстЗапроса = + "ВЫБРАТЬ + | Таблица.Ссылка + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетов КАК Таблица + |ГДЕ + | Таблица.ПометкаУдаления = ЛОЖЬ"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.ДополнительныеСвойства.Вставить("ДеревоВариантов", ДеревоВариантов); + ВариантОбъект.НаименованияПолей = ""; + ВариантОбъект.НаименованияПараметровИОтборов = ""; + Если Полное Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); + КонецЕсли; + ЕстьИзменения = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); + Если ЕстьИзменения Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных"); + ВариантОбъект.Записать(); + КонецЕсли; + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры + +// Полное обновление индекса поиска вариантов отчетов. +Процедура ОтложенноеПолноеОбновлениеРазделенныхДанных(Параметры = Неопределено) Экспорт + ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление разделенных данных (полное)'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + КэшОтчетов = Новый Соответствие; + + ТекстЗапроса = + "ВЫБРАТЬ + | Таблица.Ссылка, + | Таблица.Отчет + |ИЗ + | Справочник.ВариантыОтчетов КАК Таблица + |ГДЕ + | (Таблица.ПредопределенныйВариант = &ПустаяСсылка + | ИЛИ Таблица.ПредопределенныйВариант = НЕОПРЕДЕЛЕНО + | ИЛИ Таблица.ПредопределенныйВариант.ПометкаУдаления = ЛОЖЬ)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ПустаяСсылка", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ОтчетОбъект = КэшОтчетов.Получить(Выборка.Отчет); // Чтение кэша. + Если ОтчетОбъект = Неопределено Тогда // Запись в кэш. + РезультатПодключения = ПодключитьОтчетОбъект(Выборка.Отчет); + Если РезультатПодключения.Подключен Тогда + ОтчетОбъект = РезультатПодключения.Объект; + Иначе // Отчет не найден. + ОшибкаПоВарианту(Выборка.Ссылка, РезультатПодключения.Ошибки); + ОтчетОбъект = ""; + КонецЕсли; + КэшОтчетов.Вставить(Выборка.Отчет, ОтчетОбъект); + КонецЕсли; + Если ОтчетОбъект = "" Тогда + Продолжить; + КонецЕсли; + + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных"); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); + ВариантОбъект.Записать(); + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы / Начальное заполнение и актуализация справочников @@ -1984,49 +2378,7 @@ ЗапускПроцедуры(ПредставлениеПроцедуры); // Составить таблицу замен старых ключей вариантов на актуальные. - ОписаниеТиповРеквизитаКлючВарианта = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.КлючВарианта.Тип; - - Изменения = Новый ТаблицаЗначений; - Изменения.Колонки.Добавить("Отчет", Новый ОписаниеТипов("ОбъектМетаданных")); - Изменения.Колонки.Добавить("СтароеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); - Изменения.Колонки.Добавить("АктуальноеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); - - ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения); - - Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; - Изменения.Колонки.Добавить("Отчет", Метаданные.Справочники.ПредопределенныеВариантыОтчетов.Реквизиты.Отчет.Тип); - - // Проверить корректность замен. - Для Каждого Изменение Из Изменения Цикл - Изменение.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Изменение.ОтчетМетаданные); - Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.АктуальноеИмяВарианта)); - Если Найденные.Количество() > 0 Тогда - Конфликт = Найденные[0]; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": - |Актуальное имя варианта ""%2"" (старое имя ""%3"") - |так же числится как старое имя ""%4"" (актуальное имя ""%5"").'"), - Строка(Изменение.Отчет), - Изменение.АктуальноеИмяВарианта, - Изменение.СтароеИмяВарианта, - Конфликт.СтароеИмяВарианта, - Конфликт.АктуальноеИмяВарианта); - КонецЕсли; - Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.СтароеИмяВарианта)); - Если Найденные.Количество() > 2 Тогда - Конфликт = Найденные[1]; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": - |Старое имя варианта ""%2"" (актуальное имя ""%3"") - |так же числится как старое имя - |варианта отчета ""%4"" (актуальное имя ""%5"").'"), - Строка(Изменение.Отчет), - Изменение.СтароеИмяВарианта, - Изменение.АктуальноеИмяВарианта, - Строка(Конфликт.ОтчетМетаданные.Представление()), - Конфликт.АктуальноеИмяВарианта); - КонецЕсли; - КонецЦикла; + Изменения = ИзмененияКлючей(); // Получить ссылки вариантов отчетов для замены ключей, // исключив из списка замен те варианты отчетов, @@ -2057,7 +2409,7 @@ | И втИзменения.СтароеИмяВарианта = ВариантыОтчетовСтарые.КлючВарианта |ГДЕ | ВариантыОтчетовАктуальные.Ссылка ЕСТЬ NULL - | И НЕ ВариантыОтчетовСтарые.Ссылка ЕСТЬ NULL "; + | И Не ВариантыОтчетовСтарые.Ссылка ЕСТЬ NULL "; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Изменения", Изменения); @@ -2069,6 +2421,7 @@ Кэш.ОбновитьОбласти = Истина; ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; + ВариантОбъект.ДополнительныеСвойства.Вставить("ДеревоВариантов", Кэш.ДеревоВариантов); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); ВариантОбъект.Записать(); КонецЦикла; @@ -2093,15 +2446,14 @@ ВариантВыборка = Запрос.Выполнить().Выбрать(); Пока ВариантВыборка.Следующий() Цикл ЗаполнитьЗначенияСвойств(ПоискВарианта, ВариантВыборка, "Отчет, КлючВарианта"); + Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(ПоискВарианта, Истина); - ВариантПометкаУдаления = (Найденные.Количество() = 0); - Если ВариантПометкаУдаления <> ВариантВыборка.ПометкаУдаления Тогда + Если Найденные.Количество() = 0 Тогда ВариантОбъект = ВариантВыборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); - ВариантОбъект.УстановитьПометкуУдаления(ВариантПометкаУдаления); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); + ВариантОбъект.УстановитьПометкуУдаления(Истина); Кэш.ОбновитьОбласти = Истина; - КонецЕсли; - Если ВариантПометкаУдаления Тогда Продолжить; КонецЕсли; @@ -2116,13 +2468,12 @@ СвязьСФункциональнойОпцией.ИмяФункциональнойОпции = ИмяФункциональнойОпции; КонецЦикла; - Если НЕ ИзменилисьНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) Тогда - Продолжить; - КонецЕсли; - - Если ВариантВыборка.Наименование <> ОписаниеВарианта.Наименование - ИЛИ ВариантВыборка.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию Тогда + Если ИзменилисьКлючевыеНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) Тогда Кэш.ОбновитьОбласти = Истина; + ИначеЕсли ИзменилисьВторостепенныеНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) Тогда + // Обновлять области не требуется. + Иначе + Продолжить; КонецЕсли; ЗаписатьНастройкиПредопределенного(ОписаниеВарианта, ВариантВыборка.Ссылка); @@ -2153,13 +2504,23 @@ ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры -// Определяет изменились ли настройки предопределенного варианта отчета. -Функция ИзменилисьНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) +// Определяет изменились ли ключевые настройки предопределенного варианта отчета. +Функция ИзменилисьКлючевыеНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) + Если ВариантВыборка.ПометкаУдаления = Истина // Описание получено => требуется снять пометку удаления. + Или ВариантВыборка.Наименование <> ОписаниеВарианта.Наименование + Или ВариантВыборка.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; +КонецФункции + +// Определяет изменились ли второстепенные настройки предопределенного варианта отчета. +Функция ИзменилисьВторостепенныеНастройкиПредопределенного(ВариантВыборка, ОписаниеВарианта) // Шапка - Если ВариантВыборка.Наименование <> ОписаниеВарианта.Наименование - ИЛИ ВариантВыборка.Включен <> ОписаниеВарианта.Включен - ИЛИ ВариантВыборка.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию - ИЛИ ВариантВыборка.Описание <> ОписаниеВарианта.Описание Тогда + Если ВариантВыборка.Включен <> ОписаниеВарианта.Включен + Или ВариантВыборка.Описание <> ОписаниеВарианта.Описание + Или ВариантВыборка.ВыводитьТолькоОтчет <> ОписаниеВарианта.ВыводитьТолькоОтчет Тогда Возврат Истина; КонецЕсли; @@ -2173,8 +2534,8 @@ Подсистема = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); СтрокаРазмещения = ТаблицаРазмещения.Найти(Подсистема, "Подсистема"); Если СтрокаРазмещения = Неопределено - ИЛИ СтрокаРазмещения.Важный <> (НРег(КлючИЗначение.Значение) = НРег("Важный")) - ИЛИ СтрокаРазмещения.СмТакже <> (НРег(КлючИЗначение.Значение) = НРег("СмТакже")) Тогда + Или СтрокаРазмещения.Важный <> (НРег(КлючИЗначение.Значение) = НРег("Важный")) + Или СтрокаРазмещения.СмТакже <> (НРег(КлючИЗначение.Значение) = НРег("СмТакже")) Тогда Возврат Истина; КонецЕсли; КонецЦикла; @@ -2189,9 +2550,12 @@ Иначе ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); ВариантОбъект.Размещение.Очистить(); + Если ВариантОбъект.ПометкаУдаления Тогда + ВариантОбъект.ПометкаУдаления = Ложь; + КонецЕсли; КонецЕсли; - ЗаполнитьЗначенияСвойств(ВариантОбъект, ОписаниеВарианта, "Отчет, КлючВарианта, Наименование, Включен, ВидимостьПоУмолчанию, Описание"); + ЗаполнитьЗначенияСвойств(ВариантОбъект, ОписаниеВарианта, "Отчет, КлючВарианта, Наименование, Включен, ВидимостьПоУмолчанию, Описание, ВыводитьТолькоОтчет"); Для Каждого КлючИЗначение Из ОписаниеВарианта.Размещение Цикл СтрокаРазмещения = ВариантОбъект.Размещение.Добавить(); @@ -2200,7 +2564,6 @@ СтрокаРазмещения.СмТакже = (НРег(КлючИЗначение.Значение) = НРег("СмТакже")); КонецЦикла; - ВариантОбъект.ОбменДанными.Загрузка = Истина; ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); ВариантОбъект.Записать(); @@ -2261,10 +2624,10 @@ | ПО втОбщие.ПредопределенныйВариант = втРазделенные.ПредопределенныйВариант |ГДЕ | (втРазделенные.Ссылка ЕСТЬ NULL - | ИЛИ втОбщие.ПредопределенныйВариант ЕСТЬ NULL - | ИЛИ втОбщие.Наименование <> втРазделенные.Наименование - | ИЛИ втОбщие.КлючВарианта <> втРазделенные.КлючВарианта - | ИЛИ втРазделенные.ВидимостьПоУмолчаниюПереопределена + | Или втОбщие.ПредопределенныйВариант ЕСТЬ NULL + | Или втОбщие.Наименование <> втРазделенные.Наименование + | Или втОбщие.КлючВарианта <> втРазделенные.КлючВарианта + | Или втРазделенные.ВидимостьПоУмолчаниюПереопределена | И втОбщие.ВидимостьПоУмолчанию <> втРазделенные.ВидимостьПоУмолчанию)"; Запрос = Новый Запрос; @@ -2277,6 +2640,7 @@ // Удалить (нет в общих, но есть в разделенных). ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); ВариантОбъект.УстановитьПометкуУдаления(Истина); Иначе Если Выборка.Ссылка = Неопределено Тогда @@ -2295,7 +2659,7 @@ ВариантОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; ЗаполнитьЗначенияСвойств(ВариантОбъект, Выборка, "Наименование, Отчет, КлючВарианта, ПредопределенныйВариант"); - Если НЕ ВариантОбъект.ВидимостьПоУмолчаниюПереопределена Тогда + Если Не ВариантОбъект.ВидимостьПоУмолчаниюПереопределена Тогда ВариантОбъект.ВидимостьПоУмолчанию = Выборка.ВидимостьПоУмолчанию; КонецЕсли; ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); @@ -2317,9 +2681,9 @@ |ГДЕ | ДанныеСправочника.ПометкаУдаления = ЛОЖЬ | И (ДанныеСправочника.Отчет = НЕОПРЕДЕЛЕНО - | ИЛИ ДанныеСправочника.Отчет.ПометкаУдаления = ИСТИНА)"; + | Или ДанныеСправочника.Отчет.ПометкаУдаления = ИСТИНА)"; - Если НЕ ОбщиеДанные Тогда + Если Не ОбщиеДанные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.ПредопределенныеВариантыОтчетов", "Справочник.ВариантыОтчетов"); КонецЕсли; @@ -2346,6 +2710,7 @@ ВариантОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; ВариантОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЦикла; @@ -2355,9 +2720,9 @@ // Перенос пользовательских настроек варианта из соответствующего хранилища. Процедура ЗаменитьКлючиПользовательскихНастроек(СтарыйВариант, АктуальныйВариант) Если СтарыйВариант.КлючВарианта = АктуальныйВариант.КлючВарианта - ИЛИ НЕ ЗначениеЗаполнено(СтарыйВариант.КлючВарианта) - ИЛИ НЕ ЗначениеЗаполнено(АктуальныйВариант.КлючВарианта) - ИЛИ ТипЗнч(АктуальныйВариант.Отчет) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Или Не ЗначениеЗаполнено(СтарыйВариант.КлючВарианта) + Или Не ЗначениеЗаполнено(АктуальныйВариант.КлючВарианта) + Или ТипЗнч(АктуальныйВариант.Отчет) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда Возврат; КонецЕсли; @@ -2423,7 +2788,7 @@ Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка())); Для Каждого СтрокаТаблицы Из Найденные Цикл - Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.УдалитьПодсистема) Тогда + Если Не ЗначениеЗаполнено(СтрокаТаблицы.УдалитьПодсистема) Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); Продолжить; КонецЕсли; @@ -2436,7 +2801,7 @@ КонецЕсли; ПодсистемаСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные);; - Если НЕ ЗначениеЗаполнено(ПодсистемаСсылка) Тогда + Если Не ЗначениеЗаполнено(ПодсистемаСсылка) Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); Продолжить; КонецЕсли; @@ -2473,7 +2838,7 @@ Запись.Вариант = ВариантОбъект.Ссылка; Запись.РазделИлиГруппа = СтрокаПодсистема.РазделИлиГруппа; Запись.Пользователь = СтрокаПользователь.Пользователь; - Запись.Видимость = НЕ ВариантОбъект.ВидимостьПоУмолчанию; + Запись.Видимость = Не ВариантОбъект.ВидимостьПоУмолчанию; КонецЦикла; @@ -2482,3 +2847,1305 @@ НаборЗаписей.Записать(Истина); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с деревом подсистем из форм + +// Добавляет элементы условного оформления дерева подсистем. +Процедура ДеревоПодсистемДобавитьУсловноеОформление(Форма) Экспорт + Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); + Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); + + Инструкция = ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ДеревоПодсистем"; + Инструкция.Отборы.Вставить("ДеревоПодсистем.Приоритет", ""); + Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); + ДобавитьЭлементУсловногоОформления(Форма, Инструкция); + + Инструкция.Поля = "ДеревоПодсистемИспользование, ДеревоПодсистемВажность"; + Инструкция.Оформление.Очистить(); + Инструкция.Оформление.Вставить("Отображать", Ложь); + ДобавитьЭлементУсловногоОформления(Форма, Инструкция); +КонецПроцедуры + +// Описание инструкции для добавления элемента условного оформления. +Функция ИнструкцияУсловногоОформления() Экспорт + Возврат Новый Структура("Отборы, Оформление, Поля", Новый Соответствие, Новый Соответствие, ""); +КонецФункции + +// Добавляет элемент условного оформления согласно описанию из инструкции. +Функция ДобавитьЭлементУсловногоОформления(Форма, ИнструкцияУсловногоОформления) Экспорт + ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформленияКД.Использование = Истина; + + Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Отборы Цикл + ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); + Настройка = КлючИЗначение.Значение; + Тип = ТипЗнч(Настройка); + Если Тип = Тип("Структура") Тогда + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных[Настройка.Вид]; + ЭлементОтбораКД.ПравоеЗначение = Настройка.Значение; + ИначеЕсли Тип = Тип("Массив") Тогда + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + ЭлементОтбораКД.ПравоеЗначение = Настройка; + ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда + ЭлементОтбораКД.ВидСравнения = Настройка; + Иначе + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораКД.ПравоеЗначение = Настройка; + КонецЕсли; + ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; + КонецЦикла; + + Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Оформление Цикл + ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( + Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), + КлючИЗначение.Значение); + КонецЦикла; + + Поля = ИнструкцияУсловногоОформления.Поля; + Если ТипЗнч(Поля) = Тип("Строка") Тогда + Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ","); + КонецЕсли; + Для Каждого Поле Из Поля Цикл + ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); + ПолеКД.Использование = Истина; + ПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); + КонецЦикла; + + Возврат ЭлементУсловногоОформленияКД; +КонецФункции + +// Формирует дерево подсистем по данным варианта-основания. +Функция ДеревоПодсистемСформировать(Форма, ВариантОснование) Экспорт + ДеревоИсточник = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + + ДеревоПриемник = Форма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + ДеревоПриемник.Строки.Очистить(); + + РазмещениеПредопределенного = Неопределено; + Если Не ВариантОснование.Пользовательский И ВариантОснование.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Тогда + РазмещениеПредопределенного = ВариантОснование.ПредопределенныйВариант.Размещение; + КонецЕсли; + + ДобавитьПодсистемыВДерево(ДеревоПриемник, ДеревоИсточник, ВариантОснование, РазмещениеПредопределенного); + + Возврат ДеревоПриемник; +КонецФункции + +// Добавляет строки дерева-источника в строки дерева-приемника. +Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВариантОснование, РазмещениеПредопределенного) + Для Каждого Источник Из ИсточникРодитель.Строки Цикл + Приемник = ПриемникРодитель.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Приемник, Источник); + + Найденные = ВариантОснование.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Приемник.Ссылка)); + НайденВПредопределенном = Ложь; + Если Найденные.Количество() = 0 И РазмещениеПредопределенного <> Неопределено Тогда + НайденВПредопределенном = Истина; + Найденные = РазмещениеПредопределенного.НайтиСтроки(Новый Структура("Подсистема", Приемник.Ссылка)); + КонецЕсли; + Если Найденные.Количество() > 0 Тогда + СтрокаТаблицы = Найденные[0]; + Если СтрокаТаблицы.Важный Тогда + Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеВажный(); + ИначеЕсли СтрокаТаблицы.СмТакже Тогда + Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже(); + Иначе + Приемник.ВажностьПоУмолчанию = ""; + КонецЕсли; + + Приемник.ИспользованиеПоУмолчанию = ?(НайденВПредопределенном Или СтрокаТаблицы.Использование, 1, 0); + КонецЕсли; + + Приемник.Важность = Приемник.ВажностьПоУмолчанию; + Приемник.Использование = Приемник.ИспользованиеПоУмолчанию; + + // Рекурсия + ДобавитьПодсистемыВДерево(Приемник, Источник, ВариантОснование, РазмещениеПредопределенного); + КонецЦикла; +КонецПроцедуры + +// Сохраняет настройки размещения, измененные пользователем в табличную часть варианта отчета. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, в которой хранятся настройки размещения. +// ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура - Объект варианта отчета. +// Кэш - Структура - Необязательный. +// +Процедура ДеревоПодсистемЗаписать(Форма, ВариантОбъект, Кэш = Неопределено) Экспорт + Если Кэш <> Неопределено И Кэш.Свойство("ИзмененияПодсистем") Тогда + ИзмененияПодсистем = Кэш.ИзмененияПодсистем; + Иначе + ДеревоПриемник = Форма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + ИзмененияПодсистем = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("ИзмененПользователем", Истина), Истина); + Если Кэш <> Неопределено Тогда + Кэш.Вставить("ИзмененияПодсистем", ИзмененияПодсистем); + КонецЕсли; + КонецЕсли; + + Если ИзмененияПодсистем.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Изменение Из ИзмененияПодсистем Цикл + СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Найти(Изменение.Ссылка, "РазделИлиГруппа"); + Если СтрокаТабличнойЧасти = Неопределено Тогда + // Необходимо зарегистрировать настройку размещения варианта безусловно (даже флажок Использование отключен) + // - только тогда эта настройка заменит предопределенную (из неразделенного справочника). + СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Добавить(); + СтрокаТабличнойЧасти.РазделИлиГруппа = Изменение.Ссылка; + ЭтоНоваяСтрока = Истина; + Иначе + ЭтоНоваяСтрока = Ложь; + КонецЕсли; + + Если ЭтоНоваяСтрока Или Изменение.Использование <> Изменение.ИспользованиеПоУмолчанию Тогда + Если Изменение.Использование = 0 Тогда + СтрокаТабличнойЧасти.Использование = Ложь; + ИначеЕсли Изменение.Использование = 1 Тогда + СтрокаТабличнойЧасти.Использование = Истина; + Иначе + // Оставить как есть + КонецЕсли; + КонецЕсли; + + Если ЭтоНоваяСтрока Или Изменение.Важность <> Изменение.ВажностьПоУмолчанию Тогда + Если Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеВажный() Тогда + СтрокаТабличнойЧасти.Важный = Истина; + СтрокаТабличнойЧасти.СмТакже = Ложь; + ИначеЕсли Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже() Тогда + СтрокаТабличнойЧасти.Важный = Ложь; + СтрокаТабличнойЧасти.СмТакже = Истина; + Иначе + СтрокаТабличнойЧасти.Важный = Ложь; + СтрокаТабличнойЧасти.СмТакже = Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Формирование представлений полей, параметров и отборов для поиска. + +// Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. +Функция ПроиндексироватьСодержимоеСхемы(ВариантОбъект) Экспорт + Перем ИндексироватьСхему, ОтчетОбъект, НастройкиКД, ЭтоПредопределенный; + + ДополнительныеСвойства = ВариантОбъект.ДополнительныеСвойства; + + // В некоторых случаях заранее известно что настройки уже проиндексированы. + ДополнительныеСвойства.Свойство("ИндексироватьСхему", ИндексироватьСхему); + Если ИндексироватьСхему = Ложь Тогда + Возврат Ложь; // Заполнение не требуется. + КонецЕсли; + ПроверятьХеш = Истина; + Если ИндексироватьСхему = Истина Тогда + ПроверятьХеш = Ложь; + КонецЕсли; + + // Механика ручного индексирования из данных варианта. + ИндексироватьНаименованияПолей = Лев(ВариантОбъект.НаименованияПолей, 1) <> "#"; + ИндексироватьНаименованияПараметровИОтборов = Лев(ВариантОбъект.НаименованияПараметровИОтборов, 1) <> "#"; + Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда + Возврат Ложь; // Заполнение не требуется. + КонецЕсли; + + // Получение объекта отчета, настроек СКД и варианта. + ЭтоПредопределенный = Ложь; + + // Настройки предопределенных получаются из дерева значений, которое передается в дополнительных параметрах. + Если ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетов") Тогда + ЭтоПредопределенный = Истина; + + Поиск = Новый Структура("Отчет, КлючВарианта, ЭтоВариант", ВариантОбъект.Отчет, ВариантОбъект.КлючВарианта, Истина); + Найденные = ДополнительныеСвойства.ДеревоВариантов.Строки.НайтиСтроки(Поиск, Истина); + Если Найденные.Количество() = 0 Тогда + ТекстОшибки = НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"); + ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + Возврат Ложь; // Возникла проблема. + КонецЕсли; + + ОписаниеВарианта = Найденные[0]; + СтрокаОтчет = ОписаниеВарианта.Родитель; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, СтрокаОтчет); + + // Если вариант отключен, то и в поиске он не участвует. + Если Не ОписаниеВарианта.Включен Тогда + Возврат Ложь; // Заполнение не требуется. + КонецЕсли; + + // Предустановленные настройки поиска. + Если ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПолей) Тогда + ВариантОбъект.НаименованияПолей = "#" + СокрЛП(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПолей); + ИндексироватьНаименованияПолей = Ложь; + КонецЕсли; + Если ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда + ВариантОбъект.НаименованияПараметровИОтборов = "#" + СокрЛП(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов); + ИндексироватьНаименованияПараметровИОтборов = Ложь; + КонецЕсли; + Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда + Возврат Истина; // Заполнение выполнено - объект надо записать. + КонецЕсли; + + // Объект отчета. + Если Не СтрокаОтчет.СистемнаяИнформация.ПостроенНаСКД Тогда + Если СтрокаОтчет.Размещение.Количество() > 0 Тогда + ТекстОшибки = НСтр("ru = 'Для отчета ""%2"" не заполнены настройки поиска: наименования полей или параметров и отборов. + |Подробнее - см. процедуру ""НастроитьВариантыОтчетов"" модуля ""ВариантыОтчетовПереопределяемый"".'"); + ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, "", ВариантОбъект.Отчет); + КонецЕсли; + Возврат Ложь; // Возникла проблема. + КонецЕсли; + Если Не СтрокаОтчет.СистемнаяИнформация.Свойство("ОтчетОбъект") Тогда + Возврат Ложь; // Возникла проблема (уже записана в функции ДеревоНастроекВариантовОтчетов). + КонецЕсли; + ОтчетОбъект = СтрокаОтчет.СистемнаяИнформация.ОтчетОбъект; + + // Извлечение текстов макетов возможно только после получения объекта отчета. + Если ИндексироватьНаименованияПолей И ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.ИменаМакетов) Тогда + ВариантОбъект.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, ОписаниеВарианта.НастройкиДляПоиска.ИменаМакетов); + ИндексироватьНаименованияПолей = Ложь; + КонецЕсли; + Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда + Возврат Истина; // Заполнение выполнено - объект надо записать. + КонецЕсли; + + // Настройки компоновки данных. + Если Не ОписаниеВарианта.СистемнаяИнформация.Свойство("НастройкиКД") Тогда + Возврат Ложь; // Возникла проблема (уже записана в функции ДеревоНастроекВариантовОтчетов). + КонецЕсли; + НастройкиКД = ОписаниеВарианта.СистемнаяИнформация.НастройкиКД; + Иначе + Если Не ВариантОбъект.Пользовательский Тогда + ЭтоПредопределенный = Истина; + КонецЕсли; + КонецЕсли; + + // В некоторых сценариях объект может быть закэширован в дополнительных свойствах. + Если ОтчетОбъект = Неопределено Тогда + ДополнительныеСвойства.Свойство("ОтчетОбъект", ОтчетОбъект); + КонецЕсли; + + // Когда объект отчета не закэширован - подключение отчета штатным способом. + Если ОтчетОбъект = Неопределено Тогда + РезультатПодключения = ПодключитьОтчетОбъект(ВариантОбъект.Отчет); + Если Не РезультатПодключения.Подключен Тогда // Отчет не найден. + ОшибкаПоВарианту(ВариантОбъект.Ссылка, РезультатПодключения.Ошибки); + Возврат Ложь; // Возникла проблема. + КонецЕсли; + ОтчетОбъект = РезультатПодключения.Объект; + КонецЕсли; + + // Схема компоновки, на основании которой будет выполняться отчет. + СхемаКД = ОтчетОбъект.СхемаКомпоновкиДанных; + + // Если отчет не на СКД, следовательно представления не заполняются или заполняются прикладными механизмами. + Если СхемаКД = Неопределено Тогда + Если Не ЗначениеЗаполнено(ВариантОбъект.НаименованияПолей) + Или Не ЗначениеЗаполнено(ВариантОбъект.НаименованияПараметровИОтборов) Тогда + ТекстОшибки = НСтр("ru = 'Для варианта ""%1"" отчета ""%2"" не заполнены настройки поиска: наименования полей или параметров и отборов.'"); + ИнформацияПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + КонецЕсли; + Возврат Ложь; // Возникла проблема. + КонецЕсли; + + // Чтение настроек из переданных параметров. + Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + ДополнительныеСвойства.Свойство("НастройкиКД", НастройкиКД); + КонецЕсли; + + // Чтение настроек из схемы. + Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + ВариантНастроекКД = СхемаКД.ВариантыНастроек.Найти(ВариантОбъект.КлючВарианта); + Если ВариантНастроекКД <> Неопределено Тогда + НастройкиКД = ВариантНастроекКД.Настройки; + КонецЕсли; + КонецЕсли; + + // Чтение настроек из данных варианта. + Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + НастройкиКД = ВариантОбъект.Настройки.Получить(); + КонецЕсли; + + // Последняя проверка. + Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + Возврат Ложь; // Возникла проблема. + КонецЕсли; + + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкиКД)); + ХешЭтихНастроек = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + Если ПроверятьХеш И ВариантОбъект.ХешНастроек = ХешЭтихНастроек Тогда + Возврат Ложь; // Настройки не изменились. + КонецЕсли; + ВариантОбъект.ХешНастроек = ХешЭтихНастроек; + + // Описывает связь настроек компоновки данных и схемы компоновки данных. + КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; + + // Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек. + КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКД)); + + // Загружает настройки в компоновщик. + КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); + + Если ИндексироватьНаименованияПолей Тогда + // Преобразование всех настроек автоматической группировки в наборы полей. + // См. "АвтоВыбранноеПолеКомпоновкиДанных", "АвтоПолеГруппировкиКомпоновкиДанных", + // "АвтоЭлементПорядкаКомпоновкиДанных" в синтакс-помощнике. + КомпоновщикНастроекКД.РазвернутьАвтоПоля(); + + ВариантОбъект.НаименованияПолей = СформироватьПредставленияПолей(КомпоновщикНастроекКД); + КонецЕсли; + + Если ИндексироватьНаименованияПараметровИОтборов Тогда + ВариантОбъект.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); + КонецЕсли; + + Возврат Истина; +КонецФункции + +// Представления группировок и полей из СКД. +Функция СформироватьПредставленияПолей(КомпоновщикНастроекКД) Экспорт + Результат = Новый Массив; + + ДополнитьМассивИзСтрокиСРазделителями(Результат, Строка(КомпоновщикНастроекКД.Настройки.Выбор)); + + МассивКоллекций = Новый Массив; + МассивКоллекций.Добавить(КомпоновщикНастроекКД.Настройки.Структура); + Пока МассивКоллекций.Количество() > 0 Цикл + Коллекция = МассивКоллекций[0]; + МассивКоллекций.Удалить(0); + + Для Каждого Настройка Из Коллекция Цикл + + Если ТипЗнч(Настройка) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + Настройка = Настройка.Настройки; + КонецЕсли; + + ДополнитьМассивИзСтрокиСРазделителями(Результат, Строка(Настройка.Выбор)); + + Если ТипЗнч(Настройка) = Тип("НастройкиКомпоновкиДанных") Тогда + МассивКоллекций.Добавить(Настройка.Структура); + ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + МассивКоллекций.Добавить(Настройка.Структура); + ИначеЕсли ТипЗнч(Настройка) = Тип("ТаблицаКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + МассивКоллекций.Добавить(Настройка.Строки); + ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + МассивКоллекций.Добавить(Настройка.Структура); + ИначеЕсли ТипЗнч(Настройка) = Тип("ДиаграммаКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + МассивКоллекций.Добавить(Настройка.Серии); + МассивКоллекций.Добавить(Настройка.Точки); + ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Если Не Настройка.Использование Тогда + Продолжить; + КонецЕсли; + МассивКоллекций.Добавить(Настройка.Структура); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); + Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат, РазделительХранения); +КонецФункции + +// Представления параметров и отборов из СКД. +Функция СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД) Экспорт + Результат = Новый Массив; + + НастройкиКД = КомпоновщикНастроекКД.Настройки; + + Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; + + Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл + ТипНастройки = ТипЗнч(ПользовательскаяНастройка); + Если ТипНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭтоОтбор = Ложь; + ИначеЕсли ТипНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭтоОтбор = Истина; + Иначе + Продолжить; + КонецЕсли; + + Если ПользовательскаяНастройка.РежимОтображения = Режимы.Недоступный Тогда + Продолжить; + КонецЕсли; + + ИдентификаторСКД = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки; + + ОбщаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, ИдентификаторСКД); + Если ОбщаяНастройка = Неопределено Тогда + Продолжить; + ИначеЕсли ПользовательскаяНастройка.РежимОтображения = Режимы.Авто + И ОбщаяНастройка.РежимОтображения <> Режимы.БыстрыйДоступ Тогда + Продолжить; + КонецЕсли; + + СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); + ЗаполнитьЗначенияСвойств(СтруктураПредставлений, ОбщаяНастройка); + Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда + ЭлементЗаголовок = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; + ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) Тогда + ЭлементЗаголовок = СтруктураПредставлений.Представление; + Иначе + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка); + Если ДоступнаяНастройка <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройка.Заголовок) Тогда + ЭлементЗаголовок = ДоступнаяНастройка.Заголовок; + Иначе + ЭлементЗаголовок = Строка(?(ЭтоОтбор, ОбщаяНастройка.ЛевоеЗначение, ОбщаяНастройка.Параметр)); + КонецЕсли; + КонецЕсли; + + ЭлементЗаголовок = СокрЛП(ЭлементЗаголовок); + Если ЭлементЗаголовок <> "" И Результат.Найти(ЭлементЗаголовок) = Неопределено Тогда + Результат.Добавить(ЭлементЗаголовок); + КонецЕсли; + + КонецЦикла; + + РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); + Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат, РазделительХранения); +КонецФункции + +// Извлекает текстовую информацию из макета. +Функция ИзвлечьТекстМакета(ОтчетОбъект, ИменаМакетов) Экспорт + ИзвлеченныйТекст = ""; + Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда + ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ИменаМакетов, + ",", + Истина, + Истина); + КонецЕсли; + Для Каждого ИмяМакета Из ИменаМакетов Цикл + Макет = ОтчетОбъект.ПолучитьМакет(ИмяМакета); + Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда + Низ = Макет.ВысотаТаблицы; + Право = Макет.ШиринаТаблицы; + ПроверенныеЯчейки = Новый Соответствие; + Для НомерКолонки = 1 По Право Цикл + Для НомерСтроки = 1 По Низ Цикл + Ячейка = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда + ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); + Если ТипЗнч(Ячейка) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда + ТекстОбласти = СокрЛП(Ячейка.Текст); + Если ТекстОбласти <> "" Тогда + ИзвлеченныйТекст = ИзвлеченныйТекст + Символы.ПС + ТекстОбласти; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда + ИзвлеченныйТекст = ИзвлеченныйТекст + Символы.ПС + СокрЛП(Макет.ПолучитьТекст()); + КонецЕсли; + КонецЦикла; + ИзвлеченныйТекст = СокрЛ(ИзвлеченныйТекст); + Возврат ИзвлеченныйТекст; +КонецФункции + +// Добавляет в Массив элементы из СтрокаСРазделителями, если их там нет. +Процедура ДополнитьМассивИзСтрокиСРазделителями(Массив, СтрокаСРазделителями) + СтрокаСРазделителями = СокрЛП(СтрокаСРазделителями); + Если СтрокаСРазделителями = "" Тогда + Возврат; + КонецЕсли; + Позиция = Найти(СтрокаСРазделителями, ","); + Пока Позиция > 0 Цикл + Подстрока = СокрП(Лев(СтрокаСРазделителями, Позиция - 1)); + Если Подстрока <> "" И Массив.Найти(Подстрока) = Неопределено Тогда + Массив.Добавить(Подстрока); + КонецЕсли; + СтрокаСРазделителями = СокрЛ(Сред(СтрокаСРазделителями, Позиция + 1)); + Позиция = Найти(СтрокаСРазделителями, ","); + КонецЦикла; + Если СтрокаСРазделителями <> "" И Массив.Найти(СтрокаСРазделителями) = Неопределено Тогда + Массив.Добавить(СтрокаСРазделителями); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Поиск. + +// Можно ли индексировать содержимое схемы отчета. +Функция РазрешеноИндексированиеНеразделенныхДанных() Экспорт + Возврат Не ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); +КонецФункции + +// Находит ссылки по параметрам поиска. +// Подсвечивает найденные места. +// +// Параметры: +// ПараметрыПоиска - Структура - Условия поиска. +// * СтрокаПоиска - Строка - Необязательный. +// * Автор - СправочникСсылка.Пользователи - Необязательный. +// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Необязательный. +// +// Возвращаемое значение: +// Структура - Когда выполняется поиск по строке. +// * Ссылки - Массив из СправочникСсылка.ВариантыОтчетов - +// Заполняется вариантами отчетов, в данных которых найдены все искомые слова. +// * ПодсветкаВариантов - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска). +// ** Ключ - СправочникСсылка.ВариантыОтчетов +// ** Значение - Структура +// *** Ссылка - СправочникСсылка.ВариантыОтчетов +// *** НаименованияПолей - Строка +// *** НаименованияПараметровИОтборов - Строка +// *** Описание - Строка +// *** НаименованияПользовательскихНастроек - Строка +// *** ГдеНайдены - Структура +// **** НаименованияПолей - Число +// **** НаименованияПараметровИОтборов - Число +// **** Описание - Число +// **** НаименованияПользовательскихНастроек - Число +// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - +// Заполняется подсистемами, в наименованиях которых найдены все искомые слова. +// Для таких подсистем должны выводиться все вложенные варианты отчетов. +// * ПодсветкаПодсистем - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска). +// ** Ключ - СправочникСсылка.ВариантыОтчетов +// ** Значение - Структура +// *** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// *** НаименованиеПодсистемы - Строка +// *** ВсеСловаНайдены - Булево +// *** НайденныеСлова - Массив +// * ВариантыСвязанныеСПодсистемами - Соответствие - Варианты отчетов и их подсистемы. +// Заполняется когда часть слов найдена в данных варианта, а другая часть - в наименованиях его подсистем. +// В этом случае вариант должен выводиться только в найденных подсистемах (а в других - не должен выводиться). +// Применяется в панели отчетов. +// ** Ключ - СправочникСсылка.ВариантыОтчетов - Вариант. +// ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Подсистемы. +// +Функция НайтиСсылки(ПараметрыПоиска) Экспорт + ПараметрыПоиска.Вставить("ОтчетыПользователя", ОтчетыТекущегоПользователя()); + ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); + + Если ПараметрыПоиска.Свойство("Автор") И ЗначениеЗаполнено(ПараметрыПоиска.Автор) Тогда + ЕстьОтборПоАвтору = Истина; + Иначе + ЕстьОтборПоАвтору = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска) Тогда + ЕстьСтрокаПоиска = Истина; + Иначе + ЕстьСтрокаПоиска = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("Подсистемы") И ЗначениеЗаполнено(ПараметрыПоиска.Подсистемы) Тогда + ЕстьОтборПоПодсистемам = Истина; + Иначе + ЕстьОтборПоПодсистемам = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("ТипыОтчетов") И ЗначениеЗаполнено(ПараметрыПоиска.ТипыОтчетов) Тогда + ЕстьОтборПоТипамОтчетов = Истина; + Иначе + ЕстьОтборПоТипамОтчетов = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина Тогда + ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам; // Поддерживается только когда задан отбор по подсистемам. + Иначе + ЕстьОтборПоВидимости = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("ПолучатьИтоговуюТаблицу") И ПараметрыПоиска.ПолучатьИтоговуюТаблицу = Истина Тогда + ПолучатьИтоговуюТаблицу = Истина; + Иначе + ПолучатьИтоговуюТаблицу = Ложь; + КонецЕсли; + + Если ПараметрыПоиска.Свойство("ПометкаУдаления") Тогда + ЕстьОтборПоПометкеУдаления = Истина; + Иначе + ЕстьОтборПоПометкеУдаления = Ложь; + КонецЕсли; + + Если Не ЕстьОтборПоПодсистемам И Не ЕстьСтрокаПоиска И Не ЕстьОтборПоАвтору И Не ЕстьОтборПоТипамОтчетов Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; + + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + + Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); + Запрос.УстановитьПараметр("ОтчетыПользователя", ПараметрыПоиска.ОтчетыПользователя); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); + + Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Наименование КАК НаименованиеВарианта, + | ВариантыОтчетов.Автор КАК Автор, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованияПараметровИОтборов, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПолей КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованияПолей, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВЫБОР + | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ИЛИ ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант = ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка) + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ВариантыОтчетов.ПредопределенныйВариант.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию + |ПОМЕСТИТЬ Варианты + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные + | ПО ВариантыОтчетов.ПредопределенныйВариант = Предопределенные.Ссылка + |ГДЕ + | ВариантыОтчетов.Автор = &Автор + | И ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) + | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И (Предопределенные.ПометкаУдаления ЕСТЬ NULL + | ИЛИ Предопределенные.ПометкаУдаления = ЛОЖЬ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(РазмещениеВариантов.Ссылка, РазмещениеПредопределенных.Ссылка) КАК Ссылка, + | ЕСТЬNULL(РазмещениеВариантов.Подсистема, РазмещениеПредопределенных.Подсистема) КАК Подсистема, + | ЕСТЬNULL(РазмещениеВариантов.НаименованиеПодсистемы, РазмещениеПредопределенных.НаименованиеПодсистемы) КАК НаименованиеПодсистемы, + | ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) КАК Использование + |ПОМЕСТИТЬ РазмещениеВсех + |ИЗ + | (ВЫБРАТЬ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыРазмещение.Использование КАК Использование, + | ВариантыРазмещение.РазделИлиГруппа КАК Подсистема, + | ВариантыРазмещение.РазделИлиГруппа.Синоним КАК НаименованиеПодсистемы + | ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение + | ПО ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка + | И (ВариантыРазмещение.РазделИлиГруппа В (&МассивПодсистем))) КАК РазмещениеВариантов + | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ПредопределенныеРазмещение.Подсистема КАК Подсистема, + | ПредопределенныеРазмещение.Подсистема.Синоним КАК НаименованиеПодсистемы + | ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение + | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) + | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем))) КАК РазмещениеПредопределенных + | ПО РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка + | И РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема + |ГДЕ + | ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | РазмещениеВсех.Ссылка, + | РазмещениеВсех.Подсистема, + | РазмещениеВсех.НаименованиеПодсистемы + |ПОМЕСТИТЬ РазмещениеВидимых + |ИЗ + | РазмещениеВсех КАК РазмещениеВсех + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки + | ПО РазмещениеВсех.Подсистема = ЛичныеНастройки.РазделИлиГруппа + | И РазмещениеВсех.Ссылка = ЛичныеНастройки.Вариант + | И (ЛичныеНастройки.Пользователь = &ТекущийПользователь) + |ГДЕ + | ЕСТЬNULL(ЛичныеНастройки.Видимость, РазмещениеВсех.Использование) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта, + | ВариантыОтчетов.Автор КАК Автор, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, + | ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов, + | ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей, + | ВариантыОтчетов.Описание КАК Описание, + | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | Размещение.Подсистема КАК Подсистема, + | Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы, + | НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки, + | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки + |ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение + | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка + |ГДЕ + | &ПоискВариантовИПодсистем + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Пользовательские.Вариант, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | Пользовательские.КлючПользовательскойНастройки, + | Пользовательские.Наименование + |ИЗ + | Варианты КАК Варианты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские + | ПО Варианты.Ссылка = Пользовательские.Вариант + |ГДЕ + | Пользовательские.Пользователь = &ТекущийПользователь + | И &ПоискПользовательскихНастроек + | И Пользовательские.ПометкаУдаления = ЛОЖЬ"; + + Если ЕстьОтборПоВидимости Тогда + //ИмяИтоговойТаблицы = "РазмещениеВидимых"; + Иначе + //ИмяИтоговойТаблицы = "РазмещениеВсех"; + // Удаление временной таблицы для фильтра по видимости. + УдалитьВременнуюТаблицу(ТекстЗапроса, "РазмещениеВидимых"); + // Подмена имени временной таблицы, из которой нужно делать выборку. + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазмещениеВсех", "РазмещениеВидимых"); + // Удаление поля для вычисления видимости. + Если Не ПолучатьИтоговуюТаблицу Тогда + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВЫБОР + | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ИЛИ ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант = ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка) + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ВариантыОтчетов.ПредопределенныйВариант.ВидимостьПоУмолчанию + | КОНЕЦ КАК", + "НЕОПРЕДЕЛЕНО КАК"); + КонецЕсли; + КонецЕсли; + + Если ЕстьОтборПоАвтору Тогда + Запрос.УстановитьПараметр("Автор", ПараметрыПоиска.Автор); + Иначе + // Удаление отбора по автору. + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВариантыОтчетов.Автор = &Автор + | И ", + ""); + КонецЕсли; + + Если ЕстьОтборПоТипамОтчетов Тогда + Запрос.УстановитьПараметр("ТипыОтчетов", ПараметрыПоиска.ТипыОтчетов); + Иначе + // Удаление отбора по типу отчета. + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) + | И ", + ""); + КонецЕсли; + + Если ЕстьОтборПоПодсистемам Тогда + Если ТипЗнч(ПараметрыПоиска.Подсистемы) = Тип("Массив") Тогда + Запрос.УстановитьПараметр("МассивПодсистем", ПараметрыПоиска.Подсистемы); + Иначе + МассивПодсистем = Новый Массив; + МассивПодсистем.Добавить(ПараметрыПоиска.Подсистемы); + Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); + КонецЕсли; + Иначе + // Удаление отбора по подсистемам. + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ВариантыРазмещение.РазделИлиГруппа В (&МассивПодсистем))", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем))", ""); + КонецЕсли; + + Если ЕстьСтрокаПоиска И Не ЕстьОтборПоПодсистемам Тогда + // Для поиска информация о размещении является дополнительной, а не ключевой. + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение", + "ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение"); + КонецЕсли; + + Если ЕстьОтборПоПометкеУдаления Тогда + Если ПараметрыПоиска.ПометкаУдаления <> Ложь Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПометкаУдаления = ЛОЖЬ", ".ПометкаУдаления = ИСТИНА"); + КонецЕсли; + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (Предопределенные.ПометкаУдаления ЕСТЬ NULL + | ИЛИ Предопределенные.ПометкаУдаления = ЛОЖЬ)", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Пользовательские.ПометкаУдаления = ЛОЖЬ", ""); + КонецЕсли; + + Если ЕстьСтрокаПоиска Тогда + СтрокаПоиска = ВРег(СокрЛП(ПараметрыПоиска.СтрокаПоиска)); + ШаблонПоиска = ""; + МассивСлов = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(СтрокаПоиска); + Для НомерСлова = 1 По МассивСлов.Количество() Цикл + Слово = МассивСлов[НомерСлова-1]; + ИмяСлова = "Слово" + Формат(НомерСлова, "ЧГ="); + Запрос.УстановитьПараметр(ИмяСлова, Слово); + Шаблон = "<ИмяТаблицы.ИмяПоля> ПОДОБНО ""%"" + &"+ ИмяСлова +" + ""%"""; + Если НомерСлова = 1 Тогда + ШаблонПоиска = Шаблон; + Иначе + ШаблонПоиска = ШаблонПоиска + Символы.ПС + " Или " + Шаблон; + КонецЕсли; + КонецЦикла; + + // Условие для поиска вариантов. + ПоискВариантовИПодсистем = "(" + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованиеВарианта") + + " + | Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Размещение.НаименованиеПодсистемы") + + " + | Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПолей") + + " + | Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПараметровИОтборов") + + " + | Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание") + + ")"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискВариантовИПодсистем", ПоискВариантовИПодсистем); + + Если ЕстьОтборПоАвтору И ПараметрыПоиска.Автор <> ТекущийПользователь Тогда + // Удаление запроса к таблице пользовательских настроек. + ТекстЗапроса = СокрП(Лев(ТекстЗапроса, Найти(ТекстЗапроса, "ОБЪЕДИНИТЬ ВСЕ") - 1)); + Иначе + ПоискПользовательскихНастроек = ( + "(" + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Пользовательские.Наименование") + + ")" + ); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискПользовательскихНастроек", ПоискПользовательскихНастроек); + КонецЕсли; + Иначе + // Удаление отбора для поиска в данных вариантов и подсистем. + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ГДЕ + | &ПоискВариантовИПодсистем", + ""); + // Удаление таблицы для поиска среди пользовательских настроек. + НачалоВыборкиИзТаблицы = ( + "ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Пользовательские.Вариант,"); + ТекстЗапроса = СокрП(Лев(ТекстЗапроса, Найти(ТекстЗапроса, НачалоВыборкиИзТаблицы) - 1)); + КонецЕсли; + + // Удаление лишних полей когда они не нужны ни для поиска ни для итоговой таблицы. + Если Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу Тогда + // НаименованиеВарианта + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Наименование КАК", "НЕОПРЕДЕЛЕНО КАК"); + // НаименованияПолей + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПолей КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) + | КОНЕЦ КАК", + "НЕОПРЕДЕЛЕНО КАК"); + // НаименованияПараметровИОтборов + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | КОНЕЦ КАК", + "НЕОПРЕДЕЛЕНО КАК"); + // Описание + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(Предопределенные.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК", + "НЕОПРЕДЕЛЕНО КАК"); + // НаименованиеПодсистемы + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВариантыРазмещение.РазделИлиГруппа.Синоним КАК", + "НЕОПРЕДЕЛЕНО КАК"); + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ПредопределенныеРазмещение.Подсистема.Синоним КАК", + "НЕОПРЕДЕЛЕНО КАК"); + КонецЕсли; + + // Удаление лишних полей когда они не нужны для итоговой таблицы. + Если Не ПолучатьИтоговуюТаблицу Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК", "НЕОПРЕДЕЛЕНО КАК"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Отчет КАК", "НЕОПРЕДЕЛЕНО КАК"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Отчет.Имя КАК", "НЕОПРЕДЕЛЕНО КАК"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.КлючВарианта КАК", "НЕОПРЕДЕЛЕНО КАК"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.ТипОтчета КАК", "НЕОПРЕДЕЛЕНО КАК"); + КонецЕсли; + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Автор = &Автор + | И ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) + | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + + Если ЕстьОтборПоАвтору Тогда + Запрос.УстановитьПараметр("Автор", ПараметрыПоиска.Автор); + Иначе + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВариантыОтчетов.Автор = &Автор + | И ", + ""); + КонецЕсли; + + Если ЕстьОтборПоТипамОтчетов Тогда + Запрос.УстановитьПараметр("ТипыОтчетов", ПараметрыПоиска.ТипыОтчетов); + Иначе + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) + | И ", + ""); + КонецЕсли; + + Если ЕстьОтборПоПометкеУдаления Тогда + Если ПараметрыПоиска.ПометкаУдаления <> Ложь Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПометкаУдаления = ЛОЖЬ", ".ПометкаУдаления = ИСТИНА"); + КонецЕсли; + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, " + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ", ""); + КонецЕсли; + + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + + Результат = Новый Структура; + Результат.Вставить("Ссылки", Новый Массив); + Результат.Вставить("ПодсветкаВариантов", Новый Соответствие); + Результат.Вставить("Подсистемы", Новый Массив); + Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие); + Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие); + + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + Если ПолучатьИтоговуюТаблицу Тогда + Результат.Вставить("ТаблицаЗначений", ТаблицаЗначений); + КонецЕсли; + + Если ТаблицаЗначений.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Если Не ЕстьСтрокаПоиска Тогда + ТаблицаВариантов = ТаблицаЗначений.Скопировать(, "Ссылка"); + ТаблицаВариантов.Свернуть("Ссылка"); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + Если ЗначениеЗаполнено(СтрокаТаблицы.Ссылка) Тогда + Результат.Ссылки.Добавить(СтрокаТаблицы.Ссылка); + КонецЕсли; + КонецЦикла; + Возврат Результат; + КонецЕсли; + + ТаблицаЗначений.Сортировать("Ссылка"); + + ШаблонОбластиПоиска = Новый ФиксированнаяСтруктура("Значение, КоличествоНайденныхСлов, ПодсветкаСлов", "", 0, Новый СписокЗначений); + + СтрокаТаблицы = ТаблицаЗначений[0]; + Вариант = Новый Структура; + Вариант.Вставить("Ссылка", СтрокаТаблицы.Ссылка); + Вариант.Вставить("НаименованиеВарианта", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Подсистемы", Новый Массив); + + РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); + РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); + + Количество = ТаблицаЗначений.Количество(); + Для Индекс = 1 По Количество Цикл + // Заполнение переменных. + Если Не ЗначениеЗаполнено(Вариант.НаименованиеВарианта.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.НаименованиеВарианта) Тогда + Вариант.НаименованиеВарианта.Значение = СтрокаТаблицы.НаименованиеВарианта; + КонецЕсли; + Если Не ЗначениеЗаполнено(Вариант.Описание.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.Описание) Тогда + Вариант.Описание.Значение = СтрокаТаблицы.Описание; + КонецЕсли; + Если Не ЗначениеЗаполнено(Вариант.НаименованияПолей.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.НаименованияПолей) Тогда + Вариант.НаименованияПолей.Значение = СтрокаТаблицы.НаименованияПолей; + КонецЕсли; + Если Не ЗначениеЗаполнено(Вариант.НаименованияПараметровИОтборов.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.НаименованияПараметровИОтборов) Тогда + Вариант.НаименованияПараметровИОтборов.Значение = СтрокаТаблицы.НаименованияПараметровИОтборов; + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаТаблицы.ПредставлениеПользовательскойНастройки) Тогда + Если Вариант.НаименованияПользовательскихНастроек.Значение = "" Тогда + Вариант.НаименованияПользовательскихНастроек.Значение = СтрокаТаблицы.ПредставлениеПользовательскойНастройки; + Иначе + Вариант.НаименованияПользовательскихНастроек.Значение = Вариант.НаименованияПользовательскихНастроек.Значение + + РазделительПредставления + + СтрокаТаблицы.ПредставлениеПользовательскойНастройки; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаТаблицы.НаименованиеПодсистемы) + И Вариант.Подсистемы.Найти(СтрокаТаблицы.Подсистема) = Неопределено Тогда + Вариант.Подсистемы.Добавить(СтрокаТаблицы.Подсистема); + Подсистема = Результат.ПодсветкаПодсистем.Получить(СтрокаТаблицы.Подсистема); + Если Подсистема = Неопределено Тогда + Подсистема = Новый Структура; + Подсистема.Вставить("Ссылка", СтрокаТаблицы.Подсистема); + Подсистема.Вставить("НаименованиеПодсистемы", Новый Структура(ШаблонОбластиПоиска)); + Подсистема.НаименованиеПодсистемы.Значение = СтрокаТаблицы.НаименованиеПодсистемы; + Подсистема.Вставить("ВсеСловаНайдены", Истина); + Подсистема.Вставить("НайденныеСлова", Новый Массив); + Для Каждого Слово Из МассивСлов Цикл + Если ОтметитьСлово(Подсистема.НаименованиеПодсистемы, Слово) Тогда + Подсистема.НайденныеСлова.Добавить(Слово); + Иначе + Подсистема.ВсеСловаНайдены = Ложь; + КонецЕсли; + КонецЦикла; + Если Подсистема.ВсеСловаНайдены Тогда + Результат.Подсистемы.Добавить(Подсистема.Ссылка); + КонецЕсли; + Результат.ПодсветкаПодсистем.Вставить(Подсистема.Ссылка, Подсистема); + КонецЕсли; + Если Вариант.НаименованияПодсистем.Значение = "" Тогда + Вариант.НаименованияПодсистем.Значение = СтрокаТаблицы.НаименованиеПодсистемы; + Иначе + Вариант.НаименованияПодсистем.Значение = Вариант.НаименованияПодсистем.Значение + + РазделительПредставления + + СтрокаТаблицы.НаименованиеПодсистемы; + КонецЕсли; + КонецЕсли; + + Если Индекс < Количество Тогда + СтрокаТаблицы = ТаблицаЗначений[Индекс]; + КонецЕсли; + + Если Индекс = Количество Или СтрокаТаблицы.Ссылка <> Вариант.Ссылка Тогда + // Анализ собранной информации о варианте. + ВсеСловаНайдены = Истина; + СвязанныеПодсистемы = Новый Массив; + Для Каждого Слово Из МассивСлов Цикл + СловоНайдено = Ложь; + + Если ОтметитьСлово(Вариант.НаименованиеВарианта, Слово) Тогда + СловоНайдено = Истина; + КонецЕсли; + + Если ОтметитьСлово(Вариант.Описание, Слово) Тогда + СловоНайдено = Истина; + КонецЕсли; + + Если ОтметитьСлово(Вариант.НаименованияПолей, Слово, Истина) Тогда + СловоНайдено = Истина; + КонецЕсли; + + Если ОтметитьСлово(Вариант.НаименованияПараметровИОтборов, Слово, Истина) Тогда + СловоНайдено = Истина; + КонецЕсли; + + Если ОтметитьСлово(Вариант.НаименованияПользовательскихНастроек, Слово, Истина) Тогда + СловоНайдено = Истина; + КонецЕсли; + + Если Не СловоНайдено Тогда + Для Каждого ПодсистемаСсылка Из Вариант.Подсистемы Цикл + Подсистема = Результат.ПодсветкаПодсистем.Получить(ПодсистемаСсылка); + Если Подсистема.НайденныеСлова.Найти(Слово) <> Неопределено Тогда + СловоНайдено = Истина; + СвязанныеПодсистемы.Добавить(ПодсистемаСсылка); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Не СловоНайдено Тогда + ВсеСловаНайдены = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ВсеСловаНайдены Тогда // Регистрация результата. + Результат.Ссылки.Добавить(Вариант.Ссылка); + Результат.ПодсветкаВариантов.Вставить(Вариант.Ссылка, Вариант); + Если СвязанныеПодсистемы.Количество() > 0 Тогда + Результат.ВариантыСвязанныеСПодсистемами.Вставить(Вариант.Ссылка, СвязанныеПодсистемы); + КонецЕсли; + КонецЕсли; + + Если Индекс = Количество Тогда + Прервать; + КонецЕсли; + + // Обнуление переменных. + Вариант = Новый Структура; + Вариант.Вставить("Ссылка", СтрокаТаблицы.Ссылка); + Вариант.Вставить("НаименованиеВарианта", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Подсистемы", Новый Массив); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено. +Функция ОтметитьСлово(СтруктураГде, Слово, ИспользоватьРазделитель = Ложь) Экспорт + Если Лев(СтруктураГде.Значение, 1) = "#" Тогда + СтруктураГде.Значение = Сред(СтруктураГде.Значение, 2); + КонецЕсли; + Результат = ""; + ОстатокВРег = ВРег(СтруктураГде.Значение); + Позиция = Найти(ОстатокВРег, Слово); + Если Позиция = 0 Тогда + Возврат Ложь; + КонецЕсли; + Если СтруктураГде.КоличествоНайденныхСлов = 0 Тогда + // Инициализация переменной, содержащей директивы для подсветки слов. + СтруктураГде.ПодсветкаСлов = Новый СписокЗначений; + // Прокрутка фокуса до значащего слова (обнаруженной информации). + Если ИспользоватьРазделитель Тогда + РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); + РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); + ДлинаРазделителя = СтрДлина(РазделительХранения); + Пока Позиция > 10 Цикл + ПозицияРазделителя = Найти(ОстатокВРег, РазделительХранения); + Если ПозицияРазделителя = 0 Тогда + Прервать; + КонецЕсли; + Если ПозицияРазделителя < Позиция Тогда + // Перенос фрагмента до разделителя в конец области. + СтруктураГде.Значение = ( + Сред(СтруктураГде.Значение, ПозицияРазделителя + ДлинаРазделителя) + + РазделительХранения + + Лев(СтруктураГде.Значение, ПозицияРазделителя - 1) + ); + ОстатокВРег = ( + Сред(ОстатокВРег, ПозицияРазделителя + ДлинаРазделителя) + + РазделительХранения + + Лев(ОстатокВРег, ПозицияРазделителя - 1) + ); + // Обновление информации о расположении слова. + Позиция = Позиция - ПозицияРазделителя - ДлинаРазделителя + 1; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + СтруктураГде.Значение = СтрЗаменить(СтруктураГде.Значение, РазделительХранения, РазделительПредставления); + ОстатокВРег = СтрЗаменить(ОстатокВРег, РазделительХранения, РазделительПредставления); + Позиция = Найти(ОстатокВРег, Слово); + КонецЕсли; + КонецЕсли; + // Регистрация найденного слова. + СтруктураГде.КоличествоНайденныхСлов = СтруктураГде.КоличествоНайденныхСлов + 1; + // Отметка слов. + ДлинаЛевойЧасти = 0; + ДлинаСлова = СтрДлина(Слово); + Пока Позиция > 0 Цикл + СтруктураГде.ПодсветкаСлов.Добавить(ДлинаЛевойЧасти + Позиция, "+"); + СтруктураГде.ПодсветкаСлов.Добавить(ДлинаЛевойЧасти + Позиция + ДлинаСлова, "-"); + ОстатокВРег = Сред(ОстатокВРег, Позиция + ДлинаСлова); + ДлинаЛевойЧасти = ДлинаЛевойЧасти + Позиция + ДлинаСлова - 1; + Позиция = Найти(ОстатокВРег, Слово); + КонецЦикла; + Возврат Истина; +КонецФункции + +// Удаляет временную таблицу из текста запроса. +Процедура УдалитьВременнуюТаблицу(ТекстЗапроса, ИмяВременнойТаблицы) + ПозицияВременнойТаблицы = Найти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); + ЛеваяЧасть = ""; + ПраваяЧасть = ТекстЗапроса; + Пока Истина Цикл + ПозицияТочкиСЗапятой = Найти(ПраваяЧасть, Символы.ПС + ";"); + Если ПозицияТочкиСЗапятой = 0 Тогда + Прервать; + ИначеЕсли ПозицияТочкиСЗапятой > ПозицияВременнойТаблицы Тогда + ПраваяЧасть = Сред(ПраваяЧасть, ПозицияТочкиСЗапятой + 2); + Прервать; + Иначе + ЛеваяЧасть = ЛеваяЧасть + Лев(ПраваяЧасть, ПозицияТочкиСЗапятой + 1); + ПраваяЧасть = Сред(ПраваяЧасть, ПозицияТочкиСЗапятой + 2); + ПозицияВременнойТаблицы = ПозицияВременнойТаблицы - ПозицияТочкиСЗапятой - 1; + КонецЕсли; + КонецЦикла; + ТекстЗапроса = ЛеваяЧасть + ПраваяЧасть; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index dd2844239..236b47567 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на клиенте. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает панель отчетов. Используется в модуле общей команды. // @@ -14,19 +13,11 @@ // Задается в формате: "ИмяРаздела[.ИмяВложеннойПодсистемы1][.ИмяВложеннойПодсистемы2][...]". // NB! Раздел должен быть описан в ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов. // ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды - Передается "как есть" из параметров обработчика команды. -// Заголовок - Строка - Необязательный. Заголовок панели отчетов. // -Процедура ПоказатьПанельОтчетов(ПутьКПодсистеме, ПараметрыВыполненияКоманды, Заголовок = "") Экспорт +Процедура ПоказатьПанельОтчетов(ПутьКПодсистеме, ПараметрыВыполненияКоманды, Удалить_Заголовок = "") Экспорт ФормаПараметры = Новый Структура("ПутьКПодсистеме", ПутьКПодсистеме); - Если ЗначениеЗаполнено(Заголовок) Тогда - ФормаПараметры.Вставить("Заголовок", Заголовок); - КонецЕсли; - - ФормаВладелец = ПараметрыВыполненияКоманды.Источник; - ФормаУникальность = ПутьКПодсистеме + "." + ПараметрыВыполненияКоманды.Уникальность; - ФормаОкно = ПараметрыВыполненияКоманды.Окно; - - ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, ФормаВладелец, ФормаУникальность, ФормаОкно); + ФормаОкно = ?(ПараметрыВыполненияКоманды = Неопределено, Неопределено, ПараметрыВыполненияКоманды.Окно); + ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, , ПутьКПодсистеме, ФормаОкно); КонецПроцедуры // Открывает диалог настройки размещения нескольких вариантов в разделах. @@ -101,8 +92,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Открывает форму отчета. // @@ -281,3 +273,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index aa6a8132c..b843c640d 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на клиенте и на сервере. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Представление наименования данной подсистемы, используется // для записи в журнале регистрации и в других местах. @@ -26,6 +25,69 @@ // Имя события оповещения для изменения варианта отчета. Функция ИмяСобытияИзменениеВарианта() Экспорт - Возврат "СтандартныеПодсистемы.ВариантыОтчетов.ИзменениеВарианта"; + Возврат ПолноеИмяПодсистемы() + ".ИзменениеВарианта"; КонецФункции +// Полное имя подсистемы. +Функция ПолноеИмяПодсистемы() Экспорт + Возврат "СтандартныеПодсистемы.ВариантыОтчетов"; +КонецФункции + +// Для внутреннего использования. +Функция СвойствоСтруктуры(Структура, ИмяСвойства, ЗначениеПоУмолчанию = Неопределено) Экспорт + Если Структура.Свойство(ИмяСвойства) Тогда + Возврат Структура[ИмяСвойства]; + Иначе + Возврат ЗначениеПоУмолчанию; + КонецЕсли; +КонецФункции + +// Разделитель, который используется при хранении нескольких наименований в одном строковом реквизите. +Функция РазделительХранения() Экспорт + Возврат Символы.ПС; +КонецФункции + +// Разделитель, который используется для отображения нескольких наименований в интерфейсе. +Функция РазделительПредставления() Экспорт + Возврат ", "; +КонецФункции + +// Превращает строку поиска в массив слов с уникальными значениями, отсортированный по убыванию длины. +Функция РазложитьСтрокуПоискаВМассивСлов(СтрокаПоиска) Экспорт + СловаИИхДлина = Новый СписокЗначений; + ДлинаСтроки = СтрДлина(СтрокаПоиска); + + Слово = ""; + ДлинаСлова = 0; + ОткрытаКавычка = Ложь; + Для НомерСимвола = 1 По ДлинаСтроки Цикл + КодСимвола = КодСимвола(СтрокаПоиска, НомерСимвола); + Если КодСимвола = 34 Тогда // 34 - двойная кавычка ". + ОткрытаКавычка = Не ОткрытаКавычка; + ИначеЕсли ОткрытаКавычка + Или (КодСимвола >= 48 И КодСимвола <= 57) // цифры + Или (КодСимвола >= 65 И КодСимвола <= 90) // латиница большие + Или (КодСимвола >= 97 И КодСимвола <= 122) // латиница маленькие + Или (КодСимвола >= 1040 И КодСимвола <= 1103) // кириллица + Или КодСимвола = 95 Тогда // символ "_" + Слово = Слово + Символ(КодСимвола); + ДлинаСлова = ДлинаСлова + 1; + ИначеЕсли Слово <> "" Тогда + Если СловаИИхДлина.НайтиПоЗначению(Слово) = Неопределено Тогда + СловаИИхДлина.Добавить(Слово, Формат(ДлинаСлова, "ЧЦ=3; ЧВН=")); + КонецЕсли; + Слово = ""; + ДлинаСлова = 0; + КонецЕсли; + КонецЦикла; + + Если Слово <> "" И СловаИИхДлина.НайтиПоЗначению(Слово) = Неопределено Тогда + СловаИИхДлина.Добавить(Слово, Формат(ДлинаСлова, "ЧЦ=3; ЧВН=")); + КонецЕсли; + + СловаИИхДлина.СортироватьПоПредставлению(НаправлениеСортировки.Убыв); + + Возврат СловаИИхДлина.ВыгрузитьЗначения(); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 1d073451c..51ccb59d3 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -5,13 +5,14 @@ // но предназначен для использования только данной подсистемой. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Определяет разделы, в которых доступна панель отчетов. // // Параметры: -// Разделы - Массив из ОбъектМетаданных: Подсистема - Разделы в которые выведена команды открытия панели отчетов. +// Разделы - СписокЗначений - Разделы в которые выведена команды открытия панели отчетов. +// * Значение - ОбъектМетаданных: Подсистема - Метаданные подсистемы. +// * Представление - Строка - Заголовок панели отчетов этого раздела. // // Описание: // В Разделы необходимо добавить метаданные тех подсистем 1го уровня, @@ -39,6 +40,8 @@ // Вспомогательные методы: // НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>/Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); // // Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: // * Включен - Булево - @@ -54,6 +57,7 @@ // В панели отчетов выводится в качестве подсказки. // Должно расшифровывать для пользователя содержимое варианта отчета // и не должно дублировать наименование варианта отчета. +// Используется при поиске. // * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. // ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета // ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. @@ -62,6 +66,12 @@ // "СмТакже" - Выводить отчет в группе "См. также". // * ФункциональныеОпции - Массив из Строка - // Имена функциональных опций варианта отчета. +// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. +// Эти настройки необходимо задавать только если СКД не используется или используется не в полном объеме. +// Например, СКД может использоваться только для параметризации и получения данных, +// а вывод выполняться в фиксированный макет табличного документа. +// ** НаименованияПолей - Строка - Имена полей варианта отчета. Разделитель имен: Символы.ПС. +// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. Разделитель имен: Символы.ПС. // // Например: // @@ -79,29 +89,32 @@ // Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); // Вариант.Включен = Истина; // -// (4) Результат исполнения 4.1 и 4.2 будет одинаковым: -// (4.1) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// (4) Заполнить наименования полей, параметров и отборов: +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчетаБезСхемы, ""); +// Вариант.НастройкиДляПоиска.НаименованияПолей = +// НСтр("ru = 'Контрагент +// |Договор +// |Ответственный +// |Скидка +// |Дата'"); +// Вариант.НастройкиДляПоиска.НаименованияПараметровИОтборов = +// НСтр("ru = 'Период +// |Ответственный +// |Контрагент +// |Договор'"); // -// (4.2) +// (5) Переключить режим вывода в панели отчетов: +// (5.1) По отчетам: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.ИмяОтчета, "ПоОтчетам"); +// (5.2) По вариантам: // Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, "ПоВариантам"); // // Важно: // Отчет выступает в качестве контейнера вариантов. // Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. // Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, -// т.е. более не будут наследовать изменения настроек от отчета. См. примеры 3 и 4. +// т.е. более не будут наследовать изменения настроек от отчета. См. пример 3. // // Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, // ее дублирование в коде не требуется. @@ -151,3 +164,19 @@ Процедура ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения) Экспорт КонецПроцедуры + +// Глобальные настройки, применяемые как умолчания для объектов подсистемы. +// +// Параметры: +// Настройки - Коллекция настроек подсистемы. Реквизиты: +// * ВыводитьОтчетыВместоВариантов - Булево - Умолчание для вывода гиперссылок в панели отчетов: +// - Истина - Варианты отчетов по умолчанию скрыты, а отчеты включены и видимы. +// - Ложь - Значение по умолчанию. Варианты отчетов по умолчанию видимы, а отчеты отключены. +// +Процедура ОпределитьГлобальныеНастройки(Настройки) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index 8a4cd0931..b1630e08d 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на сервере, возвращаемые значения кэшируются на время сеанса. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Формирует список отчетов конфигурации, доступных текущему пользователю. // @@ -48,7 +47,7 @@ ТаблицаОпций.Колонки.Добавить("ОтчетДоступен", Новый ОписаниеТипов("Булево")); ТаблицаОпций.Колонки.Добавить("ЗначениеОпции", Новый ОписаниеТипов("Число")); - ОтчетыПользователя = ДоступныеОтчеты(); + ОтчетыПользователя = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); Для Каждого ОтчетСсылка Из ОтчетыПользователя Цикл Найденные = ТаблицаОпций.НайтиСтроки(Новый Структура("Отчет", ОтчетСсылка)); Для Каждого СтрокаТаблицы Из Найденные Цикл @@ -70,15 +69,15 @@ Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); Запрос.УстановитьПараметр("МассивОтключенных", ОтключенныеВарианты); Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПредопределенныеВариантыОтчетов.Ссылка |ИЗ | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов |ГДЕ - | ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И ПредопределенныеВариантыОтчетов.Включен = ЛОЖЬ + | ПредопределенныеВариантыОтчетов.Включен = ЛОЖЬ | И ПредопределенныеВариантыОтчетов.Отчет В(&ОтчетыПользователя) - | И НЕ ПредопределенныеВариантыОтчетов.Ссылка В (&МассивОтключенных)"; + | И НЕ ПредопределенныеВариантыОтчетов.Ссылка В (&МассивОтключенных) + | И ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -110,7 +109,7 @@ Результат.Колонки.Добавить("ПолноеПредставление", ВариантыОтчетов.ОписаниеТиповСтрока(300)); КорневаяСтрока = Результат.Строки.Добавить(); - КорневаяСтрока.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы; + КорневаяСтрока.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); КорневаяСтрока.Представление = НСтр("ru = 'Все разделы'"); ВариантыОтчетов.ДобавитьПодсистемыТекущегоПользователя(КорневаяСтрока, Неопределено, Неопределено); @@ -118,3 +117,14 @@ Возврат Результат; КонецФункции +// Возвращает Истина если у пользователя есть право чтения вариантов отчетов. +Функция ПравоЧтения() Экспорт + Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов); +КонецФункции + +// Возвращает Истина если у пользователя есть право на сохранение вариантов отчетов. +Функция ПравоДобавления() Экспорт + Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index b6e49e90f..69a09a9d9 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Выполняется при обновлении конфигурации. // 1. Очищает настройки версионирования по объектам, для которых версионирование не применено @@ -126,8 +125,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -471,52 +471,6 @@ КонецФункции -// Возвращает дату последней коллизии или дату последнего запрета загрузки -// Параметры: -// ПолучитьДатуПоследнейКоллизии - Булево - Если Истина, то возвращает дату последней коллизии, -// если Ложь, то возвращает дату последнего запрета загрузки -Функция ДатаПоследнейКоллизииИлиЗапретаЗагрузки(ПолучитьДатуПоследнейКоллизии) Экспорт - - ДатаВерсии = Дата(1,1,1); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | МАКСИМУМ(ВерсииОбъектов.ДатаВерсии) КАК ДатаВерсии - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов - |ГДЕ - | НЕ(ВерсииОбъектов.ТипВерсииОбъекта <> &ТипВерсииОбъекта1 - | И ВерсииОбъектов.ТипВерсииОбъекта <> &ТипВерсииОбъекта2) - | И ВерсииОбъектов.ВерсияПроигнорирована = ЛОЖЬ"; - - Если ПолучитьДатуПоследнейКоллизии Тогда - - Запрос.УстановитьПараметр("ТипВерсииОбъекта1", Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); - Запрос.УстановитьПараметр("ТипВерсииОбъекта2", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); - - - Иначе - - Запрос.УстановитьПараметр("ТипВерсииОбъекта1", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); - Запрос.УстановитьПараметр("ТипВерсииОбъекта2", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); - - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ДатаВерсии = Выборка.ДатаВерсии; - - КонецЕсли; - - Возврат ДатаВерсии; - -КонецФункции - Процедура ЗаписатьВерсиюПоверхПредыдущей(Ссылка, Объект, НомерВерсии, СведенияОВерсииОбъекта); УстановитьПривилегированныйРежим(Истина); @@ -607,8 +561,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает номер последней записанной версии объекта. // @@ -685,7 +640,7 @@ // // Параметры // АдресВоВременномХранилище - Строка - адрес двоичных данных во временном хранилище. -// ТекстСообщенияОбОшибке - Строка - (возвращаемый параметр) текст ошибки, если восстановить объект не удалось. +// ТекстСообщенияОбОшибке - Строка - текст ошибки (возвращаемый параметр), если восстановить объект не удалось. // // Возвращаемое значение - Объект или Неопределено. // @@ -1477,3 +1432,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl index 952b31513..e990cee1a 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает отчет по версиям объекта в режиме сравнения версий. // @@ -40,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему @@ -60,4 +60,6 @@ ПараметрыОтчета.Вставить("СравниваемыеВерсии", СравниваемыеВерсии); ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ОтчетПоВерсиямОбъекта", ПараметрыОтчета); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index 9876b9372..6462a42d7 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Записывает версию объекта в информационную базу. // @@ -26,8 +25,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему @@ -60,3 +60,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 42023d08e..6b0a7f63a 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАМНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Вызывается из обработчиков заполнения документов - взаимодействий и предметов заполнения. //Выполняет необходимые действия по заполнению реквизитов по умолчанию @@ -53,7 +52,9 @@ КонецЕсли; Если ДанныеЗаполнения.Свойство("Предмет") И ЗначениеЗаполнено(ДанныеЗаполнения.Предмет) Тогда МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения.Предмет); - Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения.Предмет); + Если НЕ (ДанныеЗаполнения.Свойство("Контакт") И ЗначениеЗаполнено(ДанныеЗаполнения.Контакт)) Тогда + Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения.Предмет); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -116,8 +117,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -129,6 +131,9 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПредставленияПредмета"].Добавить( "Взаимодействия"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеУдаленияПомеченных"].Добавить( + "Взаимодействия"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( @@ -159,8 +164,37 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Вызывается после удаления помеченных объектов. +// +// Параметры: +// ПараметрыВыполнения - Структура - Контекст удаления помеченных объектов. +// * Удаленные - Массив - Ссылки удаленных объектов. +// * НеУдаленные - Массив - Ссылки объектов, которые не получилось удалить. +// +Процедура ПослеУдаленияПомеченных(Знач ПараметрыВыполнения) Экспорт + + ТребуетсяПересчетСостояний = Ложь; + + Для Каждого УдаленнаяСсылка Из ПараметрыВыполнения.Удаленные Цикл + + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(УдаленнаяСсылка) Тогда + ТребуетсяПересчетСостояний = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ТребуетсяПересчетСостояний Тогда + + ВыполнитьПолныйПерерасчетСостояний(); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -168,7 +202,7 @@ // Устанавливает текстовое описание предмета // // Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // Представление - Строка - сюда необходимо поместить текстовое описание. Процедура ПриОпределенииПредставленияПредмета(СсылкаНаПредмет, Представление) Экспорт @@ -270,7 +304,6 @@ |РегистрСведений.ПредметыПапкиВзаимодействий.Изменение.Объект.Документ.ЭлектронноеПисьмоИсходящее |"; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда Описание = Описание + " @@ -363,7 +396,7 @@ Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Запретить Тогда ППДВключен = Ложь; - ИнформацияОбАктуальностиИндексаППД = НСтр("ru = 'ППД не включен'"); + ИнформацияОбАктуальностиИндексаППД = НСтр("ru = 'Полнотекстовый поиск не включен'"); Иначе ППДВключен = Истина; Если ПолнотекстовыйПоискСервер.ИндексПоискаАктуален() Тогда @@ -471,7 +504,6 @@ Возврат ВсеСпискиПоиска; - КонецФункции // Добавляет вариант поиска в список доступных поисков @@ -560,19 +592,38 @@ Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес) Если ПустаяСтрока(Представление) Тогда - Возврат """" + Адрес + """"; + Возврат Адрес; ИначеЕсли ПустаяСтрока(Адрес) Тогда - Возврат """" + Представление + """"; + Возврат Представление; КонецЕсли; ВариантыПоиска = Новый СписокЗначений; - ВариантыПоиска.Добавить("""" + Представление + """" + " ИЛИ " + Адрес); - ВариантыПоиска.Добавить("""" + Представление + """" + " И " + Адрес); + Представление = ДобавитьКавычкиКСтроке(Представление); + Адрес = ДобавитьКавычкиКСтроке(Адрес); + ВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес); + ВариантыПоиска.Добавить(Представление + " И " + Адрес); Возврат ВариантыПоиска; КонецФункции +Функция ДобавитьКавычкиКСтроке(ИсходнаяСтрока) + + + СтрокаКВозврату = СокрЛП(ИсходнаяСтрока); + + Если КодСимвола(Лев(СокрЛП(СтрокаКВозврату), 1)) <> 34 Тогда + СтрокаКВозврату = """" + СтрокаКВозврату; + КонецЕсли; + + Если КодСимвола(Прав(СокрЛП(СтрокаКВозврату), 1)) <> 34 Тогда + СтрокаКВозврату = СтрокаКВозврату + """"; + КонецЕсли; + + Возврат СтрокаКВозврату; + +КонецФункции + //Возвращает флаг необходимости оповещения формы взаимодействия-основания //Параметры: //Основание - структура, содержащая ссылку на взаимодействие, из которого создается контакт @@ -931,7 +982,6 @@ |ГДЕ | (НЕ Таблица.ПометкаУдаления) |"; - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -1025,7 +1075,6 @@ |УПОРЯДОЧИТЬ ПО | Наименование"; - Если ИтогиПоEmail Тогда ТекстЗапроса = ТекстЗапроса + " | @@ -1351,7 +1400,6 @@ |ГДЕ | ТаблицаКонтактнаяИнформация.АдресЭП ПОДОБНО &СтрокаПоиска"; - ПерваяТаблица = Ложь; КонецЕсли; КонецЦикла; @@ -1390,7 +1438,8 @@ Возврат ""; КонецЕсли; - Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Запретить Тогда + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Запретить + ИЛИ НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") Тогда Возврат НСтр("ru = 'Использование индекса полнотекстового поиска данных запрещено!'"); КонецЕсли; @@ -1398,7 +1447,12 @@ СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(Форма.СтрокаПоиска, 101); СписокПоиска.ОбластьПоиска = МассивМетаданных; - СписокПоиска.ПерваяЧасть(); + + Попытка + СписокПоиска.ПерваяЧасть(); + Исключение + Возврат НСтр("ru = 'При выполнении поиска произошла ошибка, попробуйте изменить выражение поиска.'"); + КонецПопытки; КоличествоНайденныхЭлементов = СписокПоиска.Количество(); Если КоличествоНайденныхЭлементов = 0 Тогда @@ -1419,7 +1473,6 @@ ТекстЗапроса = ПолучитьТекстЗапросаПоискКонтактовПоСтроке(); КонецЕсли; - Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок); @@ -1890,7 +1943,7 @@ Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда НоваяСтрока.Контакт = ЭлементМассива.Контакт; НоваяСтрока.ПредставлениеКонтакта = ЭлементМассива.Представление; - НоваяСтрока.КакСвязаться = ЭлементМассива.Адрес; + НоваяСтрока.КакСвязаться = ПреобразоватьАдресПоТипуИнформации(ЭлементМассива.Адрес, ТипКонтактнойИнформации); Иначе НоваяСтрока.Контакт = ЭлементМассива; КонецЕсли; @@ -1901,6 +1954,36 @@ КонецПроцедуры +Функция ПреобразоватьАдресПоТипуИнформации(Адрес, ТипКонтактнойИнформации = Неопределено) + + Если ТипКонтактнойИнформации = Неопределено Или ПустаяСтрока(Адрес) Тогда + Возврат Адрес; + КонецЕсли; + + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + + МассивСтрокСТелефонами = Новый Массив; + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Адрес, ";"); + + Для Каждого ЭлементМассива Из МассивСтрокСТелефонами Цикл + СтруктураПолей = ВзаимодействияКлиентСервер.СтруктураПолейПоПредставлениюТелефона(ЭлементМассива); + Если ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(СтруктураПолей) Тогда + МассивСтрокСТелефонами.Добавить(ЭлементМассива); + КонецЕсли; + КонецЦикла; + + Если МассивСтрокСТелефонами.Количество() > 0 Тогда + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(МассивСтрокСТелефонами, ";"); + КонецЕсли; + + Иначе + + Возврат Адрес + + КонецЕсли; + +КонецФункции + //Заполняет значения прочих полей в строках табличной части Участники документов взаимодействий. // //Параметры @@ -2036,7 +2119,6 @@ | СоставыГруппПользователей.Пользователь = ТаблицаКонтакт.Ссылка | И СоставыГруппПользователей.ГруппаПользователей В (&МассивКонтактов)))"; - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда @@ -2375,7 +2457,7 @@ СтруктураДанныеВложения.Вставить("Идентификатор", Выборка.ИДФайлаЭлектронногоПисьма); соотвВложения.Вставить(ИмяФайла, СтруктураДанныеВложения); КонецЕсли; - Для каждого ЭП Из Выборка.ЭлектронныеЦифровыеПодписи.Выгрузить() Цикл + Для каждого ЭП Из Выборка.ЭлектронныеПодписи.Выгрузить() Цикл соотвВложения.Вставить(Выборка.ПолноеНаименование + "-DS("+ ЭП.НомерСтроки + ")." + РасширениеДляФайловПодписи,ЭП.Подпись.Получить()); @@ -2393,7 +2475,7 @@ ПараметрыПисьма.Вставить("УведомитьОПрочтении", Истина); КонецЕсли; - Возврат ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма,Соединение); + Возврат РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма,Соединение); КонецФункции @@ -2465,7 +2547,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.22"; - Обработчик.Процедура = "Взаимодействия. ОбновитьХранениеВключатьВПредставлениеИмяПользователя_2_1_3_22"; + Обработчик.Процедура = "Взаимодействия.ОбновитьХранениеВключатьВПредставлениеИмяПользователя_2_1_3_22"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.12"; @@ -2671,7 +2753,6 @@ КонецЦикла; - КонецПроцедуры //Процедура обновления ИБ для версии БСП 2.1.3.22 @@ -2936,7 +3017,8 @@ Возврат; КонецЕсли; - РассчитыватьРассмотрено = НЕ (Форма.Объект.Ссылка.Пустая() И Форма.Рассмотрено); + РассчитыватьРассмотрено = (СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) + ИЛИ (СтарыеЗначенияРеквизитов.Предмет <> Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет)); СтруктураДляЗаписи = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи( , Форма.Предмет, Форма.Рассмотрено, Форма.РассмотретьПосле, РассчитыватьРассмотрено); @@ -2955,10 +3037,12 @@ ПредметПредмета = ПолучитьЗначениеПредмета(Форма.Предмет); Если Не ЗначениеЗаполнено(ПредметПредмета) Тогда // У предмета установим в качестве предмета ссылку на самого себя - УстановитьПредмет(Форма.Предмет, Форма.Предмет); + СтруктураДляЗаписи.Предмет = Форма.Предмет; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); Иначе - СтруктураДляЗаписи.Предмет = ПредметПредмета; + СтруктураДляЗаписи.Предмет = ПредметПредмета; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; Форма.Предмет = ПредметПредмета; ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); КонецЕсли; @@ -2971,8 +3055,9 @@ Иначе - СтруктураДляЗаписи.Предмет = Ссылка; - Форма.Предмет = Ссылка; + СтруктураДляЗаписи.Предмет = Ссылка; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; + Форма.Предмет = Ссылка; ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); КонецЕсли; @@ -2980,8 +3065,12 @@ // Если предыдущим предметом было взаимодействие, то возможно нужно поменять предмет у всей цепочки Если ЗначениеЗаполнено(СтарыеЗначенияРеквизитов.Предмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыеЗначенияРеквизитов.Предмет) Тогда - Если НЕ (Ссылка <> СтарыеЗначенияРеквизитов.Предмет И (Не ЗначениеЗаполнено(Форма.Предмет) ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда + Если НЕ (Ссылка <> СтарыеЗначенияРеквизитов.Предмет + И (Не ЗначениеЗаполнено(Форма.Предмет) + ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда + ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, Ссылка); + КонецЕсли; КонецЕсли; @@ -3160,7 +3249,7 @@ Процедура СоздатьОтборПоТипуСогласноФО(Список) Экспорт ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( - ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, "Отбор по типу согласно ФО", + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, "ОтборПоТипуСогласноФО", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); ИмяПоля = "Тип"; @@ -3816,7 +3905,7 @@ Для Каждого Получатель Из ТаблицаПолучателей Цикл СтрокаКВозврату = СтрокаКВозврату + "'" + - ?(ПустаяСтрока(Получатель.Представление), Получатель.Адрес, Получатель.Представление) + "'"+ ", "; + ?(ПустаяСтрока(Получатель.Представление), Получатель.Адрес, Получатель.Представление + "<"+ Получатель.Адрес+">") + "'"+ ", "; КонецЦикла; @@ -3995,7 +4084,9 @@ Если ТипЗнч(ДочернийУзел) = Тип("ЭлементБлокHTML") ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементHTML") - ИЛИ ТипЗнч(ДочернийУзел) = Тип("ТекстDOM") Тогда + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ТекстDOM") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("КомментарийDOM") + ИЛИ ТипЗнч(ДочернийУзел) = Тип("ЭлементТаблицаHTML") Тогда МассивДочернихУзлов.Добавить(ДочернийУзел); @@ -4429,6 +4520,8 @@ // Выполняет отправку сообщений SMS по переданному документу Сообщение SMS Функция ОтправкаSMSПоДокументу(Документ) Экспорт + УстановитьПривилегированныйРежим(Истина); + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); ВзаимодействияКлиентСервер.УстановитьСостояниеИсходящееДокументСообщениеSMS(Документ); @@ -4450,7 +4543,13 @@ //Выполняет процедуру отправки сообщений SMS. Процедура ОтправкаSMS() Экспорт - + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; КонецЕсли; @@ -4539,9 +4638,17 @@ КонецПроцедуры -//Выполняет процедуру обновления статусов доставки SMS. +// Обработчик регламентного задания. +// Выполняет процедуру обновления статусов доставки SMS по расписанию. +// Процедура ОбновлениеСтатусовДоставкиSMS() Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; КонецЕсли; @@ -5483,7 +5590,6 @@ | ПО НаименованиеПапкиНазначения.НаименованиеПапки = ПапкиПисем.Наименование | И НаименованиеПапкиНазначения.УчетнаяЗапись = ПапкиПисем.УчетнаяЗапись"; - Запрос.УстановитьПараметр("МассивПисем",МассивПисем); УстановитьПараметрыЗапросаИменаПредопределенныеПапки(Запрос); @@ -5517,6 +5623,16 @@ /////////////////////////////////////////////////////////////////////////////////// // Расчет состояний +// Выполняет полный перерасчет состояний по папкам, контактам и предметам +// +Процедура ВыполнитьПолныйПерерасчетСостояний() Экспорт + + РассчитатьРассмотреноПоПапкам(Неопределено); + РассчитатьРассмотреноПоКонтактам(Неопределено); + РассчитатьРассмотреноПоПредметам(Неопределено); + +КонецПроцедуры + // Рассчитывает состояния предметов взаимодействий // // Параметры: @@ -5611,7 +5727,6 @@ КонецЕсли; - Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -5810,12 +5925,12 @@ // ТаблицаПредметов - ТаблицаЗначений, Неопределено - таблица предметов, которые необходимо рассчитать. // Если Неопределено, то рассчитываются состояния всех предметов. // -Процедура РассчитатьРассмотреноПоПредметам(ТаблицаПредметов) Экспорт +Процедура РассчитатьРассмотреноПоПредметам(ДанныеДляРасчета) Экспорт УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Если ТаблицаПредметов = Неопределено Тогда + Если ДанныеДляРасчета = Неопределено Тогда РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Неопределено); @@ -5841,22 +5956,53 @@ Иначе - Если ТаблицаПредметов.Количество() = 0 Тогда + Если ДанныеДляРасчета.Количество() = 0 Тогда Возврат; КонецЕсли; - Запрос.Текст = - "ВЫБРАТЬ - | ПредметыДляРасчета.ПоЧемуРассчитывать КАК Предмет - |ПОМЕСТИТЬ ПредметыДляРасчета - |ИЗ - | &ПредметыДляРасчета КАК ПредметыДляРасчета - | - |ИНДЕКСИРОВАТЬ ПО - | Предмет - |; - | - |//////////////////////////////////////////////////////////////////////////////// + Если ТипЗнч(ДанныеДляРасчета) = Тип("ТаблицаЗначений") Тогда + + ТекстПредметыДляРасчета = " + |ВЫБРАТЬ + | ПредметыДляРасчета.ПоЧемуРассчитывать КАК Предмет + |ПОМЕСТИТЬ ПредметыДляРасчета + |ИЗ + | &ПредметыДляРасчета КАК ПредметыДляРасчета + | + |ИНДЕКСИРОВАТЬ ПО + | Предмет + |; + | + |////////////////////////////////////////////////////////////////////////////////"; + + Запрос.УстановитьПараметр("ПредметыДляРасчета", ДанныеДляРасчета); + + ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("Массив") Тогда + + ТекстПредметыДляРасчета = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПредметыПапкиВзаимодействий.Предмет КАК Предмет + |ПОМЕСТИТЬ ПредметыДляРасчета + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + |ГДЕ + | ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий) + | + |ИНДЕКСИРОВАТЬ ПО + | Предмет + |; + | + |////////////////////////////////////////////////////////////////////////////////"; + + Запрос.УстановитьПараметр("МассивВзаимодействий", ДанныеДляРасчета); + + Иначе + + Возврат; + + КонецЕсли; + + Запрос.Текст = ТекстПредметыДляРасчета + " |ВЫБРАТЬ | ПредметыПапкиВзаимодействий.Предмет КАК Предмет, | СУММА(ВЫБОР @@ -5904,7 +6050,6 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий | ПО ПредметыДляРасчета.Предмет = СостоянияПредметовВзаимодействий.Предмет"; - Запрос.УстановитьПараметр("ПредметыДляРасчета", ТаблицаПредметов); КонецЕсли; @@ -6074,6 +6219,38 @@ КонецПроцедуры +// Проверяет массив взаимодействий на и оставляет только те, у которых необходимо изменить дату рассмотрения +// +// Параметры: +// МассивВзаимодействий - Массив - массив взаимодействий, для которого предлагается изменить дату рассмотрения +// ДатаРассмотрения - Дата - новая дата рассмотрения +// +// Возвращаемое значение: +// Массив - массив взаимодействий, для которого необходимо изменить дату рассмотрения +// +Функция МассивВзаимодействийДляИзмененияДатыРассмотрения(МассивВзаимодействий, ДатаРассмотрения) Экспорт + + Если МассивВзаимодействий.Количество() > 0 Тогда + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ПредметыПапкиВзаимодействий.Взаимодействие + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + |ГДЕ + | НЕ ПредметыПапкиВзаимодействий.Рассмотрено + | И ПредметыПапкиВзаимодействий.РассмотретьПосле <> &ДатаРассмотрения"; + + Запрос.УстановитьПараметр("ДатаРассмотрения", ДатаРассмотрения); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Взаимодействие"); + Иначе + + Возврат МассивВзаимодействий; + + КонецЕсли; + +КонецФункции + /////////////////////////////////////////////////////////////////////////////////// // Прочее @@ -6205,6 +6382,7 @@ | %Предмет% КАК Предмет, | ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) КАК ТипПредмета, | ЕСТЬNULL(ПредметыВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)) КАК Папка, + | ЖурналДокументовВзаимодействия.ПолученоОтправлено, | ЖурналДокументовВзаимодействия.Размер, | ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма |ИЗ @@ -6623,3 +6801,5 @@ Возврат Массив; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index b4dbb9eda..c9dfe9084 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Основные процедуры и функции поиска контактов @@ -232,7 +231,6 @@ ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -432,3 +430,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index d2619b696..814e130ad 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАМНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Открывает форму нового документа "Электронное письмо исходящее" //с переданными в процедуру параметрами @@ -18,12 +17,13 @@ // СписокФайлов - Массив - вложения письма // Предмет - Ссылка - предмет письма // -Процедура ОткрытьФормуОтправкиПочтовогоСообщения(знач Отправитель = Неопределено, - знач Получатель = Неопределено, - знач Тема = "", - знач Текст = "", - знач СписокФайлов = Неопределено, - знач Предмет = Неопределено) Экспорт +Процедура ОткрытьФормуОтправкиПочтовогоСообщения(Знач Отправитель = Неопределено, + Знач Получатель = Неопределено, + Знач Тема = "", + Знач Текст = "", + Знач СписокФайлов = Неопределено, + Знач Предмет = Неопределено, + Знач ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт ПараметрыПисьма = Новый Структура; @@ -34,7 +34,7 @@ ПараметрыПисьма.Вставить("Вложения", СписокФайлов); ПараметрыПисьма.Вставить("Предмет", Предмет); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыПисьма); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыПисьма, , , , , ОписаниеОповещенияОЗакрытии); КонецПроцедуры @@ -63,8 +63,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //Создает взаимодействие или предмет взаимодействия //Параметры: @@ -111,7 +112,9 @@ ДополнительныеПараметры.Вставить("ППДВключен", ППДВключен); ДополнительныеПараметры.Вставить("ИндексАктуален", ИндексАктуален); - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиОбновленияПолнотекстовогоПоиска", ЭтотОбъект); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиОбновленияПолнотекстовогоПоиска", + ЭтотОбъект, + ДополнительныеПараметры); СтрВопроса = НСтр("ru = 'Обновление индекса полнотекстового поиска может занять длительное время. Продолжить?'"); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии,СтрВопроса, РежимДиалогаВопрос.ДаНет); @@ -347,9 +350,9 @@ // ПараметрыСоздания - Структура - параметры создаваемого документа // ЭлементСписок - ТаблицаФормы - элемент формы в котором происходит создание // -Процедура СоздатьНовоеВзаимодействие(ТипОбъекта,ПараметрыСоздания = Неопределено) Экспорт +Процедура СоздатьНовоеВзаимодействие(ТипОбъекта,ПараметрыСоздания = Неопределено, Форма = Неопределено) Экспорт - ОткрытьФорму("Документ."+ ТипОбъекта+".ФормаОбъекта",ПараметрыСоздания); + ОткрытьФорму("Документ."+ ТипОбъекта+".ФормаОбъекта",ПараметрыСоздания, Форма); КонецПроцедуры @@ -438,22 +441,6 @@ КонецПроцедуры -// Обработчик окончания выбора типа документа при создании документа взаимодействий -// -// Параметры: -// РезультатВыборка - ЭлементСпискаЗначений - содержит в значение строковое представление типа создаваемого документа. -// ДополнительныеПараметры - Структура - содержит одно поле - "ПараметрыСоздания". -// -Процедура ВыборТипаДокументаДляСозданияПриЗавершении(РезультатВыбора, ДополнительныеПараметры) Экспорт - - Если НЕ РезультатВыбора = Неопределено Тогда - - СоздатьНовоеВзаимодействие(РезультатВыбора.Значение,ДополнительныеПараметры.ПараметрыСоздания); - - КонецЕсли; - -КонецПроцедуры - // Обработчик перед началом добавления динамических списков журнала взаимодействия // // Параметры @@ -482,21 +469,6 @@ КонецЕсли; КонецЕсли; - Иначе - - Если ТолькоПочта Тогда - Отказ = Истина; - СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее",ПараметрыСоздания); - Иначе - - Отказ = Истина; - - ДополнительныеПараметры = Новый Структура("ПараметрыСоздания", ПараметрыСоздания); - ОбработчикОповещения = Новый ОписаниеОповещения("ВыборТипаДокументаДляСозданияПриЗавершении", ЭтотОбъект, ДополнительныеПараметры); - ДокументыДоступныеДляСоздания.ПоказатьВыборЭлемента(ОбработчикОповещения, НСтр("ru = 'Выберите тип документа'")); - - КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -581,3 +553,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl index 2155e8376..d12181ac6 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Вызывается при создании нового контакта. //Используется, если для одного или нескольких видов контактов требуется, @@ -31,4 +30,6 @@ Возврат Ложь; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index c1a37c561..50967fdfc 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Определение типа ссылки @@ -295,29 +294,29 @@ // Таблица значений // Функция ПолучитьСписокКодировок() Экспорт - + СписокКодировок = Новый СписокЗначений; - СписокКодировок.Добавить("ibm852", "ibm852 (Центральноевропейская DOS)"); - СписокКодировок.Добавить("ibm866", "ibm866 (Кириллица DOS)"); - СписокКодировок.Добавить("iso-8859-1", "iso-8859-1 (Западноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-2", "iso-8859-2 (Центральноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-3", "iso-8859-3 (Латиница 3 ISO)"); - СписокКодировок.Добавить("iso-8859-4", "iso-8859-4 (Балтийская ISO)"); - СписокКодировок.Добавить("iso-8859-5", "iso-8859-5 (Кириллица ISO)"); - СписокКодировок.Добавить("iso-8859-7", "iso-8859-7 (Греческая ISO)"); - СписокКодировок.Добавить("iso-8859-9", "iso-8859-9 (Турецкая ISO)"); - СписокКодировок.Добавить("iso-8859-15", "iso-8859-15 (Латиница 9 ISO)"); - СписокКодировок.Добавить("koi8-r", "koi8-r (Кириллица KOI8-R)"); - СписокКодировок.Добавить("koi8-u", "koi8-u (Кириллица KOI8-U)"); - СписокКодировок.Добавить("us-ascii", "us-ascii США"); - СписокКодировок.Добавить("utf-8", "utf-8 (Юникод UTF-8)"); - СписокКодировок.Добавить("windows-1250", "windows-1250 (Центральноевропейская Windows)"); - СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)"); - СписокКодировок.Добавить("windows-1252", "windows-1252 (Западноевропейская Windows)"); - СписокКодировок.Добавить("windows-1253", "windows-1253 (Греческая Windows)"); - СписокКодировок.Добавить("windows-1254", "windows-1254 (Турецкая Windows)"); - СписокКодировок.Добавить("windows-1257", "windows-1257 (Балтийская Windows)"); + СписокКодировок.Добавить("ibm852", НСтр("ru = 'ibm852 (Центральноевропейская DOS)'")); + СписокКодировок.Добавить("ibm866", НСтр("ru = 'ibm866 (Кириллица DOS)'")); + СписокКодировок.Добавить("iso-8859-1", НСтр("ru = 'iso-8859-1 (Западноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-2", НСтр("ru = 'iso-8859-2 (Центральноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-3", НСтр("ru = 'iso-8859-3 (Латиница 3 ISO)'")); + СписокКодировок.Добавить("iso-8859-4", НСтр("ru = 'iso-8859-4 (Балтийская ISO)'")); + СписокКодировок.Добавить("iso-8859-5", НСтр("ru = 'iso-8859-5 (Кириллица ISO)'")); + СписокКодировок.Добавить("iso-8859-7", НСтр("ru = 'iso-8859-7 (Греческая ISO)'")); + СписокКодировок.Добавить("iso-8859-9", НСтр("ru = 'iso-8859-9 (Турецкая ISO)'")); + СписокКодировок.Добавить("iso-8859-15", НСтр("ru = 'iso-8859-15 (Латиница 9 ISO)'")); + СписокКодировок.Добавить("koi8-r", НСтр("ru = 'koi8-r (Кириллица KOI8-R)'")); + СписокКодировок.Добавить("koi8-u", НСтр("ru = 'koi8-u (Кириллица KOI8-U)'")); + СписокКодировок.Добавить("us-ascii", НСтр("ru = 'us-ascii США'")); + СписокКодировок.Добавить("utf-8", НСтр("ru = 'utf-8 (Юникод UTF-8)'")); + СписокКодировок.Добавить("windows-1250", НСтр("ru = 'windows-1250 (Центральноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1251", НСтр("ru = 'windows-1251 (Кириллица Windows)'")); + СписокКодировок.Добавить("windows-1252", НСтр("ru = 'windows-1252 (Западноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1253", НСтр("ru = 'windows-1253 (Греческая Windows)'")); + СписокКодировок.Добавить("windows-1254", НСтр("ru = 'windows-1254 (Турецкая Windows)'")); + СписокКодировок.Добавить("windows-1257", НСтр("ru = 'windows-1257 (Балтийская Windows)'")); Возврат СписокКодировок; @@ -551,7 +550,7 @@ //очистить связанные отборы ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( - Отбор.Элементы,"Отбор по типу взаимодействий",ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Отбор.Элементы,"ОтборПоТипуВзаимодействий",ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); //установить отборы для типа Если ТипВзаимодействия = "ВсеПисьма" Тогда @@ -661,7 +660,7 @@ // Функция ПолучитьПредставлениеАдресата(Имя, Адрес, Контакт) Экспорт - Результат = ?(Имя = Адрес ИЛИ Имя = "", Адрес,?(ПустаяСтрока(Адрес),Имя, Имя + " <" + Адрес + ">")); + Результат = ?(Имя = Адрес ИЛИ Имя = "", Адрес,?(ПустаяСтрока(Адрес),Имя, ?(Найти(Имя, Адрес) > 0, Имя, Имя + " <" + Адрес + ">"))); Если ЗначениеЗаполнено(Контакт) И ТипЗнч(Контакт) <> Тип("Строка") Тогда Результат = Результат + " [" + ПолучитьПредставлениеКонтакта(Контакт) + "]"; КонецЕсли; @@ -844,4 +843,6 @@ Возврат СтруктураВозврата; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl index dcce108dd..d2adeafee 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // В данной функции при необходимости формируется массив строковых представлений предметов взаимодействий // Используется, если в конфигурации определен хотя бы один предмет взаимодействий. @@ -35,9 +34,9 @@ // ВзаимодействияКлиентСервер. // Процедура ДополнитьМассивОписанияВозможныхКонтактов(МассивВозможныеКонтакты) Экспорт - + КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl index 7be9fb8b0..b78bd78e0 100644 --- a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Возвращает текст запроса, отбирающего контакты (участников) предмета взаимодействия. //Используется, если в конфигурации определен хотя бы один предмет взаимодействий. @@ -25,3 +24,5 @@ Возврат ""; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl index 475767f71..9e5e7fcd9 100644 --- a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //Обработчик события при записи учетной записи электронной почты Процедура ПриЗаписиУчетнойЗаписиЭлектроннойПочты(Источник, Отказ) Экспорт @@ -16,7 +15,6 @@ КонецЕсли; - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ПапкиЭлектронныхПисем.Ссылка @@ -34,3 +32,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index 4132f0f01..ba9ace902 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает признак использования внешних пользователей в программе. // (значение функциональной опции ИспользоватьВнешнихПользователей). @@ -63,3 +62,5 @@ Возврат ОбъектАвторизации; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index ed5ad1a55..c4fcbe4f3 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Функция возвращает массив дат, которые отличается указанной даты на количество дней, // входящих в указанный график @@ -211,16 +210,22 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Календари.Ссылка КАК ГрафикРаботы, - | ДанныеПроизводственногоКалендаря.Дата КАК ДатаГрафика - |ПОМЕСТИТЬ ВТПредпраздничныеДни + | ДанныеПроизводственногоКалендаря.Дата КАК ДатаГрафика, + | ДанныеПроизводственногоКалендаря.ДатаПереноса, + | ВЫБОР + | КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПредпраздничныйДень + |ПОМЕСТИТЬ ВТСведенияПоКалендарю |ИЗ | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Календари КАК Календари | ПО ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = Календари.ПроизводственныйКалендарь | И (Календари.Ссылка В (&Календари)) - |ГДЕ - | ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания - | И ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) + | И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания) + | И (ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) + | ИЛИ ДанныеПроизводственногоКалендаря.ДатаПереноса <> ДАТАВРЕМЯ(1, 1, 1)) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -228,11 +233,8 @@ | КалендарныеГрафики.Календарь КАК ГрафикРаботы, | КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика, | РАЗНОСТЬДАТ(Календари.ДатаОтсчета, КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1 КАК ДнейОтДатыОтсчета, - | ВЫБОР - | КОГДА ПредпраздничныеДни.ДатаГрафика ЕСТЬ НЕ NULL - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПредпраздничныйДень + | СведенияПоКалендарю.ПредпраздничныйДень, + | СведенияПоКалендарю.ДатаПереноса |ПОМЕСТИТЬ ВТДниВключенныеВГрафик |ИЗ | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики @@ -241,9 +243,9 @@ | И (КалендарныеГрафики.Календарь В (&Календари)) | И (КалендарныеГрафики.ДатаГрафика МЕЖДУ &ДатаНачала И &ДатаОкончания) | И (КалендарныеГрафики.ДеньВключенВГрафик) - | ЛЕВОЕ СОЕДИНЕНИЕ ВТПредпраздничныеДни КАК ПредпраздничныеДни - | ПО (ПредпраздничныеДни.ГрафикРаботы = КалендарныеГрафики.Календарь) - | И (ПредпраздничныеДни.ДатаГрафика = КалендарныеГрафики.ДатаГрафика) + | ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияПоКалендарю КАК СведенияПоКалендарю + | ПО (СведенияПоКалендарю.ГрафикРаботы = КалендарныеГрафики.Календарь) + | И (СведенияПоКалендарю.ДатаГрафика = КалендарныеГрафики.ДатаГрафика) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -289,7 +291,11 @@ |ВЫБРАТЬ | ДниВключенныеВГрафик.ГрафикРаботы, | ДниВключенныеВГрафик.ДатаГрафика, - | ДЕНЬНЕДЕЛИ(ДниВключенныеВГрафик.ДатаГрафика), + | ВЫБОР + | КОГДА ДниВключенныеВГрафик.ДатаПереноса ЕСТЬ NULL + | ТОГДА ДЕНЬНЕДЕЛИ(ДниВключенныеВГрафик.ДатаГрафика) + | ИНАЧЕ ДЕНЬНЕДЕЛИ(ДниВключенныеВГрафик.ДатаПереноса) + | КОНЕЦ, | ДниВключенныеВГрафик.ПредпраздничныйДень |ИЗ | ВТДниВключенныеВГрафик КАК ДниВключенныеВГрафик @@ -339,8 +345,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Выполняет обновление графиков работы по данным производственных календарей, // на основании которых они заполняются @@ -371,18 +378,19 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Используется для получения объектов метаданных обязательных для плана обмена. // Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -457,15 +465,15 @@ Обработчик = Обработчики.Добавить(); Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "КалендарныеГрафики.СоздатьКалендарьПятидневкаРоссийскойФедерации"; + Обработчик.Процедура = "ГрафикиРаботы.СоздатьКалендарьПятидневкаРоссийскойФедерации"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.1"; - Обработчик.Процедура = "КалендарныеГрафики.ЗаполнитьНастройкиЗаполненияГрафиковРаботы"; + Обработчик.Процедура = "ГрафикиРаботы.ЗаполнитьНастройкиЗаполненияГрафиковРаботы"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.4.21"; - Обработчик.Процедура = "КалендарныеГрафики.ЗаполнитьКоличествоДнейВГрафикеСНачалаГода"; + Обработчик.Версия = "2.2.2.14"; + Обработчик.Процедура = "ГрафикиРаботы.ЗаполнитьКоличествоДнейВГрафикеСНачалаГода"; КонецПроцедуры @@ -562,34 +570,70 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | КалендарныеГрафики.Календарь, - | КалендарныеГрафики.Год - |ПОМЕСТИТЬ ВТГрафикиРаботыКоличествоДнейЗаполнено + | ДанныеПроизводственногоКалендаря.Дата, + | ДанныеПроизводственногоКалендаря.Год + |ПОМЕСТИТЬ ВТДаты |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - |ГДЕ - | КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода > 0 + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | КалендарныеГрафики.Календарь КАК Календарь, - | КалендарныеГрафики.Год КАК Год, - | КалендарныеГрафики.ДатаГрафика, - | КалендарныеГрафики.ДеньВключенВГрафик + | Даты.Год, + | КОЛИЧЕСТВО(Даты.Дата) КАК КоличествоДней + |ПОМЕСТИТЬ ВТКоличествоДнейПоГодам |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - | ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикиРаботыКоличествоДнейЗаполнено КАК ГрафикиРаботыКоличествоДнейЗаполнено - | ПО (ГрафикиРаботыКоличествоДнейЗаполнено.Календарь = КалендарныеГрафики.Календарь) - | И (ГрафикиРаботыКоличествоДнейЗаполнено.Год = КалендарныеГрафики.Год) - |ГДЕ - | ГрафикиРаботыКоличествоДнейЗаполнено.Год ЕСТЬ NULL + | ВТДаты КАК Даты | - |УПОРЯДОЧИТЬ ПО + |СГРУППИРОВАТЬ ПО + | Даты.Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | КалендарныеГрафики.Календарь, | КалендарныеГрафики.Год, - | КалендарныеГрафики.ДатаГрафика, - | КалендарныеГрафики.ДеньВключенВГрафик + | КОЛИЧЕСТВО(КалендарныеГрафики.ДатаГрафика) КАК КоличествоДней + |ПОМЕСТИТЬ ВТКоличествоДнейПоГрафикам + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + | + |СГРУППИРОВАТЬ ПО + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КоличествоДнейПоГрафикам.Календарь, + | КоличествоДнейПоГрафикам.Год + |ПОМЕСТИТЬ ВТГрафикиГоды + |ИЗ + | ВТКоличествоДнейПоГрафикам КАК КоличествоДнейПоГрафикам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКоличествоДнейПоГодам КАК КоличествоДнейПоГодам + | ПО КоличествоДнейПоГрафикам.Год = КоличествоДнейПоГодам.Год + | И КоличествоДнейПоГрафикам.КоличествоДней < КоличествоДнейПоГодам.КоличествоДней + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГрафикиГоды.Календарь КАК Календарь, + | ГрафикиГоды.Год КАК Год, + | Даты.Дата КАК ДатаГрафика, + | ЕСТЬNULL(КалендарныеГрафики.ДеньВключенВГрафик, ЛОЖЬ) КАК ДеньВключенВГрафик + |ИЗ + | ВТГрафикиГоды КАК ГрафикиГоды + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДаты КАК Даты + | ПО ГрафикиГоды.Год = Даты.Год + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + | ПО (КалендарныеГрафики.Календарь = ГрафикиГоды.Календарь) + | И (КалендарныеГрафики.Год = ГрафикиГоды.Год) + | И (КалендарныеГрафики.ДатаГрафика = Даты.Дата) + | + |УПОРЯДОЧИТЬ ПО + | ГрафикиГоды.Календарь, + | ГрафикиГоды.Год, + | Даты.Дата |ИТОГИ ПО | Календарь, | Год"; @@ -635,3 +679,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl index 1cdb87ced..efa8bd4e6 100644 --- a/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура сдвигает только что отредактированную строку в коллекции // таким образом, чтобы строки коллекции оставались упорядоченными @@ -92,3 +91,5 @@ ФиксированноеСоответствие = Новый ФиксированноеСоответствие(Соответствие); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl index eac2a9590..124a8673f 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Используется для открытия формы группового изменения объектов. // @@ -37,6 +36,8 @@ Возврат; КонецЕсли; - ОткрытьФорму("Обработка.ГрупповоеИзменениеОбъектов.Форма", ПараметрыФормы); + ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 3a7ea428e..881b39267 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверяет наличие запрета изменения элемента данных. // Для работы функции требуется настройка @@ -134,7 +133,6 @@ КонецФункции - // Обработчик события формы ПриЧтенииНаСервере, который // встраивается в формы элементов данных // (элементов справочников, документов, записей регистров, и др.), @@ -529,8 +527,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПолучитьДанныеДляПроверки(ПредварительныеДанные) @@ -1103,3 +1102,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index ee8907804..3f3f34354 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Позволяет изменить работу интерфейса при встраивании. // @@ -78,3 +77,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl index fdb996885..b32406e76 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает свойства, характеризующие вариант встраивания. Функция СвойстваРазделов() Экспорт @@ -122,3 +121,5 @@ Возврат ИсточникиДанных; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 5b02d5c21..a9d61a9a1 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -17,6 +16,11 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( "ДатыЗапретаИзмененияСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "ДатыЗапретаИзмененияСлужебный"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( "ДатыЗапретаИзмененияСлужебный"); @@ -30,6 +34,24 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем + +// Отключает или включает проверку запрета изменения на текущий сеанс +// +Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Экспорт + + ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Пропустить; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем БСП + // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // // Параметры: @@ -56,35 +78,7 @@ КонецПроцедуры -// Обработчик события ПриПолученииСпискаШаблонов. -// -// Формирует список шаблонов заданий очереди. -// -// Параметры: -// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных -// неразделенных регламентных заданий, которые должны использоваться в качестве -// шаблонов для заданий очереди. -// -Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - - Шаблоны.Добавить("ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения"); - -КонецПроцедуры - -// Заполняет массив типов неразделенных данных, для которых не требуется сопоставление ссылок -// при загрузке данных в другую информационную базу, т.к. корректное сопоставление ссылок -// гарантируется с помощью других механизмов. -// -// Параметры: -// Типы - Массив(ОбъектМетаданных) -// -Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт - - // В разделенных данных используются ссылки только на предопределенные элементы - // плана видов характеристик РазделыДатЗапретаИзменения. - Типы.Добавить(Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения); - -КонецПроцедуры +// Обработчики событий подсистемы ВариантыОтчетов. // Содержит настройки размещения вариантов отчетов в панели отчетов. // @@ -177,77 +171,60 @@ // Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт - Свойства = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); - - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - - // Установка используемых вариантов отчета ДатыЗапретаИзменения. - Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДатыЗапретаИзменения); - Отчет.Включен = Ложь; - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"; - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаИзмененияПоРазделамДляПользователей"; - Иначе - УстановитьВариант = "ДатыЗапретаИзмененияПоОбъектамДляПользователей"; - КонецЕсли; - Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); - Вариант.Включен = Истина; - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаИзмененияПоПользователям"; - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаИзмененияПоПользователямБезОбъектов"; - Иначе - УстановитьВариант = "ДатыЗапретаИзмененияПоПользователямБезРазделов"; - КонецЕсли; - Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); - Вариант.Включен = Истина; - - // Установка используемых вариантов отчета ДатыЗапретаЗагрузки. - Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДатыЗапретаЗагрузки); - Отчет.Включен = Ложь; - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"; - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаЗагрузкиПоРазделамДляПользователей"; - Иначе - УстановитьВариант = "ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"; - КонецЕсли; - Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); - Вариант.Включен = Истина; - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователям"; - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"; - Иначе - УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователямБезРазделов"; - КонецЕсли; - Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); - Вариант.Включен = Истина; + Отчеты.ДатыЗапретаИзменения.НастроитьВариантыОтчета(Настройки); + Отчеты.ДатыЗапретаЗагрузки.НастроитьВариантыОтчета(Настройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистем +// Обработчики событий подсистемы РаботаВМоделиСервиса.ОчередьЗаданий. -// Отключает или включает проверку запрета изменения на текущий сеанс +// Обработчик события ПриПолученииСпискаШаблонов. // -Процедура ПропуститьПроверкуЗапретаИзменения(Пропустить = Истина) Экспорт +// Формирует список шаблонов заданий очереди. +// +// Параметры: +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. +// +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Пропустить; + Шаблоны.Добавить("ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения"); + +КонецПроцедуры + +// Обработчики событий библиотеки ТехнологияСервиса. + +// Заполняет массив типов неразделенных данных, для которых не требуется сопоставление ссылок +// при загрузке данных в другую информационную базу, т.к. корректное сопоставление ссылок +// гарантируется с помощью других механизмов. +// +// Параметры: +// Типы - Массив(ОбъектМетаданных) +// +Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт + + // В разделенных данных используются ссылки только на предопределенные элементы + // плана видов характеристик РазделыДатЗапретаИзменения. + Типы.Добавить(Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Другие процедуры и функции + +// Устанавливает параметры сеанса подсистемы обмена данными +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить +// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Ложь; + УстановленныеПараметры.Добавить("ПропуститьПроверкуЗапретаИзменения"); + +КонецПроцедуры // Выполняет пересчет и обновление текущий значений относительных // дат запрета по состоянию на текущую дату сеанса. @@ -370,9 +347,7 @@ // Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения. Процедура ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(); @@ -630,19 +605,6 @@ КонецФункции -// Устанавливает параметры сеанса подсистемы обмена данными -// -// Параметры: -// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить -// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса -// -Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - - ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Ложь; - УстановленныеПараметры.Добавить("ПропуститьПроверкуЗапретаИзменения"); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -897,4 +859,6 @@ Возврат ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index b40a30912..adcc959ad 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Запускает выполнение процедуры в фоновом задании. // @@ -18,9 +17,9 @@ // выполнения процедуры ИмяЭкспортнойПроцедуры. // НаименованиеЗадания - Строка - наименование фонового задания. // Если не задано, то будет равно ИмяЭкспортнойПроцедуры. -// ИспользоватьДополнительноеВременноеХранилище – Булево – признак использования +// ИспользоватьДополнительноеВременноеХранилище - Булево - признак использования // дополнительного временного хранилища для передачи данных -// в родительский сеанс из фонового задания. По умолчанию – Ложь. +// в родительский сеанс из фонового задания. По умолчанию - Ложь. // // Возвращаемое значение: // Структура - Возвращает свойства: @@ -62,8 +61,7 @@ ВремяОжидания = 2; КонецЕсли; - ПараметрыЗадания.Добавить(Неопределено); - Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); + Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", ПараметрыЗадания,, НаименованиеЗадания); Попытка Задание.ОжидатьЗавершения(ВремяОжидания); Исключение @@ -195,8 +193,12 @@ ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст; + ПолучитьСообщенияПользователю(Истина); // Удаление предыдущих сообщений. - Сообщить("{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст); + + Сообщение.Сообщить(); КонецПроцедуры @@ -240,8 +242,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания) @@ -297,3 +300,5 @@ Функция ИмяПодсистемы() Возврат "СтандартныеПодсистемы.ДлительныеОперации"; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index 20c30326b..cbcb8ac44 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет структуру параметров значениями по умолчанию. // @@ -80,4 +79,6 @@ КонецЕсли; ФормаДлительнойОперации = Неопределено; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl index 0adbbab5f..c8426ab35 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Получить форму-индикатор выполнения длительной операции. // @@ -14,3 +13,5 @@ Возврат ПолучитьФорму("ОбщаяФорма.ДлительнаяОперация"); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 89d341de4..581a0deb9 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,10 +1,9 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Дополнительные отчеты и обработки" -// +// //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Подключает и возвращает имя, под которым подключен внешний отчет или обработка. // После подключения отчет или обработка регистрируется в программе под определенным именем, @@ -23,14 +22,28 @@ // Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт + СтандартнаяОбработка = Истина; + Результат = Неопределено; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Возврат Результат; + КонецЕсли; + + КонецЦикла; + // Проверка корректности переданных параметров Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда Возврат Неопределено; КонецЕсли; - ПроверитьВозможностьВыполнения(Ссылка); - // Подключение #Если ТолстыйКлиентОбычноеПриложение Тогда ИмяОбработки = ПолучитьИмяВременногоФайла(); @@ -48,10 +61,47 @@ Менеджер = ВнешниеОбработки; КонецЕсли; - ПараметрыЗапуска = ОпределитьПараметрыЗапуска(Ссылка); + ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , ПараметрыЗапуска.БезопасныйРежим); + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + + БезопасныйРежим = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Ссылка); + + Если БезопасныйРежим = Неопределено Тогда + БезопасныйРежим = Истина; + КонецЕсли; + + Иначе + + ЗапросРазрешений = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДополнительныеОтчетыИОбработкиРазрешения.НомерСтроки, + | ДополнительныеОтчетыИОбработкиРазрешения.ВидРазрешения + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Разрешения КАК ДополнительныеОтчетыИОбработкиРазрешения + |ГДЕ + | ДополнительныеОтчетыИОбработкиРазрешения.Ссылка = &Ссылка"); + ЗапросРазрешений.УстановитьПараметр("Ссылка", Ссылка); + ЕстьРазрешений = Не ЗапросРазрешений.Выполнить().Пустой(); + + РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений"); + Если РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2 Тогда + БезопасныйРежим = Не ЕстьРазрешений; + Иначе + БезопасныйРежим = ПараметрыЗапуска.БезопасныйРежим; + КонецЕсли; + + КонецЕсли; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Дополнительные отчеты и обработки.Подключение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ДополнительныеОтчетыИОбработки, + Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Безопасный режим = %1'"), БезопасныйРежим)); + + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); Возврат ИмяОбработки; @@ -73,6 +123,22 @@ // Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт + СтандартнаяОбработка = Истина; + Результат = Неопределено; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриСозданииВнешнейОбработки"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриСозданииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Возврат Результат; + КонецЕсли; + + КонецЦикла; + // Подключение ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка); @@ -425,8 +491,174 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Объявляет служебные события подсистемы ДополнительныеОтчетыИОбработки: +// +// Серверные события: +// ПриОбновленииПроизводственныхКалендарей. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Вызывается при определении наличия у текущего пользователя права на добавление дополнительного + // отчета или обработки в область данных. + // + // Параметры: + // ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, + // который записывается пользователем. + // Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, + // СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения + // стандартной обработки проверки права. + // + // Синтаксис: + // Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеПраваДобавления"); + + // Вызывается при проверке возможности загрузки дополнительного отчета или обработки из файла + // + // Параметры: + // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, + // Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности + // загрузки дополнительного отчета или обработки из файла, + // СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения + // стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. + // + // Синтаксис: + // Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла"); + + // Вызывается при проверке возможности выгрузки дополнительного отчета или обработки в файл + // + // Параметры: + // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, + // Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности + // выгрузки дополнительного отчета или обработки в файл, + // СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения + // стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. + // + // Синтаксис: + // Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеВозможностиВыгрузкиОбработкиВФайл"); + + // Вызывается при проверке необходимости отображения расширенной информации о дополнительных + // отчетах и обработках в пользовательском интерфейсе. + // + // Параметры: + // ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, + // Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия необходимости + // отображения расширенной информации о дополнительных отчетах и обработках в пользовательском + // интерфейсе. + // СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения + // стандартной обработки проверки наличия необходимости отображения расширенной информации о + // дополнительных отчетах и обработках в пользовательском интерфейсе. + // + // Синтаксис: + // Процедура ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации"); + + // Заполняет виды публикации дополнительных отчетов и обработок, недоступные для использования + // в текущей модели информационной базы. + // + // Параметры: + // НедоступныеВидыПубликации - Массив строк + // + // Синтаксис: + // Процедура ПриЗаполненииНедоступныхВидовПубликации(Знач НедоступныеВидыПубликации) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриЗаполненииНедоступныхВидовПубликации"); + + // Вызывается из события ПередЗаписью справочника + // ДополнительныеОтчетыИОбработки, выполняет проверку правомерности изменения реквизитов + // элементов данного справочника для дополнительных обработок, полученных из + // каталога дополнительных обработок менеджера сервиса. + // + // Параметры: + // Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, + // Отказ - булево, флаг отказа от выполнения записи элемента справочника. + // + // Синтаксис: + // Процедура ПередЗаписьюДополнительнойОбработки(Знач Источник, Отказ) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПередЗаписьюДополнительнойОбработки"); + + // Вызывается из события ПередУдалением справочника + // ДополнительныеОтчетыИОбработки. + // + // Параметры: + // Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, + // Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. + // + // Синтаксис: + // Процедура ПередУдалениемДополнительнойОбработки(Знач Источник, Отказ) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПередУдалениемДополнительнойОбработки"); + + // Вызывается при получении регистрационных данных для нового дополнительного отчета + // или обработки. + // + // Параметры: + // Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки + // РегистрационныеДанные - Структура, аналогичная структуре, возвращаемой экспортируемой функцией + // СведенияОВнешнейОбработке() внешних обработок + // СтандартнаяОбработка - Булево + // + // Синтаксис: + // Процедура ПриПолученииРегистрационныхДанных(Знач Объект, РегистрационныеДанные, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПолученииРегистрационныхДанных"); + + // Вызывается при подключении внешней обработки. + // + // Параметры: + // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки, + // СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки подключения + // внешней обработки, + // Результат - Строка - имя подключенного внешнего отчета или обработки (в том случае, если в обработчике + // для параметра СтандартнаяОбработка было установлено значение Ложь). + // + // Синтаксис: + // Процедура ПриПодключенииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки"); + + // Вызывается при создании объекта внешней обработки. + // + // Параметры: + // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки, + // СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки подключения + // внешней обработки, + // Результат - ВнешняяОбработкаОбъект, ВнешнийОтчетОбъект - объект подключенного внешнего отчета или + // обработки (в том случае, если в обработчике для параметра СтандартнаяОбработка было установлено значение Ложь). + // + // Синтаксис: + // Процедура ПриСозданииВнешнейОбработки(Знач Ссылка, СтандартнаяОбработка, Результат) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриСозданииВнешнейОбработки"); + + // Вызывается при получении разрешений сессии безопасного режима. + // + // Параметры: + // КлючСессии - УникальныйИдентификатор, + // ОписанияРазрешений - ТаблицаЗначений: + // * ВидРазрешения - Строка, + // * Параметры - ХранилищеЗначения, + // СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки. + // + // Синтаксис: + // Процедура ПриПолученииРазрешенийСессииБезопасногоРежима(Знач КлючСессии, ОписанияРазрешений, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПолученииРазрешенийСессииБезопасногоРежима"); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -479,6 +711,10 @@ Обработчик.Процедура = "ДополнительныеОтчетыИОбработки.ВключитьФункциональнуюОпцию"; КонецЕсли; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.25"; + Обработчик.Процедура = "ДополнительныеОтчетыИОбработки.ЗаполнитьРежимСовместимостиРазрешений"; + КонецПроцедуры // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. @@ -553,8 +789,10 @@ // ВариантыОтчетов.ОтчетыТекущегоПользователя(). // Процедура ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю(ДоступныеОтчеты) Экспорт - Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) - Или Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; @@ -585,7 +823,7 @@ // Параметры: // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Отчет, который необходимо инициализировать // ПараметрыОтчета - Структура - Набор параметров, получаемый в процессе проверки и подключения отчета -// Cм. РассылкаОтчетов.ИнициализироватьОтчет(). +// См. РассылкаОтчетов.ИнициализироватьОтчет(). // Результат - Булево, Неопределено - Результат подключения. // Истина - Удалось подключить дополнительный отчет // Ложь - Не удалось подключить дополнительный отчет @@ -637,7 +875,9 @@ // УправлениеПечатью.КомандыПечатиФормы(). // Процедура ПриПолученииКомандПечати(КомандыПечати, ИмяФормы) Экспорт - + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; @@ -683,8 +923,10 @@ // УправлениеПечатью.ПриПолученииСпискаВнешнихПечатныхФорм(). // Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт - Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) - Или Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; @@ -697,7 +939,7 @@ ВнешниеПечатныеФормы.Добавить(Команда.Идентификатор, Команда.Представление); КонецЕсли; КонецЦикла; - + КонецПроцедуры // Возвращает ссылку на объект внешней печатной формы. @@ -706,8 +948,10 @@ // УправлениеПечатью.ПриПолученииВнешнейПечатнойФормы(). // Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт - Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) - Или Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; @@ -735,6 +979,9 @@ // ПользователиСлужебный.ПриПолученииПрочихПользовательскихНастроек(). // Процедура ПолучитьНастройкиДополнительныхОтчетовИОбработок(ПользовательСсылка, Настройки) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; // Название строки настроек, отображаемое в дереве настроек обработки НазваниеНастройки = НСтр("ru='Настройки быстрого доступа к дополнительным отчетам и обработкам'"); @@ -775,20 +1022,22 @@ // Места использования: // ПользователиСлужебный.ПриСохраненииПрочихПользовательскихНастроек(). // -Процедура ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользователиПолучатели) Экспорт +Процедура ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользовательПриемник) Экспорт - Для Каждого ПользовательПриемник Из ПользователиПолучатели Цикл + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементСтрока Из Настройки Цикл - Для Каждого ЭлементСтрока Из Настройки Цикл - Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); - - Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Значение; - Запись.ИдентификаторКоманды = ЭлементСтрока.Представление; - Запись.Пользователь = ПользовательПриемник; - Запись.Доступно = Истина; - - Запись.Записать(Истина); - КонецЦикла; + Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); + + Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Значение; + Запись.ИдентификаторКоманды = ЭлементСтрока.Представление; + Запись.Пользователь = ПользовательПриемник; + Запись.Доступно = Истина; + + Запись.Записать(Истина); КонецЦикла; @@ -805,6 +1054,9 @@ // ПользователиСлужебный.ПриУдаленииПрочихПользовательскихНастроек(). // Процедура УдалитьКомандыИзСпискаБыстрогоДоступа(СписокКлючей, ОчищаемыйПользователь) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; Для Каждого ЭлементСтрока Из СписокКлючей Цикл @@ -822,8 +1074,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -1044,6 +1297,86 @@ КонецПроцедуры +// [2.2.2.25] Процедура проставляет значение реквизита РежимСовместимостиРазрешений для элементов справочника +// ДополнительныеОтчетыИОбработки +// +Процедура ЗаполнитьРежимСовместимостиРазрешений() Экспорт + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных(); + Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки"); + Блокировка.Заблокировать(); + + Выборка = Справочники.ДополнительныеОтчетыИОбработки.Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Не Выборка.ЭтоГруппа И Не ЗначениеЗаполнено(Выборка.РежимСовместимостиРазрешений) Тогда + + ЗаблокироватьДанныеДляРедактирования(Выборка.Ссылка); + + Объект = Выборка.ПолучитьОбъект(); + + Попытка + + ОбъектОбработки = ПолучитьОбъектВнешнейОбработки(Выборка.Ссылка); + РегистрационныеДанные = ОбъектОбработки.СведенияОВнешнейОбработке(); + + Если РегистрационныеДанные.Свойство("ВерсияБСП") Тогда + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(РегистрационныеДанные.ВерсияБСП, "2.2.2.0") > 0 Тогда + РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2; + Иначе + РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + КонецЕсли; + Иначе + РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + КонецЕсли; + + Публикация = Объект.Публикация; + + Исключение + + // При невозможности подключения обработки - установим для нее режим совместимости + // разрешений с версией БСП 2.1.3 и временно заблокируем + + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось определить режим совместимости разрешений для дополнительного отчета или обработки %1 по причине %2. Дополнительный отчет или обработка будет заблокирован и для него будет установлен режим совместимости разрешений ""Версия 2.1.3"".'"), + Объект.Наименование, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Дополнительные отчеты и обработки.Заполнение режима совместимости разрешений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.ДополнительныеОтчетыИОбработки, + Объект.Ссылка, + ТекстПредупреждения); + + РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + + Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + + КонецПопытки; + + Объект.РежимСовместимостиРазрешений = РежимСовместимости; + Объект.Публикация = Публикация; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + + КонецЕсли; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Регламентные задания @@ -1057,9 +1390,7 @@ // Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); // Запись журнала регистрации ЗаписатьИнформацию(ВнешняяОбработка, НСтр("ru = 'Команда %1: Запуск.'"), ИдентификаторКоманды); @@ -1448,11 +1779,11 @@ Результат = Ложь; СтандартнаяОбработка = Истина; - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПриПроверкеПраваДобавления(ДополнительнаяОбработка, Результат, СтандартнаяОбработка); + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеПраваДобавления"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриПроверкеПраваДобавления(ДополнительнаяОбработка, Результат, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат Результат; @@ -1487,11 +1818,11 @@ Результат = Ложь; СтандартнаяОбработка = Истина; - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Обработка, Результат, СтандартнаяОбработка); + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеВозможностиВыгрузкиОбработкиВФайл"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Обработка, Результат, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат Результат; @@ -1518,11 +1849,11 @@ Результат = Ложь; СтандартнаяОбработка = Истина; - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Обработка, Результат, СтандартнаяОбработка); + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Обработка, Результат, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат Результат; @@ -1546,24 +1877,7 @@ // Функция ОтображатьРасширеннуюИнформацию(Знач Обработка) Экспорт - Результат = Ложь; - СтандартнаяОбработка = Истина; - - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Обработка, Результат, СтандартнаяОбработка); - - Если Не СтандартнаяОбработка Тогда - Возврат Результат; - КонецЕсли; - - КонецЦикла; - - Если СтандартнаяОбработка Тогда - Возврат Истина; - КонецЕсли; + Возврат Истина; КонецФункции @@ -1572,13 +1886,11 @@ Результат = Новый Массив; - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - НедоступныеВидыПубликации = Модуль.НедоступныеВидыПубликации(); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, НедоступныеВидыПубликации, Истина); - + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриЗаполненииНедоступныхВидовПубликации"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриЗаполненииНедоступныхВидовПубликации(Результат); КонецЦикла; Возврат Результат; @@ -1596,11 +1908,12 @@ // Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПередЗаписьюДополнительнойОбработки"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПередЗаписьюДополнительнойОбработки(Источник, Отказ); + Обработчик.Модуль.ПередЗаписьюДополнительнойОбработки(Источник, Отказ); КонецЦикла; @@ -1615,11 +1928,12 @@ // Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПередУдалениемДополнительнойОбработки"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПередУдалениемДополнительнойОбработки(Источник, Отказ); + Обработчик.Модуль.ПередУдалениемДополнительнойОбработки(Источник, Отказ); КонецЦикла; @@ -2065,28 +2379,34 @@ // Получает файл обработки из временного хранилища, пытается создать объект // обработки (внешнего отчета) и получает информацию из объекта внешней обработки (отчета) - Если ПараметрыРегистрации.ОтключатьКонфликтующие = Истина Тогда + Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); КонфликтующийОбъект.Публикация = ДополнительныеОтчетыИОбработкиПовтИсп.ВидПубликацииДляКонфликтующихОбработок(); КонфликтующийОбъект.Записать(); КонецЦикла; + ИначеЕсли ПараметрыРегистрации.ОтключатьПубликацию Тогда + Объект.Публикация = ДополнительныеОтчетыИОбработкиПовтИсп.ВидПубликацииДляКонфликтующихОбработок(); КонецЕсли; - Результат = Новый Структура("ИмяОбъекта, СтароеИмяОбъекта, Успешно, ИмяОбъектаЗанято, Конфликтующие, КраткоеПредставлениеОшибки"); + Результат = Новый Структура("ИмяОбъекта, СтароеИмяОбъекта, Успех, ИмяОбъектаЗанято, Конфликтующие, КраткоеПредставлениеОшибки"); Результат.ИмяОбъектаЗанято = Ложь; - Результат.Успешно = Ложь; + Результат.Успех = Ложь; Если Объект.ЭтоНовый() Тогда Результат.СтароеИмяОбъекта = Объект.ИмяОбъекта; Иначе Результат.СтароеИмяОбъекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ИмяОбъекта"); КонецЕсли; - РегистрационныеДанные = ПолучитьРегистрационныеДанные(Объект, ПараметрыРегистрации, Результат); - Если РегистрационныеДанные = Неопределено Тогда + Попытка + РегистрационныеДанные = ПолучитьРегистрационныеДанные(Объект, ПараметрыРегистрации, Результат); + Если РегистрационныеДанные = Неопределено Тогда + Возврат Результат; + КонецЕсли; + Исключение + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Результат; - КонецЕсли; - + КонецПопытки; // Если отчет публикуется, то необходим контроль уникальности имени объекта, // под которым дополнительный отчет регистрируется в системе Если Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется Тогда @@ -2139,12 +2459,12 @@ ИЛИ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда // ничего не делаем Иначе - Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Для добавления обработок запускаемых в небезопасном режиме требуются полные права.'"); + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Для подключения обработки, запускаемой в небезопасном режиме, требуются административные права.'"); Возврат Результат; КонецЕсли; Если НЕ Объект.ЭтоНовый() И РегистрационныеДанные.Вид <> Объект.Вид Тогда - Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"); + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Невозможно сменить вид дополнительного отчета или обработки.'"); Возврат Результат; ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> (РегистрационныеДанные.Вид = ВидДополнительныйОтчет ИЛИ РегистрационныеДанные.Вид = ВидОтчет) Тогда Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует ее расширению.'"); @@ -2153,7 +2473,21 @@ Объект.Наименование = РегистрационныеДанные.Наименование; Объект.Версия = РегистрационныеДанные.Версия; - Объект.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим; + + Если РегистрационныеДанные.Свойство("ВерсияБСП") Тогда + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(РегистрационныеДанные.ВерсияБСП, "2.2.2.0") > 0 Тогда + Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2; + Иначе + Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + КонецЕсли; + Иначе + Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + КонецЕсли; + + Если РегистрационныеДанные.Свойство("БезопасныйРежим") Тогда + Объект.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим; + КонецЕсли; + Объект.Информация = РегистрационныеДанные.Информация; Объект.ИмяФайла = ПараметрыРегистрации.ИмяФайла; Объект.ИмяОбъекта = Результат.ИмяОбъекта; @@ -2252,7 +2586,7 @@ Объект.Ответственный = Пользователи.ТекущийПользователь(); - Результат.Успешно = Истина; + Результат.Успех = Истина; Возврат Результат; @@ -2265,11 +2599,12 @@ СтандартнаяОбработка = Истина; - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПолученииРегистрационныхДанных"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПриПолученииРегистрационныхДанных(Объект, Результат, СтандартнаяОбработка); + Обработчик.Модуль.ПриПолученииРегистрационныхДанных(Объект, Результат, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат Результат; @@ -2281,18 +2616,37 @@ // Подключение и получение имени, под которым объект будет подключаться Менеджер = ?(ПараметрыРегистрации.ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); - ПараметрыОбработки.ИмяОбъекта = СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина)); - // Получение сведений о внешней обработке - ВнешнийОбъект = Менеджер.Создать(ПараметрыОбработки.ИмяОбъекта); - ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); + #Если ТолстыйКлиентОбычноеПриложение Тогда + ПараметрыОбработки.ИмяОбъекта = ПолучитьИмяВременногоФайла(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыРегистрации.АдресДанныхОбработки); + ДвоичныеДанные.Записать(ПараметрыОбработки.ИмяОбъекта); + #Иначе + ПараметрыОбработки.ИмяОбъекта = СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина)); + #КонецЕсли Попытка + // Получение сведений о внешней обработке + ВнешнийОбъект = Менеджер.Создать(ПараметрыОбработки.ИмяОбъекта); + ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); + РегистрационныеДанные = ВнешнийОбъект.СведенияОВнешнейОбработке(); Исключение - ТекстПредупреждения = НСтр("ru='Невозможно подключить дополнительный отчет/обработку из файла: - | - |%1.'"); + Если ПараметрыРегистрации.ЭтоОтчет Тогда + ТекстПредупреждения = НСтр("ru='Невозможно подключить дополнительный отчет из файла. + |Возможно, он не подходит для этой версии программы. + | + |Техническая информация: + |%1.'"); + Иначе + ТекстПредупреждения = НСтр("ru='Невозможно подключить дополнительную обработку из файла. + |Возможно, она не подходит для этой версии программы. + | + |Техническая информация: + |%1.'"); + КонецЕсли; + ЗаписатьОшибку(Объект.Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение ТекстПредупреждения; КонецПопытки; @@ -2323,57 +2677,14 @@ КомандаОписание.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок[КомандаОписание.Использование]; КонецЦикла; + #Если ТолстыйКлиентОбычноеПриложение Тогда + ПараметрыОбработки.ИмяОбъекта = ВнешнийОбъектМетаданные.Имя; + #КонецЕсли + Возврат РегистрационныеДанные; КонецЕсли; КонецФункции -// Процедура вызывается для выполнения проверки возможности выполнения дополнительной обработки -Процедура ПроверитьВозможностьВыполнения(Ссылка) - - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ПроверитьВозможностьВыполнения(Ссылка); - КонецЦикла; - -КонецПроцедуры - -// Параметры для подключения и выполнения внешнего отчета или обработки к программе. -// -// Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки -// -// Возвращаемое значение: -// Структура - Параметры подключения -// * ХранилищеОбработки - ХранилищеЗначения - ДвоичныеДанные для подключения. -// * БезопасныйРежим - Булево - Подключать в безопасном режиме. -// -Функция ОпределитьПараметрыЗапуска(Ссылка) Экспорт - - СтандартнаяОбработка = Истина; - Свойства = ДополнительныеОтчетыИОбработкиПовтИсп.ПараметрыЗапуска(); - Результат = Новый Структура(Свойства); - - ОбработчикиУсловныхВызовов = ДополнительныеОтчетыИОбработкиПовтИсп.ОбработчикиИнтеграции(); - Для Каждого ОбработчикУсловныхВызовов Из ОбработчикиУсловныхВызовов Цикл - - Модуль = ОбщегоНазначения.ОбщийМодуль(ОбработчикУсловныхВызовов); - Модуль.ОпределениеПараметровЗапуска(Ссылка, Результат, СтандартнаяОбработка); - - Если Не СтандартнаяОбработка Тогда - Возврат Результат; - КонецЕсли; - - КонецЦикла; - - Если СтандартнаяОбработка Тогда - - ЗаполнитьЗначенияСвойств(Результат, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, Свойства)); - - КонецЕсли; - - Возврат Результат; - -КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl deleted file mode 100644 index c666ba1f8..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/Module.bsl +++ /dev/null @@ -1,523 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки", процедуры и функции специфичные -// для использования подсистемы в автономном рабочем месте -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - СерверныеОбработчики[ - "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. -// -Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт - - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - // - ИначеЕсли АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда - - Если Не ЭтоОбработкаСервиса(ЭлементДанных.Ссылка) Тогда - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. -// -Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить - ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - - // Стандартную обработку не переопределяем - - Иначе - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда - - Если ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(ЭлементДанных.Ссылка) Тогда - - ПараметрыЗапускаОбработки = ДополнительныеОтчетыИОбработки.ОпределитьПараметрыЗапуска(ЭлементДанных.Ссылка); - ЗаполнитьЗначенияСвойств(ЭлементДанных, ПараметрыЗапускаОбработки); - - КонецЕсли; - - КонецЕсли; - - Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьДополнительныеОтчетыИОбработки") Тогда - - Если Не СозданиеНачальногоОбраза Тогда - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. -// -Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - - // Стандартную обработку не переопределяем - - ИначеЕсли АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда - - Если ЗначениеЗаполнено(ЭлементДанных.Ссылка) Тогда - СсылкаОбработки = ЭлементДанных.Ссылка; - Иначе - СсылкаОбработки = ЭлементДанных.ПолучитьСсылкуНового(); - КонецЕсли; - - ЗарегистрироватьОбработкуСервиса(СсылкаОбработки); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. -// -Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - - // Стандартную обработку не переопределяем - - Иначе - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда - - Если ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(ЭлементДанных.Ссылка) Тогда - - ПараметрыЗапускаОбработки = ДополнительныеОтчетыИОбработки.ОпределитьПараметрыЗапуска(ЭлементДанных.Ссылка); - ЗаполнитьЗначенияСвойств(ЭлементДанных, ПараметрыЗапускаОбработки); - ЭлементДанных.ХранилищеОбработки = Неопределено; - - Иначе - - Если Не Константы.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.Получить() Тогда - ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Справочники.ДополнительныеОтчетыИОбработки); - Объекты.Добавить(Метаданные.РегистрыСведений.НазначениеДополнительныхОбработок); - Объекты.Добавить(Метаданные.РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам); - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса); - Объекты.Добавить(Метаданные.Константы.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса); - Объекты.Добавить(Метаданные.Константы.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса); - Объекты.Добавить(Метаданные.Константы.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса); - - Объекты.Добавить(Метаданные.Справочники.ПоставляемыеДополнительныеОтчетыИОбработки); - - Объекты.Добавить(Метаданные.РегистрыСведений.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте); - Объекты.Добавить(Метаданные.РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных); - Объекты.Добавить(Метаданные.РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных); - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ИспользоватьДополнительныеОтчетыИОбработки); - -КонецПроцедуры - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.5.2"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработкиВАвтономномРежиме.ЗарегистрироватьИзмененияПриОбновлении"; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов - -// Вызывается при определении наличия у текущего пользователя права на добавление дополнительного -// отчета или обработки в область данных. -// -// Параметры: -// ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, -// который записывается пользователем. -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки права. -// -Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Результат = Истина; - СтандартнаяОбработка = Ложь; - Возврат; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке возможности загрузки дополнительного отчета или обработки из файла -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности -// загрузки дополнительного отчета или обработки из файла, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. -// -Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Результат = Не ЭтоОбработкаСервиса(ДополнительнаяОбработка); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке возможности выгрузки дополнительного отчета или обработки в файл -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности -// выгрузки дополнительного отчета или обработки в файл, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. -// -Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Результат = Не ЭтоОбработкаСервиса(ДополнительнаяОбработка); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке необходимости отображения расширенной информации о дополнительных -// отчетах и обработках в пользовательском интерфейсе. -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия необходимости -// отображения расширенной информации о дополнительных отчетах и обработках в пользовательском -// интерфейсе. -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки наличия необходимости отображения расширенной информации о -// дополнительных отчетах и обработках в пользовательском интерфейсе. -// -Процедура ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - Результат = Не ЭтоОбработкаСервиса(ДополнительнаяОбработка); - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -// Возвращает виды публикации дополнительных отчетов и обработок, недоступные для использования -// в текущей модели информационной базы. -// -Функция НедоступныеВидыПубликации() Экспорт - - Результат = Новый Массив; - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - Результат.Добавить("РежимОтладки"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Вызывается при определении параметров запуска для дополнительного отчета или обработки. -// -Функция ОпределениеПараметровЗапуска(Ссылка, Результат, СтандартнаяОбработка) Экспорт - - - -КонецФункции - -// Вызывается при получении регистрационных данных для нового дополнительного отчета -// или обработки. -// -Процедура ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, СтандартнаяОбработка) Экспорт - - - -КонецПроцедуры - -// Вызывается при проверке возможности выполнения дополнительного отчета или обработки. -// -Процедура ПроверитьВозможностьВыполнения(Ссылка) Экспорт - - - -КонецПроцедуры - -// Вызывается при формировании текста запроса формы списка справочника ДополнительныеОтчетыИОбработки. -// -// Параметры: -// ТекстЗапроса - Строка, текст запроса. -// -Процедура ПриДополненииТекстаЗапросаФормыСпискаДополнительныхОтчетовИОбработок(ТекстЗапроса) Экспорт - - Если АвтономнаяРаботаСлужебный.АвтономнаяРаботаПоддерживается() И АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЛОЖЬ КАК ФлагПредопределенного", "ЕСТЬNULL(ИспользованиеВАРМ.Поставляемый, Ложь) КАК ФлагПредопределенного"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.ДополнительныеОтчетыИОбработки КАК Таблица", "Справочник.ДополнительныеОтчетыИОбработки КАК Таблица ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте КАК ИспользованиеВАРМ ПО Таблица.Ссылка = ИспользованиеВАРМ.ДополнительныйОтчетИлиОбработка"); - - КонецЕсли; - -КонецПроцедуры - -// Процедура должна вызываться из события ПередУдалением справочника -// ДополнительныеОтчетыИОбработки. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. -// -Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт - - - -КонецПроцедуры - -// Процедура должна вызываться из события ПередЗаписью справочника -// ДополнительныеОтчетыИОбработки, выполняет проверку правомерности изменения реквизитов -// элементов данного справочника для дополнительных обработок, полученных из -// каталога дополнительных обработок менеджера сервиса. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. -// -Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - Если (Источник.ПометкаУдаления ИЛИ Источник.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) И ЭтоОбработкаСервиса(Источник.Ссылка) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительный отчет или обработка %1 был загружен из сервиса и не может быть отключен из автономного рабочего места! - |Для удаления дополнительного отчета или обработки необходимо выполнить операцию отключения в - |приложении сервиса и провести синхронизацию данных автономного рабочего места с сервисом.'"), - Источник.Наименование); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления ИБ. - -// Выполняет начальную регистрацию изменений в объектах подсистемы ДополнительныеОтчетыИОбработки -// при обновлении на новую версию БСП. -// -Функция ЗарегистрироватьИзмененияПриОбновлении() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() Тогда - - ПланОбменаАРМ = АвтономнаяРаботаСлужебный.ПланОбменаАвтономнойРаботы(); - УзелСервиса = ПланыОбмена[ПланОбменаАРМ].ЭтотУзел(); - - УзлыАРМ = Новый Массив(); - ВыборкаУзлов = ПланыОбмена[ПланОбменаАРМ].Выбрать(); - Пока ВыборкаУзлов.Следующий() Цикл - Если ВыборкаУзлов.Ссылка <> УзелСервиса Тогда - УзлыАРМ.Добавить(ВыборкаУзлов.Ссылка); - КонецЕсли; - КонецЦикла; - - ПланыОбмена.ЗарегистрироватьИзменения(УзлыАРМ, Метаданные.Справочники.ДополнительныеОтчетыИОбработки); - ПланыОбмена.ЗарегистрироватьИзменения(УзлыАРМ, Метаданные.РегистрыСведений.НазначениеДополнительныхОбработок); - ПланыОбмена.ЗарегистрироватьИзменения(УзлыАРМ, Метаданные.РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам); - ПланыОбмена.ЗарегистрироватьИзменения(УзлыАРМ, Метаданные.Константы.ИспользоватьДополнительныеОтчетыИОбработки); - - КонецЕсли; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Регистрирует дополнительный отчет иди обработку в качестве обработки, полученной -// в автономное рабочее место из сервиса. -// -// Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -Процедура ЗарегистрироватьОбработкуСервиса(Знач Ссылка) - - Набор = РегистрыСведений.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.СоздатьНаборЗаписей(); - Набор.Отбор.ДополнительныйОтчетИлиОбработка.Установить(Ссылка); - Запись = Набор.Добавить(); - Запись.ДополнительныйОтчетИлиОбработка = Ссылка; - Запись.Поставляемый = Истина; - Набор.Записать(); - -КонецПроцедуры - -// Функция проверяет, была ли дополнительная обработка получена в автономное рабочее место из сервиса. -// -// Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// Булево. -// -Функция ЭтоОбработкаСервиса(Ссылка) - - Менеджер = РегистрыСведений.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.СоздатьМенеджерЗаписи(); - Менеджер.ДополнительныйОтчетИлиОбработка = Ссылка; - Менеджер.Прочитать(); - - Если Менеджер.Выбран() Тогда - Возврат Менеджер.Поставляемый; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl index ddc13f911..723633bc4 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область УстаревшийПрограммныйИнтерфейс // Создает объект ЧтениеXML и инициализирует его данными файла, помещенном во временное хранилище // по адресу, переданному в качестве значения параметра АдресДвоичныхДанных. @@ -358,7 +357,7 @@ Если Порт = 0 Тогда - ПолнаяСтруктураURL = ОбработчикПолученияФайлов.СтруктураURI(URL); + ПолнаяСтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Если НЕ ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда ИмяСервера = ПолнаяСтруктураURL.Хост; @@ -391,15 +390,18 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПолучениеДанныхИзИнтернет( ВРег(Протокол), ИмяСервера, Порт)); + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("Пользователь", ИмяПользователя); + ПараметрыПолучения.Вставить("Пароль", Пароль); + ПараметрыПолучения.Вставить("Порт", Порт); + ПараметрыПолучения.Вставить("Таймаут", Таймаут); + ПараметрыПолучения.Вставить("ЗащищенноеСоединение", ЗащищенноеСоединение); + ПараметрыПолучения.Вставить("ПассивноеСоединение", ПассивноеСоединение); Результат = ОбработчикПолученияФайлов.ПодготовитьПолучениеФайла( URL, - ИмяПользователя, - Пароль, - Порт, - Таймаут, - ЗащищенноеСоединение, - ПассивноеСоединение, + ПараметрыПолучения, Новый Структура( "МестоХранения, Путь", "ВременноеХранилище", @@ -441,11 +443,11 @@ ВызватьИсключение НСтр("ru = 'В данной конфигурации не поддерживается вызов функции ДополнительныеОтчетыИОбработкиВБезопасномРежиме.ПередатьФайлВИнтернет!'"); КонецЕсли; - ОбработчикПолученияФайлов = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); Если Порт = 0 Тогда - ПолнаяСтруктураURL = ОбработчикПолученияФайлов.СтруктураURI(URL); + ПолнаяСтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Если НЕ ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда ИмяСервера = ПолнаяСтруктураURL.Хост; @@ -458,7 +460,7 @@ Таймаут = 600; КонецЕсли; - СтруктураURL = ОбработчикПолученияФайлов.РазделитьURL(URL); + СтруктураURL = МодульПолучениеФайловИзИнтернетаКлиентСервер.РазделитьURL(URL); Протокол = СтруктураURL.Протокол; ИмяСервера = СтруктураURL.ИмяСервера; ПутьКФайлуНаСервере = СтруктураURL.ПутьКФайлуНаСервере; @@ -473,7 +475,7 @@ ЗащищенноеСоединение = Истина; КонецЕсли; - Прокси = ОбработчикПолученияФайлов.ПолучитьПрокси(Протокол); + Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол); Если ВРег(Протокол) = "FTP" Тогда Попытка @@ -605,7 +607,6 @@ Документ.Записать(РежимЗаписи, РежимПроведения); - КонецЦикла; ЗафиксироватьТранзакцию(); @@ -619,8 +620,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПроверитьКорректностьИмениМетодаВнешнегоОбъекта(Знач ИмяМетода) @@ -686,3 +688,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl index 9fdac5b7f..95a722087 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область УстаревшийПрограммныйИнтерфейс // Создает объект ТекстовыйДокумент и инициализирует его данными файла, помещенном во временное хранилище // по адресу, переданному в качестве значения параметра АдресДвоичныхДанных. @@ -347,8 +346,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования Функция ИтерацияРаспаковкиАрхива(Знач КаталогРаспаковки, ОписаниеАрхива, Знач ИдентификаторФормы) @@ -405,3 +405,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index b60b2d2cb..e69033877 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -584,8 +583,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -619,4 +619,121 @@ Параметр.Значение = Значение; КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +// Преобразовывает разрешения из формата 2.1.3 в формат 2.2.2. +// +Функция ПреобразоватьРазрешенияВерсии_2_1_3_ВРазрешенияВерсии_2_2_2(Знач ДополнительныйОтчетИлиОбработка, Знач Разрешения) Экспорт + + Результат = Новый Массив(); + + // Если у обработки есть команды, которые являются сценарием - добавляем права на работу с каталогом временных + // файлов + + ОтборСценариев = Новый Структура("ВариантЗапуска", Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме); + ЕстьСценарии = ДополнительныйОтчетИлиОбработка.Команды.НайтиСтроки(ОтборСценариев).Количество() > 0; + Если ЕстьСценарии Тогда + Результат.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина)); + КонецЕсли; + + // Преобразуем разрешения в нотации "расширения" безопасного режима. + Для Каждого Разрешение Из Разрешения Цикл + + Если Разрешение.Тип() = ТипПолучениеДанныхИзИнтернет(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + Разрешение.Protocol, + Разрешение.Host, + Разрешение.Port)); + + ИначеЕсли Разрешение.Тип() = ТипПередачаДанныхВИнтернет(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + Разрешение.Protocol, + Разрешение.Host, + Разрешение.Port)); + + ИначеЕсли Разрешение.Тип() = ТипWSСоединение(Пакет()) Тогда + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(Разрешение.WsdlDestination); + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураURI.Схема, + СтруктураURI.ИмяСервера, + Число(СтруктураURI.Порт))); + + ИначеЕсли Разрешение.Тип() = ТипСозданиеCOMОбъекта(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса( + Разрешение.ProgId, + ИдентификаторCOMКлассаВРежимеОбратнойСовместимости(Разрешение.ProgId))); + + ИначеЕсли Разрешение.Тип() = ТипПодключениеВнешнейКомпоненты(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты( + Разрешение.TemplateName)); + + ИначеЕсли Разрешение.Тип() = ТипПолучениеФайлаИзВнешнегоОбъекта(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина)); + + ИначеЕсли Разрешение.Тип() = ТипПередачаФайлаВоВнешнийОбъект(Пакет()) Тогда + + Результат.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина)); + + ИначеЕсли Разрешение.Тип() = ТипПроведениеДокументов(Пакет()) Тогда + + Результат.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима()); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ИдентификаторCOMКлассаВРежимеОбратнойСовместимости(Знач ProgId) + + ПоддерживаемыеИдентификаторы = ИдентификаторыCOMКлассовВРежимеОбратнойСовместимости(); + CLSID = ПоддерживаемыеИдентификаторы.Получить(ProgId); + + Если CLSID = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Разрешение на использование COM-класса %1 не может быть предоставлено дополнительной обработке, работающей в режиме обратной совместимости с механизмом разрешений, реализованным в версии БСП 2.1.3. + |Для использования COM-класса требуется переработать дополнительную обработку для работы без режима обратной совместимости'"), + ProgId + ); + + Иначе + + Возврат CLSID; + + КонецЕсли; + +КонецФункции + +Функция ИдентификаторыCOMКлассовВРежимеОбратнойСовместимости() + + Результат = Новый Соответствие(); + + // V83.ComConnector + Результат.Вставить(ОбщегоНазначения.ИмяCOMСоединителя(), ОбщегоНазначения.ИдентификаторCOMСоединителя(ОбщегоНазначения.ИмяCOMСоединителя())); + // Word.Application + Результат.Вставить("Word.Application", "000209FF-0000-0000-C000-000000000046"); + // Excel.Application + Результат.Вставить("Excel.Application", "00024500-0000-0000-C000-000000000046"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl index 759e72f59..9596d956d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает массив методов, которые могут быть выполнены расширением безопасного // режима. @@ -250,8 +249,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ДобавитьПараметр(Знач ТаблицаПараметров, Знач Имя, Знач Описание, Знач ОписаниеЛюбогоЗначения) @@ -272,3 +272,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index d12b92f2d..006d7e31a 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -4,8 +4,157 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Добавление обработчиков служебных событий (подписок) + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриРегистрацииМенеджеровВнешнихМодулей"].Добавить( + "ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный"); + +КонецПроцедуры + +// Вызывается при регистрации менеджеров внешних модулей. +// +// Параметры: +// Менеджеры - Массив(ОбщийМодуль). +// +Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт + + Менеджеры.Добавить(ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный); + +КонецПроцедуры + +// Возвращает шаблон имени профиля безопасности для внешнего модуля. +// Функция должна возвращать одно и то же значение при многократном вызове. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль, +// +// Возвращаемое значение - Строка - шаблон имя профиля безопасности, содержащий символы +// "%1", вместо которых в дальнейшем будет подставлен уникальный идентификатор. +// +Функция ШаблонИмениПрофиляБезопасности(Знач ВнешнийМодуль) Экспорт + + Возврат "Extension_%1"; // Не локализуется + +КонецФункции + +// Возвращает словарь представлений для внешних модулей контейнера. +// +// Возвращаемое значение - Структура: +// * Именительный - Строка, представление типа внешнего модуля в именительном падеже, +// * Родительный - Строка, представление типа внешнего модуля в родительном падеже. +// +Функция СловарьКонтейнераВнешнегоМодуля() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Именительный", НСтр("ru = 'Дополнительный отчет или обработка'")); + Результат.Вставить("Родительный", НСтр("ru = 'Дополнительного отчета или обработки'")); + + Возврат Результат; + +КонецФункции + +// Возвращает массив ссылочных объектов метаданных, которые могут использоваться в +// качестве контейнера внешних модулей. +// +// Возвращаемое значение - Массив(ОбъектМетаданных). +// +Функция КонтейнерыВнешнихМодулей() Экспорт + + Результат = Новый Массив(); + Результат.Добавить(Метаданные.Справочники.ДополнительныеОтчетыИОбработки); + Возврат Результат; + +КонецФункции + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДополнительныеОтчетыИОбработкиРазрешения.Ссылка КАК Ссылка + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Разрешения КАК ДополнительныеОтчетыИОбработкиРазрешения + |ГДЕ + | ДополнительныеОтчетыИОбработкиРазрешения.Ссылка.Публикация <> &Публикация"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + НовыеЗапросы = ЗапросыРазрешенийДополнительнойОбработки(Объект, Объект.Разрешения.Выгрузить()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗапросыРазрешений, НовыеЗапросы); + + КонецЦикла; + +КонецПроцедуры + +Функция ЗапросыРазрешенийДополнительнойОбработки(Объект, РазрешенияВДанных) Экспорт + + Если Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена Тогда + Возврат Новый Массив(); + КонецЕсли; + + БылиРазрешения = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка) <> Неопределено; + ЕстьРазрешения = Объект.Разрешения.Количество() > 0; + + Если БылиРазрешения Или ЕстьРазрешения Тогда + + Если Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2 Тогда + + ЗапрашиваемыеРазрешения = Новый Массив(); + Для Каждого РазрешениеВДанных Из РазрешенияВДанных Цикл + Разрешение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), РазрешениеВДанных.ВидРазрешения)); + СвойстваВДанных = РазрешениеВДанных.Параметры.Получить(); + ЗаполнитьЗначенияСвойств(Разрешение, СвойстваВДанных); + ЗапрашиваемыеРазрешения.Добавить(Разрешение); + КонецЦикла; + + Иначе + + СтарыеРазрешения = Новый Массив(); + Для Каждого РазрешениеВДанных Из РазрешенияВДанных Цикл + Разрешение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/1.0.0.1", РазрешениеВДанных.ВидРазрешения)); + СвойстваВДанных = РазрешениеВДанных.Параметры.Получить(); + ЗаполнитьЗначенияСвойств(Разрешение, СвойстваВДанных); + СтарыеРазрешения.Добавить(Разрешение); + КонецЦикла; + + ЗапрашиваемыеРазрешения = ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.ПреобразоватьРазрешенияВерсии_2_1_3_ВРазрешенияВерсии_2_2_2(Объект, СтарыеРазрешения); + + КонецЕсли; + + Возврат РаботаВБезопасномРежимеСлужебный.ЗапросыНаИспользованиеВнешнихРесурсовДляВнешнегоМодуля(Объект.Ссылка, ЗапрашиваемыеРазрешения); + + Иначе + + Возврат Новый Массив(); + + КонецЕсли; + +КонецФункции // Только для внутреннего использования. Функция СформироватьКлючСессииРасширенияБезопасногоРежима(Знач Обработка) Экспорт @@ -21,15 +170,15 @@ СтандартнаяОбработка = Истина; ОписанияРазрешений = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПолученииРазрешенийСессииБезопасногоРежима"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл - МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса"); - МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.ПолучитьРазрешенияСессииРасширенияБезопасногоРежима( - КлючСессии, - ОписанияРазрешений, - СтандартнаяОбработка); + Обработчик.Модуль.ПриПолученииРазрешенийСессииБезопасногоРежима(КлючСессии, ОписанияРазрешений, СтандартнаяОбработка); - КонецЕсли; + КонецЦикла; Если СтандартнаяОбработка Тогда @@ -345,7 +494,6 @@ ОписаниеПоследствий = ""; Если ОписаниеРазрешения.Свойство("Последствия", ОписаниеПоследствий) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "

      %1

      ", @@ -361,8 +509,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. Функция ТекстИсключенияРазрешениеНеПредоставлено(Знач КлючСессии, Знач ТипТребуемогоРазрешения) @@ -396,3 +545,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl deleted file mode 100644 index 4adb9a8c5..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl +++ /dev/null @@ -1,45 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки в модели сервиса", расширение -// безопасного режима, служебные процедуры и функции -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Только для внутреннего использования. -Процедура ПолучитьРазрешенияСессииРасширенияБезопасногоРежима(Знач КлючСессии, ОписанияРазрешений, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - СтандартнаяОбработка = Ложь; - - УстановитьПривилегированныйРежим(Истина); - ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(КлючСессии); - Если ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(ИспользуемаяОбработка) Тогда - - ПоставляемаяОбработка = ДополнительныеОтчетыИОбработкиВМоделиСервиса.ПоставляемаяОбработка(ИспользуемаяОбработка); - - ТекстЗапроса = - "ВЫБРАТЬ - | Разрешения.ВидРазрешения КАК ВидРазрешения, - | Разрешения.Параметры КАК Параметры - |ИЗ - | Справочник.ПоставляемыеДополнительныеОтчетыИОбработки.Разрешения КАК Разрешения - |ГДЕ - | Разрешения.Ссылка = &Ссылка"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", ПоставляемаяОбработка); - ОписанияРазрешений = Запрос.Выполнить().Выгрузить(); - - Иначе - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не обнаружена поставляемая обработка для ключа запуска %1!'"), - Строка(КлючСессии)); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.mdo deleted file mode 100644 index e43acd8df..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса - - ru - Дополнительные отчеты и обработки в безопасном режиме служебный в модели сервиса - - true - true - true - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl deleted file mode 100644 index 5864c2d6a..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl +++ /dev/null @@ -1,1683 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки в модели сервиса" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Процедура предназначена для синхронизации значений констант, регулирующих -// использование дополнительных отчетов и обработок в модели сервиса. Процедура -// должна вызываться при любом изменении любой из констант, регулирующих -// использование дополнительных отчетов и обработок. -// -// Параметры: -// Константа - строка, имя измененной константы, как оно задано в метаданных, -// Значение - булево, новое значение измененной константы -// -Процедура СинхронизацияЗначенийРегулирующихКонстант(Знач Константа, Знач Значение) Экспорт - - СостояниеИспользования = Ложь; - - РегулирующиеКонстанты = ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.РегулирующиеКонстанты(); - - Для Каждого РегулирующаяКонстанта Из РегулирующиеКонстанты Цикл - - Если РегулирующаяКонстанта = Константа Тогда - ЗначениеКонстанты = Значение; - Иначе - ЗначениеКонстанты = Константы[РегулирующаяКонстанта].Получить(); - КонецЕсли; - - Если ЗначениеКонстанты Тогда - СостояниеИспользования = Истина; - КонецЕсли; - - КонецЦикла; - - Константы.ИспользоватьДополнительныеОтчетыИОбработки.Установить(СостояниеИспользования); - -КонецПроцедуры - -// Функция проверяет, является ли переданная дополнительная обработка экземпляром -// поставляемой дополнительной обработки. -// -// Параметры: -// ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// Булево. -// -Функция ЭтоПоставляемаяОбработка(ИспользуемаяОбработка) Экспорт - - ПоставляемаяОбработка = ПоставляемаяОбработка(ИспользуемаяОбработка); - Возврат ЗначениеЗаполнено(ПоставляемаяОбработка); - -КонецФункции - -// Функция возвращает поставляемую обработку, соответствующую используемой обработке. -// -// Параметры: -// ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. -// -Функция ПоставляемаяОбработка(ИспользуемаяОбработка) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - ВызватьИсключение НСтр("ru = 'Использование функции ДополнительныеОтчетыИОбработкиВМоделиСервиса.ПоставляемаяОбработка() - |доступно только сеансов с установленным разделением данных!'"); - - КонецЕсли; - - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 - | Инсталляции.ПоставляемаяОбработка КАК ПоставляемаяОбработка - |ИЗ - | РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных КАК Инсталляции - |ГДЕ - | Инсталляции.ИспользуемаяОбработка = &ИспользуемаяОбработка"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ИспользуемаяОбработка", ИспользуемаяОбработка); - УстановитьПривилегированныйРежим(Истина); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат Неопределено; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.ПоставляемаяОбработка; - КонецЕсли; - -КонецФункции - -// Функция возвращает используемую обработку, соответствующую поставляемой обработке для текущего значения разделителя ОбластьДанных. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -Функция ИспользуемаяОбработка(ПоставляемаяОбработка) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - ВызватьИсключение НСтр("ru = 'Использование функции ДополнительныеОтчетыИОбработкиВМоделиСервиса.ИспользуемаяОбработка() - |доступно только сеансов с установленным разделением данных!'"); - - КонецЕсли; - - ТекстЗапроса = "ВЫБРАТЬ - | Инсталляции.ИспользуемаяОбработка КАК ИспользуемаяОбработка - |ИЗ - | РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных КАК Инсталляции - |ГДЕ - | Инсталляции.ПоставляемаяОбработка = &ПоставляемаяОбработка"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - Запрос.УстановитьПараметр("ПоставляемаяОбработка", ПоставляемаяОбработка); - УстановитьПривилегированныйРежим(Истина); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат Неопределено; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.ИспользуемаяОбработка; - КонецЕсли; - -КонецФункции - -// Функция возвращает перечень инсталляций поставляемой дополнительной обработки в области данных. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// ТаблицаЗначений, колонки: -// ОбластьДанных - число (7,0), -// ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -Функция ПереченьИнсталляций(Знач ПоставляемаяОбработка) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | Инсталляции.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных, - | Инсталляции.ИспользуемаяОбработка КАК ИспользуемаяОбработка - |ИЗ - | РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных КАК Инсталляции - |ГДЕ - | Инсталляции.ПоставляемаяОбработка = &ПоставляемаяОбработка"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ПоставляемаяОбработка", ПоставляемаяОбработка); - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -// Функция возвращает очередь инсталляций поставляемой дополнительной обработки в области данных. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// ТаблицаЗначений, колонки: -// ОбластьДанных - число (7,0), -// ПараметрыУстановки - ХранилищеЗначения. -// -Функция ОчередьИнсталляций(Знач ПоставляемаяОбработка) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | Очередь.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных, - | Очередь.ПараметрыИнсталляции КАК ПараметрыИнсталляции - |ИЗ - | РегистрСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных КАК Очередь - |ГДЕ - | Очередь.ПоставляемаяОбработка = &ПоставляемаяОбработка"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ПоставляемаяОбработка", ПоставляемаяОбработка); - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -// Выполняет установку поставляемой дополнительной обработки в текущую область данных после получения поставляемых данных -// и извещает МС в случае неудачи -// -// См. описание параметров УстановитьПоставляемуюОбработкуВОбластьДанных -// -Процедура УстановитьПоставляемуюОбработкуПриПолучении(Знач ОписаниеИнсталляции, Знач БыстрыйДоступ, Знач Задания, Знач Разделы, - Знач СправочникиИДокументы, Знач НастройкиРасположенияКоманд, Знач ВариантыДополнительногоОтчета, Знач Ответственный) Экспорт - - Попытка - УстановитьПоставляемуюОбработкуВОбластьДанных(ОписаниеИнсталляции, БыстрыйДоступ, - Задания, Разделы, СправочникиИДокументы, НастройкиРасположенияКоманд, ВариантыДополнительногоОтчета, Ответственный); - Исключение - - ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку(ОписаниеИнсталляции.Идентификатор); - ОбработатьОшибкуУстановкиДополнительнойОбработкиВОбластьДанных( - ПоставляемаяОбработка, ОписаниеИнсталляции.Инсталляция, ТекстИсключения); - - КонецПопытки; - -КонецПроцедуры - -// Выполняет установку поставляемой дополнительной обработки в текущую область данных. -// -// Параметры: -// ОписаниеИнсталляции - Структура, ключи: -// Идентификатор - УникальныйИдентификатор, уникальный идентификатор ссылки -// элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки, -// Представление - строка, представление инсталляции поставляемой дополнительной -// обработки (будет использоваться в качестве наименования элемента справочника -// ДополнительныеОтчетыИОбработки), -// Инсталляция - УникальныйИдентификатор, уникальный идентификатор инсталляции -// поставляемой дополнительной обработки (будет использоваться в качестве -// уникального идентификатора ссылки справочника ДополнительныеОтчетыИОбработки), -// БыстрыйДоступ - ТаблицаЗначений, содержащая настройки включения команд дополнительной -// обработки в быстрый доступ пользователей приложения, колонки: -// ИдентификаторКоманды - строка, идентификатор команды, -// Пользователь - СправочникСсылка.Пользователь, -// Задания - ТаблицаЗначений, содержащая настройку выполнения команд дополнительной обработки -// в качестве регламентных заданий, колонки: -// Идентификатор - строка, идентификатор команды, -// РегламентноеЗаданиеРасписание - СписокЗначений, содержащий один элемент типа -// РасписаниеРегламентногоЗадания, -// РегламентноеЗаданиеИспользование - булево, признак включения выполнения команды -// в качестве регламентного задания, -// Разделы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции -// поставляемой дополнительной обработки в разделы командного интерфейса, колонки: -// Раздел - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникиИДокументы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции -// поставляемой дополнительной обработки в интерфейс форм список и элементов, колонки: -// ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// ВариантыДополнительногоОтчета - Массив(Строка), массив, содержащий ключи вариантов отчетов -// дополнительного отчета, -// Ответственный - СправочникСсылка.Пользователи. -// -Процедура УстановитьПоставляемуюОбработкуВОбластьДанных(Знач ОписаниеИнсталляции, Знач БыстрыйДоступ, Знач Задания, Знач Разделы, Знач СправочникиИДокументы, Знач НастройкиРасположенияКоманд, Знач ВариантыДополнительногоОтчета, Знач Ответственный) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Инициирована установка поставляемой обработки в область данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - Строка(ОписаниеИнсталляции.Идентификатор), - Строка(ОписаниеИнсталляции.Инсталляция)); - - Попытка - - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку(ОписаниеИнсталляции.Идентификатор); - - Набор = РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.СоздатьНаборЗаписей(); - Набор.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); - Набор.Записать(); - - Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда - - АктуальныеКоманды = ПоставляемаяОбработка.Команды.Выгрузить(); - АктуальныеКоманды.Колонки.Добавить("РегламентноеЗаданиеРасписание", Новый ОписаниеТипов("СписокЗначений")); - АктуальныеКоманды.Колонки.Добавить("РегламентноеЗаданиеИспользование", Новый ОписаниеТипов("Булево")); - АктуальныеКоманды.Колонки.Добавить("РегламентноеЗаданиеGUID", Новый ОписаниеТипов("УникальныйИдентификатор")); - - Для Каждого АктуальнаяКоманда Из АктуальныеКоманды Цикл - - НастройкаЗадания = Задания.Найти(АктуальнаяКоманда.Идентификатор, "Идентификатор"); - Если НастройкаЗадания <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(АктуальнаяКоманда, НастройкаЗадания, "РегламентноеЗаданиеРасписание,РегламентноеЗаданиеИспользование"); - КонецЕсли; - - КонецЦикла; - - // Создается элемент справочника ДополнительныеОтчетыИОбработки, выступающий в роли используемой обработки - ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка); - Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда - ИспользуемаяОбработка = ИспользуемаяОбработкаСсылка.ПолучитьОбъект(); - Иначе - ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент(); - КонецЕсли; - - ЗаполнитьНастройкиИспользуемойОбработки( - ИспользуемаяОбработка, ПоставляемаяОбработка); - - Если ЗначениеЗаполнено(Разделы) И Разделы.Количество() > 0 Тогда - ИспользуемаяОбработка.Разделы.Загрузить(Разделы); - КонецЕсли; - - Если ЗначениеЗаполнено(СправочникиИДокументы) И СправочникиИДокументы.Количество() > 0 Тогда - - ИспользуемаяОбработка.Назначение.Загрузить(СправочникиИДокументы); - ИспользуемаяОбработка.ИспользоватьДляФормыСписка = НастройкиРасположенияКоманд.ИспользоватьДляФормыСписка; - ИспользуемаяОбработка.ИспользоватьДляФормыОбъекта = НастройкиРасположенияКоманд.ИспользоватьДляФормыОбъекта; - - КонецЕсли; - - ИспользуемаяОбработка.Наименование = ОписаниеИнсталляции.Представление; - ИспользуемаяОбработка.Ответственный = Ответственный; - - ИспользуемаяОбработка.ДополнительныеСвойства.Вставить("БыстрыйДоступ", БыстрыйДоступ); - ИспользуемаяОбработка.ДополнительныеСвойства.Вставить("АктуальныеКоманды", АктуальныеКоманды); - - Если ИспользуемаяОбработка.ЭтоНовый() Тогда - ИспользуемаяОбработка.УстановитьСсылкуНового( - Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ОписаниеИнсталляции.Инсталляция)); - КонецЕсли; - - // Устанавливается связь между поставляемой и используемой обработкой - НаборЗаписей = РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); - Запись = НаборЗаписей.Добавить(); - Запись.ПоставляемаяОбработка = ПоставляемаяОбработка; - Если ИспользуемаяОбработка.ЭтоНовый() Тогда - Запись.ИспользуемаяОбработка = ИспользуемаяОбработка.ПолучитьСсылкуНового(); - Иначе - Запись.ИспользуемаяОбработка = ИспользуемаяОбработка.Ссылка; - КонецЕсли; - НаборЗаписей.Записать(); - - ИспользуемаяОбработка.Записать(); - - // Размещение вариантов дополнительного отчета в разделах, которые выбрал пользователь - // при установке (или разработчик при создании манифеста, если пользователь не - // изменял настройки по-умолчанию. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - - Для Каждого ВариантДополнительногоОтчета Из ВариантыДополнительногоОтчета Цикл - - ВариантСсылка = МодульВариантыОтчетов.ПолучитьСсылку(ИспользуемаяОбработка.Ссылка, ВариантДополнительногоОтчета.Ключ); - Если ВариантСсылка <> Неопределено Тогда - - Вариант = ВариантСсылка.ПолучитьОбъект(); - Вариант.Размещение.Очистить(); - - Для Каждого ЭлементРазмещения Из ВариантДополнительногоОтчета.Размещение Цикл - - РазмещениеВарианта = Вариант.Размещение.Добавить(); - РазмещениеВарианта.Использование = Истина; - РазмещениеВарианта.РазделИлиГруппа = ЭлементРазмещения.Раздел; - РазмещениеВарианта.Важный = ЭлементРазмещения.Важный; - РазмещениеВарианта.СмТакже = ЭлементРазмещения.СмТакже; - - КонецЦикла; - - Вариант.Записать(); - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - - - - // Отправляется сообщение в МС об успешной установке обработки в области данных - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУстановлена()); - - Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); - Сообщение.Body.Installation = ОписаниеИнсталляции.Инсталляция; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка, - Строка(ОписаниеИнсталляции.Инсталляция)); - - Иначе - - // Поставляемая обработка еще не синхронизировалась через поставляемые данные. - // Она будет записана в очередь инсталляции и обработана после окончания синхронизации - // поставляемых данных. - - Контекст = Новый Структура( - "БыстрыйДоступ,Задания,Разделы,СправочникиИДокументы,НастройкиРасположенияКоманд,ВариантыДополнительногоОтчета,Ответственный,Представление,Инсталляция", - БыстрыйДоступ, - Задания, - Разделы, - СправочникиИДокументы, - НастройкиРасположенияКоманд, - ВариантыДополнительногоОтчета, - Ответственный, - ОписаниеИнсталляции.Представление, - ОписаниеИнсталляции.Инсталляция); - - Менеджер = РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.СоздатьМенеджерЗаписи(); - Менеджер.ПоставляемаяОбработка = ПоставляемаяОбработка; - Менеджер.ПараметрыИнсталляции = Новый ХранилищеЗначения(Контекст); - Менеджер.Записать(); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных отложена'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - Строка(ОписаниеИнсталляции.Идентификатор), - Строка(ОписаниеИнсталляции.Инсталляция)); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - - ОбменСообщениями.ДоставитьСообщения(); - -КонецПроцедуры - -// Выполняет удаление поставляемой дополнительной обработки из текущей области данных. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки, -// ИдентификаторИспользуемойОбработки - УникальныйИдентификатор, GUID существующего в области -// данных элемента справочника ДополнительныеОтчетыИОбработки. -// -Процедура УдалитьПоставляемуюОбработкуИзОбластиДанных(Знач ПоставляемаяОбработка, Знач ИдентификаторИспользуемойОбработки) Экспорт - - НачатьТранзакцию(); - - Попытка - - УстановитьПривилегированныйРежим(Истина); - - Попытка - - ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторИспользуемойОбработки); - - // Очистим связь между поставляемой и используемой обработкой - НаборЗаписей = РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); - - // Удалим используемую обработку - ОбъектОбработки = ИспользуемаяОбработка.ПолучитьОбъект(); - Если ОбъектОбработки <> Неопределено Тогда - ОбъектОбработки.ОбменДанными.Загрузка = Истина; - ОбъектОбработки.Удалить(); - КонецЕсли; - - НаборЗаписей.Записать(); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Удаление из области данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки)); - - Исключение - - ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка удаления из область данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки) + Символы.ПС + Символы.ВК + ТекстИсключения); - - // Отправляется сообщение в МС об ошибке установки обработки в области данных - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки()); - - Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); - Сообщение.Body.Installation = ИдентификаторИспользуемойОбработки; - Сообщение.Body.ErrorDescription = ТекстИсключения; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - КонецПопытки; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -// Выполняет удаление поставляемой дополнительной обработки из всех областей данных -// текущей информационной базы. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. -// -Процедура ОтозватьПоставляемуюДополнительнуюОбработку(Знач ПоставляемаяОбработка) Экспорт - - НачатьТранзакцию(); - - Попытка - - Инсталляции = ПереченьИнсталляций(ПоставляемаяОбработка); - Для Каждого Инсталляция Из Инсталляции Цикл - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ПоставляемаяОбработка); - ПараметрыМетода.Добавить(Инсталляция.ИспользуемаяОбработка.УникальныйИдентификатор()); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "ДополнительныеОтчетыИОбработкиВМоделиСервиса.УдалитьПоставляемуюОбработкуИзОбластиДанных"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - ПараметрыЗадания.Вставить("ОбластьДанных", Инсталляция.ОбластьДанных); - - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - КонецЦикла; - - ОбъектОбработки = ПоставляемаяОбработка.ПолучитьОбъект(); - ОбъектОбработки.ОбменДанными.Загрузка = Истина; - ОбъектОбработки.Удалить(); - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -// Выполняет обработку ошибки при установки дополнительной обработки в область данных. -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки, -// ИдентификаторИнсталляции - УникальныйИдентификатор, -// ТекстИсключения - Строка, текст исключения. -// -Процедура ОбработатьОшибкуУстановкиДополнительнойОбработкиВОбластьДанных(Знач ПоставляемаяОбработка, Знач ИдентификаторИнсталляции, Знач ТекстИсключения) Экспорт - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка установки в область данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - ПоставляемаяОбработка, - Строка(ИдентификаторИнсталляции) + Символы.ПС + Символы.ВК + ТекстИсключения); - - НачатьТранзакцию(); - Попытка - - // Отправляется сообщение в МС об ошибке установки обработки в области данных - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки()); - - Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); - Сообщение.Body.Installation = ИдентификаторИнсталляции; - Сообщение.Body.ErrorDescription = ТекстИсключения; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина); - - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - ОбменСообщениями.ДоставитьСообщения(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Вызывается при определении наличия у текущего пользователя права на добавление дополнительного -// отчета или обработки в область данных. -// -// Параметры: -// ДополнительнаяОбработка - СправочникОбъект.ДополнительныеОтчетыИОбработки, элемент справочника, -// который записывается пользователем. -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия права, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки права. -// -Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если Не Константы.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.Получить() Тогда - - Если ДополнительнаяОбработка <> Неопределено Тогда - - Если ДополнительнаяОбработка.ЭтоНовый() Тогда - СсылкаОбработки = ДополнительнаяОбработка.ПолучитьСсылкуНового(); - Иначе - СсылкаОбработки = ДополнительнаяОбработка.Ссылка; - КонецЕсли; - - Результат = ЭтоПоставляемаяОбработка(СсылкаОбработки); - СтандартнаяОбработка = Ложь; - - Иначе - - Результат = Ложь; - СтандартнаяОбработка = Ложь; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке возможности загрузки дополнительного отчета или обработки из файла -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности -// загрузки дополнительного отчета или обработки из файла, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки возможности загрузки дополнительного отчета или обработки из файла. -// -Процедура ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Результат = (Константы.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.Получить()) - И (Не ЭтоПоставляемаяОбработка(ДополнительнаяОбработка)); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке возможности выгрузки дополнительного отчета или обработки в файл -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия возможности -// выгрузки дополнительного отчета или обработки в файл, -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки возможности выгрузки дополнительного отчета или обработки в файл. -// -Процедура ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Результат = Не ЭтоПоставляемаяОбработка(ДополнительнаяОбработка); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при проверке необходимости отображения расширенной информации о дополнительных -// отчетах и обработках в пользовательском интерфейсе. -// -// Параметры: -// ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Результат - Булево, в этот параметр в данной процедуре устанавливается флаг наличия необходимости -// отображения расширенной информации о дополнительных отчетах и обработках в пользовательском -// интерфейсе. -// СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения -// стандартной обработки проверки наличия необходимости отображения расширенной информации о -// дополнительных отчетах и обработках в пользовательском интерфейсе. -// -Процедура ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Результат = Не ЭтоПоставляемаяОбработка(ДополнительнаяОбработка); - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -// Возвращает виды публикации дополнительных отчетов и обработок, недоступные для использования -// в текущей модели информационной базы. -// -Функция НедоступныеВидыПубликации() Экспорт - - Результат = Новый Массив; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Результат.Добавить("РежимОтладки"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Вызывается при получении регистрационных данных для нового дополнительного отчета -// или обработки. -// -Процедура ПриПолученииРегистрационныхДанных(Объект, РегистрационныеДанные, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если Не Объект.ЭтоНовый() И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ПоставляемаяОбработка = ПоставляемаяОбработка(Объект.Ссылка); - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - РегистрационныеДанные = ПолучитьРегистрационныеДанные(ПоставляемаяОбработка); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается при определении параметров запуска для дополнительного отчета или обработки. -// -Функция ОпределениеПараметровЗапуска(Ссылка, Результат, СтандартнаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ЭтоПоставляемаяОбработка(Ссылка) Тогда - - Результат = ПолучитьПараметрыЗапускаОбработки(Ссылка); - СтандартнаяОбработка = Ложь; - - КонецЕсли; - -КонецФункции - -// Вызывается при проверке возможности выполнения дополнительного отчета или обработки. -// -Процедура ПроверитьВозможностьВыполнения(Ссылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если ЭтоПоставляемаяОбработка(Ссылка) Тогда - - ПроверкаВозможностиВыполнения(Ссылка); - - Иначе - - Если Не Константы.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.Получить() Тогда - - ВызватьИсключение НСтр("ru = 'Этот дополнительный отчет или обработка не может быть использован в сервисе!'"); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Процедура выполняет перезаполнение элемента справочника ДополнительныеОтчетыИОбработки -// по элементу справочника ПоставляемыеДополнительныеОтчетыИОбработки. -// -Процедура ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, ПоставляемаяОбработка) - - ЗаполнитьЗначенияСвойств(ИспользуемаяОбработка, ПоставляемаяОбработка, , "ХранилищеОбработки,Владелец,Родитель"); - - КомандыИспользуемойОбработки = ИспользуемаяОбработка.Команды.Выгрузить(); - КомандыПоставляемойОбработки = ПоставляемаяОбработка.Команды.Выгрузить(); - - // Синхронизируем команды используемой обработки по командам поставляемой обработки - Для Каждого КомандаПоставляемойОбработки Из КомандыПоставляемойОбработки Цикл - - КомандаИспользуемойОбработки = КомандыИспользуемойОбработки.Найти( - КомандаПоставляемойОбработки.Идентификатор, "Идентификатор"); - - Если КомандаИспользуемойОбработки = Неопределено Тогда - КомандаИспользуемойОбработки = КомандыИспользуемойОбработки.Добавить(); - КонецЕсли; - - ЗаполнитьЗначенияСвойств(КомандаИспользуемойОбработки, КомандаПоставляемойОбработки, - "Идентификатор,ВариантЗапуска,Представление,ПоказыватьОповещение,Модификатор,Скрыть"); - - КонецЦикла; - - // Удаляем команды используемой обработки, которые были удалены из новой версии - // поставляемой обработки - УдаляемыеКоманды = Новый Массив(); - Для Каждого КомандаИспользуемойОбработки Из КомандыИспользуемойОбработки Цикл - - КомандаПоставляемойОбработки = КомандыИспользуемойОбработки.Найти( - КомандаИспользуемойОбработки.Идентификатор, "Идентификатор"); - - Если КомандаПоставляемойОбработки = Неопределено Тогда - УдаляемыеКоманды.Добавить(КомандаИспользуемойОбработки); - КонецЕсли; - - КонецЦикла; - - Для Каждого УдаляемаяКоманда Из УдаляемыеКоманды Цикл - КомандыИспользуемойОбработки.Удалить(УдаляемаяКоманда); - КонецЦикла; - - ИспользуемаяОбработка.Команды.Загрузить(КомандыИспользуемойОбработки); - - ИспользуемаяОбработка.Разрешения.Загрузить(ПоставляемаяОбработка.Разрешения.Выгрузить()); - -КонецПроцедуры - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные\ПриОпределенииОбработчиковПоставляемыхДанных"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями\РегистрацияИнтерфейсовПринимаемыхСообщений"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями\РегистрацияИнтерфейсовОтправляемыхСообщений"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями\ПриОпределенииВерсииИнтерфейсаКорреспондента"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда - СерверныеОбработчики[ - "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"].Добавить( - "ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП - -// Формирует список параметров ИБ. -// -// Параметры: -// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. -// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ() -// -Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса"); - КонецЕсли; - -КонецПроцедуры - -// Зарегистрировать обработчики поставляемых данных -// -// При получении уведомления о доступности новых общих данных, вызывается процедуры -// ДоступныНовыеДанные модулей, зарегистрированных через ПолучитьОбработчикиПоставляемыхДанных. -// В процедуру передается Дескриптор - ОбъектXDTO Descriptor. -// -// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, -// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру -// ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. -// Если в менеджере сервиса не был указан файл - значение аргумента равно Неопределено. -// -// Параметры: -// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. -// Колонки: -// ВидДанных, строка - код вида данных, обрабатываемый обработчиком -// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя -// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: -// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт -// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт -// ОбработкаДанныхОтменена(Дескриптор) Экспорт -// -Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт - - ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики); - -КонецПроцедуры - -// Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, -// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. -// -// Параметры: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". -// -Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт - - Массив.Добавить( - Метаданные.РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.ПолноеИмя()); - -КонецПроцедуры - -// Обработчик события ПриОпределенииПсевдонимовОбработчиков. -// -// Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий -// -// Параметры: -// СоответствиеИменПсевдонимам - Соответствие -// Ключ - Псевдоним метода, например ОчиститьОбластьДанных -// Значение - Имя метода для вызова, например РаботаВМоделиСервиса.ОчиститьОбластьДанных -// В качестве значения можно указать Неопределено, в этом случае считается что имя -// совпадает с псевдонимом -// -Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - - СоответствиеИменПсевдонимам.Вставить("ДополнительныеОтчетыИОбработкиВМоделиСервиса.АктуализацияНастроекИспользуемойОбработки"); - // Совместимость с версиями БСП 2.2.1.25 и ниже - СоответствиеИменПсевдонимам.Вставить("ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуВОбластьДанных", - "ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуПриПолучении"); - СоответствиеИменПсевдонимам.Вставить("ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуПриПолучении"); - СоответствиеИменПсевдонимам.Вставить("ДополнительныеОтчетыИОбработкиВМоделиСервиса.УдалитьПоставляемуюОбработкуИзОбластиДанных"); - СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок.ИмяМетода); - -КонецПроцедуры - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.5.2"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЗаполнитьРазрешенияИспользуемыхОбработок"; - -КонецПроцедуры - -// Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов -// принимаемых сообщений -// -// Параметры: -// МассивОбработчиков - массив -// -Процедура РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков) Экспорт - - МассивОбработчиков.Добавить(СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс); - -КонецПроцедуры - -// Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов -// отправляемых сообщений -// -// Параметры: -// МассивОбработчиков - массив -// -Процедура РегистрацияИнтерфейсовОтправляемыхСообщений(МассивОбработчиков) Экспорт - - МассивОбработчиков.Добавить(СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс); - -КонецПроцедуры - -// Вызывается при определении версии интерфейса сообщений, поддерживаемой как ИБ-корреспондентом, -// так и текущей ИБ. В данной процедуре предполагается реализовывать механизмы поддержки обратной совместимости -// со старыми версиями ИБ-корреспондентов -// -// Параметры: -// ИнтерфейсСообщения - строка, название программного интерфейса сообщения, для которого определяется версия -// ПараметрыПодключения - структура, параметры подключения к ИБ-корреспонденту -// ПредставлениеПолучателя - строка, представление ИБ-корреспондента -// Результат - строка, определяемая версия. Значение данного параметра может быть изменено в данной процедуре. -// -Процедура ПриОпределенииВерсииИнтерфейсаКорреспондента(Знач ИнтерфейсСообщения, Знач ПараметрыПодключения, Знач ПредставлениеПолучателя, Результат) Экспорт - - // Совместимость с версиями МС, в которых интерфейс ApplicationExtensionsControl являлся - // составной частью интерфейса RemoteAdministrationControl - - Если Результат = Неопределено И ИнтерфейсСообщения = СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.ПрограммныйИнтерфейс() Тогда - - ПроверяемыйИнтерфейс = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.ПрограммныйИнтерфейс(); - ВерсияИнтерфейсаКонтроляУдаленногоАдминистрирования = ИнтерфейсыСообщенийВМоделиСервиса.ВерсияИнтерфейсаКорреспондента( - ПроверяемыйИнтерфейс, ПараметрыПодключения, ПредставлениеПолучателя); - - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИнтерфейсаКонтроляУдаленногоАдминистрирования, "1.0.2.4") >= 0 Тогда - Результат = "1.0.0.1"; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Заполняет массив типов, исключаемых из выгрузки и загрузки данных. -// -// Параметры: -// Типы - Массив(Типы). -// -Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт - - Типы.Добавить(Метаданные.РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных); - Типы.Добавить(Метаданные.РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы - -// Дополнительные отчеты и обработки - -// Процедура должна вызываться из события ПередЗаписью справочника -// ДополнительныеОтчетыИОбработки, выполняет проверку правомерности изменения реквизитов -// элементов данного справочника для дополнительных обработок, полученных из -// каталога дополнительных обработок менеджера сервиса. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. -// -Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт - - Если Источник.ЭтоНовый() Тогда - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - Возврат; - КонецЕсли; - - Если ЭтоПоставляемаяОбработка(Источник.Ссылка) Тогда - - КонтролируемыеРеквизиты = ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.КонтролируемыеРеквизиты(); - СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник.Ссылка, КонтролируемыеРеквизиты); - - Для Каждого КонтролируемыйРеквизит Из КонтролируемыеРеквизиты Цикл - - ИсходныйРеквизит = Неопределено; - РезультирующийРеквизит = Неопределено; - - Если ТипЗнч(Источник[КонтролируемыйРеквизит]) = Тип("ХранилищеЗначения") Тогда - ИсходныйРеквизит = Источник[КонтролируемыйРеквизит].Получить(); - Иначе - ИсходныйРеквизит = Источник[КонтролируемыйРеквизит]; - КонецЕсли; - - Если ТипЗнч(СтарыеЗначения[КонтролируемыйРеквизит]) = Тип("ХранилищеЗначения") Тогда - РезультирующийРеквизит = СтарыеЗначения[КонтролируемыйРеквизит].Получить(); - Иначе - РезультирующийРеквизит = СтарыеЗначения[КонтролируемыйРеквизит]; - КонецЕсли; - - Если ИсходныйРеквизит <> РезультирующийРеквизит Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимая попытка изменения значения реквизита %1 для дополнительной обработки %2, полученной из каталога дополнительных обработок менеджера сервиса!'"), - КонтролируемыйРеквизит, Источник.Наименование); - - КонецЕсли; - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Процедура должна вызываться из события ПередУдалением справочника -// ДополнительныеОтчетыИОбработки. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. -// -Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - - Попытка - - // Определим поставляемую обработку - ПоставляемаяОбработка = ПоставляемаяОбработка(Источник.Ссылка); - - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - // Очистим сопоставление используемой обработки с поставляемой - НаборЗаписей = РегистрыСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПоставляемаяОбработка.Установить(ПоставляемаяОбработка); - НаборЗаписей.Записать(); - - // Отправим в МС сообщение об удалении обработки из области данных - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУдалена()); - - Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); - Сообщение.Body.Installation = Источник.Ссылка.УникальныйИдентификатор(); - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -// Выполняет получение регистрационных данных для регистрируемой обработке по поставляемой обработке -// -// Параметры: -// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки -// -// Возвращаемое значение - структура, аналогичная структуре, возвращаемой экспортируемой функцией -// СведенияОВнешнейОбработке() внешних обработок. -// -Функция ПолучитьРегистрационныеДанные(Знач ПоставляемаяОбработка) Экспорт - - Результат = Новый Структура("Вид, Наименование, Версия, БезопасныйРежим, Информация, ВерсияБСП, ХранилищеВариантов"); - - УстановитьПривилегированныйРежим(Истина); - Обработка = ПоставляемаяОбработка.ПолучитьОбъект(); - ЗаполнитьЗначенияСвойств(Результат, Обработка); - - // Назначение - Назначение = Новый Массив(); - Для Каждого ЭлементНазначения Из Обработка.Назначение Цикл - Назначение.Вставить(ЭлементНазначения.ОбъектНазначения); - КонецЦикла; - Результат.Вставить("Назначение", Назначение); - - // Команды - Результат.Вставить("Команды", Обработка.Команды.Выгрузить( - , "Представление, Идентификатор, Модификатор, ПоказыватьОповещение, Использование")); - - Возврат Результат; - -КонецФункции - -// Функция возвращает параметры подключения дополнительной обработки к информационной базе -// -// Параметры: -// ИспользуемаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение - структура, ключи: -// БезопасныйРежим - булево, -// ХранилищеОбработки - ХранилищеЗначения. -// -Функция ПолучитьПараметрыЗапускаОбработки(Знач ИспользуемаяОбработка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПоставляемаяОбработка = ПоставляемаяОбработка(ИспользуемаяОбработка); - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - Свойства = ДополнительныеОтчетыИОбработкиПовтИсп.ПараметрыЗапуска(); - Результат = Новый Структура(Свойства); - ЗаполнитьЗначенияСвойств(Результат, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПоставляемаяОбработка, Свойства)); - Возврат Результат; - - КонецЕсли; - -КонецФункции - -// Процедура вызывается для проверки возможности выполнения кода дополнительной обработки -// в информационной базе. -// -Процедура ПроверкаВозможностиВыполнения(Знач ИспользуемаяОбработка) Экспорт - - ПараметрыПубликацииИспользуемойОбработки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИспользуемаяОбработка, "Публикация, Версия"); - Если ПараметрыПубликацииИспользуемойОбработки.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена Тогда - ВызватьИсключение НСтр( - "ru = 'Использование дополнительной обработки в вашем приложении запрещено! Обратитесь за помощью к пользователю, обладающего правами администратора в данном приложении.'"); - КонецЕсли; - - ОписанияПричинБлокировки = ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.РасширенныеОписанияПричинБлокировки(); - - УстановитьПривилегированныйРежим(Истина); - ПоставляемаяОбработка = ПоставляемаяОбработка(ИспользуемаяОбработка); - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - ПараметрыПубликацииПоставляемойОбработки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПоставляемаяОбработка, "Публикация, ПричинаОтключения, Версия"); - - // Проверка публикации поставляемой обработки - Если ПараметрыПубликацииПоставляемойОбработки.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена Тогда - - ВызватьИсключение ОписанияПричинБлокировки[ПараметрыПубликацииПоставляемойОбработки.ПричинаОтключения]; - - КонецЕсли; - - // Проверка на выполнение обновления версии обработки - Если ПараметрыПубликацииИспользуемойОбработки.Версия <> ПараметрыПубликацииПоставляемойОбработки.Версия Тогда - ВызватьИсключение НСтр( - "ru = 'Использование дополнительной обработки временно недоступно по причине выполнения ее обновления. Данный процесс может занять несколько минут. Приносим извинения на доставленные неудобства.'"); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Очередь заданий - -// Процедура вызывается в качестве регламентного задания после получения новой версии дополнительной -// обработки из каталога дополнительных отчетов и обработок менеджера сервиса. -// -// Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки. -// -Процедура АктуализацияНастроекИспользуемойОбработки(Знач Ссылка) Экспорт - - ПоставляемаяОбработка = ПоставляемаяОбработка(Ссылка); - - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - ИспользуемаяОбработка = Ссылка.ПолучитьОбъект(); - ЗаполнитьНастройкиИспользуемойОбработки(ИспользуемаяОбработка, - ПоставляемаяОбработка.ПолучитьОбъект()); - ИспользуемаяОбработка.Записать(); - - Иначе - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительная обработка с идентификатором %1 не является поставляемой!'"), - Строка(Ссылка.УникальныйИдентификатор())); - - КонецЕсли; - -КонецПроцедуры - -// Обновление информационной базы - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЗаблокироватьДополнительныеОтчетыИОбработкиДляОбновления"; - Обработчик.ОбщиеДанные = Истина; - Обработчик.МонопольныйРежим = Ложь; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработкиВМоделиСервиса.ЗапроситьОбновлениеДополнительныхОтчетовИОбработок"; - Обработчик.ОбщиеДанные = Истина; - Обработчик.МонопольныйРежим = Ложь; - -КонецПроцедуры - -// Блокирует дополнительные отчеты и обработки в областях данных для -// получения новых версий из менеджера сервиса. -// -Процедура ЗаблокироватьДополнительныеОтчетыИОбработкиДляОбновления() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - УстановитьПривилегированныйРежим(Истина); - - ТекстЗапроса = - "ВЫБРАТЬ - | ПоставляемыеДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПоставляемыеДополнительныеОтчетыИОбработки КАК ПоставляемыеДополнительныеОтчетыИОбработки - |ГДЕ - | НЕ ПоставляемыеДополнительныеОтчетыИОбработки.Ссылка В - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПоставляемыеДополнительныеОтчетыИОбработкиСовместимость.Ссылка - | ИЗ - | Справочник.ПоставляемыеДополнительныеОтчетыИОбработки.Совместимость КАК ПоставляемыеДополнительныеОтчетыИОбработкиСовместимость - | ГДЕ - | ПоставляемыеДополнительныеОтчетыИОбработкиСовместимость.Версия = &Версия) - | И ПоставляемыеДополнительныеОтчетыИОбработки.КонтролироватьСовместимостьСВерсиямиКонфигурации = ИСТИНА"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Версия", Метаданные.Версия); - БлокируемыеОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Для Каждого БлокируемаяОбработка Из БлокируемыеОбработки Цикл - - ПоставляемаяОбработка = БлокируемаяОбработка.ПолучитьОбъект(); - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; - ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации; - ПоставляемаяОбработка.Записать(); - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Запрашивает обновления поставляемых дополнительных отчетов и обработок из -// менеджера сервиса. -// -Процедура ЗапроситьОбновлениеДополнительныхОтчетовИОбработок() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - НачатьТранзакцию(); - ПоставляемыеДанные.ЗапроситьВсеДанные(); - ЗафиксироватьТранзакцию(); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ПОЛУЧЕНИЯ ПОСТАВЛЯЕМЫХ ДАННЫХ - -// Регистрирует обработчики поставляемых данных за день и за все время -// -Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.ВидДанных = ИдентификаторВидаПоставляемыхДанных(); - Обработчик.КодОбработчика = ИдентификаторВидаПоставляемыхДанных(); - Обработчик.Обработчик = ДополнительныеОтчетыИОбработкиВМоделиСервиса; - -КонецПроцедуры - -// Вызывается при получении уведомления о новых данных. -// В теле следует проверить, необходимы ли эти данные приложению, -// и если да - установить флажок Загружать -// -// Параметры: -// Дескриптор - ОбъектXDTO Descriptor. -// Загружать - булево, возвращаемое -// -Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт - - Если Дескриптор.DataType = ИдентификаторВидаПоставляемыхДанных() Тогда - - ОписаниеПоставляемойОбработки = РазобратьДескрипторПоставляемыхДанных(Дескриптор); - - Чтение = Новый ЧтениеXML(); - Чтение.УстановитьСтроку(ОписаниеПоставляемойОбработки.Совместимость); - ТаблицаСовместимостиXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение, - ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.ТипТаблицаСовместимости()); - ТаблицаСовместимости = ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.ПрочитатьТаблицуСовместимости( - ТаблицаСовместимостиXDTO); - - Если ПроверитьСовместимостьПоставляемойОбработки(ТаблицаСовместимости) Тогда // Если обработка совместима с ИБ - - Загружать = Истина; - - Иначе - - Загружать = Ложь; - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки отменена'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - , - НСтр("ru = 'Поставляемая обработка несовместима с данной конфигурацией'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Совместимость); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. -// -// Параметры: -// Дескриптор - ОбъектXDTO Дескриптор. -// ПутьКФайлу - Строка или Неопределено. Полное имя извлеченного файла. Файл будет автоматически удален -// после завершения процедуры. Если в менеджере сервиса не был -// указан файл - значение аргумента равно Неопределено. -// -Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт - - Если Дескриптор.DataType = ИдентификаторВидаПоставляемыхДанных() Тогда - ОбработатьПоставляемыеДополнительныеОтчетыИОбработки(Дескриптор, ПутьКФайлу); - КонецЕсли; - -КонецПроцедуры - -// Вызывается при отмене обработки данных в случае сбоя -// -Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт - -КонецПроцедуры - -Функция ОписаниеПоставляемойОбработки() - - Возврат Новый Структура("Идентификатор, Версия, Манифест, Совместимость"); - -КонецФункции - -Функция РазобратьДескрипторПоставляемыхДанных(Дескриптор) - - ОписаниеПоставляемойОбработки = ОписаниеПоставляемойОбработки(); - - Для Каждого ХарактеристикаПоставляемыхДанных Из Дескриптор.Properties.Property Цикл - - ОписаниеПоставляемойОбработки[ХарактеристикаПоставляемыхДанных.Code] = ХарактеристикаПоставляемыхДанных.Value; - - КонецЦикла; - - Возврат ОписаниеПоставляемойОбработки; - -КонецФункции - -// Контроль совместимости с текущей версией конфигурации информационной базы -Функция ПроверитьСовместимостьПоставляемойОбработки(Знач ТаблицаСовместимости) - - Для Каждого ДекларацияСовместимости Из ТаблицаСовместимости Цикл - - Если ПустаяСтрока(ДекларацияСовместимости.VersionNumber) Тогда - - Если ДекларацияСовместимости.ConfigarationName = Метаданные.Имя Тогда - Возврат Истина; - КонецЕсли; - - Иначе - - Если ДекларацияСовместимости.ConfigarationName = Метаданные.Имя И ДекларацияСовместимости.VersionNumber = Метаданные.Версия Тогда - Возврат Истина; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -Процедура ОбработатьПоставляемыеДополнительныеОтчетыИОбработки(Дескриптор, ПутьКФайлу) - - УстановитьПривилегированныйРежим(Истина); - - // Прочитаем характеристики экземпляра поставляемых данных - ОписаниеПоставляемойОбработки = РазобратьДескрипторПоставляемыхДанных(Дескриптор); - - Чтение = Новый ЧтениеXML(); - Чтение.УстановитьСтроку(ОписаниеПоставляемойОбработки.Манифест); - МанифестДополнительнойОбработки = ФабрикаXDTO.ПрочитатьXML(Чтение, - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипМанифест()); - - Чтение = Новый ЧтениеXML(); - Чтение.УстановитьСтроку(ОписаниеПоставляемойОбработки.Совместимость); - ТаблицаСовместимостиXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение, - ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.ТипТаблицаСовместимости()); - ТаблицаСовместимости = ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.ПрочитатьТаблицуСовместимости( - ТаблицаСовместимостиXDTO); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - , - НСтр("ru = 'Инициирована загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); - - // Получим СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки - СсылкаПоставляемойОбработки = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - Новый УникальныйИдентификатор(ОписаниеПоставляемойОбработки.Идентификатор)); - Если ОбщегоНазначения.СсылкаСуществует(СсылкаПоставляемойОбработки) Тогда - ПоставляемаяОбработка = СсылкаПоставляемойОбработки.ПолучитьОбъект(); - Иначе - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.СоздатьЭлемент(); - ПоставляемаяОбработка.УстановитьСсылкуНового(СсылкаПоставляемойОбработки); - КонецЕсли; - - Если ЗначениеЗаполнено(ПоставляемаяОбработка.ПричинаОтключения) Тогда - Если ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ОбновлениеВерсииКонфигурации Тогда - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - ПоставляемаяОбработка.ПричинаОтключения = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.ПустаяСсылка(); - КонецЕсли; - Иначе - ПоставляемаяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - КонецЕсли; - - Если ПоставляемаяОбработка.ВерсияGUID <> ОписаниеПоставляемойОбработки.Версия Тогда - - // Заполним СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки - ВариантыОтчетовПоставляемойОбработки = Неопределено; - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.ПрочитатьМанифест( - МанифестДополнительнойОбработки, ПоставляемаяОбработка, ПоставляемаяОбработка, - ВариантыОтчетовПоставляемойОбработки); - - // В качестве значения реквизита ХранилищеОбработки записывает файл поставляемых данных - ДвоичныеДанныеОбработки = Новый ДвоичныеДанные(ПутьКФайлу); - ПоставляемаяОбработка.ХранилищеОбработки = Новый ХранилищеЗначения( - ДвоичныеДанныеОбработки, Новый СжатиеДанных(9)); - - // Таблица совместимости с версиями конфигураций - ПоставляемаяОбработка.КонтролироватьСовместимостьСВерсиямиКонфигурации = Истина; - ПоставляемаяОбработка.Совместимость.Очистить(); - Для Каждого ИнформацияОСовместимости Из ТаблицаСовместимости Цикл - - Если ИнформацияОСовместимости.ConfigarationName = Метаданные.Имя Тогда - - Если ПустаяСтрока(ИнформацияОСовместимости.VersionNumber) Тогда - - ПоставляемаяОбработка.КонтролироватьСовместимостьСВерсиямиКонфигурации = Ложь; - Прервать; - - Иначе - - СтрокаТЧ = ПоставляемаяОбработка.Совместимость.Добавить(); - СтрокаТЧ.Версия = ИнформацияОСовместимости.VersionNumber; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - // Запишем СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки - ПоставляемаяОбработка.ВерсияGUID = ОписаниеПоставляемойОбработки.Версия; - ПоставляемаяОбработка.Записать(); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки завершена'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Завершена загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); - - // Планирование актуализации настроек используемых обработок - ИспользуемыеОбработки = ПереченьИнсталляций(ПоставляемаяОбработка.Ссылка); - Для Каждого ИнсталляцияОбработки Из ИспользуемыеОбработки Цикл - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ИнсталляцияОбработки.ИспользуемаяОбработка); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "ДополнительныеОтчетыИОбработкиВМоделиСервиса.АктуализацияНастроекИспользуемойОбработки"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - ПараметрыЗадания.Вставить("ОбластьДанных", ИнсталляцияОбработки.ОбластьДанных); - - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована актуализация настроек поставляемой обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ИнсталляцияОбработки.ОбластьДанных); - - КонецЦикла; - - // Планирование инсталляции поставляемой обработки в области, которые ее ожидают - ОчередьИнсталляций = ОчередьИнсталляций(ПоставляемаяОбработка.Ссылка); - Для Каждого ЭлементОчереди Из ОчередьИнсталляций Цикл - - Контекст = ЭлементОчереди.ПараметрыИнсталляции.Получить(); - - ОписаниеИнсталляции = Новый Структура( - "Идентификатор,Представление,Инсталляция", - ПоставляемаяОбработка.Ссылка.УникальныйИдентификатор(), - Контекст.Представление, - Контекст.Инсталляция); - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ОписаниеИнсталляции); - ПараметрыМетода.Добавить(Контекст.БыстрыйДоступ); - ПараметрыМетода.Добавить(Контекст.Задания); - ПараметрыМетода.Добавить(Контекст.Разделы); - ПараметрыМетода.Добавить(Контекст.СправочникиИДокументы); - ПараметрыМетода.Добавить(Контекст.НастройкиРасположенияКоманд); - ПараметрыМетода.Добавить(Контекст.ВариантыДополнительногоОтчета); - ПараметрыМетода.Добавить(Контекст.Ответственный); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуПриПолучении"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1); - ПараметрыЗадания.Вставить("ОбластьДанных", ЭлементОчереди.ОбластьДанных); - - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована отложенная установка поставляемой обработки в область данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ЭлементОчереди.ОбластьДанных); - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Возвращает идентификатор вида поставляемых данных для дополнительных отчетов -// и обработок -// -// Возвращаемое значение: Строка. -Функция ИдентификаторВидаПоставляемыхДанных() Экспорт - - Возврат "ДОиО"; // Не локализуется - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления ИБ. - -// Вызывается при обновлении до БСП 2.1.5.2. -// -Процедура ЗаполнитьРазрешенияИспользуемыхОбработок() Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - Выборка = Справочники.ДополнительныеОтчетыИОбработки.Выбрать(); - - Пока Выборка.Следующий() Цикл - - ПоставляемаяОбработка = ПоставляемаяОбработка(Выборка.Ссылка); - - Если ЗначениеЗаполнено(ПоставляемаяОбработка) Тогда - - ИспользуемаяОбработка = Выборка.ПолучитьОбъект(); - ИспользуемаяОбработка.Разрешения.Загрузить(ПоставляемаяОбработка.Разрешения.Выгрузить()); - ИспользуемаяОбработка.Записать(); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl deleted file mode 100644 index e703f3f6b..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl +++ /dev/null @@ -1,373 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Работа с манифестом дополнительных отчетов и обработок -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Формирует манифест дополнительного отчета или обработки -// -// Параметры: -// ОбъектОбработки - объект, значения свойств которого будет использоваться в -// качестве значений свойств дополнительного отчета или обработки (предположительно -// СправочникОбъект.ДополнительныеОтчетыИОбработки или -// СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки, -// ОбъектВерсии - объект, значения свойств которого будет использоваться в -// качестве значений свойств версии дополнительного отчета или обработки (предположительно -// СправочникОбъект.ДополнительныеОтчетыИОбработки или -// СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки, -// ВариантыОтчета - ТаблицаЗначений, колонки: -// КлючВарианта - строка, ключ варианта дополнительного отчета, -// Представление - строка, представление варианта дополнительного отчета, -// Назначение - ТаблицаЗначений, колонки: -// РазделИлиГруппа - строка, которой можно сопоставить элемент справочника -// ИдентификаторыОбъектовМетаданных, -// Важный - булево, -// СмТакже - булево. -// -// Возвращаемое значение: -// ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - -// манифест дополнительного отчета или обработки. -// -// Примечание: -// Помимо кода БСП, данная функция может вызываться из внешней обработки -// ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf, входящей -// в комплект поставки менеджера сервиса. При изменении структуры параметров данной -// функции необходимо актуализировать их и в данной внешней обработке. -// -Функция СформироватьМанифест(Знач ОбъектОбработки, Знач ОбъектВерсии, Знач ВариантыОтчета = Неопределено, Знач РасписанияКоманд = Неопределено, Знач РазрешенияОбработки = Неопределено) Экспорт - - Манифест = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипМанифест()); - - Манифест.Name = ОбъектОбработки.Наименование; - Манифест.ObjectName = ОбъектВерсии.ИмяОбъекта; - Манифест.Version = ОбъектВерсии.Версия; - Манифест.SafeMode = ОбъектВерсии.БезопасныйРежим; - Манифест.Description = ОбъектВерсии.Информация; - Манифест.FileName = ОбъектВерсии.ИмяФайла; - Манифест.UseReportVariantsStorage = ОбъектВерсии.ИспользуетХранилищеВариантов; - - ВидXDTO = Неопределено; - СловарьПреобразованияВидовОбработок = - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.СловарьВидыДополнительныхОтчетовИОбработок(); - Для Каждого ФрагментСловаря Из СловарьПреобразованияВидовОбработок Цикл - Если ФрагментСловаря.Значение = ОбъектВерсии.Вид Тогда - ВидXDTO = ФрагментСловаря.Ключ; - КонецЕсли; - КонецЦикла; - Если ЗначениеЗаполнено(ВидXDTO) Тогда - Манифест.Category = ВидXDTO; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид дополнительных отчетов и обработок %1 не поддерживается в модели сервиса!'"), - ОбъектВерсии.Вид); - КонецЕсли; - - Если ОбъектВерсии.Команды.Количество() > 0 Тогда - - Если ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Или - ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - - // Обработка назначения разделам - - ВыбранныеРазделы = ОбъектВерсии.Разделы.Выгрузить(); - - Если ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда - ВозможныеРазделы = ДополнительныеОтчетыИОбработки.РазделыДополнительныхОбработок(); - Иначе - ВозможныеРазделы = ДополнительныеОтчетыИОбработки.РазделыДополнительныхОтчетов(); - КонецЕсли; - - РабочийСтол = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); - - НазначениеXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам()); - - Для Каждого Раздел Из ВозможныеРазделы Цикл - - Если Раздел = РабочийСтол Тогда - ИмяРаздела = РабочийСтол; - ИдентификаторОбъектаМетаданных = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); - Иначе - ИмяРаздела = Раздел.ПолноеИмя(); - ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Раздел); - КонецЕсли; - ПредставлениеОбъектаМетаданных = ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(Раздел); - - ОбъектНазначенияXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипОбъектНазначения()); - ОбъектНазначенияXDTO.ObjectName = ИмяРаздела; - ОбъектНазначенияXDTO.ObjectType = "SubSystem"; - ОбъектНазначенияXDTO.Representation = ПредставлениеОбъектаМетаданных; - ОбъектНазначенияXDTO.Enabled = ( - ВыбранныеРазделы.Найти( - ИдентификаторОбъектаМетаданных, "Раздел" - ) <> Неопределено); - - НазначениеXDTO.Objects.Добавить(ОбъектНазначенияXDTO); - - КонецЦикла; - - Иначе - - // Обработка назначения объектам метаданных - - ВыбранныеОбъектыНазначения = ОбъектВерсии.Назначение.Выгрузить(); - - ВозможныеОбъектыНазначения = Новый Массив(); - Если ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ЗаполнениеОбъекта; - ИначеЕсли ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ОтчетыОбъекта; - ИначеЕсли ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеПечатныеФормыОбъекта; - ИначеЕсли ОбъектОбработки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.СозданиеСвязанныхОбъектов; - КонецЕсли; - Для Каждого ТипПараметраКоманды Из ОбщаяКоманда.ТипПараметраКоманды.Типы() Цикл - ВозможныеОбъектыНазначения.Добавить(Метаданные.НайтиПоТипу(ТипПараметраКоманды)); - КонецЦикла; - - НазначениеXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеСправочникамИДокументам()); - - Для Каждого ОбъектНазначения Из ВозможныеОбъектыНазначения Цикл - - ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектНазначения); - - ОбъектНазначенияXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипОбъектНазначения()); - ОбъектНазначенияXDTO.ObjectName = ОбъектНазначения.ПолноеИмя(); - Если ОбщегоНазначения.ЭтоСправочник(ОбъектНазначения) Тогда - ОбъектНазначенияXDTO.ObjectType = "Catalog"; - ИначеЕсли ОбщегоНазначения.ЭтоДокумент(ОбъектНазначения) Тогда - ОбъектНазначенияXDTO.ObjectType = "Document"; - ИначеЕсли ОбщегоНазначения.ЭтоБизнесПроцесс(ОбъектНазначения) Тогда - ОбъектНазначенияXDTO.ObjectType = "BusinessProcess"; - ИначеЕсли ОбщегоНазначения.ЭтоЗадача(ОбъектНазначения) Тогда - ОбъектНазначенияXDTO.ObjectType = "Task"; - КонецЕсли; - ОбъектНазначенияXDTO.Representation = ОбъектНазначения.Представление(); - ОбъектНазначенияXDTO.Enabled = ( - ВыбранныеОбъектыНазначения.Найти( - ИдентификаторОбъектаМетаданных, "ОбъектНазначения" - ) <> Неопределено); - - НазначениеXDTO.Objects.Добавить(ОбъектНазначенияXDTO); - - КонецЦикла; - - НазначениеXDTO.UseInListsForms = ОбъектВерсии.ИспользоватьДляФормыСписка; - НазначениеXDTO.UseInObjectsForms = ОбъектВерсии.ИспользоватьДляФормыОбъекта; - - КонецЕсли; - - Манифест.Assignment = НазначениеXDTO; - - Для Каждого ОписаниеКоманды Из ОбъектВерсии.Команды Цикл - - КомандаXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипКоманда()); - КомандаXDTO.Id = ОписаниеКоманды.Идентификатор; - КомандаXDTO.Representation = ОписаниеКоманды.Представление; - - ТипЗапускаXDTO = Неопределено; - СловарьПреобразованияСпособовВызова = - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.СловарьСпособыВызоваДополнительныхОтчетовИОбработок(); - Для Каждого ФрагментСловаря Из СловарьПреобразованияСпособовВызова Цикл - Если ФрагментСловаря.Значение = ОписаниеКоманды.ВариантЗапуска Тогда - ТипЗапускаXDTO = ФрагментСловаря.Ключ; - КонецЕсли; - КонецЦикла; - Если ЗначениеЗаполнено(ТипЗапускаXDTO) Тогда - КомандаXDTO.StartupType = ТипЗапускаXDTO; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Способ запуска дополнительных отчетов и обработок %1 не поддерживается в модели сервиса!'"), - ОписаниеКоманды.ВариантЗапуска); - КонецЕсли; - - КомандаXDTO.ShowNotification = ОписаниеКоманды.ПоказыватьОповещение; - КомандаXDTO.Modifier = ОписаниеКоманды.Модификатор; - - Если ЗначениеЗаполнено(РасписанияКоманд) Тогда - - РасписаниеКоманды = Неопределено; - Если РасписанияКоманд.Свойство(ОписаниеКоманды.Идентификатор, РасписаниеКоманды) Тогда - - КомандаXDTO.DefaultSettings = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНастройкиКоманды()); - - КомандаXDTO.DefaultSettings.Schedule = СериализаторXDTO.ЗаписатьXDTO(РасписаниеКоманды); - - КонецЕсли; - - КонецЕсли; - - Манифест.Commands.Добавить(КомандаXDTO); - - КонецЦикла; - - КонецЕсли; - - Если ЗначениеЗаполнено(ВариантыОтчета) Тогда - - Для Каждого ВариантОтчета Из ВариантыОтчета Цикл - - ВариантXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипВариантОтчета()); - ВариантXDTO.VariantKey = ВариантОтчета.КлючВарианта; - ВариантXDTO.Representation = ВариантОтчета.Представление; - - Если ВариантОтчета.Назначение <> Неопределено Тогда - - Для Каждого НазначениеВариантаОтчета Из ВариантОтчета.Назначение Цикл - - НазначениеXDTO = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеВариантаОтчета()); - - НазначениеXDTO.ObjectName = НазначениеВариантаОтчета.ПолноеИмя; - НазначениеXDTO.Representation = НазначениеВариантаОтчета.Представление; - НазначениеXDTO.Parent = НазначениеВариантаОтчета.ПолноеИмяРодителя; - НазначениеXDTO.Enabled = НазначениеВариантаОтчета.Использование; - - Если НазначениеВариантаОтчета.Важный Тогда - НазначениеXDTO.Importance = "High"; - ИначеЕсли НазначениеВариантаОтчета.СмТакже Тогда - НазначениеXDTO.Importance = "Low"; - Иначе - НазначениеXDTO.Importance = "Ordinary"; - КонецЕсли; - - ВариантXDTO.Assignments.Добавить(НазначениеXDTO); - - КонецЦикла; - - КонецЕсли; - - Манифест.ReportVariants.Добавить(ВариантXDTO); - - КонецЦикла; - - КонецЕсли; - - Если РазрешенияОбработки = Неопределено Тогда - - РазрешенияОбработки = ОбъектОбработки.Разрешения; - - КонецЕсли; - - Для Каждого Разрешение Из РазрешенияОбработки Цикл - - Если ТипЗнч(Разрешение) = Тип("ОбъектXDTO") Тогда - - Манифест.Permissions.Добавить(Разрешение); - - Иначе - - РазрешениеXDTO = ФабрикаXDTO.Создать( - ФабрикаXDTO.Тип( - ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.Пакет(), - Разрешение.ВидРазрешения)); - - Параметры = Разрешение.Параметры.Получить(); - Если Параметры <> Неопределено Тогда - - Для Каждого Параметр Из Параметры Цикл - - РазрешениеXDTO[Параметр.Ключ] = Параметр.Значение; - - КонецЦикла; - - КонецЕсли; - - Манифест.Permissions.Добавить(РазрешениеXDTO); - - КонецЕсли; - - КонецЦикла; - - Возврат Манифест; - -КонецФункции - -// Заполняет переданные объекты данными, считываемыми из манифеста дополнительного -// отчета или обработки. -// -// Параметры: -// Манифест - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d}ExtensionManifest - манифест -// дополнительного отчета или обработки, -// ОбъектОбработки - объект, значения свойств которого будет установлены -// значениями свойств дополнительного отчета или обработки из манифеста (предположительно -// СправочникОбъект.ДополнительныеОтчетыИОбработки или -// СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки, -// ОбъектВерсии - объект, значения свойств которого будет установлены -// значениями свойств версии дополнительного отчета или обработки из манифеста (предположительно -// СправочникОбъект.ДополнительныеОтчетыИОбработки или -// СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки, -// ВариантыОтчета - ТаблицаЗначений, колонки: -// КлючВарианта - строка, ключ варианта дополнительного отчета, -// Представление - строка, представление варианта дополнительного отчета, -// Назначение - ТаблицаЗначений, колонки: -// РазделИлиГруппа - строка, которой можно сопоставить элемент справочника -// ИдентификаторыОбъектовМетаданных, -// Важный - булево, -// СмТакже - булево. -// -Процедура ПрочитатьМанифест(Знач Манифест, ОбъектОбработки, ОбъектВерсии, ВариантыОтчета) Экспорт - - ОбъектОбработки.Наименование = Манифест.Name; - ОбъектВерсии.ИмяОбъекта = Манифест.ObjectName; - ОбъектВерсии.Версия = Манифест.Version; - ОбъектВерсии.БезопасныйРежим = Манифест.SafeMode; - ОбъектВерсии.Информация = Манифест.Description; - ОбъектВерсии.ИмяФайла = Манифест.FileName; - ОбъектВерсии.ИспользуетХранилищеВариантов = Манифест.UseReportVariantsStorage; - - СловарьПреобразованияВидовОбработок = ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.СловарьВидыДополнительныхОтчетовИОбработок(); - ОбъектВерсии.Вид = СловарьПреобразованияВидовОбработок[Манифест.Category]; - - ОбъектВерсии.Команды.Очистить(); - Для Каждого Command Из Манифест.Commands Цикл - - СтрокаКоманды = ОбъектВерсии.Команды.Добавить(); - СтрокаКоманды.Идентификатор = Command.Id; - СтрокаКоманды.Представление = Command.Representation; - СтрокаКоманды.ПоказыватьОповещение = Command.ShowNotification; - СтрокаКоманды.Модификатор = Command.Modifier; - - СловарьПреобразованияСпособовВызова = - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.СловарьСпособыВызоваДополнительныхОтчетовИОбработок(); - СтрокаКоманды.ВариантЗапуска = СловарьПреобразованияСпособовВызова[Command.StartupType]; - - КонецЦикла; - - ОбъектВерсии.Разрешения.Очистить(); - Для Каждого Permission Из Манифест.Permissions Цикл - - ТипXDTO = Permission.Тип(); - - Разрешение = ОбъектВерсии.Разрешения.Добавить(); - Разрешение.ВидРазрешения = ТипXDTO.Имя; - - Параметры = Новый Структура(); - - Для Каждого СвойствоXDTO Из ТипXDTO.Свойства Цикл - - Контейнер = Permission.ПолучитьXDTO(СвойствоXDTO.Имя); - - Если Контейнер <> Неопределено Тогда - Параметры.Вставить(СвойствоXDTO.Имя, Контейнер.Значение); - Иначе - Параметры.Вставить(СвойствоXDTO.Имя); - КонецЕсли; - - КонецЦикла; - - Разрешение.Параметры = Новый ХранилищеЗначения(Параметры); - - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.mdo deleted file mode 100644 index 97fecabab..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест - - ru - Дополнительные отчеты и обработки в модели сервиса манифест - - true - true - true - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl deleted file mode 100644 index 9a41d1183..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl +++ /dev/null @@ -1,238 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ИНТЕРФЕЙСА МАНИФЕСТА ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК В МОДЕЛИ -// СЕРВИСА -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений -Функция Пакет() Экспорт - - Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/" + Версия(); - -КонецФункции - -// Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений -Функция Версия() Экспорт - - Возврат "1.0.0.1"; - -КонецФункции - -// Возвращает название программного интерфейса сообщений -Функция ПрограммныйИнтерфейс() Экспорт - - Возврат "ApplicationExtensionsCore"; - -КонецФункции - -// Выполняет регистрацию поддерживаемых версий интерфейса сообщений -// -// Параметры: -// СтруктураПоддерживаемыхВерсий - структура: -// Ключ - название программного интерфейса -// Значение - массив поддерживаемых версий -// -Процедура ЗарегистрироватьИнтерфейс(Знач СтруктураПоддерживаемыхВерсий) Экспорт - - МассивВерсий = Новый Массив; - МассивВерсий.Добавить("1.0.0.1"); - СтруктураПоддерживаемыхВерсий.Вставить(ПрограммныйИнтерфейс(), МассивВерсий); - -КонецПроцедуры - -// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями -// -// Параметры: -// МассивОбработчиков - массив. -// -Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - -КонецПроцедуры - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionAssignmentObject -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипОбъектНазначения(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionAssignmentObject"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionAssignmentBase -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНазначениеБазовое(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionAssignmentBase"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionSubsystemsAssignment -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНазначениеРазделам(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionSubsystemsAssignment"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCatalogsAndDocumentsAssignment -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНазначениеСправочникамИДокументам(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionCatalogsAndDocumentsAssignment"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCommand -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипКоманда(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionCommand"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionReportVariantAssignment -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНазначениеВариантаОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionReportVariantAssignment"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionReportVariant -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипВариантОтчета(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionReportVariant"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCommandSettings -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНастройкиКоманды(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionCommandSettings"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionManifest -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипМанифест(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionManifest"); - -КонецФункции - -// Возвращает словарь соответствий значений перечисления ВидыДополнительныхОтчетовИОбработок -// значения XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionCategory -// -Функция СловарьВидыДополнительныхОтчетовИОбработок() Экспорт - - Словарь = Новый Структура(); - Менеджер = Перечисления.ВидыДополнительныхОтчетовИОбработок; - - Словарь.Вставить("AdditionalProcessor", Менеджер.ДополнительнаяОбработка); - Словарь.Вставить("AdditionalReport", Менеджер.ДополнительныйОтчет); - Словарь.Вставить("ObjectFilling", Менеджер.ЗаполнениеОбъекта); - Словарь.Вставить("Report", Менеджер.Отчет); - Словарь.Вставить("PrintedForm", Менеджер.ПечатнаяФорма); - Словарь.Вставить("LinkedObjectCreation", Менеджер.СозданиеСвязанныхОбъектов); - - Возврат Словарь; - -КонецФункции - -// Возвращает словарь соответствий значений перечисления СпособыВызоваДополнительныхОбработок -// значения XDTO-типа {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionStartupType -// -Функция СловарьСпособыВызоваДополнительныхОтчетовИОбработок() Экспорт - - Словарь = Новый Структура(); - Менеджер = Перечисления.СпособыВызоваДополнительныхОбработок; - - Словарь.Вставить("ClientCall", Менеджер.ВызовКлиентскогоМетода); - Словарь.Вставить("ServerCall", Менеджер.ВызовСерверногоМетода); - Словарь.Вставить("FormOpen", Менеджер.ОткрытиеФормы); - Словарь.Вставить("FormFill", Менеджер.ЗаполнениеФормы); - Словарь.Вставить("SafeModeExtension", Менеджер.СценарийВБезопасномРежиме); - - Возврат Словарь; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) - - Если ИспользуемыйПакет = Неопределено Тогда - ИспользуемыйПакет = Пакет(); - КонецЕсли; - - Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.mdo deleted file mode 100644 index e9405a1ca..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс - - ru - Дополнительные отчеты и обработки в модели сервиса манифест интерфейс - - true - true - true - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/Module.bsl deleted file mode 100644 index cd3dedda7..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/Module.bsl +++ /dev/null @@ -1,53 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки в модели сервиса", процедуры -// и функции с повторным использованием возвращаемых значений. -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Функция возвращает фиксированную массив, содержащий имена констант, регулирующих доступность -// использования дополнительных отчетов и обработок в модели сервиса -// -Функция РегулирующиеКонстанты() Экспорт - - Результат = Новый Массив(); - Результат.Добавить("НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса"); - Результат.Добавить("ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса"); - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - -// Функция возвращает массив, содержащий имена реквизитов справочника ДополнительныеОтчетыИОбработки, -// которые запрещено изменять при наличии связи с поставляемыми обработками. -// -Функция КонтролируемыеРеквизиты() Экспорт - - Результат = Новый Массив(); - Результат.Добавить("БезопасныйРежим"); - Результат.Добавить("ХранилищеОбработки"); - Результат.Добавить("ИмяОбъекта"); - Результат.Добавить("Версия"); - Результат.Добавить("Вид"); - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - -// Функция возвращает соответствие элементов перечисления ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса -// подробному описанию причины отключения. -// -Функция РасширенныеОписанияПричинБлокировки() Экспорт - - Причины = Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса; - - Результат = Новый Соответствие(); - Результат.Вставить(Причины.БлокировкаАдминистраторомСервиса, НСтр("ru = 'Использование дополнительной обработки запрещено из-за нарушений правил сервиса!'")); - Результат.Вставить(Причины.БлокировкаВладельцем, НСтр("ru = 'Использование дополнительной обработки запрещено владельцем обработки!'")); - Результат.Вставить(Причины.ОбновлениеВерсииКонфигурации, НСтр("ru = 'Использование дополнительной обработки временно недоступно по причине выполнения обновления приложения. Данный процесс может занять несколько минут. Приносим извинения на доставленные неудобства.'")); - - Возврат Новый ФиксированноеСоответствие(Результат); - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/Module.bsl deleted file mode 100644 index 9b169d756..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/Module.bsl +++ /dev/null @@ -1,35 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Работа с таблицей совместимости дополнительных отчетов и обработок -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Читает таблицу совместимости поставляемой дополнительной обработки с конфигурациями -// и их версиями -// -// Параметры: -// ТаблицаСовместимости - ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/1.0.0.1}CompatibilityList. -// -// Возвращаемое значение: -// Таблица значений, колонки: -// ConfigarationName - строка, имя конфигурации, -// VersionNumber - строка, версия конфигурации. -// -Функция ПрочитатьТаблицуСовместимости(Знач ТаблицаСовместимости) Экспорт - - Результат = Новый ТаблицаЗначений(); - Результат.Колонки.Добавить("ConfigarationName", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("VersionNumber", Новый ОписаниеТипов("Строка")); - - Для Каждого CompatibilityObject Из ТаблицаСовместимости.CompatibilityObjects Цикл - - Строка = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(Строка, CompatibilityObject); - - КонецЦикла; - - Возврат Результат; - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.mdo deleted file mode 100644 index 86eea8caf..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость - - ru - Дополнительные отчеты и обработки в модели сервиса совместимость - - true - true - true - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl deleted file mode 100644 index b534c21dc..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl +++ /dev/null @@ -1,126 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ИНТЕРФЕЙСА СОВМЕСТИМОСТИ ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК В МОДЕЛИ -// СЕРВИСА -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений -Функция Пакет() Экспорт - - Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/" + Версия(); - -КонецФункции - -// Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений -Функция Версия() Экспорт - - Возврат "1.0.0.1"; - -КонецФункции - -// Возвращает название программного интерфейса сообщений -Функция ПрограммныйИнтерфейс() Экспорт - - Возврат "ApplicationExtensionsCompatibility"; - -КонецФункции - -// Выполняет регистрацию поддерживаемых версий интерфейса сообщений -// -// Параметры: -// СтруктураПоддерживаемыхВерсий - структура: -// Ключ - название программного интерфейса -// Значение - массив поддерживаемых версий -// -Процедура ЗарегистрироватьИнтерфейс(Знач СтруктураПоддерживаемыхВерсий) Экспорт - - МассивВерсий = Новый Массив; - МассивВерсий.Добавить("1.0.0.1"); - СтруктураПоддерживаемыхВерсий.Вставить(ПрограммныйИнтерфейс(), МассивВерсий); - -КонецПроцедуры - -// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями -// -// Параметры: -// МассивОбработчиков - массив. -// -Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - -КонецПроцедуры - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/a.b.c.d}CompatibilityObject -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипОбъектСовместимости(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CompatibilityObject"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/a.b.c.d}CompatibilityWithConfiguration -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипСовместимостьСКонфигурацией(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CompatibilityWithConfiguration"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/a.b.c.d}CompatibilityWithConfigurationVersion -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипСовместимостьСВерсиейКонфигурации(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CompatibilityWithConfigurationVersion"); - -КонецФункции - -// Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/a.b.c.d}CompatibilityList -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипТаблицаСовместимости(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CompatibilityList"); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) - - Если ИспользуемыйПакет = Неопределено Тогда - ИспользуемыйПакет = Пакет(); - КонецЕсли; - - Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.mdo deleted file mode 100644 index 985da4ac0..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс - - ru - Дополнительные отчеты и обработки в модели сервиса совместимость интерфейс - - true - true - true - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl index fd2ccf1ed..f741395a2 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Подключает внешнюю обработку (отчет). // Подробнее - см. ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(). @@ -36,8 +35,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Выполняет команду обработки и помещает результат во временное хранилище. // Подробнее - см. ДополнительныеОтчетыИОбработки.ВыполнитьКоманду(). @@ -48,3 +48,19 @@ КонецФункции +// Помещает двоичные данные дополнительного отчета или обработки во временное хранилище. +Функция ПоместитьВХранилище(Ссылка, ИдентификаторФормы) Экспорт + Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") + Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда + Возврат Неопределено; + КонецЕсли; + Если НЕ ДополнительныеОтчетыИОбработки.ВозможнаВыгрузкаОбработкиВФайл(Ссылка) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выгрузки файлов дополнительных отчетов и обработок'"); + КонецЕсли; + + ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); + + Возврат ПоместитьВоВременноеХранилище(ХранилищеОбработки.Получить(), ИдентификаторФормы); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 0fee4ee7a..ab7629174 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает форму с доступными командами. // @@ -277,7 +276,11 @@ ЗаполнитьЗначенияСвойств(Диалог, ПараметрыДиалога); ПомещенныеФайлы = Новый Массив; - ВыборВыполнен = ПоместитьФайлы(, ПомещенныеФайлы, Диалог, Истина, ИдентификаторФормы); + Если ИдентификаторФормы <> Неопределено Тогда + ВыборВыполнен = ПоместитьФайлы(, ПомещенныеФайлы, Диалог, Истина, ИдентификаторФормы); + Иначе + ВыборВыполнен = ПоместитьФайлы(, ПомещенныеФайлы, Диалог, Истина); + КонецЕсли; ОбработатьРезультатПомещенияФайла(ВыборВыполнен, ПомещенныеФайлы, Неопределено, ДополнительныеПараметры); Иначе @@ -289,8 +292,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов @@ -352,8 +356,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Выводит оповещение перед запуском команды. Процедура ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда) Экспорт @@ -491,16 +496,16 @@ СтандартнаяОбработка = Истина; ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ОбъектыНазначения, СтандартнаяОбработка); - Если Не СтандартнаяОбработка Тогда - Возврат; - КонецЕсли; Параметры = Новый Структура; Параметры.Вставить("ВыполняемаяКоманда", ВыполняемаяКоманда); Параметры.Вставить("Форма", Форма); - - ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОткрытиеПечатнойФормыЗавершение", ЭтотОбъект, Параметры); - УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеОповещения, ОбъектыНазначения, Форма); + Если СтандартнаяОбработка Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОткрытиеПечатнойФормыЗавершение", ЭтотОбъект, Параметры); + УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеОповещения, ОбъектыНазначения, Форма); + Иначе + ВыполнитьОткрытиеПечатнойФормыЗавершение(ОбъектыНазначения, Параметры); + КонецЕсли; КонецПроцедуры @@ -577,10 +582,7 @@ КонецЕсли; КонецПроцедуры -// Аналог ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста, работающий за 1 вызов. -// В отличие от ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария позволяет устанавливать свой заголовок -// и работает с реквизитами таблиц. -// +// Для редактирования текста в реквизитах таблиц. Процедура РедактироватьМногострочныйТекст(ФормаИлиОбработчик, ТекстРедактирования, ВладелецРеквизита, ИмяРеквизита, Знач Заголовок = "") Экспорт Если ПустаяСтрока(Заголовок) Тогда @@ -597,6 +599,76 @@ КонецПроцедуры +// Показывает диалог установки расширения, затем выгружает данные дополнительного отчета или обработки. +Процедура ВыгрузитьВФайл(ПараметрыВыгрузки) Экспорт + ТекстСообщения = НСтр("ru = 'Для выгрузки внешней обработки (отчета) в файл рекомендуется установить расширение работы с файлами.'"); + Обработчик = Новый ОписаниеОповещения("ВыгрузитьВФайлЗавершение", ЭтотОбъект, ПараметрыВыгрузки); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик, ТекстСообщения); +КонецПроцедуры + +// Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. +Процедура ВернутьРезультатПослеПоказаПредупреждения(ТекстПредупреждения, Обработчик, Результат) Экспорт + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Обработчик", ПодготовитьОбработчикДляДиалога(Обработчик)); + ПараметрыОбработчика.Вставить("Результат", Результат); + Обработчик = Новый ОписаниеОповещения("ВернутьРезультатПослеПоказаПредупрежденияЗавершение", ЭтотОбъект, ПараметрыОбработчика); + ПоказатьПредупреждение(Обработчик, ТекстПредупреждения); +КонецПроцедуры + +// Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. +Процедура ВернутьРезультатПослеПоказаФормы(Форма, Обработчик, Результат) Экспорт + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Обработчик", ПодготовитьОбработчикДляДиалога(Обработчик)); + ПараметрыОбработчика.Вставить("Результат", Результат); + Форма.ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ВернутьРезультатПослеПоказаФормыЗавершение", ЭтотОбъект, ПараметрыОбработчика); + Форма.Открыть(); +КонецПроцедуры + +// Продолжение процедуры (см. выше). +Процедура ВернутьРезультатПослеПоказаПредупрежденияЗавершение(ПараметрыОбработчика) Экспорт + + Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры (см. выше). +Процедура ВернутьРезультатПослеПоказаФормыЗавершение(РезультатЗакрытия, ПараметрыОбработчика) Экспорт + + Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); + КонецЕсли; + +КонецПроцедуры + +// Подготовка обработчика асинхронного диалога. +Функция ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура) Экспорт + + Если ТипЗнч(ОбработчикИлиСтруктура) = Тип("Структура") Тогда + // Рекурсивная регистрация всех обработчиков вызывающего кода. + Если ОбработчикИлиСтруктура.Свойство("ОбработчикРезультата") Тогда + ОбработчикИлиСтруктура.ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура.ОбработчикРезультата); + КонецЕсли; + Если ОбработчикИлиСтруктура.Свойство("АсинхронныйДиалог") Тогда + // Регистрация открытого диалога. + ОбработчикИлиСтруктура.АсинхронныйДиалог.Открыт = Истина; + // Формирование обработчика (при этом фиксируется вся структура параметров). + Обработчик = Новый ОписаниеОповещения( + ОбработчикИлиСтруктура.АсинхронныйДиалог.ИмяПроцедуры, + ОбработчикИлиСтруктура.АсинхронныйДиалог.Модуль, + ОбработчикИлиСтруктура); + Иначе + Обработчик = Неопределено; + КонецЕсли; + Иначе + Обработчик = ОбработчикИлиСтруктура; + КонецЕсли; + + Возврат Обработчик; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Служебные обработчики асинхронных диалогов @@ -659,3 +731,32 @@ КонецПроцедуры +// Обработчик результата работы процедуры ВыгрузитьВФайл. +Процедура ВыгрузитьВФайлЗавершение(Результат, ПараметрыВыгрузки) Экспорт + Перем Адрес; + + ПараметрыВыгрузки.Свойство("АдресДанныхОбработки", Адрес); + Если Не ЗначениеЗаполнено(Адрес) Тогда + Адрес = ДополнительныеОтчетыИОбработкиВызовСервера.ПоместитьВХранилище(ПараметрыВыгрузки.Ссылка, Неопределено); + КонецЕсли; + + Если Не ПодключитьРасширениеРаботыСФайлами() Тогда + ПолучитьФайл(Адрес, ПараметрыВыгрузки.ИмяФайла, Истина); + Возврат; + КонецЕсли; + + ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогСохраненияФайла.ПолноеИмяФайла = ПараметрыВыгрузки.ИмяФайла; + ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + ДиалогСохраненияФайла.ИндексФильтра = ?(ПараметрыВыгрузки.ЭтоОтчет, 1, 2); + ДиалогСохраненияФайла.МножественныйВыбор = Ложь; + ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); + + Если ДиалогСохраненияФайла.Выбрать() Тогда + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(, Адрес)); + ПолучитьФайлы(ПолучаемыеФайлы, , ДиалогСохраненияФайла.ПолноеИмяФайла, Ложь); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl index 1d3f0d691..6d56155db 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Выполняет дополнительные действия перед формированием печатной формы. // @@ -15,4 +14,6 @@ // Процедура ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ПечатаемыеОбъекты, СтандартнаяОбработка) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 48efef294..cb3c43c5b 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Имена видов объектов. @@ -131,3 +130,5 @@ Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", ?(КодЯзыка = Неопределено, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), КодЯзыка)); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl index d98f35e0e..8cecf5b5d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Определяет разделы, в которых доступна команда вызова дополнительных обработок. // @@ -46,3 +45,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl index 124ccefa9..ffc3fd9d6 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Виды публикации дополнительных обработок, доступные в программе. Функция ДоступныеВидыПубликации() Экспорт @@ -44,19 +43,6 @@ КонецФункции -// Имена реквизитов справочников, в которых хранятся параметры подключения -// дополнительных отчетов и обработок к программе. -// Для справочников ДополнительныОтчетыИОбработки и ПоставляемыеДополнительныеОтчетыИОбработки. -// -// Возвращаемое значение: -// Строка - имена реквизитов, разделенные запятой. -// -Функция ПараметрыЗапуска() Экспорт - - Возврат "БезопасныйРежим, ХранилищеОбработки"; - -КонецФункции - // Настройки формы для назначаемого объекта. Функция ПараметрыФормыНазначаемогоОбъекта(ПолноеИмяФормы, ТипФормы = Неопределено) Экспорт Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда @@ -65,8 +51,8 @@ Результат = Новый Структура("ЭтоФормаОбъекта, ТипФормы, СсылкаРодителя, ВыводитьПодменюЗаполнениеОбъекта"); - ЭтаФормаМетаданные = Метаданные.НайтиПоПолномуИмени(ПолноеИмяФормы); - Если ЭтаФормаМетаданные = Неопределено Тогда + ФормаМетаданные = Метаданные.НайтиПоПолномуИмени(ПолноеИмяФормы); + Если ФормаМетаданные = Неопределено Тогда ПозицияТочки = СтрДлина(ПолноеИмяФормы); Пока Сред(ПолноеИмяФормы, ПозицияТочки, 1) <> "." Цикл ПозицияТочки = ПозицияТочки - 1; @@ -74,7 +60,7 @@ ПолноеИмяРодителя = Лев(ПолноеИмяФормы, ПозицияТочки - 1); РодительМетаданные = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРодителя); Иначе - РодительМетаданные = ЭтаФормаМетаданные.Родитель(); + РодительМетаданные = ФормаМетаданные.Родитель(); КонецЕсли; Если РодительМетаданные = Неопределено Или ТипЗнч(РодительМетаданные) = Тип("ОбъектМетаданныхКонфигурация") Тогда Возврат ""; @@ -87,10 +73,10 @@ ИначеЕсли ВРег(ТипФормы) = ВРег(ДополнительныеОтчетыИОбработкиКлиентСервер.ТипФормыСписка()) Тогда Результат.ЭтоФормаОбъекта = Ложь; Иначе - Результат.ЭтоФормаОбъекта = (РодительМетаданные.ОсновнаяФормаОбъекта = ЭтаФормаМетаданные); + Результат.ЭтоФормаОбъекта = (РодительМетаданные.ОсновнаяФормаОбъекта = ФормаМетаданные); КонецЕсли; Иначе - Результат.ЭтоФормаОбъекта = (РодительМетаданные.ОсновнаяФормаОбъекта = ЭтаФормаМетаданные); + Результат.ЭтоФормаОбъекта = (РодительМетаданные.ОсновнаяФормаОбъекта = ФормаМетаданные); КонецЕсли; Если Результат.ЭтоФормаОбъекта Тогда // Форма объекта @@ -103,24 +89,7 @@ КонецЕсли; Возврат Новый ФиксированнаяСтруктура(Результат); + КонецФункции -// Массив имен общих модулей для интеграции с подсистемой ДополнительныеОтчетыИОбработкиВМоделиСервиса. -// -// Возвращаемое значение: -// ФиксированныйМассив из Строка - Имена общих модулей. -// -Функция ОбработчикиИнтеграции() Экспорт - - Результат = Новый Массив(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - - Результат.Добавить("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Результат.Добавить("ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - - КонецЕсли; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl index e73e9daa7..48349ee58 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Создает новое регламентное задание в информационной базе. // @@ -17,7 +16,7 @@ Функция СоздатьНовоеЗадание(Знач Наименование) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.СоздатьНовоеЗадание(); КонецЕсли; @@ -40,7 +39,7 @@ Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьИдентификаторЗадания(Задание); КонецЕсли; @@ -61,7 +60,7 @@ Процедура УстановитьПараметрыЗадания(Задание, Использование, Наименование, Параметры, Расписание) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание); Возврат; @@ -90,7 +89,7 @@ Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьПараметрыЗадания(Задание); КонецЕсли; @@ -115,7 +114,7 @@ Функция НайтиЗадание(Знач Идентификатор) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.НайтиЗадание(Идентификатор); КонецЕсли; @@ -140,7 +139,7 @@ Процедура УдалитьЗадание(Знач Задание) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УдалитьЗадание(Задание); Возврат; @@ -151,3 +150,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl deleted file mode 100644 index e79c7c733..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl +++ /dev/null @@ -1,124 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки в модели сервиса", процедуры и -// функции по управлению заданиями очереди. -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Создает новое задание очереди заданий. -// -// Возвращаемое значение: СправочникСсылка.ОчередьЗаданийОбластейДанных. -// -Функция СоздатьНовоеЗадание() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыЗадания = Новый Структура(); - ПараметрыЗадания.Вставить("Использование", Ложь); - ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок.ИмяМетода); - - Возврат ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - -КонецФункции - -// Возвращает идентификатор задания очереди (для сохранения в данных информационной базы). -// -// Задание - СправочникСсылка.ОчередьЗаданийОбластейДанных. -// -// Возвращаемое значение: УникальныйИдентификатор. -// -Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Возврат Задание.УникальныйИдентификатор(); - -КонецФункции - -// Устанавливает параметры задания очереди заданий. -// -// Параметры: -// Задание - СправочникСсылка.ОчередьЗаданийОбластейДанных, -// Использование - булево, флаг использования регламентного задания, -// Параметры - Массив(Произвольный), параметры регламентного задания, -// Расписание - РасписаниеРегламентногоЗадания. -// -Процедура УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание) Экспорт - - Если Не Константы.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса.Получить() Тогда - ВызватьИсключение НСтр("ru = 'Периодическое выполнение команд дополнительных обработок в качестве заданий запрещено администрацией сервиса!'"); - КонецЕсли; - - МинимальныйИнтервал = Константы.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса.Получить(); - ИсходнаяДата = ТекущаяДатаСеанса(); - ПроверяемаяДата = ИсходнаяДата + МинимальныйИнтервал - 1; - Если Расписание.ТребуетсяВыполнение(ПроверяемаяДата, ИсходнаяДата) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Расписание, задаваемое для выполнения команд дополнительного отчета или обработки в качестве заданий, должно быть не чаще, чем 1 раз в %1 секунд!'"), МинимальныйИнтервал); - - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыЗадания = Новый Структура(); - ПараметрыЗадания.Вставить("Использование", Использование); - ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок.ИмяМетода); - ПараметрыЗадания.Вставить("Параметры", Параметры); - ПараметрыЗадания.Вставить("Ключ", Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок.Ключ); - ПараметрыЗадания.Вставить("Расписание", Расписание); - - ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания); - -КонецПроцедуры - -// Возвращает параметры задания очереди заданий. -// -// Параметры: -// Задание - СправочникСсылка.ОчередьЗаданийОбластейДанных. -// -// Возвращаемое значение: Структура, описания ключей - см. описание возвращаемого значения -// для функции ОчередьЗаданий.ПолучитьЗадания(). -// -Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Возврат ОчередьЗаданий.ПолучитьЗадания(Новый Структура("Идентификатор", Задание))[0]; - -КонецФункции - -// Выполняет поиск задания очереди по идентификатору (предположительно, сохраненному в данных -// информационной базы). -// -// Параметры: Идентификатор - УникальныйИдентификатор. -// -// Возвращаемое значение: СправочникСсылка.ОчередьЗаданийОбластейДанных. -// -Функция НайтиЗадание(Знач Идентификатор) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Задание = Справочники.ОчередьЗаданийОбластейДанных.ПолучитьСсылку(Идентификатор); - Если ОбщегоНазначения.СсылкаСуществует(Задание) Тогда - Возврат Задание; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -// Удаляет задание очереди заданий. -// -// Параметры: -// Задание - СправочникСсылка.ОчередьЗаданийОбластейДанных. -// -Процедура УдалитьЗадание(Знач Задание) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(Задание) = Тип("СправочникСсылка.ОчередьЗаданийОбластейДанных") Тогда - ОчередьЗаданий.УдалитьЗадание(Задание); - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.mdo deleted file mode 100644 index 4626d05e5..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса - - ru - Дополнительные отчеты и обработки регламентные задания в модели сервиса - - true - true - true - diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 3a7ceceb9..1e02e9df7 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура пакетной записи сообщений в журнал регистрации // @@ -36,8 +35,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Выполняет чтение событий журнала регистрации в соответствии с установленным отбором // @@ -72,8 +72,7 @@ ДатыОтбораУказаны= ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания) И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания); - Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания - Тогда + Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда ВызватьИсключение НСтр("ru = 'Некорректно заданы условия отбора журнала регистрации. Дата начала больше даты окончания.'"); КонецЕсли; @@ -92,6 +91,7 @@ СобытияЖурнала.Колонки.Добавить("АдресДанных", Новый ОписаниеТипов("Строка")); Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СобытияЖурнала.Колонки.Добавить("РазделениеДанныхСеанса", Новый ОписаниеТипов("Строка")); СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка")); КонецЕсли; @@ -99,7 +99,10 @@ МенеджерВладельца.ДобавитьДополнительныеКолонкиСобытия(СобытияЖурнала); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); ПсевдонимыПользователей = Новый Соответствие(); Иначе @@ -128,10 +131,21 @@ // Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПредставлениеРазделенияДанныхСеанса = СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса; + ПолноеПредставлениеРазделенияДанныхСеанса = ""; + + РазделениеДанныхСеанса = СобытиеЖурнала.РазделениеДанныхСеанса; СписокРеквизитовРазделенияДанных = Новый СписокЗначений; - СписокРеквизитовРазделенияДанных.ЗагрузитьЗначения(ПредставлениеРазделенияДанныхСеанса); - СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = СписокРеквизитовРазделенияДанных; + Для Каждого РазделительСеанса Из РазделениеДанныхСеанса Цикл + ПредставлениеРазделителя = Метаданные.ОбщиеРеквизиты.Найти(РазделительСеанса.Ключ).Синоним; + ПредставлениеРазделителя = ПредставлениеРазделителя + " = " + РазделительСеанса.Значение; + ЗначениеРазделителя = РазделительСеанса.Ключ + "=" + РазделительСеанса.Значение; + СписокРеквизитовРазделенияДанных.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя); + ПолноеПредставлениеРазделенияДанныхСеанса = ?(Не ПустаяСтрока(ПолноеПредставлениеРазделенияДанныхСеанса), + ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "") + + ПредставлениеРазделителя; + КонецЦикла; + СобытиеЖурнала.РазделениеДанныхСеанса = СписокРеквизитовРазделенияДанных; + СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = ПолноеПредставлениеРазделенияДанныхСеанса; КонецЕсли; // Обработка данных специальных событий @@ -248,28 +262,30 @@ // (не включаются в пользовательское представления) // Процедура СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации, - ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) Экспорт - + ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) Экспорт + ПредставлениеОтбора = ""; // Интервал ДатаНачалаИнтервала = Неопределено; ДатаОкончанияИнтервала = Неопределено; - Если Не ОтборЖурналаРегистрации.Свойство("ДатаНачала", ДатаНачалаИнтервала) Или - ДатаНачалаИнтервала = Неопределено Тогда + Если Не ОтборЖурналаРегистрации.Свойство("ДатаНачала", ДатаНачалаИнтервала) + Или ДатаНачалаИнтервала = Неопределено Тогда ДатаНачалаИнтервала = '00010101000000'; КонецЕсли; - Если Не ОтборЖурналаРегистрации.Свойство("ДатаОкончания", ДатаОкончанияИнтервала) Или - ДатаОкончанияИнтервала = Неопределено Тогда + + Если Не ОтборЖурналаРегистрации.Свойство("ДатаОкончания", ДатаОкончанияИнтервала) + Или ДатаОкончанияИнтервала = Неопределено Тогда ДатаОкончанияИнтервала = '00010101000000'; КонецЕсли; + Если Не (ДатаНачалаИнтервала = '00010101000000' И ДатаОкончанияИнтервала = '00010101000000') Тогда ПредставлениеОтбора = ПредставлениеПериода(ДатаНачалаИнтервала, ДатаОкончанияИнтервала); КонецЕсли; ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Пользователь"); - ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Событие", ОтборЖурналаРегистрацииПоУмолчанию); - ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "ИмяПриложения", ОтборЖурналаРегистрацииПоУмолчанию); ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Сеанс"); ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Уровень"); @@ -277,41 +293,38 @@ // Остальные ограничения указываем просто по представлением, без указания значений ограничения Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл ИмяОграничения = ЭлементОтбора.Ключ; - Если ВРег(ИмяОграничения) = ВРег("ДатаНачала") - Или ВРег(ИмяОграничения) = ВРег("ДатаОкончания") - Или ВРег(ИмяОграничения) = ВРег("Событие") - Или ВРег(ИмяОграничения) = ВРег("ИмяПриложения") - Или ВРег(ИмяОграничения) = ВРег("Пользователь") - Или ВРег(ИмяОграничения) = ВРег("Сеанс") - Или ВРег(ИмяОграничения) = ВРег("Уровень") Тогда + Если ВРег(ИмяОграничения) = ВРег("ДатаНачала") + Или ВРег(ИмяОграничения) = ВРег("ДатаОкончания") + Или ВРег(ИмяОграничения) = ВРег("Событие") + Или ВРег(ИмяОграничения) = ВРег("ИмяПриложения") + Или ВРег(ИмяОграничения) = ВРег("Пользователь") + Или ВРег(ИмяОграничения) = ВРег("Сеанс") + Или ВРег(ИмяОграничения) = ВРег("Уровень") Тогда Продолжить; // Интервал и особые ограничения уже выводили КонецЕсли; // Для некоторых ограничений меняем представление Если ВРег(ИмяОграничения) = ВРег("ИмяПриложения") Тогда ИмяОграничения = НСтр("ru = 'Приложение'"); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("СтатусТранзакции") Тогда ИмяОграничения = НСтр("ru = 'Статус транзакции'"); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("ПредставлениеДанных") Тогда ИмяОграничения = НСтр("ru = 'Представление данных'"); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("РабочийСервер") Тогда ИмяОграничения = НСтр("ru = 'Рабочий сервер'"); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("ОсновнойIPПорт") Тогда ИмяОграничения = НСтр("ru = 'Основной IP порт'"); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("ВспомогательныйIPПорт") Тогда ИмяОграничения = НСтр("ru = 'Вспомогательный IP порт'"); - + ИначеЕсли ВРег(ИмяОграничения) = ВРег("РазделениеДанныхСеанса") Тогда + ИмяОграничения = НСтр("ru = 'Разделение данных сеанса'"); КонецЕсли; Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда ПредставлениеОтбора = ПредставлениеОтбора + "; "; КонецЕсли; ПредставлениеОтбора = ПредставлениеОтбора + ИмяОграничения; + КонецЦикла; Если ПустаяСтрока(ПредставлениеОтбора) Тогда @@ -320,8 +333,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Преобразование отбора. // @@ -349,17 +363,37 @@ // Процедура ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора) + КлючСтруктурыОтбора = ЭлементОтбора.Ключ; // Эта процедура вызывается, если элемент отбора является списком значений, // в отборе же должен быть массив значений. Преобразуем список в массив. - НовоеЗначение = Новый Массив; + Если ВРег(КлючСтруктурыОтбора) = ВРег("РазделениеДанныхСеанса") Тогда + НовоеЗначение = Новый Структура; + Иначе + НовоеЗначение = Новый Массив; + КонецЕсли; + + КлючСтруктурыОтбора = ЭлементОтбора.Ключ; Для Каждого ЗначениеИзСписка Из ЭлементОтбора.Значение Цикл - Если ВРег(ЭлементОтбора.Ключ) = ВРег("Уровень") Тогда + Если ВРег(КлючСтруктурыОтбора) = ВРег("Уровень") Тогда // Уровни сообщений представлены строкой, требуется преобразование в значение перечисления НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.УровеньЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение)); - ИначеЕсли ВРег(ЭлементОтбора.Ключ) = ВРег("СтатусТранзакции") Тогда + ИначеЕсли ВРег(КлючСтруктурыОтбора) = ВРег("СтатусТранзакции") Тогда // Статусы транзакций представлены строкой, требуется преобразование в значение перечисления НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.СтатусТранзакцииЗаписиЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение)); + ИначеЕсли ВРег(КлючСтруктурыОтбора) = ВРег("РазделениеДанныхСеанса") Тогда + МассивЗначенийРазделителей = Новый Массив; + КлючСтруктурыОтбора = "РазделениеДанныхСеанса"; + РазделениеДанныхМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначениеИзСписка.Значение, "="); + + ЗначенияРазделителя = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РазделениеДанныхМассив[1], ","); + Для Каждого ЗначениеРазделителя Из ЗначенияРазделителя Цикл + ЭлементОтбораПоРазделителю = Новый Структура("Значение, Использование", Число(ЗначениеРазделителя), Истина); + МассивЗначенийРазделителей.Добавить(ЭлементОтбораПоРазделителю); + КонецЦикла; + + НовоеЗначение.Вставить(РазделениеДанныхМассив[0], МассивЗначенийРазделителей); + Иначе НовоеЗначение.Добавить(ЗначениеИзСписка.Значение); КонецЕсли; @@ -484,3 +518,4 @@ КонецЕсли; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl index eeaadb048..2fcbc66d3 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура пакетной записи сообщений в журнал регистрации // @@ -16,3 +15,5 @@ ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 0697a4f98..6e2f7bbb0 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Записывает сообщение в журнал регистрации. // Если параметр ЗаписатьСобытия = Истина, то запись выполняется сразу (обращение к серверу). @@ -49,9 +48,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Открывает форму журнала регистрации с установленным отбором. // @@ -200,7 +199,15 @@ Если ТекущиеДанные = Неопределено Тогда Возврат Ложь; КонецЕсли; + ИмяКолонкиПредставления = ТекущийЭлемент.Имя; + + Если ИмяКолонкиПредставления = "ПредставлениеРазделенияДанныхСеанса" Тогда + ОтборЖурналаРегистрации.Удалить("ПредставлениеРазделенияДанныхСеанса"); + ОтборЖурналаРегистрации.Вставить("РазделениеДанныхСеанса", ТекущиеДанные.РазделениеДанныхСеанса); + ИмяКолонкиПредставления = "РазделениеДанныхСеанса"; + КонецЕсли; + Если КолонкиИсключения.Найти(ИмяКолонкиПредставления) <> Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -234,13 +241,19 @@ КонецЕсли; Если ИмяЭлементаОтбора = "Данные" Или // не списочные отборы, только 1 значение - ИмяЭлементаОтбора = "Комментарий" Или - ИмяЭлементаОтбора = "Транзакция" Или - ИмяЭлементаОтбора = "ПредставлениеДанных" Тогда + ИмяЭлементаОтбора = "Комментарий" Или + ИмяЭлементаОтбора = "Транзакция" Или + ИмяЭлементаОтбора = "ПредставлениеДанных" Тогда ОтборЖурналаРегистрации.Вставить(ИмяЭлементаОтбора, ЗначениеОтбора); Иначе - СписокОтбора = Новый СписокЗначений; - СписокОтбора.Добавить(ЗначениеОтбора, Представление); + + Если ИмяЭлементаОтбора = "РазделениеДанныхСеанса" Тогда + СписокОтбора = ЗначениеОтбора.Скопировать(); + Иначе + СписокОтбора = Новый СписокЗначений; + СписокОтбора.Добавить(ЗначениеОтбора, Представление); + КонецЕсли; + ОтборЖурналаРегистрации.Вставить(ИмяЭлементаОтбора, СписокОтбора); КонецЕсли; @@ -248,8 +261,9 @@ КонецФункции // УстановитьОтборПоЗначениюВТекущейКолонке -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. // @@ -277,8 +291,8 @@ ПараметрыФормы.Вставить("ОсновнойIPПорт", Данные.ОсновнойIPПорт); ПараметрыФормы.Вставить("ВспомогательныйIPПорт", Данные.ВспомогательныйIPПорт); - Если Данные.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда - ПараметрыФормы.Вставить("ПредставлениеРазделенияДанныхСеанса", Данные.ПредставлениеРазделенияДанныхСеанса); + Если Данные.Свойство("РазделениеДанныхСеанса") Тогда + ПараметрыФормы.Вставить("РазделениеДанныхСеанса", Данные.РазделениеДанныхСеанса); КонецЕсли; Если ЗначениеЗаполнено(Данные.АдресДанных) Тогда @@ -319,3 +333,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl new file mode 100644 index 000000000..f834f9955 --- /dev/null +++ b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl @@ -0,0 +1,44 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Заметки пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Помечает на удаление заметки, связанные с удаляемым объектом. +Процедура ПометитьНаУдалениеЗаметкиПоПредмету(Источник, Отказ) Экспорт + Если Не Источник.ПометкаУдаления Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | Заметки.Ссылка КАК Ссылка + |ИЗ + | Справочник.Заметки КАК Заметки + |ГДЕ + | Заметки.ПометкаУдаления = ЛОЖЬ + | И Заметки.Предмет = &Предмет"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Предмет", Источник.Ссылка); + + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ЗаметкаОбъект.УстановитьПометкуУдаления(Истина, Ложь); + ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); + Попытка + ЗаметкаОбъект.Записать(); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Установка пометки удаления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); + КонецПопытки; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo b/SSL/src/CommonModules/ЗаметкиПользователя/ЗаметкиПользователя.mdo similarity index 64% rename from SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo rename to SSL/src/CommonModules/ЗаметкиПользователя/ЗаметкиПользователя.mdo index c62af8075..f51d02c79 100644 --- a/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo +++ b/SSL/src/CommonModules/ЗаметкиПользователя/ЗаметкиПользователя.mdo @@ -1,9 +1,9 @@ - - ФизическиеЛица + + ЗаметкиПользователя ru - Физические лица + Заметки пользователя true true diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index 57d312ab5..cbd5a0b22 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -18,8 +17,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Переопределяет массив реквизитов объекта, относительно которых разрешается устанавливать время напоминания. // Например, можно скрыть те реквизиты с датами, которые являются служебными или не имеют смысла для @@ -65,8 +65,10 @@ ЗаметкаОбъект.Записать(); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации("Заметки пользователя. Установка пометки удаления", УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Установка пометки удаления'",ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); КонецПопытки; КонецЦикла; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index 3b136f670..b7ac9b692 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Принимает в качестве параметра форму объекта, к которому подключена подсистема, // и запрещает редактирование заданных реквизитов, @@ -13,10 +12,15 @@ // Параметры: // Форма - УправляемаяФорма - форма объекта. // ГруппаДляКнопкиЗапрета - ГруппаФормы - переопределяет стандартное размещение -// кнопки запрета в форме объекта. +// кнопки запрета в форме объекта. // ЗаголовокКнопкиЗапрета - Строка - заголовок кнопки. По умолчанию, "Разрешить редактирование реквизитов". +// Объект - Неопределено - взять объект из реквизита формы Объект. +// - ДанныеФормыСтруктура - (по типу объекта). // -Процедура ЗаблокироватьРеквизиты(Форма, ГруппаДляКнопкиЗапрета = Неопределено, ЗаголовокКнопкиЗапрета = "") Экспорт +Процедура ЗаблокироватьРеквизиты(Форма, ГруппаДляКнопкиЗапрета = Неопределено, ЗаголовокКнопкиЗапрета = "", + Объект = Неопределено) Экспорт + + ОписаниеОбъекта = ?(Объект = Неопределено, Форма.Объект, Объект); // Определение, форма уже подготовлена при предыдущем вызове ФормаПодготовлена = Ложь; @@ -29,10 +33,10 @@ КонецЦикла; Если Не ФормаПодготовлена Тогда - ПодготовитьФорму(Форма, Форма.Объект.Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета); + ПодготовитьФорму(Форма, ОписаниеОбъекта.Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета); КонецЕсли; - ЭтоНовыйОбъект = Форма.Объект.Ссылка.Пустая(); + ЭтоНовыйОбъект = ОписаниеОбъекта.Ссылка.Пустая(); // Блокировка редактирования элементов формы, связанных с заданными реквизитами Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл @@ -59,8 +63,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Настраивает форму объекта для работы подсистемы: // - добавляет реквизит ПараметрыЗапретаРедактированияРеквизитов для хранения внутренних данных @@ -178,3 +183,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index 84f8579c3..e63b6fdfb 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Разрешает редактирование заблокированных элементов формы, связанных с заданными реквизитами. // @@ -130,7 +129,6 @@ |Поиск мест использования может занять длительное время.'"); КонецЕсли; - Если МассивСсылок.Количество() = 1 Тогда ОбъектыПредставление = МассивСсылок[0]; Иначе @@ -274,8 +272,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура РазрешитьРедактированиеРеквизитовОбъектаПослеПредупреждения(ОбработкаПродолжения) Экспорт @@ -356,3 +355,5 @@ ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения, Истина); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 2a22005e3..5fdbdfbbf 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура выполняет подготовку формы настройки системы // для управления областями персональных данных, @@ -213,8 +212,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СведенияОПерсональныхДанных() @@ -330,3 +330,5 @@ Возврат НоваяОбласть; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index 8dd07a4b7..338837beb 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Осуществляет переход к форме подготовки согласие на обработку персональных данных, // используется как обработчик печати @@ -18,3 +17,5 @@ ОткрытьФорму("Обработка.СогласиеНаОбработкуПерсональныхДанных.Форма", Новый Структура("Субъекты", ПараметрыПечати.ОбъектыПечати), ПараметрыПечати.Форма); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index dc7bc7034..78d6ee5c7 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура обеспечивает сбор сведений о хранении данных, // относящихся к персональным @@ -65,3 +64,5 @@ КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl index f4a25e083..eb191bcc0 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Функция определяет перечень событий журнала регистрации // в соответствии с требованиями 152-ФЗ @@ -54,4 +53,6 @@ Возврат СписокПриложений; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index fd784143a..08a4f2dac 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает поддерживаемые версии интерфейса сообщений, поддерживаемые текущей // информационной базой @@ -253,8 +252,9 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет события подсистемы ОчередьЗаданий: // @@ -330,8 +330,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -495,3 +496,5 @@ Возврат ВыбраннаяВерсия; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl index 381d7329b..240750b1a 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов // принимаемых сообщений @@ -15,8 +14,6 @@ // Процедура ЗаполнитьОбработчикиПринимаемыхСообщений(МассивОбработчиков) Экспорт - - КонецПроцедуры // Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов @@ -27,8 +24,6 @@ // Процедура ЗаполнитьОбработчикиОтправляемыхСообщений(МассивОбработчиков) Экспорт - - КонецПроцедуры // Процедура вызывается при определении версии интерфейса сообщений, поддерживаемой как ИБ-корреспондентом, @@ -43,4 +38,6 @@ // Процедура ПриОпределенииВерсииИнтерфейсаКорреспондента(Знач ИнтерфейсСообщения, Знач ПараметрыПодключения, Знач ПредставлениеПолучателя, Результат) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index aa365fcb9..855881b9b 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -91,3 +90,5 @@ Параметры.Вставить("ИнформацияПриЗапуске", Новый ФиксированнаяСтруктура("Показывать", Показывать)); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl index 26f37c38a..00c71fbb2 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий @@ -19,3 +18,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index cc33bad15..e6be6b7f8 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Функция возвращает массив дат, которые отличается указанной даты на количество дней, // входящих в указанный график @@ -27,7 +26,7 @@ Если ТипЗнч(ГрафикРаботы) <> Тип("СправочникСсылка.ПроизводственныеКалендари") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); - Возврат МодульГрафикиРаботы.ПолучитьМассивДатПоГрафику( + Возврат МодульГрафикиРаботы.ДатыПоГрафику( ГрафикРаботы, ДатаОт, МассивДней, РассчитыватьСледующуюДатуОтПредыдущей, ВызыватьИсключение); КонецЕсли; КонецЕсли; @@ -231,6 +230,8 @@ | ПО (ГодыГрафика.Год = КалендарныеГрафики.Год) |ГДЕ | КалендарныеГрафики.ПроизводственныйКалендарь = &ГрафикРаботы"; + Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы); + Запрос.Выполнить(); Иначе // По графику работы Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда @@ -239,10 +240,6 @@ КонецЕсли; КонецЕсли; - Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы); - - Запрос.Выполнить(); - Запрос.Текст = "ВЫБРАТЬ | ДатыГрафика.ДатаГрафика, @@ -320,8 +317,8 @@ // График - ссылка на график работы или производственный календарь // НачальныеДаты - массив дат // ПолучатьПредшествующие - способ получения ближайшей даты, -// если Истина – определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, -// если Ложь – получаются даты не ранее начальной даты +// если Истина - определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, +// если Ложь - получаются даты не ранее начальной даты // ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного графика // ИгнорироватьНезаполненностьГрафика - булево, если Истина, то в любом случае будет возвращено соответствие. // Начальные даты, для которых не будет значений из-за незаполненности графика, включены не будут. @@ -453,6 +450,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); МодульГрафикиРаботы.СоздатьВТРасписанияРаботыНаПериод(МенеджерВременныхТаблиц, Графики, ДатаНачала, ДатаОкончания); + Возврат; КонецЕсли; ВызватьИсключение НСтр("ru = 'Подсистема «Графики работы» не обнаружена.'"); @@ -497,8 +495,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет служебные события подсистемы КалендарныеГрафики: // @@ -547,8 +546,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок // при загрузке данных в другую информационную базу. @@ -567,10 +567,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -584,7 +584,7 @@ КонецПроцедуры // Создает временную таблицу ВТПриращениеДней, в которой для каждого элемента из МассивДней -// формируется строка с индексом элемента и значением — количеством дней +// формируется строка с индексом элемента и значением - количеством дней // // Параметры // - МенеджерВременныхТаблиц, @@ -701,3 +701,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl index adc8e1a57..62f4161de 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается при изменении данных производственных календарей // @@ -15,4 +14,6 @@ // Процедура ПриОбновленииПроизводственныхКалендарей(УсловияОбновления) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index 72b9c2d21..bc649e445 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -103,8 +102,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -253,3 +253,5 @@ Возврат Истина; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl index 293c4bb82..710921d7f 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // // Сравнивает два XML и возвращает результат в виде таблицы значений. @@ -253,8 +252,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // // Преобразует список значений, оставляя из него только последние значения пар ключ-значение по ключу-представлению. @@ -422,8 +422,9 @@ Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВАдресЭлектроннойПочты(); Возврат XSLT_КонтрольПредставленияИКомментария( - XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), - Представление, Комментарий); + XSLT_КонтрольСтроковогоЗначенияПростогоТипа(Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), + Представление, Комментарий + ); КонецФункции // Преобразует структуру в XML контакной информации @@ -525,7 +526,7 @@ | | | - | " + МногострочнаяСтрокаXML(Представление) + " + | " + НормализованнаяСтрокаXML(Представление) + " | | | @@ -540,7 +541,7 @@ | | | - | " + МногострочнаяСтрокаXML(Комментарий) + " + | " + НормализованнаяСтрокаXML(Комментарий) + " | | | @@ -589,7 +590,7 @@ | | | - | " + МногострочнаяСтрокаXML(Представление) + " + | " + НормализованнаяСтрокаXML(Представление) + " | | | @@ -671,6 +672,35 @@ КонецФункции // Для работы с атрибутами содержащими переносы строк +// +// Параметры: +// Текст - Строка - Корректируемая строка XML +// +// Возвращаемое значение: +// Строка - Нормализованная строка +// Функция МногострочнаяСтрокаXML(Знач Текст) + Возврат СтрЗаменить(Текст, Символы.ПС, " "); + КонецФункции + +// Подготавливает строку для включения в текст XML, убирая спецсимволы +// +// Параметры: +// Текст - Строка - Корректируемая строка XML +// +// Возвращаемое значение: +// Строка - Нормализованная строка +// +Функция НормализованнаяСтрокаXML(Знач Текст) + + Результат = СтрЗаменить(Текст, """", """); + Результат = СтрЗаменить(Результат, "&", "&"); + Результат = СтрЗаменить(Результат, "'", "'"); + Результат = СтрЗаменить(Результат, "<", "<"); + Результат = СтрЗаменить(Результат, ">", ">"); + + Возврат МногострочнаяСтрокаXML(Результат); +КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl index 18274a222..6961bd80d 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // // Возвращает признак того, является ли строка данных контактной информации XML данными @@ -17,8 +16,9 @@ Возврат ЭтоСтрокаXML(Текст); КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // // Возвращает аккуратно построеное наименование через запятую по парам "Название" + "Сокращение" @@ -252,3 +252,5 @@ // Упрощенная проверка Возврат ТипЗнч(Текст) = Тип("Строка") И Лев(СокрЛ(Текст),1) = "<"; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl index 4e635e26d..5fbc53f4e 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Возвращает код дополнительной части адреса для сериализации // @@ -25,7 +24,7 @@ // Возвращает код дополнительной части адреса для почтового индекса // Функция КодСериализацииПочтовогоИндекса() Экспорт - Возврат КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации("Почтовый индекс"); + Возврат КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); КонецФункции // Возвращает XPath для почтового индекса @@ -129,41 +128,44 @@ Результат = Новый Массив; // Код, Наименование, Тип, Порядок, КодФИАС - Результат.Добавить(СтрокаОбъектаАдресации("1010", "Дом", 1, 1, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1020", "Владение", 1, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1030", "Домовладение", 1, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1050", "Корпус", 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1060", "Строение", 2, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1080", "Литера", 2, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1070", "Сооружение", 2, 4, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1040", "Участок", 2, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); - Результат.Добавить(СтрокаОбъектаАдресации("2010", "Квартира", 3, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", "Офис", 3, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("2040", "Бокс", 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("2020", "Помещение", 3, 4)); - Результат.Добавить(СтрокаОбъектаАдресации("2050", "Комната", 3, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); // Наши сокращения для поддержки обратной совместимости при парсинге - Результат.Добавить(СтрокаОбъектаАдресации("2010", "кв.", 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", "оф.", 3, 7)); + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); // Уточняющие объекты - Результат.Добавить(СтрокаОбъектаАдресации("10100000", "Почтовый индекс")); - Результат.Добавить(СтрокаОбъектаАдресации("10200000", "Адресная точка")); - Результат.Добавить(СтрокаОбъектаАдресации("10300000", "Садовое товарищество")); - Результат.Добавить(СтрокаОбъектаАдресации("10400000", "Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента")); - Результат.Добавить(СтрокаОбъектаАдресации("10500000", "Промышленная зона")); - Результат.Добавить(СтрокаОбъектаАдресации("10600000", "Гаражно-строительный кооператив")); - Результат.Добавить(СтрокаОбъектаАдресации("10700000", "Территория")); + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) Возврат Новый Структура("Код, Наименование, Тип, Порядок, КодФИАС, Сокращение, Ключ", Код, Наименование, Тип, Порядок, КодФИАС, НРег(Наименование), ВРег(Наименование)); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl index cfba6dcda..4d2295228 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Устарело. Необходимо использовать УправлениеКонтактнойИнформацией.ПредыдущийФорматКонтактнойИнформацииXML // @@ -18,8 +17,9 @@ Возврат УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(Данные, ВидКонтактнойИнформации); КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Возвращает структуру с полем "ДанныеВыбора", содержащую список для автоподбора населенного пункта // по иерархическому представлению младший-старший @@ -68,15 +68,16 @@ // по иерархическому представлению младший-старший // // Параметры: -// Текст - строка автоподбора -// СкрыватьНеактуальныеАдреса - флаг того, что неактуальные адреса не должны попадать в автоподбор -// ВыбиратьСтрок - ограничение на количество результатов +// Текст - Строка - строка автоподбора +// СкрыватьНеактуальныеАдреса - Булево - флаг того, что неактуальные адреса не должны попадать в автоподбор +// ВыбиратьСтрок - Число - ограничение на количество результатов +// УточняющаяУлица - Строка - уточняющее представление улицы // -Функция НаселенныеПунктыПоПредставлению(Текст, СкрыватьНеактуальныеАдреса = Ложь, ВыбиратьСтрок = 50) Экспорт +Функция НаселенныеПунктыПоПредставлению(Знач Текст, Знач СкрыватьНеактуальныеАдреса = Ложь, Знач ВыбиратьСтрок = 50, Знач УточняющаяУлица = "") Экспорт Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); Если Вариант = "КЛАДР" Тогда - Возврат НаселенныеПунктыПоПредставлениюКЛАДР(Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок); + Возврат НаселенныеПунктыПоПредставлениюКЛАДР(Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок, УточняющаяУлица); КонецЕсли; // Нет подсистемы классификатора @@ -201,7 +202,6 @@ Возврат Неопределено; КонецФункции - // Возвращает структуру, описывающую населенный пункт в иерархии младший-старший // для текущего адресного классификатора. Имена ключей структуры зависят от // классификатора @@ -811,27 +811,26 @@ // Функция ПочтовыйИндексАдреса(XDTOАдрес, НовоеЗначение = Неопределено) Экспорт + АдресРФ = РоссийскийАдрес(XDTOАдрес); + Если АдресРФ = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если НовоеЗначение = Неопределено Тогда // Чтение - АдресРФ = РоссийскийАдрес(XDTOАдрес); - Если АдресРФ = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Результат = АдресРФ.Получить( КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса() ); Если Результат <> Неопределено Тогда Результат = Результат.Значение; КонецЕсли; - Возврат Результат; КонецЕсли; // Запись КодИндекса = КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииПочтовогоИндекса(); - ЗаписьИндекса = XDTOАдрес.Получить( КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса() ); + ЗаписьИндекса = АдресРФ.Получить( КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса() ); Если ЗаписьИндекса = Неопределено Тогда - ЗаписьИндекса = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип) ); + ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип) ); ЗаписьИндекса.ТипАдрЭл = КодИндекса; КонецЕсли; @@ -1117,25 +1116,28 @@ // Возвращает перечень ошибок для адреса. // -// Параметры: -// XDTOАдрес - объект XDTO адреса или список значений полей или строка с именами и значениями -// ВидИнформации - ссылка на соответствующий вид контактной информации -// РезультатГруппами - если Истина, то возвращает массив групп ошибок, иначе - список. +// Параметры: +// XDTOАдрес - ОбъектXDTO, СписокЗначений, Строка - описание адреса +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на соответствующий вид контактной информации +// РезультатГруппами - Булево - если указана Истина, то будет возвращен массив групп ошибок, иначе - список значений. // -// Возвращаемое значение зависит от значения флага РезультатГруппами: -// а) Список значений, в котором Представление - описание ошибки, значение - XPath для поля -// б) Массив структур с полями: -// ТипОшибки - строка с наименованием ошибки. Возможные значения: -// - "ПредставлениеНеСоответствуетНаборуПолей" -// - "НеЗаполненыОбязательныеПоля" -// - "НеУказаныСокращенияПолей" -// - "НедопустимыеСимволыПолей" -// - "НеСоответствуетДлинаПолей" -// - "ОшибкиПоКлассификатору" -// Сообщение - подробный текст ошибки -// Поля - массив структур с полями: -// ИмяПоля - внутренний идентификатор элемента адреса -// Сообщение - подробный текст ошибки для поля +// Возвращаемое значение: +// Массив, СписокЗначений - в зависимости от параметра РезультатГруппами: +// Если параметр РезультатГруппами равен Ложь, то возвращается СписокЗначений в котором +// ** Представление - текст ошибки, +// ** Значение - XPath ошибочного поля +// Если параметр РезультатГруппами равен Истина, то возвращается массив, содержащий структуры с полями: +// ** ТипОшибки - Строка - наименование группы (типа) ошибки. Возможные значения: +// "ПредставлениеНеСоответствуетНаборуПолей" +// "НеЗаполненыОбязательныеПоля" +// "НеУказаныСокращенияПолей" +// "НедопустимыеСимволыПолей" +// "НеСоответствуетДлинаПолей" +// "ОшибкиПоКлассификатору" +// ** Сообщение - Строка - подробный текст ошибки +// ** Поля - Массив - содержит структуры описания ошибочных полей. Каждая структура имеет реквизиты: +// *** ИмяПоля - Строка - внутренний идентификатор ошибочного элемента адреса +// *** Сообщение - Строка - подробный текст ошибки для этого поля // Функция ОшибкиЗаполненияАдреса(XDTOАдрес, ВидИнформации, РезультатГруппами = Ложь) Экспорт @@ -1153,15 +1155,40 @@ Возврат ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); КонецЕсли; + // Отдельно проверяем пустой адрес, если необходимо его заполнение + Если Не XDTOКонтактнаяИнформацияЗаполнена(АдресРФ) Тогда + // Адрес пуст + Если ВидИнформации.ОбязательноеЗаполнение Тогда + // Но должен быть заполнен + ТекстОшибки = НСтр("ru = 'Адрес не заполнен.'"); + + Если РезультатГруппами Тогда + Результат = Новый Массив; + Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив, + "НеЗаполненыОбязательныеПоля", ТекстОшибки + )); + Иначе + Результат = Новый СписокЗначений; + Результат.Добавить("/", ТекстОшибки); + КонецЕсли; + + Возврат Результат + КонецЕсли; + + // Адрес пуст и не должен быть заполнен - считаем его корректным + Возврат ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); + КонецЕсли; + ВсеОшибки = ОбщиеГруппыОшибокЗаполненияАдреса(АдресРФ, ВидИнформации); ПроверятьКлассификатор = Истина; Для Каждого Группа Из ВсеОшибки Цикл - Если Найти("НеУказаныСокращенияПолей, НедопустимыеСимволыПолей", Группа.ТипОшибки) Тогда + Если Найти("НеУказаныСокращенияПолей, НедопустимыеСимволыПолей", Группа.ТипОшибки) > 0 Тогда + // Некорректные данные в полях, проверять их по классификатору нет смысла ПроверятьКлассификатор = Ложь; Прервать; - КонецЕсли - КонецЦикла; + КонецЕсли + КонецЦикла; ОшибкиКлассификатора = Новый СписокЗначений; Если ПроверятьКлассификатор Тогда @@ -1416,19 +1443,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт - ), "Населенный пункт"); + ), НСтр("ru = 'Населенный пункт'")); КонецЕсли; Если СтрДлина(НаселенныйПункт) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Название населенного пункта ""%1"" должно быть короче 50 символов.'"), НаселенныйПункт - ), "Населенный пункт"); + ), НСтр("ru = 'Населенный пункт'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы.'"), НаселенныйПункт - ), "Населенный пункт"); + ), НСтр("ru = 'Населенный пункт'")); КонецЕсли; КонецЕсли; @@ -1561,6 +1588,8 @@ Результат = Новый Массив; Результат.Добавить("МОСКВА Г"); Результат.Добавить("САНКТ-ПЕТЕРБУРГ Г"); + Результат.Добавить("БАЙКОНУР Г"); + Результат.Добавить("СЕВАСТОПОЛЬ Г"); Возврат Результат; КонецФункции @@ -1865,13 +1894,35 @@ КартинкаНеактуальности = БиблиотекаКартинок.КонтактнаяИнформацияНеактуально; КартинкаАктуальности = Неопределено; + УникальныеПредставления = Новый Соответствие; + Пока Выборка.Следующий() Цикл ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( Выборка.НаселенныеПунктыНаименование, Выборка.НаселенныеПунктыСокращение, Выборка.ГородаНаименование, Выборка.ГородаСокращение, Выборка.РайоныНаименование, Выборка.РайоныСокращение, Выборка.РегионыНаименование, Выборка.РегионыСокращение); - + + // Одинаковые наименования дополняем почтовым индексом и альтернативными наименованиями + ПредставлениеВСписке = ПолноеНаименование; + Если УникальныеПредставления[ПредставлениеВСписке] <> Неопределено Тогда + ПочтовыйИндекс = СокрЛП(Выборка.Индекс); + Если ПустаяСтрока(ПочтовыйИндекс) Тогда + Описание = ""; + Иначе + Описание = СтрЗаменить(НСтр("ru = 'индекс: %1'"), "%1", ПочтовыйИндекс); + КонецЕсли; + АльтернативныеНазвания = СокрЛП(Выборка.АльтернативныеНазвания); + Если Не ПустаяСтрока(АльтернативныеНазвания) Тогда + Описание = Описание + ", " + АльтернативныеНазвания; + КонецЕсли; + + Если Не ПустаяСтрока(Описание) Тогда + ПредставлениеВСписке = ПредставлениеВСписке + " (" + Описание + ")"; + КонецЕсли; + КонецЕсли; + УникальныеПредставления[ПредставлениеВСписке] = Истина; + Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); Пометка = Истина; @@ -1883,12 +1934,14 @@ КонецЕсли; Если ПредупреждатьОНеактуальных Тогда - ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, - Новый Структура("Код, Представление, МожноЗагружатьРегион", - Выборка.Код, ПолноеНаименование, Выборка.МожноЗагружатьРегион - )), ПолноеНаименование, Пометка, Картинка); + ДанныеВыбора.Добавить( + Новый Структура("Предупреждение, Значение", + ТекстПредупреждения, Новый Структура("Код, Представление, МожноЗагружатьРегион", Выборка.Код, ПолноеНаименование, Выборка.МожноЗагружатьРегион) + ), + ПредставлениеВСписке, Пометка, Картинка + ); Иначе - ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); + ДанныеВыбора.Добавить(ПолноеНаименование, ПредставлениеВСписке, Пометка, Картинка); КонецЕсли; КонецЦикла; @@ -1913,10 +1966,31 @@ КартинкаНеактуальности = БиблиотекаКартинок.КонтактнаяИнформацияНеактуально; КартинкаАктуальности = Неопределено; + УникальныеПредставления = Новый Соответствие; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - Выборка.Наименование, Выборка.Сокращение); + ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование(Выборка.Наименование, Выборка.Сокращение); + + // Одинаковые наименования дополняем почтовым индексом и альтернативными наименованиями + ПредставлениеВСписке = ПолноеНаименование; + Если УникальныеПредставления[ПредставлениеВСписке] <> Неопределено Тогда + ПочтовыйИндекс = СокрЛП(Выборка.Индекс); + Если ПустаяСтрока(ПочтовыйИндекс) Тогда + Описание = ""; + Иначе + Описание = СтрЗаменить(НСтр("ru = 'индекс: %1'"), "%1", ПочтовыйИндекс); + КонецЕсли; + АльтернативныеНазвания = СокрЛП(Выборка.АльтернативныеНазвания); + Если Не ПустаяСтрока(АльтернативныеНазвания) Тогда + Описание = Описание + ", " + АльтернативныеНазвания; + КонецЕсли; + + Если Не ПустаяСтрока(Описание) Тогда + ПредставлениеВСписке = ПредставлениеВСписке + " (" + Описание + ")"; + КонецЕсли; + КонецЕсли; + УникальныеПредставления[ПредставлениеВСписке] = Истина; Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); @@ -1929,22 +2003,23 @@ КонецЕсли; Если ПредупреждатьОНеактуальных Тогда - ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, - Новый Структура("Код, Представление", - Выборка.Код, ПолноеНаименование - )), ПолноеНаименование, Пометка, Картинка); + ДанныеВыбора.Добавить( + Новый Структура("Предупреждение, Значение", + ТекстПредупреждения, Новый Структура("Код, Представление", Выборка.Код, ПолноеНаименование) + ), + ПредставлениеВСписке, Пометка, Картинка + ); Иначе - ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); + ДанныеВыбора.Добавить(ПолноеНаименование, ПредставлениеВСписке, Пометка, Картинка); КонецЕсли; КонецЦикла; - Возврат Новый Структура("СлишкомМногоДанных, ДанныеВыбора", - Выборка.Количество() > ВыбиратьСтрок, ДанныеВыбора); + Возврат Новый Структура("СлишкомМногоДанных, ДанныеВыбора", Выборка.Количество() > ВыбиратьСтрок, ДанныеВыбора); КонецФункции -Функция НаселенныеПунктыПоПредставлениюКЛАДР(Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок) +Функция НаселенныеПунктыПоПредставлениюКЛАДР(Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок, УточняющаяУлица) // В противоположность к "РезультатыАвтоПодбораНаселенногоПунктаКЛАДР" // 1) Разбиваем на части через "," @@ -1956,7 +2031,14 @@ ДополнительныхСтрокПоиска = ЧастиАдреса.ВГраница(); Если ДополнительныхСтрокПоиска < 0 Тогда + // Пустые исходные данные Возврат Результат; + ИначеЕсли ДополнительныхСтрокПоиска = 0 Тогда + ЧастьАдреса = ЧастиАдреса[0]; + Если ПустаяСтрока(ЧастьАдреса.Сокращение) И СтрДлина(ЧастьАдреса.Наименование) < 3 Тогда + // Недостаточно исходных данных + Возврат Результат; + КонецЕсли; КонецЕсли; МодульКЛАДР = СерверныйМодульКЛАДР(); @@ -2015,6 +2097,22 @@ )), ПолноеНаименование, Пометка, Картинка); КонецЦикла; + // Необходимость уточнения + ИндексПоследнегоЭлемента = ДанныеВыбора.Количество() - 1; + Если ПустаяСтрока(УточняющаяУлица) = Неопределено Или ИндексПоследнегоЭлемента = 0 Тогда + Возврат Результат; + КонецЕсли; + + // Выбрасываем варианты у которых нет уточняющей улицы + Пока ИндексПоследнегоЭлемента >=0 Цикл + КодНаселенного = ДанныеВыбора[ИндексПоследнегоЭлемента].Значение.Значение.Код; + ВариантыУлиц = УлицыПоПредставлениюКЛАДР(КодНаселенного, УточняющаяУлица, СкрыватьНеактуальныеАдреса, 1); + Если ВариантыУлиц.ДанныеВыбора.Количество() = 0 Тогда + ДанныеВыбора.Удалить(ИндексПоследнегоЭлемента); + КонецЕсли; + ИндексПоследнегоЭлемента = ИндексПоследнегоЭлемента - 1; + КонецЦикла; + Возврат Результат; КонецФункции @@ -2022,9 +2120,17 @@ ЧастиАдреса = КонтактнаяИнформацияКлиентСервер.ЧастиАдреса(Текст); Результат = Новый Структура("СлишкомМногоДанных, ДанныеВыбора", Истина, Новый СписокЗначений); + КоличествоСтрокПоиска = ЧастиАдреса.ВГраница(); - Если КоличествоСтрокПоиска < 0 Тогда + Если КоличествоСтрокПоиска < 0 Тогда + // Пустые исходные данные Возврат Результат; + ИначеЕсли КоличествоСтрокПоиска = 0 Тогда + ЧастьАдреса = ЧастиАдреса[0]; + Если ПустаяСтрока(ЧастьАдреса.Сокращение) И СтрДлина(ЧастьАдреса.Наименование) < 3 Тогда + // Недостаточно исходных данных + Возврат Результат; + КонецЕсли; КонецЕсли; МодульКЛАДР = СерверныйМодульКЛАДР(); @@ -2052,7 +2158,7 @@ ТекстПредупреждения = ПредупреждениеНеактуальности; Пометка = Истина; Картинка = КартинкаНеактуальности; - Иначе + Иначе ТекстПредупреждения = Неопределено; Пометка = Ложь; Картинка = КартинкаАктуальности; @@ -2213,12 +2319,34 @@ КартинкаНеактуальности = БиблиотекаКартинок.КонтактнаяИнформацияНеактуально; КартинкаАктуальности = Неопределено; + УникальныеПредставления = Новый Соответствие; + ДанныеВыбора = Новый СписокЗначений; Пока Выборка.Следующий() Цикл ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( Выборка.АдресаНаименование, Выборка.АдресаСокращение); - + + // Одинаковые наименования дополняем почтовым индексом и альтернативными наименованиями + ПредставлениеВСписке = ПолноеНаименование; + Если УникальныеПредставления[ПредставлениеВСписке] <> Неопределено Тогда + ПочтовыйИндекс = СокрЛП(Выборка.Индекс); + Если ПустаяСтрока(ПочтовыйИндекс) Тогда + Описание = ""; + Иначе + Описание = СтрЗаменить(НСтр("ru = 'индекс: %1'"), "%1", ПочтовыйИндекс); + КонецЕсли; + АльтернативныеНазвания = СокрЛП(Выборка.АльтернативныеНазвания); + Если Не ПустаяСтрока(АльтернативныеНазвания) Тогда + Описание = Описание + ", " + АльтернативныеНазвания; + КонецЕсли; + + Если Не ПустаяСтрока(Описание) Тогда + ПредставлениеВСписке = ПредставлениеВСписке + " (" + Описание + ")"; + КонецЕсли; + КонецЕсли; + УникальныеПредставления[ПредставлениеВСписке] = Истина; + Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); Пометка = Истина; @@ -2234,12 +2362,17 @@ ДанныеСтроки = Новый Структура( "Код, Представление, ПолноеНаименование, Наименование, Сокращение, МожноЗагружатьРегион", Выборка.Код, ПолноеНаименование, ПолноеНаименование, - Выборка.АдресаНаименование, Выборка.АдресаСокращение, Выборка.МожноЗагружатьРегион); + Выборка.АдресаНаименование, Выборка.АдресаСокращение, Выборка.МожноЗагружатьРегион + ); + + ДанныеВыбора.Добавить( + Новый Структура("Предупреждение, Значение", ТекстПредупреждения, ДанныеСтроки), + ПредставлениеВСписке, Пометка, Картинка + ); - ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, ДанныеСтроки), - ПолноеНаименование, Пометка, Картинка); Иначе - ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); + ДанныеВыбора.Добавить(ПолноеНаименование, ПредставлениеВСписке, Пометка, Картинка); + КонецЕсли; КонецЦикла; @@ -2286,7 +2419,7 @@ РеквизитыПроверки = СписокРеквизитовАдресаКЛАДР(); - СущностьПоляРегион = "Субъект РФ"; + СущностьПоляРегион = НСтр("ru = 'Субъект РФ'"); ИмяРеквизитаРегион = "Регион"; ПутьXPathРегион = РеквизитыПроверки[ИмяРеквизитаРегион].ПутьXPath; @@ -2346,65 +2479,75 @@ Функция КодОбъектаПоЧастямАдресаКЛАДР(ЧастиАдреса, СкрыватьНеактуальные = Ложь) Перем ЗначениеЧастиАдреса; - // Проверяем от младшего к старшему - Улица = ""; - Если ЧастиАдреса.Свойство("Улица", ЗначениеЧастиАдреса) Тогда - Если ЗначениеЧастиАдреса.Свойство("КодКлассификатора") И ЗначениеЗаполнено(ЗначениеЧастиАдреса.КодКлассификатора) Тогда - Возврат ЗначениеЧастиАдреса.КодКлассификатора; - КонецЕсли; - Улица = СокрЛП(ЗначениеЧастиАдреса.Значение); - КонецЕсли; - - НаселенныйПункт = ""; - Если ЧастиАдреса.Свойство("НаселенныйПункт", ЗначениеЧастиАдреса) Тогда - Если ЗначениеЧастиАдреса.Свойство("КодКлассификатора") И ЗначениеЗаполнено(ЗначениеЧастиАдреса.КодКлассификатора) Тогда - Возврат ЗначениеЧастиАдреса.КодКлассификатора; - КонецЕсли; - НаселенныйПункт = СокрЛП(ЗначениеЧастиАдреса.Значение); - КонецЕсли; - - Город = ""; - Если ЧастиАдреса.Свойство("Город", ЗначениеЧастиАдреса) Тогда - Если ЗначениеЧастиАдреса.Свойство("КодКлассификатора") И ЗначениеЗаполнено(ЗначениеЧастиАдреса.КодКлассификатора) Тогда - Возврат ЗначениеЧастиАдреса.КодКлассификатора; - КонецЕсли; - Город = СокрЛП(ЗначениеЧастиАдреса.Значение); - КонецЕсли; - - Район = ""; - Если ЧастиАдреса.Свойство("Район", ЗначениеЧастиАдреса) Тогда - Если ЗначениеЧастиАдреса.Свойство("КодКлассификатора") И ЗначениеЗаполнено(ЗначениеЧастиАдреса.КодКлассификатора) Тогда - Возврат ЗначениеЧастиАдреса.КодКлассификатора; - КонецЕсли; - Район = СокрЛП(ЗначениеЧастиАдреса.Значение); - КонецЕсли; - - Регион = ""; - Если ЧастиАдреса.Свойство("Регион", ЗначениеЧастиАдреса) Тогда - Если ЗначениеЧастиАдреса.Свойство("КодКлассификатора") И ЗначениеЗаполнено(ЗначениеЧастиАдреса.КодКлассификатора) Тогда - Возврат ЗначениеЧастиАдреса.КодКлассификатора; - КонецЕсли; - Регион = СокрЛП(ЗначениеЧастиАдреса.Значение); - КонецЕсли; - - // Проверяем по классификатору МодульКЛАДР = СерверныйМодульКЛАДР(); Если МодульКЛАДР = Неопределено Тогда Возврат Неопределено; КонецЕсли; - Результат = МодульКЛАДР.ПроверитьСоответствиеАдресаКЛАДРу("", Регион, Район, Город, НаселенныйПункт, Улица); + Если ЧастиАдреса.Свойство("Улица", ЗначениеЧастиАдреса) Тогда + Улица = СокрЛП(ЗначениеЧастиАдреса.Значение); + Иначе + Улица = ""; + КонецЕсли; - Если Результат.Свойство("Улица", ЗначениеЧастиАдреса) Тогда - Возврат ЗначениеЧастиАдреса.Код; - ИначеЕсли Результат.Свойство("НаселенныйПункт", ЗначениеЧастиАдреса) Тогда - Возврат ЗначениеЧастиАдреса.Код; - ИначеЕсли Результат.Свойство("Город", ЗначениеЧастиАдреса) Тогда - Возврат ЗначениеЧастиАдреса.Код; - ИначеЕсли Результат.Свойство("Район", ЗначениеЧастиАдреса) Тогда - Возврат ЗначениеЧастиАдреса.Код; - ИначеЕсли Результат.Свойство("Регион", ЗначениеЧастиАдреса) Тогда - Возврат ЗначениеЧастиАдреса.Код; + Если ЧастиАдреса.Свойство("НаселенныйПункт", ЗначениеЧастиАдреса) Тогда + НаселенныйПункт = СокрЛП(ЗначениеЧастиАдреса.Значение); + Иначе + НаселенныйПункт = ""; + КонецЕсли; + + Если ЧастиАдреса.Свойство("Город", ЗначениеЧастиАдреса) Тогда + Город = СокрЛП(ЗначениеЧастиАдреса.Значение); + Иначе + Город = ""; + КонецЕсли; + + Если ЧастиАдреса.Свойство("Район", ЗначениеЧастиАдреса) Тогда + Район = СокрЛП(ЗначениеЧастиАдреса.Значение); + Иначе + Район = ""; + КонецЕсли; + + Если ЧастиАдреса.Свойство("Регион", ЗначениеЧастиАдреса) Тогда + Регион = СокрЛП(ЗначениеЧастиАдреса.Значение); + Иначе + Регион = ""; + КонецЕсли; + + ОбъектАдреса = Новый Структура("Индекс, НомерДома, НомерКорпуса"); + ОбъектАдреса.Вставить("Регион", Регион); + ОбъектАдреса.Вставить("Район", Район); + ОбъектАдреса.Вставить("Город", Город); + ОбъектАдреса.Вставить("НаселенныйПункт", НаселенныйПункт); + ОбъектАдреса.Вставить("Улица", Улица); + + РезультатыАнализа = МодульКЛАДР.АнализСоответствияАдресаКлассификатору(ОбъектАдреса); + Варианты = РезультатыАнализа.Варианты; + Если Не ПустаяСтрока(Улица) Тогда + Если Варианты.Найти(ЧастиАдреса.Улица.КодКлассификатора, "Код") <> Неопределено Тогда + Возврат ЧастиАдреса.Улица.КодКлассификатора; + КонецЕсли; + + ИначеЕсли Не ПустаяСтрока(НаселенныйПункт) Тогда + Если Варианты.Найти(ЧастиАдреса.НаселенныйПункт.КодКлассификатора, "Код") <> Неопределено Тогда + Возврат ЧастиАдреса.НаселенныйПункт.КодКлассификатора; + КонецЕсли; + + ИначеЕсли Не ПустаяСтрока(Город) Тогда + Если Варианты.Найти(ЧастиАдреса.Город.КодКлассификатора, "Код") <> Неопределено Тогда + Возврат ЧастиАдреса.Город.КодКлассификатора; + КонецЕсли; + + ИначеЕсли Не ПустаяСтрока(Район) Тогда + Если Варианты.Найти(ЧастиАдреса.Район.КодКлассификатора, "Код") <> Неопределено Тогда + Возврат ЧастиАдреса.Район.КодКлассификатора; + КонецЕсли; + + ИначеЕсли Не ПустаяСтрока(Регион) Тогда + Если Варианты.Найти(ЧастиАдреса.Регион.КодКлассификатора, "Код") <> Неопределено Тогда + Возврат ЧастиАдреса.Регион.КодКлассификатора; + КонецЕсли; + КонецЕсли; Возврат Неопределено; @@ -2463,20 +2606,20 @@ Функция ОпределитьПочтовыйИндексАдресаКЛАДР(XDTOАдресРФ) МодульКЛАДР = СерверныйМодульКЛАДР(); - Если МодульКЛАДР <> Неопределено Тогда - Данные = СтруктураКЛАДРПоАдресуРФ(XDTOАдресРФ); + Если МодульКЛАДР = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Данные = СтруктураКЛАДРПоАдресуРФ(XDTOАдресРФ); + + Индекс = МодульКЛАДР.ИндексАдреса( + Данные.Регион, Данные.Район, Данные.Город, Данные.НаселенныйПункт, Данные.Улица, + Данные.Дом, Данные.Корпус); - Индекс = МодульКЛАДР.ПолучитьИндекс( - Данные.Регион, Данные.Район, Данные.Город, Данные.НаселенныйПункт, Данные.Улица, - Данные.Дом, Данные.Корпус - ); - - Если Не ПустаяСтрока(Индекс) Тогда - Возврат СокрЛП(Индекс); - КонецЕсли; + Если Не ПустаяСтрока(Индекс) Тогда + Возврат СокрЛП(Индекс); КонецЕсли; - Возврат Неопределено; КонецФункции Функция АдресаПоИндексуКЛАДР(Знач Индекс, Знач ДополнительныеПараметрыПоиска = Неопределено) @@ -2798,26 +2941,86 @@ Возврат Результат; КонецФункции +// Возвращает флаг того, что переданных объект КИ содержит данные +// +// Параметры: +// XDTOДанные - ОбъектXDTO - проверяемые данные контактной информации +// +// Возвращаемое значение: +// Булево - флаг наличия данных +// Функция XDTOКонтактнаяИнформацияЗаполнена(Знач XDTOДанные) Экспорт - Если Не ПустаяСтрока(XDTOДанные.Представление) Тогда - Возврат Истина; + Возврат ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(XDTOДанные); + +КонецФункции + +// Параметры: Владелец - ОбъектXDTO, Неопределено +// +Функция ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(Знач Владелец) + + Если Владелец = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // Список игнорируемых при сравнении свойств текущего владельца - особенности контактной информации + Игнорируемые = Новый Соответствие; + + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + ТипВладельца = Владелец.Тип(); + + Если ТипВладельца = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + // Страна не влияет на заполнение при остальных пустых. Игнорируем + Игнорируемые.Вставить(Владелец.Свойства().Получить("Страна"), Истина); - ИначеЕсли Не ПустаяСтрока(XDTOДанные.Комментарий) Тогда - Возврат Истина; - - Иначе - Состав = XDTOДанные.Состав; - Если Состав <> Неопределено Тогда - Для Каждого СвойстваСостава Из XDTOДанные.Состав.Свойства() Цикл - Если Состав.Установлено(СвойстваСостава) Тогда - Возврат Истина; + ИначеЕсли ТипВладельца = ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда + // Игнорируем список с пустыми значениями и возможно непустыми типами + Список = Владелец.ПолучитьСписок("ДопАдрЭл"); + Если Список <> Неопределено Тогда + Для Каждого СвойствоСписка Из Список Цикл + Если ПустаяСтрока(СвойствоСписка.Значение) Тогда + Игнорируемые.Вставить(СвойствоСписка, Истина); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; + Для Каждого Свойство Из Владелец.Свойства() Цикл + + Если Не Владелец.Установлено(Свойство) Или Игнорируемые[Свойство] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Свойство.ВерхняяГраница > 1 Или Свойство.ВерхняяГраница < 0 Тогда + Список = Владелец.ПолучитьСписок(Свойство); + + Если Список <> Неопределено Тогда + Для Каждого ЭлементСписка Из Список Цикл + Если Игнорируемые[ЭлементСписка] = Неопределено + И ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(ЭлементСписка) + Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Значение = Владелец.Получить(Свойство); + Если ТипЗнч(Значение) = Тип("ОбъектXDTO") Тогда + Если ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(Значение) Тогда + Возврат Истина; + КонецЕсли; + + ИначеЕсли Не ПустаяСтрока(Значение) Тогда + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + Возврат Ложь; КонецФункции @@ -3351,3 +3554,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl index 1ed945f12..35a408dd3 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Разбирает представление контактной информации и возвращает строку XML со значениями полей // @@ -69,3 +68,4 @@ КонецЦикла; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl index b915a5a22..04d4fdb0a 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // // Возвращает имя события для регистрации в журнале событий контактной информации @@ -709,6 +708,7 @@ Преобразователь.ЗагрузитьИзСтроки(" | | | " + XSLT_ШаблоныСтроковыхФункций() + " | - | РОССИЯ + | РОССИЯ | | | | - | + | <КонтактнаяИнформация> | | | @@ -747,7 +747,7 @@ | | | - | + | | | | @@ -759,7 +759,7 @@ | | | - | + | | | | @@ -768,7 +768,7 @@ | | | - | + | | | | @@ -838,17 +838,20 @@ | | | - | + | + | | | | | - | + | + | | | | | - | + | + | | | | @@ -866,18 +869,34 @@ | | | + | | - | - | - | - | - | - | - | - | + | + | + | + | + | + | + | + | + | + | + | | - | - | + | + | + | + | + | + | + | + | + | + | + | + | + | + | | | | @@ -1170,3 +1189,4 @@ |"; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl index 8305b2fdd..f131064f0 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверить, что информационная база была обновлена динамически. // @@ -14,3 +13,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl index 10fdc3271..d69fc78d8 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Обработчик ожидания проверяет, что информационная база была обновлена динамически, и // сообщает об этом пользователю. @@ -13,4 +12,6 @@ КонтрольДинамическогоОбновленияКонфигурацииКлиент.ОбработчикОжиданияПроверкиДинамическогоОбновления(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl index b608fa555..c972e70d0 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Выполняется при интерактивном начале работы пользователя с областью данных или в локальном режиме. // Вызывается после завершения действий ПриНачалеРаботыСистемы. @@ -17,8 +16,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обработчик ожидания проверяет, что информационная база была обновлена динамически, и // сообщает об этом пользователю. @@ -31,7 +31,7 @@ ОтключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ"); - ТекстСообщения = НСтр("ru = 'В конфигурацию информационной базы внесены изменения. + ТекстСообщения = НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы). |Для дальнейшей работы рекомендуется перезапустить программу. |Перезапустить?'"); @@ -51,4 +51,6 @@ ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60); // раз в 20 минут -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/Module.bsl index 7e88e177e..407bb4af7 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -16,3 +15,5 @@ "КонтрольДинамическогоОбновленияКонфигурацииКлиент"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index 2bef582a6..e3908a171 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -189,11 +188,11 @@ КонецЕсли; КонецЦикла; - КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -573,3 +572,5 @@ НаборЗаписей.Записать(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl index 9a8f51b04..15cc76420 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДатаСеанса() + 30минут. // Момент времени смещен от текущего для использования функции из модуля с повторным использованием @@ -38,11 +37,9 @@ |УПОРЯДОЧИТЬ ПО | ВремяСобытия"; - Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); - Результат = НапоминанияПользователяСлужебный.ПолучитьМассивСтруктурИзТаблицы(Запрос.Выполнить().Выгрузить()); Возврат Результат; @@ -64,3 +61,5 @@ Текст, Интервал, Предмет, ИмяРеквизита); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index efec4fe42..39eef741c 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Открывает форму текущих напоминаний пользователя. // @@ -26,3 +25,5 @@ ПодключитьОбработчикОжидания("ПроверитьТекущиеНапоминания", ИнтервалСледующейПроверки, Истина); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index 49aa6f077..56a165486 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Запускает периодическую проверку текущих напоминаний пользователя. Процедура Включить() Экспорт @@ -51,8 +50,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Активизирует обработчик ожидания, проверяющий текущие напоминания пользователя. Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -68,8 +68,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Сбрасывает таймер проверки текущих напоминаний и выполняет проверку немедленно. Процедура СброситьТаймерПроверкиТекущихОповещений() Экспорт @@ -140,4 +141,6 @@ КонецЕсли; КонецЦикла; Возврат Неопределено; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl index 818687d71..17fe60ecc 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает форму текущих оповещений пользователя Функция ПолучитьФормуОповещения() Экспорт @@ -22,4 +21,6 @@ // Массив - таблица значений, сконвертированная в массив из структур, содержащих данные строк таблицы. Функция ПолучитьНапоминанияТекущегоПользователя() Экспорт Возврат НапоминанияПользователяВызовСервера.ПолучитьНапоминанияТекущегоПользователя(); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 13ce18e97..358017379 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает массив текстовых представлений стандартных интервалов времени Функция ПолучитьСтандартныеИнтервалыОповещения() Экспорт @@ -245,3 +244,5 @@ КонецЕсли; Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl index 048332380..c5df76f68 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Переопределяет массив реквизитов объекта, относительно которых разрешается устанавливать время напоминания. // Например, можно скрыть те реквизиты с датами, которые являются служебными или не имеют смысла для @@ -35,4 +34,6 @@ // Процедура ПриПолученииСтандартныхИнтерваловОповещения(СтандартныеИнтервалы) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index 1b193f5b6..0236294d6 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Объявляет события подсистемы НапоминанияПользователя: // @@ -54,8 +53,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает стандартные расписания для периодических напоминаний Функция ПолучитьСтандартныеРасписанияДляНапоминания() Экспорт @@ -213,7 +213,6 @@ | КОНЕЦ | И Календарь.НомерДняВПериоде = &ПериодПовтораДней | И Календарь.НомерНеделиВПериоде = &ПериодНедель"; - Выборка = Запрос.Выполнить().Выбрать(); @@ -619,7 +618,6 @@ КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -648,3 +646,5 @@ Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний())); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index 6f890a2e7..bf5409974 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет значение реквизита дополнительного упорядочивания у объекта. // @@ -53,8 +52,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция УОбъектаЕстьРеквизитДопУпорядочивания(Объект, Информация) @@ -76,3 +76,5 @@ КонецЕсли; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl index 94634cd19..b53ef23a2 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик команды "Переместить вверх" формы списка. // @@ -30,8 +29,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПереместитьЭлемент(СписокРеквизит, СписокЭлемент, Направление) @@ -162,3 +162,5 @@ Возврат Ложь; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index e00a8932f..b66c17a68 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполняет перемещение элемента вверх или вниз по списку. // @@ -315,12 +314,12 @@ Функция СписокСодержитОтборПоВладельцу(Список) - ОтборыПоВладельцу = Новый Массив; - ОтборыПоВладельцу.Добавить(Новый ПолеКомпоновкиДанных("Владелец")); - ОтборыПоВладельцу.Добавить(Новый ПолеКомпоновкиДанных("Owner")); + ТребуемыеОтборы = Новый Массив; + ТребуемыеОтборы.Добавить(Новый ПолеКомпоновкиДанных("Владелец")); + ТребуемыеОтборы.Добавить(Новый ПолеКомпоновкиДанных("Owner")); - Для Каждого Отбор Из Список.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл - Если ОтборыПоВладельцу.Найти(Отбор.ЛевоеЗначение) <> Неопределено Тогда + Для Каждого Отбор Из Список.КомпоновщикНастроек.ПолучитьНастройки().Отбор.Элементы Цикл + Если ТребуемыеОтборы.Найти(Отбор.ЛевоеЗначение) <> Неопределено Тогда Возврат Истина; КонецЕсли; КонецЦикла; @@ -331,12 +330,12 @@ Функция СписокСодержитОтборПоРодителю(Список) - ОтборыПоВладельцу = Новый Массив; - ОтборыПоВладельцу.Добавить(Новый ПолеКомпоновкиДанных("Родитель")); - ОтборыПоВладельцу.Добавить(Новый ПолеКомпоновкиДанных("Parent")); + ТребуемыеОтборы = Новый Массив; + ТребуемыеОтборы.Добавить(Новый ПолеКомпоновкиДанных("Родитель")); + ТребуемыеОтборы.Добавить(Новый ПолеКомпоновкиДанных("Parent")); - Для Каждого Отбор Из Список.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл - Если ОтборыПоВладельцу.Найти(Отбор.ЛевоеЗначение) <> Неопределено Тогда + Для Каждого Отбор Из Список.КомпоновщикНастроек.ПолучитьНастройки().Отбор.Элементы Цикл + Если ТребуемыеОтборы.Найти(Отбор.ЛевоеЗначение) <> Неопределено Тогда Возврат Истина; КонецЕсли; КонецЦикла; @@ -383,3 +382,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебныйВызовСервера/Module.bsl index 38bf1612d..9dd5b4a4d 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. эту функцию в модуле НастройкаПорядкаЭлементовСлужебный. Функция ИзменитьПорядокЭлементов(Ссылка, ДинамическийСписок, ОтображениеСписком, Направление) Экспорт @@ -14,3 +13,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl new file mode 100644 index 000000000..8e8cb52e0 --- /dev/null +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Выполняет асинхронную обработку оповещения о закрытии форм мастера настройки разрешений на +// использование внешних ресурсов при вызове через подключение обработчика ожидания. +// В качестве результата в обработчик передается значение КодВозвратаДиалога.ОК. +// +// Процедура не предназначена для непосредственного вызова. +// +Процедура ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсов() Экспорт + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовСинхронно(КодВозвратаДиалога.ОК); + +КонецПроцедуры + +// Выполняет асинхронную обработку оповещения о закрытии форм мастера настройки разрешений на +// использование внешних ресурсов при вызове через подключение обработчика ожидания. +// В качестве результата в обработчик передается значение КодВозвратаДиалога.ОК. +// +// Процедура не предназначена для непосредственного вызова. +// +Процедура ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсов() Экспорт + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовСинхронно(КодВозвратаДиалога.Отмена); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный.mdo b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный.mdo new file mode 100644 index 000000000..cf73b709d --- /dev/null +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный.mdo @@ -0,0 +1,11 @@ + + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный + + ru + Настройка разрешений на использование внешних ресурсов глобальный + + true + true + true + diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl new file mode 100644 index 000000000..9053f8fe4 --- /dev/null +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -0,0 +1,573 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Клиентские процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Применение запросов разрешений на использование внешних ресурсов +// + +// Применяет изменения разрешений в профилях безопасности в кластере серверов по сценарию. +// +// Параметры: +// ВидыОпераций - Структура, описывающая значения перечисления ОперацииСНаборамиРазрешений: +// * Ключ - Строка - имя значения перечисления, +// * Значение - ПеречислениеСсылка.ОперацииСНаборамиРазрешений, +// СценарийПримененияРазрешений - Массив(Структура) - сценарий применения изменений разрешений на +// использование профилей безопасности в кластере серверов. Значениями массива являются структуры +// со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(), +// ПараметрыАдминистрированияКластера - Структура - параметры администрирования кластера серверов, см. +// АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура - параметры администрирования информационной +// базы, см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +Процедура ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов(Знач ВидыОпераций, Знач СценарийПримененияРазрешений, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы = Неопределено) Экспорт + + Если ПараметрыАдминистрированияКластера.ТипПодключения = "COM" Тогда + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + КонецЕсли; + + ТребуютсяПараметрыАдминистрированияИБ = (ПараметрыАдминистрированияИнформационнойБазы <> Неопределено); + + АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИнформационнойБазы, + Истина, + ТребуютсяПараметрыАдминистрированияИБ); + + Для Каждого ЭлементСценария Из СценарийПримененияРазрешений Цикл + + Если ЭлементСценария.Операция = ВидыОпераций.Создание Тогда + АдминистрированиеКластераКлиентСервер.СоздатьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Назначение Тогда + АдминистрированиеКластераКлиентСервер.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ЭлементСценария.Профиль); + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Обновление Тогда + АдминистрированиеКластераКлиентСервер.УстановитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Удаление Тогда + Если АдминистрированиеКластераКлиентСервер.ПрофильБезопасностиСуществует(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль) Тогда + АдминистрированиеКластераКлиентСервер.УдалитьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль); + КонецЕсли; + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.УдалениеНазначения Тогда + АдминистрированиеКластераКлиентСервер.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ""); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Логика перехода между операциями мастера настройки разрешений на использование +// внешних ресурсов +// + +// Выполняет запуск мастера настройки разрешений на использование служебных ресурсов. +// +// Параметры: +// Идентификаторы - Массив(УникальныйИдентификатор) - идентификаторы запросов на использование внешних ресурсов, +// для применения которых вызывается мастер, +// ФормаВладелец - УправляемаяФорма или Неопределено - форма, по отношению которой мастер открывается в псевдо-модальном +// режиме, +// ОповещениеОЗакрытии - ОписаниеОповещения или Неопределено - описание оповещения, обработка которого должна быть +// выполнена после завершения работы мастера, +// РежимВключения - Булево - флаг того, что мастер вызывается при выполнении включения использования для информационной +// базы профилей безопасности, +// РежимОтключения - Булево - флаг того, что мастер вызывается при выполнении отключения использования для информационной +// базы профилей безопасности, +// РежимВосстановления - Булево - флаг того, что мастер вызывается для восстановления настроек профилей безопасности в +// кластере серверов (по текущим данным информационной базы), +// РежимПроверки - Булево - флаг того, что мастер вызывается для проверки завершения операция, в рамках которой до этого +// были применены запросы на использование внешних ресурсов. +// +// Результатом операции является открытие формы +// "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ИнициализацияЗапросаРазрешений", для которой в качестве +// описания оповещения о закрытии установлена процедура ПослеИнициализацииЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(). +// +Процедура НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Знач Идентификаторы, + ФормаВладелец, + ОповещениеОЗакрытии, + РежимВключения = Ложь, + РежимОтключения = Ложь, + РежимВосстановления = Ложь, + РежимПроверки = Ложь) Экспорт + + Если РежимВключения ИЛИ ОтображатьПомощникНастройкиРазрешений() Тогда + + Если ФормаВладелец <> Неопределено Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ФормаВладелец.УникальныйИдентификатор); + Иначе + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено); + КонецЕсли; + + Состояние = СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(); + Состояние.АдресХранилища = АдресХранилища; + Состояние.ИдентификаторыЗапросов = Идентификаторы; + Состояние.ОписаниеОповещения = ОповещениеОЗакрытии; + Состояние.ФормаВладелец = ФормаВладелец; + Состояние.РежимВключения = РежимВключения; + Состояние.РежимОтключения = РежимОтключения; + Состояние.РежимВосстановления = РежимВосстановления; + Состояние.РежимПроверки = РежимПроверки; + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("АдресХранилища", АдресХранилища); + ПараметрыФормы.Вставить("Идентификаторы", Идентификаторы); + ПараметрыФормы.Вставить("РежимВключения", Состояние.РежимВключения); + ПараметрыФормы.Вставить("РежимОтключения", Состояние.РежимОтключения); + ПараметрыФормы.Вставить("РежимВосстановления", Состояние.РежимВосстановления); + ПараметрыФормы.Вставить("РежимПроверки", Состояние.РежимПроверки); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПослеИнициализацииЗапросаРазрешенийНаИспользованиеВнешнихРесурсов", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + ОткрытьФорму( + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ИнициализацияЗапросаРазрешений", + ПараметрыФормы, + ФормаВладелец, + , + , + , + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца + ); + + Иначе + + ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(ОповещениеОЗакрытии); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет переход к диалогу настройки разрешений в профилях безопасности. +// +// Параметры: +// Результат - КодВозвратаДиалога - результат выполнения предыдущей операции мастера применения разрешений на использование +// внешних ресурсов (используемые значения - ОК и Отмена), +// Состояние - Структура, описывающая состояние мастера настройки разрешений (см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов))). +// +// Результатом операции является открытии формы +// "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов", для которой +// в качестве описания оповещения о закрытии установлена процедура ПослеНастройкиРазрешенийНаИспользованиеВнешнихРесурсов() или аварийное +// прерывание работы мастера. +// +Процедура ПослеИнициализацииЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("АдресХранилища", Состояние.АдресХранилища); + ПараметрыФормы.Вставить("РежимВосстановления", Состояние.РежимВосстановления); + ПараметрыФормы.Вставить("РежимПроверки", Состояние.РежимПроверки); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПослеНастройкиРазрешенийНаИспользованиеВнешнихРесурсов", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + ОткрытьФорму( + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов", + ПараметрыФормы, + Состояние.ФормаВладелец, + , + , + , + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца + ); + + Иначе + + ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Состояние.ОписаниеОповещения); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет переход к диалогу ожидания применения настроек профилей безопасности кластером серверов. +// +// Параметры: +// Результат - КодВозвратаДиалога - результат выполнения предыдущей операции мастера применения разрешений на использование +// внешних ресурсов (используемые значения - ОК, Пропустить и Отмена). Значение Пропустить используется в том случае, если +// внесение изменений в настройки профилей безопасности не вносилось, но запросы на использование внешних ресурсов должны +// считаться успешно примененными (например, в том случае, если использование всех запрашиваемых внешних ресурсов ранее уже +// предоставлялось), +// Состояние - Структура - описывающая состояние мастера настройки разрешений (см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов))). +// +// Результатом операции является открытии формы +// "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ЗавершениеЗапросаРазрешений", для которой +// в качестве описания оповещения о закрытии установлена процедура ПослеЗавершенияЗапросаРазрешенийНаИспользованиеВнешнихРесурсов() или аварийное +// прерывание работы мастера. +// +Процедура ПослеНастройкиРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт + + Если Результат = КодВозвратаДиалога.ОК ИЛИ Результат = КодВозвратаДиалога.Пропустить Тогда + + ЗапланироватьПроверкуПримененияРазрешенийПослеЗакрытияФормыВладельца( + Состояние.ФормаВладелец, + Состояние.ИдентификаторыЗапросов); + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("АдресХранилища", Состояние.АдресХранилища); + ПараметрыФормы.Вставить("РежимВосстановления", Состояние.РежимВосстановления); + + Если Результат = КодВозвратаДиалога.ОК Тогда + ПараметрыФормы.Вставить("Длительность", ДлительностьОжиданияПримененияИзменений()); + Иначе + ПараметрыФормы.Вставить("Длительность", 0); + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПослеЗавершенияЗапросаРазрешенийНаИспользованиеВнешнихРесурсов", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + ОткрытьФорму( + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ЗавершениеЗапросаРазрешений", + ПараметрыФормы, + ЭтотОбъект, + , + , + , + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца + ); + + Иначе + + ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Состояние.ОписаниеОповещения); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет завершение работы мастера применения разрешений на использование внешних ресурсов. +// +// Параметры: +// Результат - КодВозвратаДиалога - результат выполнения предыдущей операции мастера применения разрешений на использование +// внешних ресурсов (используемые значения - ОК и Отмена), +// Состояние - Структура, описывающая состояние мастера настройки разрешений (см. СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов))). +// +// Результатом операции является обработка описания оповещения, которое изначально было передано из формы, для которой +// мастер открывался в псевдо-модальном режиме. +// +Процедура ПослеЗавершенияЗапросаРазрешенийНаИспользованиеВнешнихРесурсов(Результат, Состояние) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПоказатьОповещениеПользователя(НСтр("ru = 'Настройка разрешений'"),, + НСтр("ru = 'Внесены изменения в настройки профилей безопасности в кластере серверов.'")); + + ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Состояние.ОписаниеОповещения); + + Иначе + + ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Состояние.ОписаниеОповещения); + + КонецЕсли; + +КонецПроцедуры + +// Асинхронно (по отношению к коду, из которого вызывался мастер) выполняет обработку описания оповещения, +// которое изначально было передано из формы, для которой мастер открывался в псевдо-модальном режиме, возвращая +// код возврата ОК. +// +// Параметры: +// ОписаниеОповещения - ОписаниеОповещения, которое было передано из вызывающего кода. +// +Процедура ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Знач ОписаниеОповещения) + + ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов = ОписаниеОповещения; + ПодключитьОбработчикОжидания("ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсов", 0.1, Истина); + +КонецПроцедуры + +// Асинхронно (по отношению к коду, из которого вызывался мастер) выполняет обработку описания оповещения, +// которое изначально было передано из формы, для которой мастер открывался в псевдо-модальном режиме, возвращая +// код возврата Отмена. +// +// Параметры: +// ОписаниеОповещения - ОписаниеОповещения, которое было передано из вызывающего кода. +// +Процедура ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовАсинхронно(Знач ОписаниеОповещения) + + ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов = ОписаниеОповещения; + ПодключитьОбработчикОжидания("ПрерватьНастройкуРазрешенийНаИспользованиеВнешнихРесурсов", 0.1, Истина); + +КонецПроцедуры + +// Синхронно (по отношению к коду, из которого вызывался мастер) выполняет обработку описания оповещения, +// которое изначально было передано из формы, для которой мастер открывался в псевдо-модальном режиме. +// +// Параметры: +// КодВозврата - КодВозвратаДиалога. +// +Процедура ЗавершитьНастройкуРазрешенийНаИспользованиеВнешнихРесурсовСинхронно(Знач КодВозврата) Экспорт + + ОповещениеОЗакрытии = ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов; + ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов = Неопределено; + Если ОповещениеОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозврата); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Логика вызова мастера настройки разрешений на использование внешних ресурсов для +// проверки завершения операций, в рамках которых ранее применялись запросы разрешений +// на использование внешних ресурсов +// + +// Планирует (с помощью подмены значения свойства формы ОписаниеОповещенияОЗакрытии) вызов мастера +// для проверки завершения операции после закрытия формы, из которой мастер вызывался. +// +// Параметры: +// ФормаВладелец - УправляемаяФорма или Неопределено - форма, после закрытия которой требуется выполнить +// проверку завершения операций, в рамках которых ранее применялись запросы разрешений на использование +// внешних ресурсов, +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов разрешений на +// использование внешних ресурсов, которые были применены в рамках операции, завершение которой проверяется. +// +// Результатом выполнения данной процедуры является вызов процедуры +// ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца() после закрытия формы, для которой в псевдо-модальном +// режиме открывался мастер настройки разрешений на использование внешних ресурсов. +// +Процедура ЗапланироватьПроверкуПримененияРазрешенийПослеЗакрытияФормыВладельца(ВладелецФормы, ИдентификаторыЗапросов) Экспорт + + Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда + + ИсходноеОписаниеОповещения = ВладелецФормы.ОписаниеОповещенияОЗакрытии; + Если ИсходноеОписаниеОповещения <> Неопределено Тогда + + Если ИсходноеОписаниеОповещения.Модуль = НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент + И ИсходноеОписаниеОповещения.ИмяПроцедуры = "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца" Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + Состояние = СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца(); + Состояние.ИдентификаторыЗапросов = ИдентификаторыЗапросов; + Состояние.ОписаниеОповещения = ИсходноеОписаниеОповещения; + + ОписаниеОповещенияПроверкиПримененияРазрешений = Новый ОписаниеОповещения( + "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + ВладелецФормы.ОписаниеОповещенияОЗакрытии = ОписаниеОповещенияПроверкиПримененияРазрешений; + + КонецЕсли; + +КонецПроцедуры + +// Запускает мастер в режиме проверки завершения операции, в рамках которой ранее применялись запросы +// разрешений на использование внешних ресурсов. +// +// Параметры: +// Результат - Произвольный, результат закрытия формы, для которой в псевдо-модальном режиме открывался мастер +// настройки разрешений на использование внешних ресурсов. В теле процедуры не используется, параметр требуется +// для назначения процедуры в качестве описания оповещения о закрытия формы. +// Состояние - Структура - описывающая состояние проверки завершения операции (см. +// СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца()). +// +// Результатом выполнения данной процедуры является запуск мастера настройки разрешений на использование +// внешних ресурсов в режиме проверки завершения операции, в рамках которой ранее применялись разрешения +// на использование внешних ресурсов (с штатным прохождением всех операций), после завершения работы которого +// будет вызвана обработка описания оповещения, в качестве которого установлена процедура +// ПослеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца(). +// +Процедура ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца(Результат, Состояние) Экспорт + + ОповещениеОЗакрытии = Новый ОписаниеОповещения( + "ПослеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Состояние.ИдентификаторыЗапросов, + , + ОповещениеОЗакрытии, + , + , + , + Истина); + +КонецПроцедуры + +// Выполняет оригинальное описание оповещения о закрытии формы-владельца, вместо которого выполнялся +// запуск мастера настройки разрешений на использование внешних ресурсов в режиме проверки завершения операции, +// в рамках которой ранее применялись запросы разрешений на использование внешних ресурсов. +// +// Параметры: +// Результат - Произвольный, результат закрытия форм мастера настройки разрешений на использование внешних +// ресурсов. В теле процедуры не используется, параметр требуется для назначения процедуры в качестве описания +// оповещения о закрытия формы. +// Состояние - Структура - описывающая состояние проверки завершения операции (см. +// СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца()). +// +// Результатом выполнения данной процедуры является завершение процесса проверки завершения операции, в рамках +// которой ранее применялись разрешения на использование внешних ресурсов. +// +Процедура ПослеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца(Результат, Состояние) Экспорт + + ОригинальноеОписаниеОповещенияОЗакрытии = Состояние.ОписаниеОповещения; + Если ОригинальноеОписаниеОповещенияОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОригинальноеОписаниеОповещенияОЗакрытии, Результат); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вызов мастера настройки разрешений на использование внешних ресурсов в +// специальных режимах +// + +// Вызывает мастер настройки разрешений на использование внешних ресурсов в режиме +// включения использования профилей безопасности для информационной базы. +// +// Параметры: +// ФормаВладелец - УправляемаяФорма - форма, которая должна блокироваться до окончания применения разрешений, +// ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений. +// +Процедура НачатьВключениеИспользованияПрофилейБезопасности(ФормаВладелец, ОповещениеОЗакрытии = Неопределено) Экспорт + + НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Новый Массив(), ФормаВладелец, ОповещениеОЗакрытии, Истина, Ложь, Ложь); + +КонецПроцедуры + +// Вызывает мастер настройки разрешений на использование внешних ресурсов в режиме +// отключения использования профилей безопасности для информационной базы. +// +// Параметры: +// ФормаВладелец - УправляемаяФорма - форма, которая должна блокироваться до окончания применения разрешений, +// ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений. +// +Процедура НачатьОтключениеИспользованияПрофилейБезопасности(ФормаВладелец, ОповещениеОЗакрытии = Неопределено) Экспорт + + НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Новый Массив(), ФормаВладелец, ОповещениеОЗакрытии, Ложь, Истина, Ложь); + +КонецПроцедуры + +// Вызывает мастер настройки разрешений на использование внешних ресурсов в режиме +// восстановления настроек профилей безопасности в кластере серверов по текущему +// состоянию информационной базы. +// +// Параметры: +// ФормаВладелец - УправляемаяФорма - форма, которая должна блокироваться до окончания применения разрешений, +// ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений. +// +Процедура НачатьВосстановлениеПрофилейБезопасности(ФормаВладелец, ОповещениеОЗакрытии = Неопределено) Экспорт + + НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Новый Массив(), ФормаВладелец, ОповещениеОЗакрытии, Ложь, Ложь, Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Проверяет необходимость отображения помощника настройки разрешений на использование +// внешних (относительно кластера серверов 1С:Предприятия) ресурсов. +// +// Возвращаемое значение: Булево. +// +Функция ОтображатьПомощникНастройкиРазрешений() + + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ОтображатьПомощникНастройкиРазрешений; + +КонецФункции + +// Конструктор структуры, которая используется для хранения состояния работы мастера +// настройки разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Структура - описание полей см. в теле функции. +// +Функция СостояниеЗапросаРазрешенийНаИспользованиеВнешнихРесурсов() + + Результат = Новый Структура(); + + // Идентификаторы запросов на использование внешних ресурсов, которые должны быть + // предоставлены - Массив(УникальныйИдентификатор). + Результат.Вставить("ИдентификаторыЗапросов", Новый Массив()); + + // Оригинальное описание оповещения, которое должно быть вызвано после того, как запрос + // разрешений будет применен. + Результат.Вставить("ОписаниеОповещения", Неопределено); + + // Адрес во временном хранилище, по которому размещаются данные, передаваемые между формами + Результат.Вставить("АдресХранилища", ""); + + // Форма, из которой первоначально было инициализировано применение запросов на использование + // внешних ресурсов + Результат.Вставить("ФормаВладелец"); + + // Режим включения - признак выполнения включения использования профилей безопасности + Результат.Вставить("РежимВключения", Ложь); + + // Режим отключения - признак выполнения отключения использования профилей безопасности + Результат.Вставить("РежимОтключения", Ложь); + + // Режим восстановления - признак выполнения восстановления разрешений в профилях + // безопасности (запрос разрешений выполняется "с чистого листа", игнорируя сохраненную + // информацию о ранее предоставленных разрешениях + Результат.Вставить("РежимВосстановления", Ложь); + + // Режим проверки - признак завершения операции, в рамках которой предоставлялись новые разрешения + // в профилях безопасности (например, в процессе записи элемента справочника были предоставлены разрешения + // в профилях безопасности, а дальнейшая запись элемента справочника не была завершена). + Результат.Вставить("РежимПроверки", Ложь); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, которая используется для хранения состояния проверки завершения +// операции, в рамках которой применялись запросы разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Структура - описание полей см. в теле функции. +// +Функция СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца() + + Результат = Новый Структура(); + + // Идентификаторы запросов на использование внешних ресурсов, при применении которых + // были предоставлены разрешения в профилях безопасности в кластере серверов (и для которых + // выполняется проверка завершения операции, в рамках которой было применены запросы на + // использование внешних ресурсов) - Массив(УникальныйИдентификатор). + Результат.Вставить("ИдентификаторыЗапросов", Новый Массив()); + + // Оригинальное описание оповещения формы-владельца, которое должно быть вызвано после + // выполнения проверки применения разрешений. + Результат.Вставить("ОписаниеОповещения", Неопределено); + + Возврат Результат; + +КонецФункции + +// Возвращает длительность ожидания применения изменений в настройках профилей безопасности +// в кластере серверов. +// +// Возвращаемое значение - Число - длительность ожидания применения изменений (в секундах). +// +Функция ДлительностьОжиданияПримененияИзменений() + + Возврат 20; // Интервал обновления rphost'ами текущих настроек профилей безопасности из rmngr. + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.mdo b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.mdo new file mode 100644 index 000000000..43495f242 --- /dev/null +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.mdo @@ -0,0 +1,10 @@ + + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент + + ru + Настройка разрешений на использование внешних ресурсов клиент + + true + true + diff --git a/SSL/src/CommonModules/НастройкиПользователейКлиент/Module.bsl b/SSL/src/CommonModules/НастройкиПользователейКлиент/Module.bsl index 48af08b00..c0431d92b 100644 --- a/SSL/src/CommonModules/НастройкиПользователейКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкиПользователейКлиент/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Предназначена для открытия переданного отчета или формы // @@ -183,6 +182,4 @@ Возврат ПояснениеКомуСкопированыНастройки; КонецФункции - - - +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index 8f3600acc..6606b55e7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -169,17 +168,19 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.ОбщиеДанные = Истина; + Обработчик.УправлениеОбработчиками = Истина; + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.ЗаполнитьОбработчикиРазделенныхДанных"; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.ОбщиеДанные = Истина; Обработчик.МонопольныйРежим = Ложь; Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.ЗаблокироватьКонечныеТочки"; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.МонопольныйРежим = Ложь; - Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьКодыПредопределенныхУзлов"; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.2.0"; Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.ПеренестиНастройкиОбменаВСтруктуруДанных_2_1_2_0"; @@ -198,6 +199,27 @@ КонецПроцедуры +// Заполняет обработчик разделенных данных, зависимый от изменения неразделенных данных. +// +// Параметры: +// Обработчики - ТаблицаЗначений, Неопределено - см. описание +// функции НоваяТаблицаОбработчиковОбновления общего модуля +// ОбновлениеИнформационнойБазы.. +// В случае прямого вызова (не через механизм обновления +// версии ИБ) передается Неопределено. +// +Процедура ЗаполнитьОбработчикиРазделенныхДанных(Параметры = Неопределено) Экспорт + + Если Параметры <> Неопределено И ЕстьНезаполненныеКодыПредопределенныхУзлов() Тогда + Обработчики = Параметры.РазделенныеОбработчики; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьКодыПредопределенныхУзлов"; + КонецЕсли; + +КонецПроцедуры + // Для каждого из используемых в модели сервиса планов обмена // определяет и устанавливает код и наименование предопределенного узла. // Код генерируется на основании значения разделителя. @@ -217,6 +239,7 @@ ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); ЭтотУзелОбъект.Наименование = СокрЛП(СформироватьНаименованиеПредопределенногоУзла()); + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("Загрузка"); ЭтотУзелОбъект.Записать(); КонецЕсли; @@ -594,6 +617,40 @@ Возврат Результат; КонецФункции +// Проверяет наличие предопределенных узлов с незаполненными кодами +// +Функция ЕстьНезаполненныеКодыПредопределенныхУзлов() + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + Если ОбменДаннымиВМоделиСервисаПовтИсп.ЭтоПланОбменаСинхронизацииДанных(ПланОбмена.Имя) Тогда + + ТекстЗапроса = "ВЫБРАТЬ + | ПланОбмена.Код + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | ПланОбмена.Код = """""; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПланОбмена.Имя); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + // // Для внутреннего использования @@ -686,7 +743,7 @@ // Обработчик снятия константы ИспользоватьСинхронизациюДанных. // // Параметры: -// Отказ – Булево. Флаг отказа отключения синхронизации данных. +// Отказ - Булево. Флаг отказа отключения синхронизации данных. // Если установить в значение Истина, то синхронизация отключена не будет. // Процедура ПриОтключенииСинхронизацииДанных(Отказ) Экспорт @@ -697,8 +754,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -856,8 +914,7 @@ АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы()); Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы", АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы()); - Параметры.Вставить("ОткрытьПомощникНастройкиАвтономногоРабочегоМеста", - АвтономнаяРаботаСлужебный.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста()); + КонецПроцедуры // Заполняет структуру параметров, необходимых для работы клиентского кода @@ -907,11 +964,15 @@ ТекстЗапроса = "ВЫБРАТЬ | СообщенияОбменаДанными.ИдентификаторСообщения КАК ИдентификаторСообщения, - | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла, + | СообщенияОбменаДанными.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные |ИЗ | РегистрСведений.СообщенияОбменаДаннымиОбластейДанных КАК СообщенияОбменаДанными |ГДЕ - | СообщенияОбменаДанными.ДатаЗакладкиСообщения < &ДатаАктуальности"; + | СообщенияОбменаДанными.ДатаЗакладкиСообщения < &ДатаАктуальности + | + |УПОРЯДОЧИТЬ ПО + | ОбластьДанныхВспомогательныеДанные"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяУниверсальнаяДата() - 60 * 60 * 24); @@ -919,6 +980,9 @@ Выборка = Запрос.Выполнить().Выбрать(); + ПараметрыСеанса.ОбластьДанныхИспользование = Истина; + ОбластьДанныхВспомогательныеДанные = Неопределено; + Пока Выборка.Следующий() Цикл ПолноеИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), Выборка.ИмяФайла); @@ -936,6 +1000,13 @@ КонецПопытки; КонецЕсли; + Если ОбластьДанныхВспомогательныеДанные <> Выборка.ОбластьДанныхВспомогательныеДанные Тогда + + ОбластьДанныхВспомогательныеДанные = Выборка.ОбластьДанныхВспомогательныеДанные; + ПараметрыСеанса.ОбластьДанныхЗначение = ОбластьДанныхВспомогательныеДанные; + + КонецЕсли; + // Удаляем информацию о файле сообщения обмена из хранилища СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(Выборка.ИдентификаторСообщения)); @@ -943,6 +1014,8 @@ КонецЦикла; + ПараметрыСеанса.ОбластьДанныхИспользование = Ложь; + КонецПроцедуры // Получение имени файла по его идентификатору из хранилища. @@ -998,10 +1071,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1012,10 +1085,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1025,7 +1098,6 @@ Объекты.Добавить(Метаданные.Константы.ИспользоватьАвтономнуюРаботуВМоделиСервиса); Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой); Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете); - Объекты.Добавить(Метаданные.Константы.НастройкаАвтономногоРабочегоМестаЗавершена); Объекты.Добавить(Метаданные.Константы.ПрефиксПоследнегоАвтономногоРабочегоМеста); Объекты.Добавить(Метаданные.Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы); Объекты.Добавить(Метаданные.Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы); @@ -1049,7 +1121,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1064,7 +1136,7 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выгрузке данных -// Корреспондент – ПланОбменаСсылка – узел плана обмена, для которого выполняется выгрузка данных +// Корреспондент - ПланОбменаСсылка - узел плана обмена, для которого выполняется выгрузка данных // Процедура ВыполнитьВыгрузкуДанных(Отказ, Знач Корреспондент) Экспорт @@ -1076,7 +1148,7 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при загрузке данных -// Корреспондент – ПланОбменаСсылка – узел плана обмена, для которого выполняется загрузка данных +// Корреспондент - ПланОбменаСсылка - узел плана обмена, для которого выполняется загрузка данных // Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач Корреспондент) Экспорт @@ -1403,11 +1475,11 @@ // Получает конечную точку для корреспондента. // Если конечная точка для корреспондента не задана то вызывает исключение. // -// Параметры: -// Корреспондент. Тип: ПланОбменаСсылка. Корреспондент, для которого необходимо получить конечную точку. +// Параметры: +// Корреспондент - ПланОбменаСсылка - корреспондент, для которого необходимо получить конечную точку. // -// Возвращаемое значение: -// Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка корреспондента. +// Возвращаемое значение: +// ПланОбменаСсылка.ОбменСообщениями - конечная точка корреспондента. // Функция КонечнаяТочкаКорреспондента(Знач Корреспондент) Экспорт @@ -1655,7 +1727,7 @@ КонецПроцедуры // Удаляет настройку синхронизации -Функция УдалитьНастройкуОбмена(ИмяПланаОбмена, ОбластьДанныхКорреспондента) Экспорт +Функция УдалитьНастройкуОбмена(ИмяПланаОбмена, ОбластьДанныхКорреспондента, Сессия = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1830,6 +1902,15 @@ КонецФункции +// Событие для журнала регистрации синхронизации данных +// +Функция СобытиеЖурналаРегистрацииСинхронизацииДанных() Экспорт + + Возврат НСтр("ru = 'Обмен данными в модели сервиса.Синхронизация данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + Функция СобытиеЖурналаРегистрацииСессииОбменаСообщениямиСистемы() Возврат НСтр("ru = 'Обмен данными в модели сервиса.Сессии обмена сообщениями системы'", @@ -2260,3 +2341,66 @@ ПередЗаписьюОбщихДанных(Источник, Отказ); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Получение ссылок на общие страницы информации сервиса + +// Возвращает адрес ссылки по идентификатору +// Для внутреннего использования +// +Функция АдресСсылкиИзИнформационногоЦентра(Знач Идентификатор) + Результат = ""; + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ИнформационныйЦентр") Тогда + Возврат Результат; + КонецЕсли; + + МодульИнформационныйЦентрСервер = ОбщегоНазначения.ОбщийМодуль("ИнформационныйЦентрСервер"); + + УстановитьПривилегированныйРежим(Истина); + Попытка + ДанныеСсылки = МодульИнформационныйЦентрСервер.КонтекстнаяСсылкаПоИдентификатору(Идентификатор); + Исключение + // Если метода нет + ДанныеСсылки = Неопределено; + КонецПопытки; + + Если ДанныеСсылки <> Неопределено Тогда + Результат = ДанныеСсылки.Адрес; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает адрес ссылки на статью по настройке тонкого клиента +// Для внутреннего использования +// +Функция АдресИнструкцииПоНастройкеТонкогоКлиента() Экспорт + + Возврат АдресСсылкиИзИнформационногоЦентра("ИнструкцияПоНастройкеТонкогоКлиента"); + +КонецФункции + +// Возвращает адрес ссылки на статью по резервному копированию +// Для внутреннего использования +// +Функция АдресИнструкцииПоВыполнениюРезервногоКопирования() Экспорт + + Возврат АдресСсылкиИзИнформационногоЦентра("ИнструкцияПоВыполнениюРезервногоКопирования"); + +КонецФункции + +// Обработчик фонового задания для регистрации дополнительных данных и обмена +// Для внутреннего использования +// +// Параметры: +// ОбработкаВыгрузки - ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - инициализированный объект +// АдресХранилища - Строка, УникальныйИдентификатор - Адрес в хранилище для получения результата +// +Процедура ОбменПоТребованию(Знач ОбработкаВыгрузки, Знач АдресХранилища = Неопределено) Экспорт + + Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса.ОбменПоТребованию(ОбработкаВыгрузки, АдресХранилища); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl index 7859ce3ea..ba131e563 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обработчик запуска клиентского сеанса приложения. // Если запущен сеанс для автономного рабочего места, то выводит пользователю оповещение @@ -22,16 +21,13 @@ Если ПараметрыРаботыКлиента.ЭтоАвтономноеРабочееМесто Тогда ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = - ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы - ; - Если ПараметрыРаботыКлиента.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста Тогда - - ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.НастройкаНаСторонеАвтономногоРабочегоМеста"); - - ИначеЕсли ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы Тогда + ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы; + + Если ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Автономная работа'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", НСтр("ru = 'Рекомендуется синхронизировать данные с приложением в Интернете.'"), БиблиотекаКартинок.Информация32); + КонецЕсли; КонецЕсли; @@ -49,25 +45,36 @@ Если ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = Истина И СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыАвтономнойРаботы.СинхронизацияССервисомДавноНеВыполнялась Тогда + ПараметрыПредупреждения = Новый Структура; + + ТекстПодсказки = НСтр("ru = 'В некоторых случаях синхронизация данных может занять длительное время: + | - медленный канал связи; + | - большой объем данных; + | - доступно обновление приложения в Интернете.'"); + + // Подсказка как поясняющий текст + ПараметрыПредупреждения.Вставить("РасширеннаяПодсказка", ТекстПодсказки); + + // Флаг действия ТекстФлажка = НСтр("ru = 'Синхронизировать данные с приложением в Интернете'"); + ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); + ПараметрыПредупреждения.Вставить("Приоритет", 80); + ПараметрыФормы = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыАвтономнойРаботы.ПараметрыФормыВыполненияОбменаДанными; ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыФормы); ПараметрыФормы.Вставить("ЗавершениеРаботыСистемы", Истина); ПараметрыФормы = Новый ФиксированнаяСтруктура(ПараметрыФормы); + ДействиеПриУстановленномФлажке = Новый Структура; ДействиеПриУстановленномФлажке.Вставить("Форма", "Обработка.ВыполнениеОбменаДанными.Форма.Форма"); ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", ПараметрыФормы); - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); ПараметрыПредупреждения.Вставить("ДействиеПриУстановленномФлажке", ДействиеПриУстановленномФлажке); - ПараметрыПредупреждения.Вставить("Приоритет", 80); Предупреждения.Добавить(ПараметрыПредупреждения); КонецЕсли; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -96,3 +103,5 @@ ПриЗавершенииРаботыСистемы(Предупреждения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index 480fcf804..bd92fa3ea 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает ссылку на объект WSПрокси сервиса обмена версии 1.0.6.5. // @@ -112,3 +111,5 @@ Возврат ПланыОбменаСинхронизацииДанных().Найти(ИмяПланаОбмена) <> Неопределено; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index efe68e65b..0cbbee972 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -3,8 +3,7 @@ // Модуль предназначен для работы с внешним соединением //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Выполняет выгрузку данных для узла информационной базы во временный файл // (Только для внутреннего использования) @@ -191,3 +190,5 @@ Возврат ОбменДаннымиСервер.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 0e698f613..b85a86f24 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -3,19 +3,18 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции -// Точка входа для выполнения итерации обмена данными – загрузки и выгрузки данных для узла плана обмена +// Точка входа для выполнения итерации обмена данными - загрузки и выгрузки данных для узла плана обмена // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется итерация обмена данными -// ВыполнятьЗагрузку – Булево (необязательный) – флаг необходимости выполнять загрузку данных. Значение по умолчанию - Истина -// ВыполнятьВыгрузку – Булево (необязательный) – флаг необходимости выполнять выгрузку данных. Значение по умолчанию – Истина -// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется итерация обмена данными +// ВыполнятьЗагрузку - Булево (необязательный) - флаг необходимости выполнять загрузку данных. Значение по умолчанию - Истина +// ВыполнятьВыгрузку - Булево (необязательный) - флаг необходимости выполнять выгрузку данных. Значение по умолчанию - Истина +// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, // который будет использоваться в процессе обмена данными. -// Значение по умолчанию – значение из РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; +// Значение по умолчанию - значение из РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; // если в РС значение не задано, то значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE // Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, @@ -334,7 +333,7 @@ // ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, для которого необходимо получить состояние. // // Возвращаемое значение: -// Строка – состояние выполнения фонового задания: +// Строка - состояние выполнения фонового задания: // "Активно" - задание выполняется; // "Завершено" - задание выполнено успешно; // "ЗавершеноАварийно" - задание завершено аварийно или отменено пользователем. @@ -345,7 +344,7 @@ Результат = ?(ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания), "Завершено", "Активно"); Исключение Результат = "ЗавершеноАварийно"; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + ЗаписьЖурналаРегистрации( НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; @@ -379,7 +378,7 @@ Исключение Результат = "Failed"; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; @@ -410,7 +409,7 @@ Исключение Результат = "Failed"; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; @@ -485,13 +484,11 @@ Если НаборЗаписейКонфликта.Количество() = 1 Тогда - Если НовоеЗначениеПометкиУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник, "ПометкаУдаления") Тогда НаборЗаписейКонфликта[0].ПометкаУдаления = НовоеЗначениеПометкиУдаления; НаборЗаписейКонфликта.Записать(); - Иначе НаборЗаписейКонфликта.Очистить(); @@ -509,11 +506,15 @@ // Процедура УдалитьНастройкуСинхронизации(Знач УзелИнформационнойБазы) Экспорт - ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + ОбъектУзла = УзелИнформационнойБазы.ПолучитьОбъект(); + Если ОбъектУзла = Неопределено Тогда + Возврат; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); - - УзелИнформационнойБазы.ПолучитьОбъект().Удалить(); + ОбъектУзла.Удалить(); КонецПроцедуры @@ -605,13 +606,13 @@ КонецФункции // Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. -// Ключ структуры – имя свойства; Значение – значение свойства объекта. +// Ключ структуры - имя свойства; Значение - значение свойства объекта. // // Параметры: -// Ссылка – ссылка на объект ИБ, значения свойств которого требуется получить -// -// Возвращаемое значение: -// Тип: Структура. Структура со значениями свойств объекта. +// Ссылка - ссылка на объект ИБ, значения свойств которого требуется получить +// +// Возвращаемое значение: +// Структура - структура со значениями свойств объекта. // Функция ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт @@ -640,11 +641,8 @@ // Возвращает значение параметра сеанса ПравилаРегистрацииОбъектов, полученное в привилегированном режиме. // -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Тип: ХранилищеЗначения. Значение параметра сеанса ПравилаРегистрацииОбъектов. +// Возвращаемое значение: +// ХранилищеЗначения - значение параметра сеанса ПравилаРегистрацииОбъектов. // Функция ПараметрыСеансаПравилаРегистрацииОбъектов() Экспорт @@ -657,10 +655,10 @@ // Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить // // Возвращаемое значение: -// Массив – список всех узлов заданного плана обмена. +// Массив - список всех узлов заданного плана обмена. // Функция ВсеУзлыПланаОбмена(Знач ИмяПланаОбмена) Экспорт @@ -712,10 +710,10 @@ // то считается, что он используется. // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе. +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. // // Возвращаемое значение: -// Тип: Булево. Истина – план обмена используется, Ложь – нет. +// Булево - Истина, если план обмена используется, Ложь - нет. // Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена) Экспорт @@ -727,11 +725,11 @@ // Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда» // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать всегда» +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Массив - узлы плана обмена, для которых установлен признак «Выгружать всегда» // Функция ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт @@ -747,12 +745,12 @@ // Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» // // Параметры: -// Ссылка – ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» +// Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Массив - узлы плана обмена, для которых установлен признак «Выгружать при необходимости» // Функция ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт @@ -794,8 +792,8 @@ // Возвращает список приоритетных данных обмена // -// Возвращаемое значение: -// Тип: Массив. Коллекция ссылок на выгруженные приоритетные данные обмена +// Возвращаемое значение: +// Массив - коллекция ссылок на выгруженные приоритетные данные обмена. // Функция ПриоритетныеДанныеОбмена() Экспорт @@ -840,7 +838,7 @@ // Выгрузка не разрешена, если в правилах регистрации объектов плана обмена таблица отмечена как НеВыгружать // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – ссылка на анализируемый узел плана обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на анализируемый узел плана обмена // // Возвращаемое значение: // Массив, содержащий полные имена объектов метаданных @@ -857,4 +855,15 @@ КонецЦикла; Возврат Результат; -КонецФункции \ No newline at end of file +КонецФункции + +// Создает запрос на очистку разрешений для узла (при удалении) +// +Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Знач УзелИнформационнойБазы) Экспорт + + Запрос = РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелИнформационнойБазы); + Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl index 9b751d4bd..9dc9bc6a2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполняет проверку необходимости обновления конфигурации базы данных в подчиненном узле. // @@ -37,4 +36,6 @@ ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла", 60 * 60, Истина); // раз в час -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 5240eeec6..d1998d7e7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -3,13 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура-обработчик закрытия формы настройки узлов плана обмена // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура +// Форма - управляемая форма, из которой вызвана процедура // Процедура ФормаНастройкиУзловКомандаЗакрытьФорму(Форма) Экспорт @@ -18,14 +17,15 @@ КонецЕсли; Форма.Модифицированность = Ложь; - Форма.Закрыть(ВыгрузитьКонтекстИзФормы(Форма)); + ЗаполнитьДанныеСтруктуры(Форма); + Форма.Закрыть(Форма.Контекст); КонецПроцедуры // Процедура-обработчик закрытия формы настройки узла плана обмена // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура +// Форма - управляемая форма, из которой вызвана процедура // Процедура ФормаНастройкиУзлаКомандаЗакрытьФорму(Форма) Экспорт @@ -36,7 +36,7 @@ // Процедура-обработчик закрытия формы настройки значений по умолчанию узла плана обмена // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура +// Форма - управляемая форма, из которой вызвана процедура // Процедура ФормаНастройкиЗначенийПоУмолчаниюКомандаЗакрытьФорму(Форма) Экспорт @@ -47,8 +47,8 @@ // Процедура-обработчик закрытия формы настройки узла плана обмена // // Параметры: -// Отказ – флаг отказа от закрытия формы -// Форма – управляемая форма, из которой вызвана процедура +// Отказ - флаг отказа от закрытия формы +// Форма - управляемая форма, из которой вызвана процедура // Процедура ФормаНастройкиПередЗакрытием(Отказ, Форма) Экспорт @@ -67,7 +67,7 @@ // Открывает форму помощника настройки обмена данными для заданного плана обмена // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, для которого необходимо открыть помощник +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, для которого необходимо открыть помощник // Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, НастройкаОбменаССервисом = Ложь) Экспорт @@ -217,16 +217,18 @@ Возврат Истина; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные функции-свойства // Возвращает максимально допустимое количество полей, -// которые отображаются в помощнике сопоставления объектов ИБ. +// которые отображаются в помощнике сопоставления объектов ИБ. // -// Тип: Число +// Возвращаемое значение: +// Число - максимальное количество полей для сопоставления. // Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт @@ -364,9 +366,15 @@ Если ПараметрыРаботыКлиента.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла Тогда - ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , ВариантОткрытияОкна.ОтдельноеОкно); + Для Каждого Окно Из ПолучитьОкна() Цикл + Если Окно.Основное Тогда + Окно.Активизировать(); + Прервать; + КонецЕсли; + КонецЦикла; + ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ, Истина); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , , , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецЕсли; КонецПроцедуры @@ -391,6 +399,7 @@ // Экспортные служебные процедуры и функции // Только для внутреннего использования. +// Процедура ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(Параметры, Неопределен) Экспорт Форма = ОткрытьФорму( @@ -767,7 +776,6 @@ КонецПроцедуры - // Открывает форму записи регистра сведений по заданному отбору Процедура ОткрытьФормуЗаписиРегистраСведенийПоОтбору( Отбор, @@ -856,7 +864,7 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; -// Владелец – форма-владелец для открываемой формы; +// Владелец - форма-владелец для открываемой формы; // Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец, АдресДляВосстановленияПароляУчетнойЗаписи = "", Знач АвтоматическаяСинхронизация = Неопределено) Экспорт @@ -879,7 +887,7 @@ ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, Владелец, УзелИнформационнойБазы); + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, Владелец, УзелИнформационнойБазы, , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; @@ -889,7 +897,7 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; -// Владелец – форма-владелец для открываемой формы; +// Владелец - форма-владелец для открываемой формы; // Процедура ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(УзелИнформационнойБазы, Владелец) Экспорт @@ -897,7 +905,7 @@ // в качестве параметра формы задаем узел информационной базы; ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы); - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, Владелец, УзелИнформационнойБазы); + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, Владелец, УзелИнформационнойБазы, , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -905,7 +913,7 @@ // // Параметры: // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; -// Владелец – форма-владелец для открываемой формы; +// Владелец - форма-владелец для открываемой формы; // Процедура ОбработкаКомандыНастроитьРасписаниеВыполненияОбмена(УзелИнформационнойБазы, Владелец) Экспорт @@ -965,10 +973,20 @@ Если Ответ = КодВозвратаДиалога.Да Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, УзелИнформационнойБазы); + Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелИнформационнойБазы); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы)Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ОбменДаннымиВызовСервера.УдалитьНастройкуСинхронизации(УзелИнформационнойБазы); - Оповестить("Запись_УзелПланаОбмена"); - ЗакрытьФормы("ФормаУзла"); КонецЕсли; @@ -1006,6 +1024,35 @@ КонецПроцедуры +// Регистрирует обработчик для открытия новой формы сразу после закрытия текущей +// +Процедура ОткрытьФормуПослеЗакрытияТекущей(ТекущаяФорма, Знач ИмяФормы, Знач Параметры = Неопределено, Знач ПараметрыОткрытия = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИмяФормы", ИмяФормы); + ДополнительныеПараметры.Вставить("Параметры", Параметры); + ДополнительныеПараметры.Вставить("ПараметрыОткрытия", ПараметрыОткрытия); + + ДополнительныеПараметры.Вставить("ПредыдущееОповещениеОЗакрытии", ТекущаяФорма.ОписаниеОповещенияОЗакрытии); + + ТекущаяФорма.ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ОбработчикОткрытияФормыПослеЗакрытияТекущей", ЭтотОбъект, ДополнительныеПараметры); +КонецПроцедуры + +// Отложенное открытие +Процедура ОбработчикОткрытияФормыПослеЗакрытияТекущей(Знач РезультатЗакрытия, Знач ДополнительныеПараметры) Экспорт + + ПараметрыОткрытия = Новый Структура("Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ДополнительныеПараметры.ПараметрыОткрытия); + ОткрытьФорму(ДополнительныеПараметры.ИмяФормы, ДополнительныеПараметры.Параметры, + ПараметрыОткрытия.Владелец, ПараметрыОткрытия.Уникальность, ПараметрыОткрытия.Окно, ПараметрыОткрытия.НавигационнаяСсылка, ПараметрыОткрытия.ОписаниеОповещенияОЗакрытии, ПараметрыОткрытия.РежимОткрытияОкна + ); + + Если ДополнительныеПараметры.ПредыдущееОповещениеОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ПредыдущееОповещениеОЗакрытии, РезультатЗакрытия); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем @@ -1076,54 +1123,6 @@ //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции -Функция ВыгрузитьКонтекстИзФормы(Форма) - - // возвращаемое значение функции - Контекст = Новый Структура; - - Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.Реквизиты); - - Для Каждого Реквизит Из Реквизиты Цикл - - Если Найти(Реквизит, ".") > 0 Тогда - - Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизит, "."); - - Если Колонки.Количество() > 0 Тогда - - ИмяТаблицы = Колонки[0]; - - Колонки.Удалить(0); - - КолонкиСтрокой = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Колонки); - - Таблица = Новый Массив; - - Для Каждого Элемент Из Форма[ИмяТаблицы] Цикл - - СтрокаТаблицы = Новый Структура(КолонкиСтрокой); - - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); - - Таблица.Добавить(СтрокаТаблицы); - - КонецЦикла; - - Контекст.Вставить(ИмяТаблицы, Таблица) - - КонецЕсли; - - Иначе - - Контекст.Вставить(Реквизит, Форма[Реквизит]) - - КонецЕсли; - - КонецЦикла; - - Возврат Контекст; -КонецФункции - Процедура ПриЗакрытииФормыНастройкиУзлаПланаОбмена(Форма, ИмяРеквизитаФормы) Если Не Форма.ПроверитьЗаполнение() Тогда @@ -1307,7 +1306,105 @@ Возврат Ложь; КонецФункции + +Процедура ЗаполнитьДанныеСтруктуры(Форма) + //Сохраним введенные значения этой программы + СтруктураНастроек = Форма.Контекст.НастройкаОтборовНаУзле; + СоответсвующиеРеквизиты = Форма.ИменаРеквизитов; + + Для Каждого ЭлементНастройки Из СтруктураНастроек Цикл + + Если СоответсвующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда + + ИмяРеквизита = СоответсвующиеРеквизиты[ЭлементНастройки.Ключ]; + + Иначе + + ИмяРеквизита = ЭлементНастройки.Ключ; + + КонецЕсли; + + РеквизитФормы = Форма[ИмяРеквизита]; + + Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда + + ИмяТаблицы = ЭлементНастройки.Ключ; + + Таблица = Новый Массив; + + Для Каждого Элемент Из Форма[ИмяРеквизита] Цикл + + СтрокаТаблицы = Новый Структура("Использовать, Представление, УникальныйИдентификаторСсылки"); + + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); + + Таблица.Добавить(СтрокаТаблицы); + + КонецЦикла; + + СтруктураНастроек.Вставить(ИмяТаблицы, Таблица); + + Иначе + + СтруктураНастроек.Вставить(ЭлементНастройки.Ключ, Форма[ИмяРеквизита]); + + КонецЕсли; + + КонецЦикла; + + Форма.Контекст.НастройкаОтборовНаУзле = СтруктураНастроек; + + //Сохраним введенные значения другой программы + СтруктураНастроек = Форма.Контекст.НастройкаОтборовНаУзлеБазыКорреспондента; + СоответсвующиеРеквизиты = Форма.ИменаРеквизитовБазыКорреспондента; + + Для Каждого ЭлементНастройки Из СтруктураНастроек Цикл + + Если СоответсвующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда + + ИмяРеквизита = СоответсвующиеРеквизиты[ЭлементНастройки.Ключ]; + + Иначе + + ИмяРеквизита = ЭлементНастройки.Ключ; + + КонецЕсли; + + РеквизитФормы = Форма[ИмяРеквизита]; + + Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда + + ИмяТаблицы = ЭлементНастройки.Ключ; + + Таблица = Новый Массив; + + Для Каждого Элемент Из Форма[ИмяРеквизита] Цикл + + СтрокаТаблицы = Новый Структура("Использовать, Представление, УникальныйИдентификаторСсылки"); + + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); + + Таблица.Добавить(СтрокаТаблицы); + + КонецЦикла; + + СтруктураНастроек.Вставить(ИмяТаблицы, Таблица); + + Иначе + + СтруктураНастроек.Вставить(ЭлементНастройки.Ключ, Форма[ИмяРеквизита]); + + КонецЕсли; + + КонецЦикла; + + Форма.Контекст.НастройкаОтборовНаУзлеБазыКорреспондента = СтруктураНастроек; + + Форма.Контекст.Вставить("ОписаниеКонтекста", Форма.ОписаниеКонтекста); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ИНТЕРАКТИВНОГО ДОПОЛНЕНИЯ ВЫГРУЗКИ // @@ -1361,4 +1458,4 @@ Возврат Истина; КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl index 6896e9eec..1fae3cebd 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования // @@ -47,3 +46,5 @@ Возврат Ложь; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index 51729bfc5..55a4fb70f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает префикс кодов и номеров объектов информационной базы по умолчанию // @@ -23,9 +22,9 @@ // Определяет список планов обмена, которые используют функционал подсистемы обмена данными. // // Параметры: -// ПланыОбменаПодсистемы. Тип: Массив. -// Массив планов обмена конфигурации, которые используют функционал подсистемы обмена данными. -// Элементами массива являются объекты метаданных планов обмена. +// ПланыОбменаПодсистемы - Массив - Массив планов обмена конфигурации, +// которые используют функционал подсистемы обмена данными. +// Элементами массива являются объекты метаданных планов обмена. // // Пример тела процедуры: // @@ -50,36 +49,34 @@ // // Параметры: // -// СтандартнаяОбработка. Тип: Булево. -// В данный параметр передается признак выполнения стандартной (системной) обработки события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная -// обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию: Истина. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная +// обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию - Истина. // -// Получатель (только для чтения). Тип: ПланОбменаСсылка. -// Узел плана обмена, для которого выполняется выгрузка данных. +// Получатель - ПланОбменаСсылка - Узел плана обмена, для которого выполняется выгрузка данных. // -// ИмяФайлаСообщения (только для чтения). Тип: Строка. -// Имя файла, в который необходимо выполнить выгрузку данных. Если этот параметр заполнен, то система ожидает, -// что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. -// Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. +// ИмяФайлаСообщения - Строка - Имя файла, в который необходимо выполнить выгрузку данных. +// Если этот параметр заполнен, то система ожидает, +// что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. +// Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. // -// ДанныеСообщения. Тип: Произвольный. -// Если параметр ИмяФайлаСообщения пустой, то система ожидает, что данные будут выгружены в этот параметр. +// ДанныеСообщения - Произвольный - Если параметр ИмяФайлаСообщения пустой, +// то система ожидает, что данные будут выгружены в этот параметр. // -// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. -// Определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. -// При необходимости в обработчике следует реализовать логику установки транзакционных блокировок на выгружаемые данные. -// Значение параметра задается в настройках подсистемы обмена данными. +// КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, +// которые помещаются в сообщение в рамках одной транзакции базы данных. +// При необходимости в обработчике следует реализовать логику +// установки транзакционных блокировок на выгружаемые данные. +// Значение параметра задается в настройках подсистемы обмена данными. // -// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. -// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации -// данных (ошибок, предупреждений, информации) с заданным именем события. -// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// ИмяСобытияЖурналаРегистрации - Строка - Имя события журнала регистрации текущего сеанса обмена данными. +// Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. // -// КоличествоОтправленныхОбъектов. Тип: Число. -// Счетчик отправленных объектов. Используется для определения количества отправленных объектов -// для последующей фиксации в протоколе обмена. +// КоличествоОтправленныхОбъектов - Число - Счетчик отправленных объектов. +// Используется для определения количества отправленных объектов +// для последующей фиксации в протоколе обмена. // Процедура ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, @@ -102,36 +99,34 @@ // // Параметры: // -// СтандартнаяОбработка. Тип: Булево. -// В данный параметр передается признак выполнения стандартной (системной) обработки события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. -// Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию: Истина. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, +// стандартная обработка события производиться не будет. +// Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию: Истина. // -// Отправитель (только для чтения). Тип: ПланОбменаСсылка. -// Узел плана обмена, для которого выполняется загрузка данных. +// Отправитель - ПланОбменаСсылка - Узел плана обмена, для которого выполняется загрузка данных. // -// ИмяФайлаСообщения (только для чтения). Тип: Строка. -// Имя файла, из которого требуется выполнить загрузку данных. Если параметр не заполнен, то данные для загрузки -// передаются через параметр ДанныеСообщения. +// ИмяФайлаСообщения - Строка - Имя файла, из которого требуется выполнить загрузку данных. +// Если параметр не заполнен, то данные для загрузки передаются через параметр ДанныеСообщения. // -// ДанныеСообщения. Тип: Произвольный. -// Параметр содержит данные, которые необходимо загрузить. Если параметр ИмяФайлаСообщения пустой, -// то данные для загрузки передаются через этот параметр. +// ДанныеСообщения - Произвольный - Параметр содержит данные, которые необходимо загрузить. +// Если параметр ИмяФайлаСообщения пустой, +// то данные для загрузки передаются через этот параметр. // -// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. -// Определяет максимальное число элементов данных, которые читаются из сообщения и записываются в базу данных -// в рамках одной транзакции. При необходимости в обработчике следует реализовать логику записи данных в транзакции. -// Значение параметра задается в настройках подсистемы обмена данными. +// КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, +// которые читаются из сообщения и записываются в базу данных в рамках одной транзакции. +// При необходимости в обработчике следует реализовать логику записи данных в транзакции. +// Значение параметра задается в настройках подсистемы обмена данными. // -// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. -// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации -// данных (ошибок, предупреждений, информации) с заданным именем события. -// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// ИмяСобытияЖурналаРегистрации - Строка - Имя события журнала регистрации текущего сеанса обмена данными. +// Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. // -// КоличествоПолученныхОбъектов. Тип: Число. -// Счетчик полученных объектов. Используется для определения количества загруженных объектов -// для последующей фиксации в протоколе обмена. +// КоличествоПолученныхОбъектов - Число -Счетчик полученных объектов. +// Используется для определения количества загруженных объектов +// для последующей фиксации в протоколе обмена. // Процедура ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, @@ -159,13 +154,12 @@ // // Параметры: // -// Получатель. Тип: ПланОбменаСсылка. Узел плана обмена, в который требуется выгрузить данные. +// Получатель - ПланОбменаСсылка - Узел плана обмена, в который требуется выгрузить данные. // -// СтандартнаяОбработка. Тип: Булево. -// В данный параметр передается признак выполнения стандартной (системной) обработки события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. -// Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию: Истина. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. +// Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию - Истина. // Процедура РегистрацияИзмененийНачальнойВыгрузкиДанных(Знач Получатель, СтандартнаяОбработка, Отбор) Экспорт @@ -186,26 +180,24 @@ // Обработчик вызывается как в обмене в распределенной информационной базе (РИБ), // так и во всех остальных обменах, в том числе в обменах по правилам обмена. // -// Параметры: -// ЭлементДанных – Элемент данных, прочитанный из сообщения обмена данными. -// Элементами данных могут быть КонстантаМенеджерЗначения.<Имя константы>, -// объекты базы данных (кроме объекта "Удаление объекта"), наборы записей регистров, последовательностей или перерасчетов. +// Параметры: +// ЭлементДанных - Элемент данных, прочитанный из сообщения обмена данными. +// Элементами данных могут быть КонстантаМенеджерЗначения.<Имя константы>, +// объекты базы данных (кроме объекта "Удаление объекта"), наборы записей регистров, последовательностей или перерасчетов. // -// ПолучениеЭлемента – Тип: ПолучениеЭлементаДанных. -// Значение данного параметра может быть переопределено в обработчике. -// Определяет, будет ли прочитанный элемент данных записан в базу данных или нет в случае коллизии. -// При вызове обработчика параметр имеет значение Авто, что означает действия по умолчанию -// (принимать от главного, игнорировать от подчиненного). +// ПолучениеЭлемента - ПолучениеЭлементаДанных - Определяет, будет ли прочитанный элемент данных записан в базу данных или нет в случае коллизии. +// При вызове обработчика параметр имеет значение Авто, что означает действия по умолчанию +// (принимать от главного, игнорировать от подчиненного). +// Значение данного параметра может быть переопределено в обработчике. // -// Отправитель – Тип: ПланОбменаСсылка. Узел плана обмена, от имени которого выполняется получение данных. +// Отправитель - ПланОбменаСсылка - Узел плана обмена, от имени которого выполняется получение данных. // -// ПолучениеОтГлавного – Тип: Булево. -// В распределенной информационной базе обозначает признак получения данных от главного узла. -// Истина – выполняется получение данных от главного узла, Ложь – от подчиненного. -// В обменах по правилам обмена принимает значение Истина – если в правилах обмена приоритет объекта -// при коллизии установлен в значение "Выше" (значение по умолчанию) или не указан; -// Ложь – если в правилах обмена приоритет объекта при коллизии установлен в значение "Ниже" или "Совпадает". -// Во всех остальных типах обмена данными параметр принимает значение Истина. +// ПолучениеОтГлавного - Булево - В распределенной информационной базе обозначает признак получения данных от главного узла. +// Истина - выполняется получение данных от главного узла, Ложь - от подчиненного. +// В обменах по правилам обмена принимает значение Истина - если в правилах обмена приоритет объекта +// при коллизии установлен в значение "Выше" (значение по умолчанию) или не указан; +// Ложь - если в правилах обмена приоритет объекта при коллизии установлен в значение "Ниже" или "Совпадает". +// Во всех остальных типах обмена данными параметр принимает значение Истина. // Процедура ПриКоллизииИзмененийДанных(Знач ЭлементДанных, ПолучениеЭлемента, Знач Отправитель, Знач ПолучениеОтГлавного) Экспорт @@ -213,3 +205,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 6ceec5dcd..2054706d2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов на узлах планов обмена (МРО) @@ -44,7 +43,7 @@ // Получает наименование предопределенного узла плана обмена // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена // // Возвращаемое значение: // Строка - наименование предопределенного узла плана обмена @@ -61,7 +60,7 @@ // Нет. // // Возвращаемое значение: -// Массив – массив элементов имен планов обмена +// Массив - массив элементов имен планов обмена // Функция ПланыОбменаБСП() Экспорт @@ -167,9 +166,19 @@ // Функция ЭтоАвтономноеРабочееМесто() Экспорт - Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() - И ОбменДаннымиСервер.ГлавныйУзел() <> Неопределено + УстановитьПривилегированныйРежим(Истина); + + Если Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда + + Возврат Константы.ЭтоАвтономноеРабочееМесто.Получить(); + + Иначе + + Возврат ОбменДаннымиСервер.ГлавныйУзел() <> Неопределено + И ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() И ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); + + КонецЕсли; КонецФункции @@ -216,8 +225,9 @@ Возврат Выборка.Ссылка; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов на узлах планов обмена (МРО) @@ -264,7 +274,7 @@ // для которого необходимо определить признак наличия правил регистрации. // // Возвращаемое значение: -// Истина – правила регистрации для объекта существуют; Ложь – нет. +// Истина - правила регистрации для объекта существуют; Ложь - нет. // Функция ПравилаРегистрацииОбъектаСуществуют(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -275,13 +285,12 @@ // Определяет признак авторегистрации объекта метаданных в составе плана обмена. // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. -// ПолноеИмяОбъекта – Строка - полное имя объекта метаданных, для которого требуется получить признак авторегистрации. +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. +// ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, для которого требуется получить признак авторегистрации. // // Возвращаемое значение: -// Тип: Булево. -// Истина – объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; -// Ложь – объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена +// Истина - объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; +// Ложь - объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена // или объект метаданных не входит в состав плана обмена. // Функция АвтоРегистрацияРазрешена(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -298,11 +307,11 @@ // Определяет признак вхождения объекта метаданных в состав плана обмена. // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе. -// ПолноеИмяОбъекта – Строка - полное имя объекта метаданных, для которого требуется получить признак. +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// ПолноеИмяОбъекта - Строка - полное имя объекта метаданных, для которого требуется получить признак. // // Возвращаемое значение: -// Тип: Булево. Истина – объект входит в состав плана обмена; Ложь – не входит. +// Истина - объект входит в состав плана обмена; Ложь - не входит. // Функция ПланОбменаСодержитОбъект(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт @@ -316,10 +325,10 @@ // то считается, что он используется. // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе. +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. // // Возвращаемое значение: -// Тип: Булево. Истина – план обмена используется, Ложь – нет. +// Истина - план обмена используется, Ложь - нет. // Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена) Экспорт @@ -331,14 +340,14 @@ // Пользовательский состав плана обмена определяется правилами регистрации объектов // и настройками узла, которые задал пользователь. // -// Параметры: -// Получатель – ПланОбменаСсылка – ссылка на узел плана обмена, -// для которого требуется получить пользовательский состав плана обмена. +// Параметры: +// Получатель - ПланОбменаСсылка - ссылка на узел плана обмена, +// для которого требуется получить пользовательский состав плана обмена. // // Возвращаемое значение: -// Тип: Соответствие. -// Ключ - Строка - Полное имя объекта метаданных входящего в состав плана обмена; -// Значение - ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена - режим выгрузки объекта. +// Соответствие: +// * Ключ - Строка - Полное имя объекта метаданных входящего в состав плана обмена; +// * Значение - ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена - режим выгрузки объекта. // Функция ПользовательскийСоставПланаОбмена(Знач Получатель) Экспорт @@ -396,12 +405,12 @@ // Возвращает режим выгрузки объекта на основании пользовательского состава плана обмена (настроек пользователя). // -// Параметры: -// ИмяОбъекта - Полное имя объекта метаданных, для которого требуется получить режим выгрузки; -// Получатель - ПланОбменаСсылка – ссылка на узел плана обмена, пользовательский состав которого будет использоваться. +// Параметры: +// ИмяОбъекта - Полное имя объекта метаданных, для которого требуется получить режим выгрузки; +// Получатель - ПланОбменаСсылка - ссылка на узел плана обмена, пользовательский состав которого будет использоваться. // -// Возвращаемое значение: -// Тип: ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена – режим выгрузки объекта +// Возвращаемое значение: +// ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена - режим выгрузки объекта. // Функция РежимВыгрузкиОбъекта(Знач ИмяОбъекта, Знач Получатель) Экспорт @@ -513,10 +522,10 @@ // Возвращает признак принадлежности узла к плану обмена РИБ // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Булево. Истина – узел принадлежит плану обмена РИБ; Ложь – нет. +// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт @@ -527,10 +536,10 @@ // Возвращает признак принадлежности узла к плану обмена стандартного обмена (без правил конвертации) // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Булево. Истина – узел принадлежит плану обмена стандартного обмена; Ложь – нет. +// Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. // Функция ЭтоУзелСтандартногоОбменаДанными(УзелИнформационнойБазы) Экспорт @@ -542,10 +551,10 @@ // Возвращает признак принадлежности узла к плану обмена универсального обмена (по правилам конвертации) // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Булево. Истина – узел принадлежит плану обмена универсального обмена; Ложь – нет. +// Истина - узел принадлежит плану обмена универсального обмена, иначе Ложь. // Функция ЭтоУзелУниверсальногоОбменаДанными(УзелИнформационнойБазы) Экспорт @@ -557,10 +566,10 @@ // Возвращает признак принадлежности узла к плану обмена, который использует функционал обмена БСП // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка, ПланОбменаОбъект – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка, ПланОбменаОбъект - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Булево. Истина – узел принадлежит плану обмена, использующего функционал БСП; Ложь – нет. +// Истина - узел принадлежит плану обмена, использующего функционал БСП, иначе Ложь. // Функция ЭтоУзелОбменаДаннымиБСП(Знач УзелИнформационнойБазы) Экспорт @@ -571,10 +580,10 @@ // Возвращает признак принадлежности узла к разделенному плану обмена, который использует функционал обмена БСП // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Булево. Истина – узел принадлежит разделенному плану обмена, использующего функционал БСП; Ложь – нет. +// Истина - узел принадлежит разделенному плану обмена, использующего функционал БСП, иначе Ложь. // Функция ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелИнформационнойБазы) Экспорт @@ -588,7 +597,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе // // Возвращаемое значение: -// Тип: Булево. Истина – план обмена принадлежит плану обмена РИБ; Ложь – нет. +// Истина - план обмена принадлежит плану обмена РИБ, иначе Ложь. // Функция ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Экспорт @@ -701,7 +710,7 @@ // Нет. // // Возвращаемое значение: -// Массив – массив элементов имен разделенных планов обмена +// Массив - массив элементов имен разделенных планов обмена // Функция РазделенныеПланыОбменаБСП() Экспорт @@ -812,9 +821,9 @@ Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда - ТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + ТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - ВсеТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + ВсеТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); КонецЕсли; @@ -826,11 +835,11 @@ Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда - ВсеТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + ВсеТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); Если Найти(ОбщиеДанныеУзлов, НастройкаКорреспондента.Ключ) = 0 Тогда - ТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + ТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); КонецЕсли; @@ -867,7 +876,7 @@ // Получает менеджер плана обмена по имени объекта метаданных плана обмена // // Параметры: -// УзелПланаОбмена – ПланОбменаСсылка – узел плана обмена, для которого требуется получить менеджер +// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого требуется получить менеджер // Функция ПолучитьМенеджерПланаОбмена(УзелПланаОбмена) Экспорт @@ -901,10 +910,10 @@ // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе -// ИмяМакета – Строка – имя макета, наличие которого следует определить +// ИмяМакета - Строка - имя макета, наличие которого следует определить // // Возвращаемое значение: -// Тип: Булево. Истина – план обмена содержит заданный макет; Ложь – нет. +// Истина - план обмена содержит заданный макет, иначе Ложь. // Функция ЕстьМакетПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяМакета) Экспорт @@ -932,10 +941,10 @@ // Возвращает коллекцию транспортов сообщений обмена, которые могут быть использованы для заданного узла плана обмена // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции // // Возвращаемое значение: -// Тип: Массив. Используемые транспорты сообщений обмена для узла +// Массив - Используемые транспорты сообщений обмена для узла. // Функция ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы) Экспорт @@ -977,13 +986,11 @@ // // Параметры: // УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка. Узел плана обмена, для которого необходимо получить внешнее соединение -// СтрокаСообщенияОбОшибке (необязательный) – Строка – если в процессе установки внешнего соединения возникает ошибка, +// СтрокаСообщенияОбОшибке (необязательный) - Строка - если в процессе установки внешнего соединения возникает ошибка, // то подробное описание ошибки помещается в этот параметр. // // Возвращаемое значение: -// Тип: COM-объект, Неопределенно. -// в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; -// в случае ошибки возвращается Неопределенно. +// COM-объект - в случае успешной установки внешнего соединения, в случае ошибки возвращается Неопределено. // Функция ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт @@ -998,13 +1005,11 @@ // // Параметры: // УзелИнформационнойБазы (обязательный) - ПланОбменаСсылка. Узел плана обмена, для которого необходимо получить внешнее соединение -// СтрокаСообщенияОбОшибке (необязательный) – Строка – если в процессе установки внешнего соединения возникает ошибка, +// СтрокаСообщенияОбОшибке (необязательный) - Строка - если в процессе установки внешнего соединения возникает ошибка, // то подробное описание ошибки помещается в этот параметр. // // Возвращаемое значение: -// Тип: COM-объект, Неопределенно. -// в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; -// в случае ошибки возвращается Неопределенно. +// COM-объект - в случае успешной установки внешнего соединения, в случае ошибки возвращается Неопределено. // Функция ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы) Экспорт @@ -1017,7 +1022,7 @@ // Определяет возможность передачи файлов между двумя базами через локальную сеть // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // Пароль - Строка - Пароль для WS соединения // Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт @@ -1033,10 +1038,11 @@ // В противном случае функция возвращает Ложь. // // Параметры: -// ИмяПланаОбмена – Строка. Имя плана обмена, для которого необходимо вычислить признак использования. +// ИмяПланаОбмена - Строка. Имя плана обмена, для которого необходимо вычислить признак использования. // -// Возвращаемое значение. Тип: Булево. -// Истина – доступно использование плана обмена. Ложь – использование не доступно. +// Возвращаемое значение: +// Истина - доступно использование плана обмена. +// Ложь - использование не доступно. // Функция ДоступноИспользованиеПланаОбмена(Знач ИмяПланаОбмена) Экспорт @@ -1070,7 +1076,7 @@ // Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. // // Параметры: -// Корреспондент – Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. +// Корреспондент - Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. // // Возвращаемое значение: // Массив номеров версий, поддерживаемых интерфейсом корреспондента. @@ -1134,6 +1140,26 @@ Возврат Результат; КонецФункции +Функция ИмяПрофиляБезопасности(Знач ИмяПланаОбмена) Экспорт + + Если Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены() Тогда + ИдентификаторПланаОбмена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.ПланыОбмена[ИмяПланаОбмена]); + ИмяПрофиляБезопасности = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(ИдентификаторПланаОбмена); + Иначе + ИмяПрофиляБезопасности = Неопределено; + КонецЕсли; + + Если ИмяПрофиляБезопасности = Неопределено Тогда + ИмяПрофиляБезопасности = Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + Если ПустаяСтрока(ИмяПрофиляБезопасности) Тогда + ИмяПрофиляБезопасности = Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат ИмяПрофиляБезопасности; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Инициализация структуры настроек обмена данными @@ -1198,7 +1224,7 @@ Для Каждого Макет ИЗ Метаданные.ПланыОбмена[ИмяПланаОбмена].Макеты Цикл - Если Найти(Макет.Имя, ЛитералИмениМакета) <> 0 Тогда + Если Найти(Макет.Имя, ЛитералИмениМакета) <> 0 И Найти(Макет.Имя, "Корреспондента") = 0 Тогда СписокПравил.Добавить(Макет.Имя, Макет.Синоним); @@ -1209,21 +1235,21 @@ Возврат СписокПравил; КонецФункции +// Возвращает таблицу состава узла (только ссылочный тип) // -// Возвращает таблицу состава узла (только ссылочный тип) +// Параметры: +// УзелОбмена: ссылка на анализируемый узел обмена +// Периодические: флаг того, что надо включать в результат объекты с датой (документы и т.п.) +// Справочные: флаг того, что надо включать в результат нормативно-справочные объекты // -// Параметры: -// УзелОбмена: ссылка на анализируемый узел обмена -// Периодические: флаг того, что надо включать в результат объекты с датой (документы и т.п.) -// Справочные: флаг того, что надо включать в результат нормативно-справочные объекты -// -// Колонки результата: -// ПолноеИмяМетаданных: полное имя метаданных (имя таблицы для запроса) -// ПредставлениеСписка: представление списка для таблицы -// Представление: представление объекта для таблицы -// ИндексКартинки: индекс картинки согласно "БиблиотекаКартинок.КоллекцияОбъектыМетаданных" -// Тип: соответствующий тип -// ВыборПериода: флаг того, что к объекту можно применить выбор по периода +// Возвращаемое значение: +// ТаблицаЗначений - таблица с колонками: +// * ПолноеИмяМетаданных - полное имя метаданных (имя таблицы для запроса) +// * ПредставлениеСписка - представление списка для таблицы +// * Представление - представление объекта для таблицы +// * ИндексКартинки - индекс картинки согласно "БиблиотекаКартинок.КоллекцияОбъектыМетаданных" +// * Тип - соответствующий тип +// * ВыборПериода - флаг того, что к объекту можно применить выбор по периода // Функция СсылочныеТаблицыСоставаУзла(УзелОбмена, Периодические=Истина, Справочные=Истина) Экспорт @@ -1401,3 +1427,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index 631b087df..2e755d4c7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -3,43 +3,61 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узлов плана обмена +// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узлов плана обмена. // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура +// Форма - УправляемаяФорма - форма, из которой вызвана процедура. +// Отказ - Булево - признак отказа от создания формы. Если установить в Истина, то форма создана не будет. // Процедура ФормаНастройкиУзловПриСозданииНаСервере(Форма, Отказ) Экспорт - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Параметры = Форма.Параметры; + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - ПроверитьОбязательныеРеквизитыФормы(Форма, "ВерсияКорреспондента, Контекст, ОписаниеКонтекста, Реквизиты"); + УстановитьОбязательныеРеквизитыФормы(Форма, ОбязательныеРеквизитыФормыНастройкиУзлов()); - Если Форма.Параметры.Свойство("ПроверкаЗаполнения") Тогда + Форма.ВерсияКорреспондента = Параметры.ВерсияКорреспондента; + + Контекст = Новый Структура; + + Если Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда - ЗагрузитьКонтекстВФорму(Форма, Форма.Параметры.Настройки); - Возврат; - ИначеЕсли Форма.Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда + ИмяПланаОбмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".")[1]; + + НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Параметры.ВерсияКорреспондента); + НастройкаОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Параметры.ВерсияКорреспондента); + ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкаОтборовНаУзлеБазыКорреспондента); + + Иначе + + НастройкаОтборовНаУзле = Форма.Параметры.Настройки.НастройкаОтборовНаУзле; + НастройкаОтборовНаУзлеБазыКорреспондента = Форма.Параметры.Настройки.НастройкаОтборовНаУзлеБазыКорреспондента; - Форма.Контекст = ВыгрузитьКонтекстИзФормы(Форма); - Возврат; КонецЕсли; - ЗагрузитьКонтекстВФорму(Форма, Форма.Параметры.Настройки); + Контекст.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); + Контекст.Вставить("НастройкаОтборовНаУзлеБазыКорреспондента", НастройкаОтборовНаУзлеБазыКорреспондента); - ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ); + Форма.Контекст = Контекст; + + ЗаполнитьДанныеФормы(Форма); + + Если Не Параметры.Свойство("ПроверкаЗаполнения") И Не Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда + ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ); + КонецЕсли; КонецПроцедуры -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла +// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла. // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма +// Форма - УправляемаяФорма - форма, из которой вызвана процедура. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. // Процедура ФормаНастройкиУзлаПриСозданииНаСервере(Форма, ИмяПланаОбмена) Экспорт @@ -56,12 +74,12 @@ КонецПроцедуры -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла базы корреспондента +// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла базы корреспондента. // // Параметры: -// Форма – Управляемая форма базы корреспондента -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма -// Данные - Соответствие - Содержит список таблиц базы данных для задания правил синхронизации данных +// Форма - УправляемаяФорма - форма базы корреспондента. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. +// Данные - Соответствие - содержит список таблиц базы данных для задания правил синхронизации данных. // Процедура ФормаНастройкиУзлаБазыКорреспондентаПриСозданииНаСервере(Форма, ИмяПланаОбмена, Данные = Неопределено) Экспорт @@ -108,11 +126,11 @@ КонецПроцедуры -// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки значений по умолчанию +// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки значений по умолчанию. // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма +// Форма - УправляемаяФорма - форма, из которой вызвана процедура. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. // Процедура ФормаНастройкиЗначенийПоУмолчаниюПриСозданииНаСервере(Форма, ИмяПланаОбмена) Экспорт @@ -130,12 +148,12 @@ КонецПроцедуры // Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки значений по умолчанию, -// через внешнее соединение для базы корреспондента +// через внешнее соединение для базы корреспондента. // // Параметры: -// Форма – управляемая форма, из которой вызвана процедура -// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма -// ДополнительныеДанные - Получение дополнительных данных +// Форма - УправляемаяФорма - форма, из которой вызвана процедура. +// ИмяПланаОбмена - Строка - имя плана обмена, для которого создана форма. +// ДополнительныеДанные - Произвольный - для получения дополнительных данных. // Процедура ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондентаПриСозданииНаСервере(Форма, ИмяПланаОбмена, ДополнительныеДанные = Неопределено) Экспорт @@ -154,18 +172,17 @@ Если Форма.ПараметрыВнешнегоСоединения.ТипСоединения = "ВременноеХранилище" Тогда ДополнительныеДанные = ПолучитьИзВременногоХранилища( - Форма.ПараметрыВнешнегоСоединения.АдресВременногоХранилища - ).Получить().Получить("{ДополнительныеДанные}"); + Форма.ПараметрыВнешнегоСоединения.АдресВременногоХранилища).Получить().Получить("{ДополнительныеДанные}"); КонецЕсли; КонецПроцедуры // Удаляет из списка реквизитов для обязательного заполнения те реквизиты, -// которые не отображаются на форме +// которые не отображаются на форме. // // Параметры: -// ПроверяемыеРеквизиты - Массив - Список реквизитов, для которых выполняется проверка заполнения -// Элементы - ВсеЭлементыФормы - Содержит коллекцию всех элементов управляемой формы +// ПроверяемыеРеквизиты - Массив - список реквизитов, для которых выполняется проверка заполнения. +// Элементы - ВсеЭлементыФормы - содержит коллекцию всех элементов управляемой формы. // Процедура ОпределитьПроверяемыеРеквизитыСУчетомНастроекВидимостиПолейФормы(ПроверяемыеРеквизиты, Элементы) Экспорт @@ -197,14 +214,14 @@ КонецПроцедуры -// Определяет необходимость выполнения обработчика события "После выгрузки данных" при обмене в РИБ +// Определяет необходимость выполнения обработчика события "ПослеВыгрузкиДанных" при обмене в РИБ. // // Параметры: -// Объект – ПланОбменаОбъект – узел плана обмена, для которого выполняется обработчик -// Ссылка – ПланОбменаСсылка – ссылка на узел плана обмена, для которого выполняется обработчик +// Объект - ПланОбменаОбъект - узел плана обмена, для которого выполняется обработчик. +// Ссылка - ПланОбменаСсылка - ссылка на узел плана обмена, для которого выполняется обработчик. // // Возвращаемое значение: -// Тип: Булево. Истина – необходимо выполнить обработчик "После выгрузки данных"; Ложь – нет. +// Булево - если Истина, то необходимо выполнить обработчик "ПослеВыгрузкиДанных"; Ложь - нет. // Функция НадоВыполнитьОбработчикПослеВыгрузкиДанных(Объект, Ссылка) Экспорт @@ -212,14 +229,14 @@ КонецФункции -// Определяет необходимость выполнения обработчика события "После загрузки данных" при обмене в РИБ +// Определяет необходимость выполнения обработчика события "ПослеЗагрузкиДанных" при обмене в РИБ. // // Параметры: -// Объект – ПланОбменаОбъект – узел плана обмена, для которого выполняется обработчик -// Ссылка – ПланОбменаСсылка – ссылка на узел плана обмена, для которого выполняется обработчик +// Объект - ПланОбменаОбъект - узел плана обмена, для которого выполняется обработчик. +// Ссылка - ПланОбменаСсылка - ссылка на узел плана обмена, для которого выполняется обработчик. // // Возвращаемое значение: -// Тип: Булево. Истина – необходимо выполнить обработчик "После загрузки данных"; Ложь – нет. +// Булево - если Истина, то необходимо выполнить обработчик "ПослеЗагрузкиДанных"; Ложь - нет. // Функция НадоВыполнитьОбработчикПослеЗагрузкиДанных(Объект, Ссылка) Экспорт @@ -227,7 +244,10 @@ КонецФункции -// Возвращает префикс этой информационной базы +// Возвращает префикс этой информационной базы. +// +// Возвращаемое значение: +// Строка // Функция ПрефиксИнформационнойБазы() Экспорт @@ -236,17 +256,16 @@ КонецФункции // Возвращает версию конфигурации корреспондента. -// Если версия конфигурации корреспондента не определена, -// то возвращает пустую версию – "0.0.0.0" +// Если версия конфигурации корреспондента не определена, то возвращает пустую версию - "0.0.0.0". // // Параметры: -// Корреспондент – ПланОбменаСсылка – узел плана обмена, для которого необходимо получить версию конфигурации. +// Корреспондент - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить версию конфигурации. // // Возвращаемое значение: -// Строка – версия конфигурации корреспондента +// Строка - версия конфигурации корреспондента. // // Пример: -// Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ОбменДаннымиСервер.ВерсияКорреспондента(Корреспондент), "2.1.5.1") >= 0 Тогда ... КонецЕсли; +// Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ОбменДаннымиСервер.ВерсияКорреспондента(Корреспондент), "2.1.5.1") >= 0 Тогда ... // Функция ВерсияКорреспондента(Знач Корреспондент) Экспорт @@ -255,7 +274,10 @@ Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента(Корреспондент); КонецФункции -// Устанавливает префикс этой информационной базы +// Устанавливает префикс этой информационной базы. +// +// Параметры: +// Префикс - Строка - новое значение префикса информационной базы. // Процедура УстановитьПрефиксИнформационнойБазы(Знач Префикс) Экспорт @@ -271,17 +293,15 @@ // Если база была восстановлена из резервной копии, то рекомендуется не снимать с регистрации изменения данных на текущем узле, // т.к. эти данные могли быть еще не отправлены. // -// Параметры: -// Отправитель (обязательный). Тип: ПланОбменаСсылка. Узел, от имени которого было сформировано и отправлено сообщение обмена. +// Параметры: +// Отправитель - ПланОбменаСсылка - узел, от имени которого было сформировано и отправлено сообщение обмена. +// НомерПринятого - Число - номер принятого сообщения в базе-корреспонденте. // -// НомерПринятого (обязательный). Тип: Число. Номер принятого сообщения в базе-корреспонденте. -// -// Возвращаемое значение: -// Тип: Фиксированная структура. Свойства структуры: -// "Отправитель" – см. выше параметр <Отправитель> -// "НомерПринятого" – см. выше параметр <НомерПринятого> -// "ВосстановленаРезервнаяКопия". Тип: Булево. Признак восстановления этой базы из резервной копии. -// Принимает значение Истина, если обнаружен факт восстановления этой базы из резервной копии. +// Возвращаемое значение: +// ФиксированнаяСтруктура - свойства структуры: +// * Отправитель - ПланОбменаСсылка - см. выше параметр Отправитель. +// * НомерПринятого - Число - см. выше параметр НомерПринятого. +// * ВосстановленаРезервнаяКопия - Булево - Истина, если обнаружен факт восстановления этой базы из резервной копии. // Функция ПараметрыРезервнойКопии(Знач Отправитель, Знач НомерПринятого) Экспорт @@ -300,11 +320,11 @@ // Выполняет синхронизацию номеров отправленных и полученных сообщений // для двух баз (номеру отправленного сообщения в этой базе присваивается значение номера принятого сообщения из базы-корреспондента). // -// Параметры: -// ПараметрыРезервнойКопии (обязательный). Тип: Фиксированная структура. Свойства структуры: -// "Отправитель". Тип: ПланОбменаСсылка. Узел, от имени которого было сформировано и отправлено сообщение обмена. -// "НомерПринятого". Тип: Число. Номер принятого сообщения в базе-корреспонденте. -// "ВосстановленаРезервнаяКопия". Тип: Булево. Признак восстановления этой базы из резервной копии. +// Параметры: +// ПараметрыРезервнойКопии - ФиксированнаяСтруктура - свойства структуры: +// * Отправитель - ПланОбменаСсылка - узел, от имени которого было сформировано и отправлено сообщение обмена. +// * НомерПринятого - Число - номер принятого сообщения в базе-корреспонденте. +// * ВосстановленаРезервнаяКопия - Булево - признак восстановления этой базы из резервной копии. // Процедура ПриВосстановленииРезервнойКопии(Знач ПараметрыРезервнойКопии) Экспорт @@ -327,18 +347,27 @@ // количества проблем обмена в пользовательском интерфейсе. Например, для использования в заголовке // гиперссылки для перехода к монитору проблем обмена. // +// Параметры: +// Узлы - Массив - массив значений ПланОбменаСсылка. +// +// Возвращаемое значение: +// Число +// Функция КоличествоНерассмотренныхПроблем(Узлы = Неопределено) Экспорт Возврат КоличествоПроблемОбменаДанными(Узлы) + КоличествоПроблемВерсионирования(Узлы); КонецФункции -// Возвращает структуру заголовка гиперссылки для перехода к монитору проблем обмена данными +// Возвращает структуру заголовка гиперссылки для перехода к монитору проблем обмена данными. // +// Параметры: +// Узлы - Массив - массив значений ПланОбменаСсылка. +// // Возвращаемое значение: -// Тип Структура -// Заголовок - Строка - содержит заголовок гиперссылки -// Картинка - Картинка для гиперссылки +// Структура - со свойствами: +// * Заголовок - Строка - заголовок гиперссылки. +// * Картинка - Картинка - картинка для гиперссылки. // Функция СтруктураЗаголовкаГиперссылкиМонитораПроблем(Узлы = Неопределено) Экспорт @@ -365,8 +394,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет служебные события подсистемы ОбменДанными: // @@ -388,37 +418,29 @@ // методом ВызватьИсключение с описанием ошибки. // // Параметры: - // - // СтандартнаяОбработка. Тип: Булево. - // В данный параметр передается признак выполнения стандартной (системной) обработки события. - // Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная - // обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. - // Значение по умолчанию: Истина. - // - // Получатель (только для чтения). Тип: ПланОбменаСсылка. - // Узел плана обмена, для которого выполняется выгрузка данных. - // - // ИмяФайлаСообщения (только для чтения). Тип: Строка. - // Имя файла, в который необходимо выполнить выгрузку данных. Если этот параметр заполнен, то система ожидает, - // что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. - // Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. - // - // ДанныеСообщения. Тип: Произвольный. - // Если параметр ИмяФайлаСообщения пустой, то система ожидает, что данные будут выгружены в этот параметр. - // - // КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. - // Определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. - // При необходимости в обработчике следует реализовать логику установки транзакционных блокировок на выгружаемые данные. - // Значение параметра задается в настройках подсистемы обмена данными. - // - // ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. - // Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации - // данных (ошибок, предупреждений, информации) с заданным именем события. - // Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. - // - // КоличествоОтправленныхОбъектов. Тип: Число. - // Счетчик отправленных объектов. Используется для определения количества отправленных объектов - // для последующей фиксации в протоколе обмена. + // СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения + // стандартной (системной) обработки события. Если в теле процедуры-обработчика установить + // данному параметру значение Ложь, стандартная обработка события производиться не будет. + // Отказ от стандартной обработки не отменяет действие. + // Значение по умолчанию: Истина. + // Получатель - ПланОбменаСсылка - узел плана обмена, для которого выполняется выгрузка данных. + // ИмяФайлаСообщения - Строка - имя файла, в который необходимо выполнить выгрузку данных. + // Если этот параметр заполнен, то система ожидает, что данные будут выгружены в файл. + // После выгрузки система выполнит отправку данных из этого файла. + // Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. + // ДанныеСообщения - Произвольный - если параметр ИмяФайлаСообщения пустой, то система ожидает, + // что данные будут выгружены в этот параметр. + // КоличествоЭлементовВТранзакции - Число - определяет максимальное число элементов данных, + // которые помещаются в сообщение в рамках одной транзакции базы данных. + // При необходимости в обработчике следует реализовать логику установки + // транзакционных блокировок на выгружаемые данные. + // Значение параметра задается в настройках подсистемы обмена данными. + // ИмяСобытияЖурналаРегистрации - Строка - имя события журнала регистрации текущего сеанса обмена данными. + // Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) + // с заданным именем события. Соответствует параметру ИмяСобытия метода + // глобального контекста ЗаписьЖурналаРегистрации. + // КоличествоОтправленныхОбъектов - Число - Счетчик отправленных объектов. + // Используется для определения количества отправленных объектов для последующей фиксации в протоколе обмена. // // Синтаксис: // Процедура ПриВыгрузкеДанныхСлужебный(СтандартнаяОбработка, @@ -440,36 +462,27 @@ // // Параметры: // - // СтандартнаяОбработка. Тип: Булево. - // В данный параметр передается признак выполнения стандартной (системной) обработки события. - // Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. - // Отказ от стандартной обработки не отменяет действие. - // Значение по умолчанию: Истина. - // - // Отправитель (только для чтения). Тип: ПланОбменаСсылка. - // Узел плана обмена, для которого выполняется загрузка данных. - // - // ИмяФайлаСообщения (только для чтения). Тип: Строка. - // Имя файла, из которого требуется выполнить загрузку данных. Если параметр не заполнен, то данные для загрузки - // передаются через параметр ДанныеСообщения. - // - // ДанныеСообщения. Тип: Произвольный. - // Параметр содержит данные, которые необходимо загрузить. Если параметр ИмяФайлаСообщения пустой, - // то данные для загрузки передаются через этот параметр. - // - // КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. - // Определяет максимальное число элементов данных, которые читаются из сообщения и записываются в базу данных - // в рамках одной транзакции. При необходимости в обработчике следует реализовать логику записи данных в транзакции. - // Значение параметра задается в настройках подсистемы обмена данными. - // - // ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. - // Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации - // данных (ошибок, предупреждений, информации) с заданным именем события. - // Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. - // - // КоличествоПолученныхОбъектов. Тип: Число. - // Счетчик полученных объектов. Используется для определения количества загруженных объектов - // для последующей фиксации в протоколе обмена. + // СтандартнаяОбработка - Булево - + // В данный параметр передается признак выполнения стандартной (системной) обработки события. + // Если в теле процедуры-обработчика установить данному параметру значение Ложь, + // стандартная обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. + // Значение по умолчанию: Истина. + // Отправитель - ПланОбменаСсылка - узел плана обмена, для которого выполняется загрузка данных. + // ИмяФайлаСообщения - Строка - имя файла, из которого требуется выполнить загрузку данных. + // Если параметр не заполнен, то данные для загрузки передаются через параметр ДанныеСообщения. + // ДанныеСообщения - Произвольный - Параметр содержит данные, которые необходимо загрузить. + // Если параметр ИмяФайлаСообщения пустой, то данные для загрузки передаются через этот параметр. + // КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, + // которые читаются из сообщения и записываются в базу данных в рамках одной транзакции. + // При необходимости в обработчике следует реализовать логику записи данных в транзакции. + // Значение параметра задается в настройках подсистемы обмена данными. + // ИмяСобытияЖурналаРегистрации - Строка - имя события журнала регистрации текущего сеанса обмена данными. + // Используется для записи в журнал регистрации данных (ошибок, предупреждений, информации) + // с заданным именем события. + // Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. + // КоличествоПолученныхОбъектов - Число - счетчик полученных объектов. + // Используется для определения количества загруженных объектов + // для последующей фиксации в протоколе обмена. // // Синтаксис: // Процедура ПриЗагрузкеДанныхСлужебный(СтандартнаяОбработка, @@ -528,6 +541,12 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "ОбменДаннымиСервер"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "ОбменДаннымиСервер"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриРегистрацииМенеджеровВнешнихМодулей"].Добавить( + "ОбменДаннымиСервер"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда @@ -643,183 +662,6 @@ КонецПроцедуры -// Выполняет загрузку сообщения обмена, которое содержало -// изменения конфигурации, до обновления информационной базы. -// -Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() Экспорт - - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда - Возврат; - КонецЕсли; - - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда - - УзелИнформационнойБазы = ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Истина); - УстановитьПривилегированныйРежим(Ложь); - - Попытка - // Обновление правил регистрации объектов выполняем до загрузки данных - ВыполнитьОбновлениеПравилДляОбменаДанными(); - - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - - Отказ = Ложь; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); // только загрузка - - // Режим повтора требует включения в следующих случаях. - // Случай 1. Получены метаданные с новой версией конфигурации, т.е. будет выполнено обновление ИБ. - // - если Отказ = Истина, тогда недопустимо продолжение, т.к. могут быть созданы дубли генерируемых данных, - // - если Отказ = Ложь, тогда возможна ошибка при обновлении ИБ, возможно требующая повторной загрузки сообщения. - // Случай 2. Получены метаданные с той же версией конфигурации, т.е. не будет выполнено обновление ИБ. - // - если Отказ = Истина, тогда возможна ошибка при продолжении запуска, например, из-за того, что - // не были загружены предопределенные элементы, - // - если Отказ = Ложь, тогда продолжение возможно, т.к. выгрузку можно сделать позднее (если же - // выгрузка не выполняется успешно, тогда позднее можно получить и новое сообщение для загрузки). - - Если Отказ ИЛИ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - КонецЕсли; - - Если Отказ Тогда - ВызватьИсключение НСтр("ru = 'Получение данных из главного узла завершилось с ошибками.'"); - КонецЕсли; - Исключение - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); - УстановитьПривилегированныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Выполняет выгрузку сообщения обмена, которое содержало -// изменения конфигурации, до обновления информационной базы. -// -Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() Экспорт - - // После успешной загрузки и обновления ИБ режим повтора можно отключить. - ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - - Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда - - УзелИнформационнойБазы = ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - ВыполнитьВыгрузку = Истина; - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); - - ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда - - ВыполнитьВыгрузку = Ложь; - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); - - КонецЕсли; - - Если ВыполнитьВыгрузку Тогда - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); // только выгрузка - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - -// Выполняет загрузку и выгрузку сообщения обмена, которое -// содержало изменения конфигурации, которые не потребовали -// обновления информационной базы. -// -Процедура ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы( - ПриЗапускеКлиентскогоПриложения, Перезапустить) Экспорт - - Если ЗагрузитьСообщениеОбменаДанными() Тогда - - Если КонфигурацияИзменена() Тогда - // Изменения конфигурации загружены, но не применены. - // Загружать сообщение еще рано. - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); - ЗафиксироватьТранзакцию(); - Исключение - Если КонфигурацияИзменена() Тогда - Если НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "СообщениеПолученоИзКэша") Тогда - // Переход с конфигурации, в которой не использовалось кэширование - // сообщения обмена. Возможно, новое загруженное сообщение содержит - // новые изменения конфигурации. Определить возврат к конфигурации - // базы данных невозможно. Следует зафиксировать транзакцию и продолжить - // запуск без выгрузки нового сообщения обмена. - ЗафиксироватьТранзакцию(); - Возврат; - Иначе - // Вновь получены изменения конфигурации, значит - // был выполнен возврат к конфигурации базы данных. - // Следует отменить загрузку. - ОтменитьТранзакцию(); - УстановитьПривилегированныйРежим(Истина); - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); - Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); - УстановитьПривилегированныйРежим(Ложь); - ЗаписатьСобытиеПолученияДанных(ГлавныйУзел(), - НСтр("ru = 'Обнаружен возврат к конфигурации базы данных. - |Синхронизация отменена.'")); - Возврат; - КонецЕсли; - КонецЕсли; - // Если был выполнен возврат к конфигурации базы данных, - // но конфигуратор не был закрыт. Тогда новое сообщение не загружено. - // Перейдя в режим повтора и в этом случае, можно будет нажать кнопку - // "Не синхронизировать и продолжить" после чего возврат к конфигурации - // базы данных будет закончен успешно. - ЗафиксироватьТранзакцию(); - ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - Если ПриЗапускеКлиентскогоПриложения Тогда - Перезапустить = Истина; - Возврат; - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); - Иначе - // Если загрузка сообщения обмена была отменена, а версия конфигурации - // в изменениях метаданных не была повышена, тогда повторение загрузки нужно отключить. - ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - КонецЕсли; - -КонецПроцедуры - // Устанавливает признак необходимости загрузки идентификаторов объектов метаданных из сообщения обмена. // Очищает хранилище сообщения обмена, полученного из главного узла РИБ. // Если указано, вызывает исключение с пояснением дальнейших действий. @@ -833,7 +675,8 @@ Если ВызыватьИсключение Тогда ТекстОшибки = НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |не найдены идентификаторы новых объектов метаданных. См. подробности в журнале регистрации. + |при проверке обнаружено, что требуется загрузить критичные изменения (см. подробности в журнале + |регистрации в событии ""Идентификаторы объектов метаданных.Требуется загрузить критичные изменения""). | |Если недоступно сообщение обмена данными, тогда перезапустите программу, |настройте параметры подключения и повторите синхронизацию. @@ -851,6 +694,36 @@ КонецПроцедуры +// Выполняет загрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ПередОбновлениемИнформационнойБазы(ПриЗапускеКлиентскогоПриложения, Перезапустить) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если НЕ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы(ПриЗапускеКлиентскогоПриложения, Перезапустить); + Иначе + ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); + КонецЕсли; + +КонецПроцедуры + +// Выполняет выгрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ПослеОбновленияИнформационнойБазы() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); + +КонецПроцедуры + // Возвращает Истина, если настройка подчиненного узла РИБ не завершена и // требуется обновления параметров работы программы, которые не участвуют в РИБ. // @@ -917,10 +790,15 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "ОбменДаннымиСервер.ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ_2_1_2_21"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.4"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных_2_2_2_4"; + КонецПроцедуры // Выполняет обновление правил конвертации/регистрации объектов. -// Обновление выполняется для всех планов обмена, использующих функционал БСП. +// Обновление выполняется для всех планов обмена, подключенных к подсистеме. // Обновление правил выполняется только для типовых правил. // Если для плана обмена правила были загружены из файла, то такие правила не обновляются. // @@ -1101,6 +979,14 @@ КонецПроцедуры +// Устанавливает количество элементов в транзакции загрузки данных равным единице +// +Процедура УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных_2_2_2_4() Экспорт + + УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных(1); + +КонецПроцедуры + // Устанавливает значение реквизита WSЗапомнитьПароль в РС.НастройкиТранспортаОбмена в значение Истина. // Процедура УстановитьПризнакСохраненияПароляДляОбменаЧерезИнтернет() Экспорт @@ -1222,12 +1108,12 @@ // Возвращает имя сервера и путь на сервере FTP, полученные из строки подключения к FTP-ресурсу. // // Параметры: -// СтрокаПодключения – Строка – строка подключения к FTP-ресурсу. +// СтрокаПодключения - Строка - строка подключения к FTP-ресурсу. // // Возвращаемое значение: -// Структура – настройки подключения к FTP-ресурсу. Поля структуры: -// Сервер – Строка – имя сервера -// Путь – Строка – путь на сервере +// Структура - настройки подключения к FTP-ресурсу. Поля структуры: +// Сервер - Строка - имя сервера +// Путь - Строка - путь на сервере // // Пример (1): // Результат = FTPИмяСервераИПуть("ftp://server"); @@ -1322,8 +1208,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -1413,10 +1300,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1427,10 +1314,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1470,7 +1357,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1523,6 +1410,34 @@ КонецПроцедуры +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Возврат; + КонецЕсли; + + СформироватьЗапросыНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений); + +КонецПроцедуры + +// Вызывается при регистрации менеджеров внешних модулей. +// +// Параметры: +// Менеджеры - Массив(ОбщийМодуль). +// +Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт + + Менеджеры.Добавить(ОбменДаннымиСервер); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем @@ -1603,24 +1518,10 @@ КонецПроцедуры -// Возвращает дату последней коллизии или дату последнего запрета загрузки -// Параметры: -// ПолучитьДатуПоследнейКоллизии - Булево - Если Истина, то возвращает дату последней коллизии, -// если Ложь, то возвращает дату последнего запрета загрузки -// -Процедура ПриОбновленииЗаголовковКомандМонитораОбменаДанными(ДатаСобытия, ПолучитьДатуПоследнейКоллизии) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - ДатаСобытия = МодульВерсионированиеОбъектов.ДатаПоследнейКоллизииИлиЗапретаЗагрузки(ПолучитьДатуПоследнейКоллизии); - КонецЕсли; - -КонецПроцедуры - // Обработчик установки константы ИспользоватьСинхронизациюДанных. // // Параметры: -// Отказ – Булево. Флаг отказа включения синхронизации данных. +// Отказ - Булево. Флаг отказа включения синхронизации данных. // Если установить в значение Истина, то синхронизация включена не будет. // Процедура ПриВключенииСинхронизацииДанных(Отказ) Экспорт @@ -1630,7 +1531,7 @@ // Обработчик снятия константы ИспользоватьСинхронизациюДанных. // // Параметры: -// Отказ – Булево. Флаг отказа отключения синхронизации данных. +// Отказ - Булево. Флаг отказа отключения синхронизации данных. // Если установить в значение Истина, то синхронизация отключена не будет. // Процедура ПриОтключенииСинхронизацииДанных(Отказ) Экспорт @@ -1647,13 +1548,11 @@ // получатели изменений данных по правилам регистрации объектов. // // Параметры: -// Данные. Записываемый объект, представляющий данные - документ, элемент справочника, -// счет бухгалтерского учета, менеджер записи константы, набор записей регистра и т. п. -// -// Получатели. Тип: Массив. Массив узлов планов обмена на которых будут зарегистрированы изменения текущих данных. -// -// ИмяПланаОбмена. Тип: Строка. Имя плана обмена, как объекта метаданных, -// для которого выполняются правила регистрации объектов. +// Данные. Записываемый объект, представляющий данные - документ, элемент справочника, +// счет бухгалтерского учета, менеджер записи константы, набор записей регистра и т. п. +// Получатели - Массив - Массив узлов планов обмена на которых будут зарегистрированы изменения текущих данных. +// ИмяПланаОбмена - Строка - Имя плана обмена, как объекта метаданных, +// для которого выполняются правила регистрации объектов. // Процедура ПослеОпределенияПолучателей(Данные, Получатели, Знач ИмяПланаОбмена) Экспорт @@ -1678,16 +1577,16 @@ //////////////////////////////////////////////////////////////////////////////// // Выполнение обмена данными -// Точка входа для выполнения итерации обмена данными – загрузки и выгрузки данных для узла плана обмена +// Точка входа для выполнения итерации обмена данными - загрузки и выгрузки данных для узла плана обмена // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется итерация обмена данными -// ВыполнятьЗагрузку – Булево (необязательный) – флаг необходимости выполнять загрузку данных. Значение по умолчанию - Истина -// ВыполнятьВыгрузку – Булево (необязательный) – флаг необходимости выполнять выгрузку данных. Значение по умолчанию – Истина -// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется итерация обмена данными +// ВыполнятьЗагрузку - Булево (необязательный) - флаг необходимости выполнять загрузку данных. Значение по умолчанию - Истина +// ВыполнятьВыгрузку - Булево (необязательный) - флаг необходимости выполнять выгрузку данных. Значение по умолчанию - Истина +// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, // который будет использоваться в процессе обмена данными. -// Значение по умолчанию – значение из РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; +// Значение по умолчанию - значение из РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; // если в РС значение не задано, то значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE // Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, @@ -1826,7 +1725,6 @@ | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ВыполняемоеДействие, | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | НастройкиВыполненияОбменаНастройкиОбмена.КоличествоЭлементовВТранзакции КАК КоличествоЭлементовВТранзакции, | | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.COM) | ТОГДА ИСТИНА @@ -1863,7 +1761,9 @@ ПроверитьВозможностьВнешнегоСоединения(); - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, Выборка.КоличествоЭлементовВТранзакции); + КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(Выборка.ВыполняемоеДействие); + + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции); ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда @@ -1913,13 +1813,12 @@ // Точка входа для выполнения обмена данными по сценарию обмена регламентным заданием // // Параметры: -// КодСценарияОбмена – Строка – код элемента справочника "Сценарии обменов данными", для которого будет выполнен обмен данными +// КодСценарияОбмена - Строка - код элемента справочника "Сценарии обменов данными", для которого будет выполнен обмен данными // Процедура ВыполнитьОбменДаннымиПоРегламентномуЗаданию(КодСценарияОбмена) Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, + // т.к. необходимые действия выполняются в частном порядке. ПроверитьВозможностьВыполненияОбменов(); @@ -1962,15 +1861,15 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена -// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта для получения сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена +// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта для получения сообщения обмена // ВыводитьСообщения - Булево - если Истина, то выводятся сообщения пользователю // // Возвращаемое значение: -// Тип: Структура. Содержит ключи: -// ИмяВременногоКаталогаСообщенийОбмена – полное имя каталога обмена, в которое было загружено сообщение обмена -// ИмяФайлаСообщенияОбмена – полное имя файла сообщения обмена -// ИдентификаторФайлаПакетаДанных – дата изменения файла сообщения обмена +// Структура со следующими ключи: +// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена +// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена +// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена // Функция ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена, ВыводитьСообщения = Истина) Экспорт @@ -2032,14 +1931,14 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // ВыводитьСообщения - Булево - если Истина, то выводятся сообщения пользователю // // Возвращаемое значение: -// Тип: Структура. Содержит ключи: -// ИмяВременногоКаталогаСообщенийОбмена – полное имя каталога обмена, в которое было загружено сообщение обмена -// ИмяФайлаСообщенияОбмена – полное имя файла сообщения обмена -// ИдентификаторФайлаПакетаДанных – дата изменения файла сообщения обмена +// Структура со следующими ключи: +// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена +// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена +// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена // Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, УзелИнформационнойБазы, ВыводитьСообщения = Истина) Экспорт @@ -2125,17 +2024,17 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла // ДлительнаяОперация - Булево - Признак использования длительное операции // ИдентификаторОперации - УникальныйИдентификатор - Уникальный идентификатор длительной операции // ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: -// Тип: Структура. Содержит ключи: -// ИмяВременногоКаталогаСообщенийОбмена – полное имя каталога обмена, в которое было загружено сообщение обмена -// ИмяФайлаСообщенияОбмена – полное имя файла сообщения обмена -// ИдентификаторФайлаПакетаДанных – дата изменения файла сообщения обмена +// Структура со следующими ключи: +// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена +// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена +// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена // Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( Отказ, @@ -2264,15 +2163,15 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла // ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: -// Тип: Структура. Содержит ключи: -// ИмяВременногоКаталогаСообщенийОбмена – полное имя каталога обмена, в которое было загружено сообщение обмена -// ИмяФайлаСообщенияОбмена – полное имя файла сообщения обмена -// ИдентификаторФайлаПакетаДанных – дата изменения файла сообщения обмена +// Структура со следующими ключи: +// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена +// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена +// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена // Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( Отказ, @@ -2347,7 +2246,7 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла // ДатаНачалаОперации - Дата - Дата начала загрузки // ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). @@ -2407,6 +2306,8 @@ // Процедура УдалитьНеактуальныеСообщенияОбмена() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ПроверитьВозможностьАдминистрированияОбменов(); УстановитьПривилегированныйРежим(Истина); @@ -4030,10 +3931,10 @@ // Возвращает имя обработки транспорта сообщений обмена // // Параметры: -// ВидТранспорта – ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, для которого необходимо получить имя обработки +// ВидТранспорта - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, для которого необходимо получить имя обработки // // Возвращаемое значение: -// Тип: Строка. Имя обработки транспорта сообщений обмена +// Строка - имя обработки транспорта сообщений обмена. // Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) Экспорт @@ -4367,7 +4268,7 @@ // Определяет возможность передачи файлов между двумя базами через локальную сеть // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена // ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт @@ -4472,16 +4373,14 @@ // // Параметры: // -// Получатель (обязательный). Тип: ПланОбменаСсылка. Узел плана обмена, -// для которого требуется выполнить регистрацию изменений данных. -// -// ДатаНачалаВыгрузки (обязательный). Тип: Дата. Дата, относительно которой необходимо выполнить -// регистрацию изменений данных для выгрузки. Изменения будут зарегистрированы для данных, -// которые на оси времени располагаются после этой даты. -// -// Организации (необязательный). Тип: Массив, Неопределено. -// Список организаций, для которых необходимо выполнить регистрацию изменений данных. -// Если параметр не задан, то организации не будут учитываться при регистрации изменений. +// Получатель - ПланОбменаСсылка - Узел плана обмена, +// для которого требуется выполнить регистрацию изменений данных. +// ДатаНачалаВыгрузки - Дата - дата, относительно которой необходимо выполнить +// регистрацию изменений данных для выгрузки. Изменения будут зарегистрированы для данных, +// которые на оси времени располагаются после этой даты. +// Организации - Массив, Неопределено - Список организаций, для которых необходимо выполнить регистрацию +// изменений данных. Если параметр не задан, то организации не будут +// учитываться при регистрации изменений. // Процедура ЗарегистрироватьДанныеПоДатеНачалаВыгрузкиИОрганизациям(Знач Получатель, ДатаНачалаВыгрузки, Организации = Неопределено, @@ -5462,7 +5361,7 @@ // либо пользователь с правами поставляемого профиля "Синхронизация данных с другими программами". // // Параметры: -// Пользователь (необязательный) – ПользовательИнформационнойБазы, Неопределено. +// Пользователь (необязательный) - ПользовательИнформационнойБазы, Неопределено. // Пользователь, для которого необходимо вычислить признак разрешения использования синхронизации данных. // Если параметр не задан, то функция вычисляется для текущего пользователя информационной базы. // @@ -5797,10 +5696,10 @@ // Возвращает количество записей в таблице базы данных // // Параметры: -// ИмяТаблицы – Строка – полное имя таблицы базы данных. Например: "Справочник.Контрагенты.Заказы" +// ИмяТаблицы - Строка - полное имя таблицы базы данных. Например: "Справочник.Контрагенты.Заказы" // -// Возвращаемое значение: -// Тип: Число. Количество записей в таблице базы данных +// Возвращаемое значение: +// Число - Количество записей в таблице базы данных. // Функция КоличествоЗаписейВТаблицеБазыДанных(Знач ИмяТаблицы) Экспорт @@ -5826,11 +5725,11 @@ // Возвращает количество записей во временной таблице базы данных // // Параметры: -// ИмяТаблицы – Строка – имя таблицы. Например: "ВременнаяТаблица1" +// ИмяТаблицы - Строка - имя таблицы. Например: "ВременнаяТаблица1" // МенеджерВременныхТаблиц - менеджер временных таблиц, который содержит указатель на временную таблицу ИмяТаблицы // -// Возвращаемое значение: -// Тип: Число. Количество записей в таблице базы данных +// Возвращаемое значение: +// Число - Количество записей в таблице базы данных. // Функция КоличествоЗаписейВоВременнойТаблицеБазыДанных(Знач ИмяТаблицы, МенеджерВременныхТаблиц) Экспорт @@ -5909,7 +5808,7 @@ // Нет. // // Возвращаемое значение: -// Тип: Массив. Элементы массива имеют тип "ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена" +// Массив - Элементы массива имеют тип "ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена" // Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт @@ -6188,7 +6087,7 @@ Возврат; КонецЕсли; - ДанныеЭтойИнформационнойБазы = ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена); + ДанныеЭтойИнформационнойБазы = ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена, Форма.ВерсияКорреспондента); ТабличныеЧастиПланаОбмена = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена, Форма.ВерсияКорреспондента); @@ -6238,35 +6137,47 @@ КонецЦикла; + СоответствиеРеквизитовЭтойПрограммы = Форма.ИменаРеквизитов; + // Объединение таблиц данных Этой базы Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыЭтойБазы"] Цикл - Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда + Если СоответствиеРеквизитовЭтойПрограммы.Свойство(ИмяТабличнойЧасти) Тогда + ИмяРеквизита = СоответствиеРеквизитовЭтойПрограммы[ИмяТабличнойЧасти]; + ИначеЕсли ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда Продолжить; + Иначе + ИмяРеквизита = ИмяТабличнойЧасти; КонецЕсли; ТаблицаРезультат = ДанныеЭтойИнформационнойБазы[ИмяТабличнойЧасти].Скопировать(); ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); - СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); + СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяРеквизита], ТаблицаРезультат); - Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); + Форма[ИмяРеквизита].Загрузить(ТаблицаРезультат); КонецЦикла; + СоответствиеРеквизитовКорреспондента = Форма.ИменаРеквизитовБазыКорреспондента; + // Объединение таблиц данных Корреспондента Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыКорреспондента"] Цикл - Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда + Если СоответствиеРеквизитовКорреспондента.Свойство(ИмяТабличнойЧасти) Тогда + ИмяРеквизита = СоответствиеРеквизитовКорреспондента[ИмяТабличнойЧасти]; + ИначеЕсли ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда Продолжить; + Иначе + ИмяРеквизита = ИмяТабличнойЧасти; КонецЕсли; ТаблицаРезультат = ДанныеКорреспондента[ИмяТабличнойЧасти].Скопировать(); ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); - СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); + СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяРеквизита], ТаблицаРезультат); - Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); + Форма[ИмяРеквизита].Загрузить(ТаблицаРезультат); КонецЦикла; @@ -6306,145 +6217,91 @@ // Для внутреннего использования // -Процедура ЗагрузитьКонтекстВФорму(Форма, Контекст) +Процедура ЗаполнитьДанныеФормы(Форма) - // Заполняем форму данными - Реквизиты = Форма.ПолучитьРеквизиты(); + // Заполняем данные этой программы + СоответствующиеРеквизиты = Форма.ИменаРеквизитов; + НастройкаОтборовНаУзле = Форма.Контекст.НастройкаОтборовНаУзле; - Если Контекст <> Неопределено Тогда - - Для Каждого Реквизит Из Реквизиты Цикл - - Если Контекст.Свойство(Реквизит.Имя) Тогда - - Если ТипЗнч(Форма[Реквизит.Имя]) = Тип("ДанныеФормыКоллекция") Тогда - - Если Контекст[Реквизит.Имя].Количество() = 0 Тогда - - Форма[Реквизит.Имя].Очистить(); - - Иначе - - Таблица = Новый ТаблицаЗначений; - - Для Каждого Элемент Из Контекст[Реквизит.Имя][0] Цикл - - Таблица.Колонки.Добавить(Элемент.Ключ); - - КонецЦикла; - - Для Каждого СтрокаТаблицы Из Контекст[Реквизит.Имя] Цикл - - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - Форма[Реквизит.Имя].Загрузить(Таблица); - - КонецЕсли; - - Иначе - - Форма[Реквизит.Имя] = Контекст[Реквизит.Имя]; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - Форма.Реквизиты = ПолучитьРеквизитыФормы(Форма); - -КонецПроцедуры - -// Для внутреннего использования -// -Функция ВыгрузитьКонтекстИзФормы(Форма) - - // возвращаемое значение функции - Контекст = Новый Структура; - - Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолучитьРеквизитыФормы(Форма)); - - Для Каждого Реквизит Из Реквизиты Цикл + Для Каждого ЭлементНастройки Из НастройкаОтборовНаУзле Цикл - Если Найти(Реквизит, ".") > 0 Тогда + Если СоответствующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда + ИмяРеквизита = СоответствующиеРеквизиты[ЭлементНастройки.Ключ]; + Иначе + ИмяРеквизита = ЭлементНастройки.Ключ; + КонецЕсли; + + РеквизитФормы = Форма[ИмяРеквизита]; + + Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда - Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизит, "."); - - Если Колонки.Количество() > 0 Тогда + Если ТипЗнч(ЭлементНастройки.Значение) = Тип("Массив") + И ЭлементНастройки.Значение.Количество() > 0 Тогда - ИмяТаблицы = Колонки[0]; + Таблица = Форма[ИмяРеквизита].Выгрузить(); - Колонки.Удалить(0); + Таблица.Очистить(); - КолонкиСтрокой = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Колонки); - - Таблица = Новый Массив; - - Для Каждого Элемент Из Форма[ИмяТаблицы] Цикл + Для Каждого СтрокаТаблицы Из ЭлементНастройки.Значение Цикл - СтрокаТаблицы = Новый Структура(КолонкиСтрокой); - - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); - - Таблица.Добавить(СтрокаТаблицы); + ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); КонецЦикла; - Контекст.Вставить(ИмяТаблицы, Таблица) + Форма[ИмяРеквизита].Загрузить(Таблица); КонецЕсли; Иначе - Контекст.Вставить(Реквизит, Форма[Реквизит]) + Форма[ИмяРеквизита] = ЭлементНастройки.Значение; КонецЕсли; КонецЦикла; - Возврат Контекст; -КонецФункции - -// Для внутреннего использования -// -Функция ПолучитьРеквизитыФормы(Форма) + // Заполняем данные корреспондента + СоответствующиеРеквизиты = Форма.ИменаРеквизитовБазыКорреспондента; + НастройкаОтборовНаУзлеБазыКорреспондента = Форма.Контекст.НастройкаОтборовНаУзлеБазыКорреспондента; - Реквизиты = Форма.ПолучитьРеквизиты(); - - // Получаем описание структуры данных формы - РеквизитыСтрокой = Новый Массив; - - Для Каждого Реквизит Из Реквизиты Цикл + Для Каждого ЭлементНастройки Из НастройкаОтборовНаУзлеБазыКорреспондента Цикл - Если ТипЗнч(Форма[Реквизит.Имя]) = Тип("ДанныеФормыКоллекция") Тогда + Если СоответствующиеРеквизиты.Свойство(ЭлементНастройки.Ключ) Тогда + ИмяРеквизита = СоответствующиеРеквизиты[ЭлементНастройки.Ключ]; + Иначе + ИмяРеквизита = ЭлементНастройки.Ключ; + КонецЕсли; + + РеквизитФормы = Форма[ИмяРеквизита]; + + Если ТипЗнч(РеквизитФормы) = Тип("ДанныеФормыКоллекция") Тогда - Таблица = Форма[Реквизит.Имя].Выгрузить(); - - Колонки = Новый Массив; - Колонки.Добавить(Реквизит.Имя); - - Для Каждого Колонка Из Таблица.Колонки Цикл + Если ТипЗнч(ЭлементНастройки.Значение) = Тип("Массив") + И ЭлементНастройки.Значение.Количество() > 0 Тогда - Колонки.Добавить(Колонка.Имя); + Таблица = Форма[ИмяРеквизита].Выгрузить(); - КонецЦикла; - - РеквизитыСтрокой.Добавить(СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Колонки, ".")); + Таблица.Очистить(); + + Для Каждого СтрокаТаблицы Из ЭлементНастройки.Значение Цикл + + ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + Форма[ИмяРеквизита].Загрузить(Таблица); + + КонецЕсли; Иначе - РеквизитыСтрокой.Добавить(Реквизит.Имя); + Форма[ИмяРеквизита] = ЭлементНастройки.Значение; КонецЕсли; КонецЦикла; - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(РеквизитыСтрокой); -КонецФункции +КонецПроцедуры // Проверяет наличие указанных реквизитов в форме. // Если хотя бы один реквизит отсутствует, то вызывает исключение. @@ -6476,6 +6333,111 @@ КонецПроцедуры +// Для внутреннего использования +// +Процедура УстановитьОбязательныеРеквизитыФормы(Форма, ОбязательныеРеквизитыФормы) + + ОтсутствующиеРеквизиты = Новый Массив; + + РеквизитыФормы = ИменаРеквизитовФормы(Форма); + + Для Каждого Реквизит Из ОбязательныеРеквизитыФормы Цикл + + Если РеквизитыФормы.Найти(Реквизит.Имя) = Неопределено Тогда + + ОтсутствующиеРеквизиты.Добавить(Новый РеквизитФормы(Реквизит.Имя, Реквизит.ТипРеквизита)); + Реквизит.РеквизитДобавлен = Истина; + + КонецЕсли; + + КонецЦикла; + + Если ОтсутствующиеРеквизиты.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Форма.ИзменитьРеквизиты(ОтсутствующиеРеквизиты); + + // Инициализация значений + ПараметрыОтбора = Новый Структура(); + ПараметрыОтбора.Вставить("ТребуетсяЗаполнение", Истина); + ПараметрыОтбора.Вставить("РеквизитДобавлен", Истина); + РеквизитыДляЗаполнения = ОбязательныеРеквизитыФормы.НайтиСтроки(ПараметрыОтбора); + + Для Каждого Реквизит Из РеквизитыДляЗаполнения Цикл + + Форма[Реквизит.Имя] = Реквизит.ЗначениеЗаполнения; + + КонецЦикла; + +КонецПроцедуры + +// Для внутреннего использования +// +Функция ОбязательныеРеквизитыФормыНастройкиУзлов() + + ОбязательныеРеквизитыФормы = Новый ТаблицаЗначений; + + ОбязательныеРеквизитыФормы.Колонки.Добавить("Имя"); + ОбязательныеРеквизитыФормы.Колонки.Добавить("ТипРеквизита"); + ОбязательныеРеквизитыФормы.Колонки.Добавить("ТребуетсяЗаполнение"); + ОбязательныеРеквизитыФормы.Колонки.Добавить("ЗначениеЗаполнения"); + ОбязательныеРеквизитыФормы.Колонки.Добавить("РеквизитДобавлен"); + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "Контекст"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); + НоваяСтрока.ТребуетсяЗаполнение = Ложь; + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "ОписаниеКонтекста"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); + НоваяСтрока.ТребуетсяЗаполнение = Ложь; + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "Реквизиты"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); + НоваяСтрока.ТребуетсяЗаполнение = Ложь; + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "ВерсияКорреспондента"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов("Строка"); + НоваяСтрока.ТребуетсяЗаполнение = Ложь; + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "ИменаРеквизитов"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); + НоваяСтрока.ТребуетсяЗаполнение = Истина; + НоваяСтрока.ЗначениеЗаполнения = Новый Структура; + + НоваяСтрока = ОбязательныеРеквизитыФормы.Добавить(); + НоваяСтрока.Имя = "ИменаРеквизитовБазыКорреспондента"; + НоваяСтрока.ТипРеквизита = Новый ОписаниеТипов(); + НоваяСтрока.ТребуетсяЗаполнение = Истина; + НоваяСтрока.ЗначениеЗаполнения = Новый Структура; + + ОбязательныеРеквизитыФормы.ЗаполнитьЗначения(Ложь, "РеквизитДобавлен"); + + Возврат ОбязательныеРеквизитыФормы; + +КонецФункции + +// Для внутреннего использования +// +Процедура ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкиПоУмолчанию) + + Для Каждого Настройка Из НастройкиПоУмолчанию Цикл + + Если ТипЗнч(Настройка.Значение) = Тип("Структура") Тогда + + НастройкиПоУмолчанию.Вставить(Настройка.Ключ, Новый Массив); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + // Для внутреннего использования // Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт @@ -6633,11 +6595,11 @@ // Для внутреннего использования // -Функция ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(Знач ИмяПланаОбмена) Экспорт +Функция ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(Знач ИмяПланаОбмена, ВерсияКорреспондента = "") Экспорт Результат = Новый Структура; - ОбщиеТаблицыУзлов = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена)["ВсеТаблицыЭтойБазы"]; + ОбщиеТаблицыУзлов = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента)["ВсеТаблицыЭтойБазы"]; Для Каждого ИмяТабличнойЧасти Из ОбщиеТаблицыУзлов Цикл @@ -6850,6 +6812,7 @@ Отказ = Ложь; + УстановитьПривилегированныйРежим(Истина); ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиПараметровУчета(Отказ, Корреспондент, СообщениеОбОшибке); Возврат Не Отказ; @@ -7093,7 +7056,7 @@ // Для внутреннего использования // -Функция ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) Экспорт +Функция ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики, Знач ВключатьУдалениеОбъектов = Ложь) Экспорт ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); @@ -7101,10 +7064,10 @@ Отбор = Новый Структура("ПолноеИмя", ОтборСтрока); - // получаем дерево объектов метаданных конфигурации + // Получаем дерево объектов метаданных конфигурации ДеревоИнформацииСтатистики = ОбменДаннымиПовтИсп.ПолучитьДеревоМетаданныхКонфигурации(Отбор).Скопировать(); - // добавляем колонки + // Добавляем колонки ДеревоИнформацииСтатистики.Колонки.Добавить("Ключ"); ДеревоИнформацииСтатистики.Колонки.Добавить("КоличествоОбъектовВИсточнике"); ДеревоИнформацииСтатистики.Колонки.Добавить("КоличествоОбъектовВПриемнике"); @@ -7121,70 +7084,135 @@ ДеревоИнформацииСтатистики.Колонки.Добавить("ЭтоУдалениеОбъекта"); ДеревоИнформацииСтатистики.Колонки.Добавить("ДанныеУспешноЗагружены"); - ИнформацияСтатистикиОбычныеОбъекты = ИнформацияСтатистики.Скопировать(Новый Структура("ОдинКоМногим, ЭтоУдалениеОбъекта", Ложь, Ложь)); - // заполняем обычные строки - Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОбычныеОбъекты Цикл + // Индексы для поиска в статистике + Индексы = ИнформацияСтатистики.Индексы; + Если Индексы.Количество() = 0 Тогда + Если ВключатьУдалениеОбъектов Тогда + Индексы.Добавить("ЭтоУдалениеОбъекта"); + Индексы.Добавить("ОдинКоМногим, ЭтоУдалениеОбъекта"); + Индексы.Добавить("ЭтоКлассификатор, ЭтоУдалениеОбъекта"); + Иначе + Индексы.Добавить("ОдинКоМногим"); + Индексы.Добавить("ЭтоКлассификатор"); + КонецЕсли; + КонецЕсли; + + ОбработанныеСтроки = Новый Соответствие; + + // Обычные строки + Отбор = Новый Структура("ОдинКоМногим", Ложь); + Если Не ВключатьУдалениеОбъектов Тогда + Отбор.Вставить("ЭтоУдалениеОбъекта", Ложь); + КонецЕсли; + Для Каждого СтрокаТаблицы Из ИнформацияСтатистики.НайтиСтроки(Отбор) Цикл СтрокаДерева = ДеревоИнформацииСтатистики.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); - ЗаполнитьЗначенияСвойств(СтрокаДерева, СтрокаТаблицы); + ОбработанныеСтроки[СтрокаТаблицы] = Истина; КонецЦикла; - // добавляем строки с типом "ОдинКоМногим" + // Добавляем строки с типом ОдинКоМногим Отбор = Новый Структура("ОдинКоМногим", Истина); - ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор); + Если Не ВключатьУдалениеОбъектов Тогда + Отбор.Вставить("ЭтоУдалениеОбъекта", Ложь); + КонецЕсли; + ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, ОбработанныеСтроки); - // добавляем строки удаления объектов - Отбор = Новый Структура("ЭтоУдалениеОбъекта", Истина); - ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор); + // Добавляем строки классификаторов + Отбор = Новый Структура("ЭтоКлассификатор", Истина); + Если Не ВключатьУдалениеОбъектов Тогда + Отбор.Вставить("ЭтоУдалениеОбъекта", Ложь); + КонецЕсли; + ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, ОбработанныеСтроки); + + // Добавляем строки удаления объектов + Если ВключатьУдалениеОбъектов Тогда + Отбор = Новый Структура("ЭтоУдалениеОбъекта", Истина); + ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, ОбработанныеСтроки); + КонецЕсли; + + // Очищаем пустые строки + СтрокиСтатистики = ДеревоИнформацииСтатистики.Строки; + ПозицияГруппы = СтрокиСтатистики.Количество() - 1; + Пока ПозицияГруппы >=0 Цикл + Группа = СтрокиСтатистики[ПозицияГруппы]; + + Элементы = Группа.Строки; + Позиция = Элементы.Количество() - 1; + Пока Позиция >=0 Цикл + Элемент = Элементы[Позиция]; + + Если Элемент.КоличествоОбъектовВПриемнике = Неопределено + И Элемент.КоличествоОбъектовВИсточнике = Неопределено + И Элемент.Строки.Количество() = 0 + Тогда + Элементы.Удалить(Элемент); + КонецЕсли; + + Позиция = Позиция - 1; + КонецЦикла; + + Если Элементы.Количество() = 0 Тогда + СтрокиСтатистики.Удалить(Группа); + КонецЕсли; + ПозицияГруппы = ПозицияГруппы - 1; + КонецЦикла; Возврат ДеревоИнформацииСтатистики; КонецФункции // Для внутреннего использования // -Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор) +Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, УжеОбработанныеСтроки) - ИнформацияСтатистикиОдинКоМногим = ИнформацияСтатистики.Скопировать(Отбор); + СтрокиДляОбработки = ИнформацияСтатистики.НайтиСтроки(Отбор); - Если ИнформацияСтатистикиОдинКоМногим.Количество() = 0 Тогда + // Игнорируем уже обработанные строки источника + Позиция = СтрокиДляОбработки.ВГраница(); + Пока Позиция >= 0 Цикл + Кандидат = СтрокиДляОбработки[Позиция]; + + Если УжеОбработанныеСтроки[Кандидат] <> Неопределено Тогда + СтрокиДляОбработки.Удалить(Позиция); + Иначе + УжеОбработанныеСтроки[Кандидат] = Истина; + КонецЕсли; + + Позиция = Позиция - 1; + КонецЦикла; + + Если СтрокиДляОбработки.Количество() = 0 Тогда Возврат; КонецЕсли; - ИнформацияСтатистикиОдинКоМногимВременная = ИнформацияСтатистикиОдинКоМногим.Скопировать(, "ИмяТаблицыПриемника"); + ИнформацияСтатистикиОдинКоМногим = ИнформацияСтатистики.Скопировать(СтрокиДляОбработки); + ИнформацияСтатистикиОдинКоМногим.Индексы.Добавить("ИмяТаблицыПриемника"); + + ИнформацияСтатистикиОдинКоМногимВременная = ИнформацияСтатистикиОдинКоМногим.Скопировать(СтрокиДляОбработки, "ИмяТаблицыПриемника"); + ИнформацияСтатистикиОдинКоМногимВременная.Свернуть("ИмяТаблицыПриемника"); Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОдинКоМногимВременная Цикл - - Строки = ИнформацияСтатистикиОдинКоМногим.НайтиСтроки(Новый Структура("ИмяТаблицыПриемника", СтрокаТаблицы.ИмяТаблицыПриемника)); - + Строки = ИнформацияСтатистикиОдинКоМногим.НайтиСтроки(Новый Структура("ИмяТаблицыПриемника", СтрокаТаблицы.ИмяТаблицыПриемника)); СтрокаДерева = ДеревоИнформацииСтатистики.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); Для Каждого Строка Из Строки Цикл - НоваяСтрокаДерева = СтрокаДерева.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, СтрокаДерева); ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, Строка); Если Строка.ЭтоУдалениеОбъекта Тогда - НоваяСтрокаДерева.Картинка = БиблиотекаКартинок.ПометитьНаУдаление; - Иначе - Синоним = "[СинонимТаблицыПриемника] ([ИмяТаблицыИсточника])"; Синоним = СтрЗаменить(Синоним, "[СинонимТаблицыПриемника]", НоваяСтрокаДерева.Синоним); Синоним = СтрЗаменить(Синоним, "[ИмяТаблицыИсточника]", УдалитьИмяКлассаИзИмениОбъекта(Строка.ТипИсточникаСтрокой)); НоваяСтрокаДерева.Синоним = Синоним; - КонецЕсли; - КонецЦикла; - КонецЦикла; КонецПроцедуры @@ -7390,8 +7418,6 @@ Возврат Результат; КонецФункции - - // Для внутреннего использования // Функция ПолучитьWSПроксиПоПараметрамПодключения( @@ -7740,11 +7766,15 @@ Процедура ЗагрузитьПравилаДляОбменаДанными(Отказ, Знач ИмяПланаОбмена, Знач ВидПравил, - Знач ИмяМакетаПравил) + Знач ИмяМакетаПравил, + Знач ИмяМакетаПравилКорреспондента = "") СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); СтруктураЗаписи.Вставить("ВидПравил", ВидПравил); + Если Не ПустаяСтрока(ИмяМакетаПравилКорреспондента) Тогда + СтруктураЗаписи.Вставить("ИмяМакетаПравилКорреспондента", ИмяМакетаПравилКорреспондента); + КонецЕсли; СтруктураЗаписи.Вставить("ИмяМакетаПравил", ИмяМакетаПравил); СтруктураЗаписи.Вставить("ИсточникПравил", Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации); СтруктураЗаписи.Вставить("ИспользоватьФильтрВыборочнойРегистрацииОбъектов", Истина); @@ -7779,15 +7809,27 @@ КонецЕсли; Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено - И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда + И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") + И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбменаКорреспондента") Тогда - ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, "ПравилаОбмена"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется обновление правил конвертации данных для плана обмена %1'"), ИмяПланаОбмена); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, + "ПравилаОбмена", "ПравилаОбменаКорреспондента"); КонецЕсли; Если ПравилаРегистрацииЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется обновление правил регистрации данных для плана обмена %1'"), ИмяПланаОбмена); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов, "ПравилаРегистрации"); КонецЕсли; @@ -7835,7 +7877,7 @@ // Проверяет признак того, что правила обмена загружены для заданного плана обмена // // Возвращаемое значение: -// Тип: Булево. Истина – привила обмена загружены в ИБ; Ложь – нет. +// Истина - привила обмена загружены в ИБ, иначе Ложь. // Функция ПравилаКонвертацииОбъектовДляПланаОбменаЗагружены(Знач ИмяПланаОбмена) Экспорт @@ -7859,7 +7901,7 @@ // Выполняет проверку того, что размер файла сообщения обмена превышает допустимый размер. // // Возвращаемое значение: -// Тип: Булево. Истина – размер файла больше допустимого; Ложь – размер файла не превышает допустимого размера. +// Истина - если размер файла больше допустимого, иначе Ложь. // Функция РазмерСообщенияОбменаПревышаетДопустимый(Знач ИмяФайла, Знач МаксимальныйДопустимыйРазмерСообщения) Экспорт @@ -7963,6 +8005,115 @@ КонецПроцедуры +// Выполняет загрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() Экспорт + + Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + УстановитьПривилегированныйРежим(Истина); + УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Истина); + УстановитьПривилегированныйРежим(Ложь); + + Попытка + // Обновление правил регистрации объектов выполняем до загрузки данных + ВыполнитьОбновлениеПравилДляОбменаДанными(); + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + Отказ = Ложь; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); // только загрузка + + // Режим повтора требует включения в следующих случаях. + // Случай 1. Получены метаданные с новой версией конфигурации, т.е. будет выполнено обновление ИБ. + // - если Отказ = Истина, тогда недопустимо продолжение, т.к. могут быть созданы дубли генерируемых данных, + // - если Отказ = Ложь, тогда возможна ошибка при обновлении ИБ, возможно требующая повторной загрузки сообщения. + // Случай 2. Получены метаданные с той же версией конфигурации, т.е. не будет выполнено обновление ИБ. + // - если Отказ = Истина, тогда возможна ошибка при продолжении запуска, например, из-за того, что + // не были загружены предопределенные элементы, + // - если Отказ = Ложь, тогда продолжение возможно, т.к. выгрузку можно сделать позднее (если же + // выгрузка не выполняется успешно, тогда позднее можно получить и новое сообщение для загрузки). + + Если Отказ ИЛИ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Получение данных из главного узла завершилось с ошибками.'"); + КонецЕсли; + Исключение + УстановитьПривилегированныйРежим(Истина); + УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + УстановитьПривилегированныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + УстановитьПривилегированныйРежим(Истина); + УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Выполняет выгрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() Экспорт + + // После успешной загрузки и обновления ИБ режим повтора можно отключить. + ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + Попытка + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВыполнитьВыгрузку = Истина; + + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); + + ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда + + ВыполнитьВыгрузку = Ложь; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); + + КонецЕсли; + + Если ВыполнитьВыгрузку Тогда + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); // только выгрузка + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + // Устанавливает признак повторения загрузки при ошибке загрузки или обновления. // Очищает хранилище сообщения обмена, полученного из главного узла РИБ. // @@ -7985,6 +8136,74 @@ КонецПроцедуры +// Выполняет загрузку и выгрузку сообщения обмена, которое +// содержало изменения конфигурации, которые не потребовали +// обновления информационной базы. +// +Процедура ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы( + ПриЗапускеКлиентскогоПриложения, Перезапустить) Экспорт + + Если Не ЗагрузитьСообщениеОбменаДанными() Тогда + // Если загрузка сообщения обмена была отменена, а версия конфигурации + // в изменениях метаданных не была повышена, тогда повторение загрузки нужно отключить. + ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + Возврат; + КонецЕсли; + + Если КонфигурацияИзменена() Тогда + // Изменения конфигурации загружены, но не применены. + // Загружать сообщение еще рано. + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); + ЗафиксироватьТранзакцию(); + Исключение + Если КонфигурацияИзменена() Тогда + Если НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "СообщениеПолученоИзКэша") Тогда + // Переход с конфигурации, в которой не использовалось кэширование + // сообщения обмена. Возможно, новое загруженное сообщение содержит + // новые изменения конфигурации. Определить возврат к конфигурации + // базы данных невозможно. Следует зафиксировать транзакцию и продолжить + // запуск без выгрузки нового сообщения обмена. + ЗафиксироватьТранзакцию(); + Возврат; + Иначе + // Вновь получены изменения конфигурации, значит + // был выполнен возврат к конфигурации базы данных. + // Следует отменить загрузку. + ОтменитьТранзакцию(); + УстановитьПривилегированныйРежим(Истина); + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); + УстановитьПривилегированныйРежим(Ложь); + ЗаписатьСобытиеПолученияДанных(ГлавныйУзел(), + НСтр("ru = 'Обнаружен возврат к конфигурации базы данных. + |Синхронизация отменена.'")); + Возврат; + КонецЕсли; + КонецЕсли; + // Если был выполнен возврат к конфигурации базы данных, + // но конфигуратор не был закрыт. Тогда новое сообщение не загружено. + // Перейдя в режим повтора и в этом случае, можно будет нажать кнопку + // "Не синхронизировать и продолжить" после чего возврат к конфигурации + // базы данных будет закончен успешно. + ЗафиксироватьТранзакцию(); + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + Если ПриЗапускеКлиентскогоПриложения Тогда + Перезапустить = Истина; + Возврат; + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); + +КонецПроцедуры + // Для внутреннего использования // Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, @@ -8030,12 +8249,12 @@ // Получает узел распределенной информационной базы, являющийся главным для текущей информационной базы при условии, // что распределенная информационная база создана на базе плана обмена, обслуживаемым подсистемой обмена данными БСП. // -// Возвращаемое значение: -// Тип: ПланОбменаСсылка.<Имя плана обмена>; Неопределено. -// Если текущая информационная база не является узлом распределенной информационной базы -// или главный узел для нее не определен (она сама является корневым узлом) -// или распределенная информационная база создана на базе плана обмена, который не обслуживается подсистемой обмена данными БСП, -// то метод возвращает Неопределено. +// Возвращаемое значение: +// ПланОбменаСсылка.<Имя плана обмена>; Неопределено - Если текущая информационная база не является +// узлом распределенной информационной базы +// или главный узел для нее не определен (она сама является корневым узлом) +// или распределенная информационная база создана на базе плана обмена, который не обслуживается подсистемой обмена данными БСП, +// то метод возвращает Неопределено. // Функция ГлавныйУзел() Экспорт @@ -8357,16 +8576,7 @@ // Функция ОбработкаОбменаДляЗагрузкиДанных(Отказ, Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт - // Платформенный кэш не используем при работе через веб-сервер - Если ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() Тогда - - Возврат ОбработкаДляЗагрузкиДанных(Отказ, УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); - - Иначе - - Возврат ОбменДаннымиПовтИсп.ОбработкаДляЗагрузкиДанных(Отказ, УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); - - КонецЕсли; + Возврат ОбменДаннымиПовтИсп.ОбработкаДляЗагрузкиДанных(Отказ, УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); КонецФункции @@ -8375,11 +8585,11 @@ // и конкретного файла сообщения обмена с уникальным полным именем. // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена // ИмяФайлаСообщенияОбмена - Строка - уникальное имя файла сообщения обмена для загрузки данных // -// Возвращаемое значение: -// Тип: ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз - инициализированная обработка для загрузки данных +// Возвращаемое значение: +// ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз - инициализированная обработка для загрузки данных. // Функция ОбработкаДляЗагрузкиДанных(Отказ, Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт @@ -8401,7 +8611,7 @@ ОбработкаОбменаДанными.УзелОбменаЗагрузкаДанных = УзелИнформационнойБазы; ОбработкаОбменаДанными.ИмяФайлаОбмена = ИмяФайлаСообщенияОбмена; - ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = РегистрыСведений.НастройкиТранспортаОбмена.КоличествоЭлементовВТранзакцииЗагрузкиДанных(УзелИнформационнойБазы); + ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); @@ -8416,7 +8626,7 @@ // Если пароля нет, то возвращается Неопределено. // // Возвращаемое значение: -// Тип: Строка, Неопределено - значения пароля синхронизации данных. +// Строка, Неопределено - значения пароля синхронизации данных. // Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт @@ -9155,7 +9365,6 @@ | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы.Код КАК УзелИнформационнойБазыКод, | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ДействиеПриОбмене, - | НастройкиВыполненияОбменаНастройкиОбмена.КоличествоЭлементовВТранзакции КАК КоличествоЭлементовВТранзакции, | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка.Наименование КАК НастройкаВыполненияОбменаНаименование, | ВЫБОР @@ -9210,6 +9419,8 @@ // СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); + КонецПроцедуры // Для внутреннего использования @@ -9294,7 +9505,7 @@ СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыНаименование", ""); СтруктураНастроекОбмена.Вставить("ВидТранспортаОбмена"); СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); - СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 0); // все элементы в одной транзакции + СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 1); // на каждый элемент отдельная транзакция СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных", Ложь); СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных", Ложь); СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Ложь); @@ -9562,6 +9773,8 @@ ОбработкаОбменаДанными.РежимОбмена = "Загрузка"; ОбработкаОбменаДанными.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбмена.УзелИнформационнойБазы; + УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); Возврат ОбработкаОбменаДанными @@ -9616,6 +9829,34 @@ КонецПроцедуры +Процедура УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) + + ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена, Истина); + + Если ПравилаКонвертацииОбъектов = Неопределено Тогда + + // правила обмена должны быть указаны + НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Загрузка данных отменена.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + Возврат; + КонецЕсли; + + ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; + + Попытка + ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + Возврат; + КонецПопытки; + +КонецПроцедуры + // Считывает настройки отладки из ИБ и устанавливает их для структуры обмена // Процедура УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена, ЭтоВнешнееСоединение = Ложь) @@ -9815,6 +10056,76 @@ // КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Количество элементов в транзакции + +Функция КоличествоЭлементовВТранзакцииЗагрузкиДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Получить(); + +КонецФункции + +Функция КоличествоЭлементовВТранзакцииВыгрузкиДанных() Экспорт + + Возврат 1; + +КонецФункции + +Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) + + Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + КоличествоЭлементов = КоличествоЭлементовВТранзакцииВыгрузкиДанных(); + Иначе + КоличествоЭлементов = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); + КонецЕсли; + + Возврат КоличествоЭлементов; + +КонецФункции + +Процедура УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных(Количество) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Установить(Количество); + +КонецПроцедуры + +Процедура ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат) Экспорт + + Результат.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", КоличествоЭлементовВТранзакцииВыгрузкиДанных()); + Результат.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", КоличествоЭлементовВТранзакцииЗагрузкиДанных()); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с монитором проблем обмена данными + +// Для внутреннего использования +// +Функция КоличествоПроблемОбменаДанными(УзлыОбмена = Неопределено, ТипПроблемы = Неопределено, + УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт + + Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, + ТипПроблемы, УчитыватьПроигнорированные, Период, СтрокаПоиска); + +КонецФункции + +// Для внутреннего использования +// +Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, + УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, + ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); + КонецЕсли; + + Возврат 0; + +КонецФункции + // Регистрирует ошибки при отложенном проведении документа в мониторе проблем обмена // // Параметры: @@ -9849,24 +10160,31 @@ // // КонецПроцедуры; // -Процедура ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбмена, СообщениеОбОшибке) Экспорт - - СтрокаСообщения = НСтр("ru = 'Не удалось провести документ %1, полученный из другой информационной базы, по причине %2. - |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), СообщениеОбОшибке); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение, ,, СтрокаСообщения); +Процедура ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбмена, ТекстИсключения) Экспорт СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстОшибки = ""; + ТекстСообщения = ТекстИсключения; Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; + ТекстСообщения = ТекстСообщения + ?(ПустаяСТрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; КонецЦикла; - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, - ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + ПричинаОшибки = ТекстСообщения; + Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда + + ПричинаОшибки = НСтр("ru = ' По причине %1.'"); + ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); + + КонецЕсли; + СтрокаСообщения = НСтр("ru = 'Не удалось провести документ %1, полученный из другой информационной базы.%2 + |Возможно не заполнены все реквизиты, обязательные к заполнению.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, + ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); КонецПроцедуры @@ -9904,54 +10222,34 @@ // // КонецПроцедуры; // -Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, СообщениеОбОшибке) Экспорт - - СтрокаСообщения = НСтр("ru = 'Не удалось записать объект %1, полученный из другой информационной базы, по причине %2. - |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), СообщениеОбОшибке); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение, ,, СтрокаСообщения); +Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, ТекстИсключения) Экспорт СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстОшибки = ""; + ТекстСообщения = ТекстИсключения; Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; + ТекстСообщения = ТекстСообщения + ?(ПустаяСТрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; КонецЦикла; + ПричинаОшибки = ТекстСообщения; + Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда + + ПричинаОшибки = НСтр("ru = ' По причине %1.'"); + ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); + + КонецЕсли; + + СтрокаСообщения = НСтр("ru = 'Не удалось записать объект %1, полученный из другой информационной базы.%2 + |Возможно не заполнены все реквизиты, обязательные к заполнению.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, - ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); + ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с монитором проблем обмена данными - -// Для внутреннего использования -// -Функция КоличествоПроблемОбменаДанными(УзлыОбмена = Неопределено, ТипПроблемы = Неопределено, - УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт - - Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, - ТипПроблемы, УчитыватьПроигнорированные, Период, СтрокаПоиска); - -КонецФункции - -// Для внутреннего использования -// -Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, - УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, - ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); - КонецЕсли; - - Возврат 0; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ @@ -10014,7 +10312,7 @@ // Возвращает представление даты синхронизации. // // Параметры: -// ДатаСинхронизации – Дата. Абсолютная дата синхронизации данных. +// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. // Функция ПредставлениеДатыСинхронизации(Знач ДатаСинхронизации) Экспорт @@ -10029,7 +10327,7 @@ // Возвращает представление относительной даты синхронизации. // // Параметры: -// ДатаСинхронизации – Дата. Абсолютная дата синхронизации данных. +// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. // // Интервалы времени: // Никогда (Т = пустая дата) @@ -10117,12 +10415,56 @@ КонецФункции +// Для внутреннего использования +// +Процедура ЗаполнитьТаблицуЗначений(Приемник, Знач Источник) Экспорт + Приемник.Очистить(); + + Если ТипЗнч(Источник)=Тип("ТаблицаЗначений") Тогда + КолонкиИсточника = Источник.Колонки; + Иначе + Времянка = Источник.Выгрузить(Новый Массив); + КолонкиИсточника = Времянка.Колонки; + КонецЕсли; + + Если ТипЗнч(Приемник)=Тип("ТаблицаЗначений") Тогда + КолонкиПриемника = Приемник.Колонки; + КолонкиПриемника.Очистить(); + Для Каждого Колонка Из КолонкиИсточника Цикл + ЗаполнитьЗначенияСвойств(КолонкиПриемника.Добавить(), Колонка); + КонецЦикла; + КонецЕсли; + + Для Каждого Строка Из Источник Цикл + ЗаполнитьЗначенияСвойств(Приемник.Добавить(), Строка); + КонецЦикла; +КонецПроцедуры + +Функция ТаблицаВМассивСтруктур(Знач ТаблицаЗначений) + Результат = Новый Массив; + + ИменаКолонок = ""; + Для Каждого Колонка из ТаблицаЗначений.Колонки Цикл + ИменаКолонок = ИменаКолонок + "," + Колонка.Имя; + КонецЦикла; + ИменаКолонок = Сред(ИменаКолонок, 2); + + Для Каждого Строка Из ТаблицаЗначений Цикл + СтруктураСтроки = Новый Структура(ИменаКолонок); + ЗаполнитьЗначенияСвойств(СтруктураСтроки, Строка); + Результат.Добавить(СтруктураСтроки); + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Константы // Функция-свойство: возвращает литерал обозначения строки неограниченной длины. // -// Тип: Строка +// Возвращаемое значение: +// Строка - литерал обозначения строки неограниченной длины. // Функция СтрокаНеограниченнойДлины() Экспорт @@ -10132,7 +10474,8 @@ // Функция-свойство: возвращает литерал обозначения узла-XML, который содержит значение константы ПРО // -// Тип: Строка +// Возвращаемое значение: +// Строка - литерал обозначения узла-XML, который содержит значение константы ПРО. // Функция ЭлементОтбораСвойствоЗначениеКонстанты() Экспорт @@ -10142,7 +10485,8 @@ // Функция-свойство: возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения // -// Тип: Строка +// Возвращаемое значение: +// Строка - возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения. // Функция ЭлементОтбораСвойствоАлгоритмЗначения() Экспорт @@ -10152,7 +10496,8 @@ // Функция-свойство: возвращает имя файла, который используется для проверки подключения обработки транспорта // -// Тип: Строка +// Возвращаемое значение: +// Строка - возвращает имя файла, который используется для проверки подключения обработки транспорта. // Функция ИмяФайлаПроверкиПодключения() Экспорт @@ -10180,7 +10525,7 @@ // Функция ЭтоОшибкаНомерСообщенияМеньшеИлиРавенНомеруРанееПринятогоСообщения(ОписаниеОшибки) - Возврат Найти(НРег(ОписаниеОшибки), НРег("Номер сообщения меньше или равен")) > 0; + Возврат Найти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; КонецФункции @@ -10302,12 +10647,18 @@ Функция ВыгрузкаСсылкиРазрешена(УзелОбмена, Ссылка, ДополнительныеСвойства=Неопределено) Экспорт Если Ссылка.Пустая() Тогда - Возврат Ложь + Возврат Ложь; + КонецЕсли; + + РежимВыгрузкиОбъекта = ОбменДаннымиПовтИсп.РежимВыгрузкиОбъекта(Ссылка.Метаданные().ПолноеИмя(), УзелОбмена); + Если РежимВыгрузкиОбъекта = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости Тогда + // Выгружаемые по ссылке можно всегда + Возврат Истина; КонецЕсли; ОбъектСсылки = Ссылка.ПолучитьОбъект(); - Если ОбъектСсылки = Неопределено Тогда - // Объект удален удаление объекта посылаем всегда. + Если ОбъектСсылки=Неопределено Тогда + // Объект удален, можно всегда Возврат Истина; КонецЕсли; @@ -10436,7 +10787,7 @@ // Возвращает идентификатор поставляемого профиля групп доступа "Синхронизация данных с другими программами" // // Возвращаемое значение: -// Тип: Строка. +// Строка - идентификатор поставляемого профиля групп доступа. // Функция ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами() Экспорт @@ -10456,6 +10807,120 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Профили безопасности +// + +Процедура СформироватьЗапросыНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Константы.КаталогСообщенийОбменаДаннымиДляLinux.СоздатьМенеджерЗначения().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + Константы.КаталогСообщенийОбменаДаннымиДляWindows.СоздатьМенеджерЗначения().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + РегистрыСведений.НастройкиТранспортаОбмена.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + РегистрыСведений.ПравилаДляОбменаДанными.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + +КонецПроцедуры + +Функция ЗапросНаИспользованиеВнешнихРесурсовПриВключенииОбмена() Экспорт + + Запросы = Новый Массив(); + СформироватьЗапросыНаИспользованиеВнешнихРесурсов(Запросы); + Возврат Запросы; + +КонецФункции + +Процедура ЗапросВнешнихРесурсовДляКаталогаСообщенийОбменаДанными(ЗапросыРазрешений, Объект) Экспорт + + ЗначениеКонстанты = Объект.Значение; + Если Не ПустаяСтрока(ЗначениеКонстанты) Тогда + + Разрешения = Новый Массив(); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + ЗначениеКонстанты, Истина, Истина)); + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Объект.Метаданные()))); + + КонецЕсли; + +КонецПроцедуры + +Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов() Экспорт + + Запросы = Новый Массив; + + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Узел + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Выборка.Узел)); + + КонецЦикла; + + КонецЦикла; + + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляLinux))); + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляWindows))); + + Возврат Запросы; + +КонецФункции + +// Возвращает шаблон имени профиля безопасности для внешнего модуля. +// Функция должна возвращать одно и то же значение при многократном вызове. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль, +// +// Возвращаемое значение - Строка - шаблон имя профиля безопасности, содержащий символы +// "%1", вместо которых в дальнейшем будет подставлен уникальный идентификатор. +// +Функция ШаблонИмениПрофиляБезопасности(Знач ВнешнийМодуль) Экспорт + + Шаблон = "Exchange_[ИмяПланаОбмена]_%1"; // Не локализуется + Возврат СтрЗаменить(Шаблон, "[ИмяПланаОбмена]", ВнешнийМодуль.Имя); + +КонецФункции + +Функция СловарьКонтейнераВнешнегоМодуля() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Именительный", НСтр("ru = 'Настройка синхронизация данных'")); + Результат.Вставить("Родительный", НСтр("ru = 'Настройки синхронизации данных'")); + + Возврат Результат; + +КонецФункции + +Функция КонтейнерыВнешнихМодулей() Экспорт + + Результат = Новый Массив(); + ОбменДаннымиПереопределяемый.ПолучитьПланыОбмена(Результат); + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС ИНТЕРАКТИВНОГО ДОПОЛНЕНИЯ ВЫГРУЗКИ // @@ -10470,7 +10935,7 @@ // Возвращаемое значение: // Структура - данные для дальнейшего оперирования дополнением выгрузки // -Функция ИнтерактивноеИзменениеВыгрузки(Знач УзелИнформационнойБазы, Знач АдресХранилищаФормы, Знач ЕстьСценарийУзла=Неопределено) Экспорт +Функция ИнтерактивноеИзменениеВыгрузки(Знач УзелИнформационнойБазы, Знач АдресХранилищаФормы, Знач ЕстьСценарийУзла = Неопределено) Экспорт Результат = Новый Структура; Результат.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); @@ -10532,14 +10997,25 @@ МетаУзел = УзелИнформационнойБазы.Метаданные(); - Если ЕстьСценарийУзла=Неопределено Тогда + Если ЕстьСценарийУзла = Неопределено Тогда // Можно определить по метаданным узла ЕстьСценарийУзла = Ложь; КонецЕсли; Если ЕстьСценарийУзла Тогда + МодульМенеджераУзла = ПланыОбмена[МетаУзел.Имя]; - МодульМенеджераУзла.НастроитьИнтерактивнуюВыгрузку(УзелИнформационнойБазы, Результат.ПараметрыСценарияДополнения); + МожноНастраивать = Ложь; + Попытка + МожноНастраивать = МодульМенеджераУзла.НастраиватьИнтерактивнуюВыгрузку(УзелИнформационнойБазы); + Исключение + // Обработка не требуется, считаем функционал недоступным + КонецПопытки; + + Если МожноНастраивать Тогда + МодульМенеджераУзла.НастроитьИнтерактивнуюВыгрузку(УзелИнформационнойБазы, Результат.ПараметрыСценарияДополнения); + КонецЕсли; + КонецЕсли; Результат.Вставить("АдресХранилищаФормы", АдресХранилищаФормы); @@ -10645,19 +11121,22 @@ Результат = ОбработкаДополнения.ВосстановитьТекущееИзНастроек(ПредставлениеНастройки, ФильтрВарианта, ДополнениеВыгрузки.АдресХранилищаФормы); Если Результат Тогда - СписокРеквизитов = " - |ВариантВыгрузки, ПериодОтбораВсехДокументов, КомпоновщикОтбораВсехДокументов, - |ПериодОтбораСценарияУзла, ПредставлениеОтбораСценарияУзла"; - - ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки, ОбработкаДополнения, СписокРеквизитов); + ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки, ОбработкаДополнения, "ВариантВыгрузки, ПериодОтбораВсехДокументов, КомпоновщикОтбораВсехДокументов"); - // И обновляем адрес + // Обновляем адрес компоновщика всегда Данные = ОбработкаДополнения.КомпоновщикНастроекОбщегоОтбора(); Данные.Настройки = ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки; ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов = ПоместитьВоВременноеХранилище(Данные, ДополнениеВыгрузки.АдресХранилищаФормы); - ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрация, ОбработкаДополнения.ДополнительнаяРегистрация); - ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла, ОбработкаДополнения.ДополнительнаяРегистрацияСценарияУзла); + ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрация, ОбработкаДополнения.ДополнительнаяРегистрация); + + // Настройки по сценарию узла обновляем только если они определены в прочитанных данных. Иначе оставляем текущее + Если ОбработкаДополнения.ДополнительнаяРегистрацияСценарияУзла.Количество() > 0 Тогда + ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки, ОбработкаДополнения, "ПериодОтбораСценарияУзла, ПредставлениеОтбораСценарияУзла"); + ЗаполнитьТаблицуЗначений(ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла, ОбработкаДополнения.ДополнительнаяРегистрацияСценарияУзла); + // Нормализуем установки периода + ИнтерактивноеИзменениеВыгрузкиУстановитьПериодаСценарияУзла(ДополнениеВыгрузки); + КонецЕсли; // Текущее представление ранее запомненных настроек ДополнениеВыгрузки.ПредставлениеТекущейНастройки = ПредставлениеНастройки; @@ -10670,7 +11149,7 @@ // // Параметры: // ДополнениеВыгрузки - Структура, РеквизитФормыКоллекция - описание параметров выгрузки -// ПредставлениеНастройки - Строка - название восстанавливаемой настройки +// ПредставлениеНастройки - Строка - название сохраняемой настройки // Процедура ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, Знач ПредставлениеНастройки) Экспорт @@ -10680,7 +11159,7 @@ СписокРеквизитов = " |ВариантВыгрузки, ПериодОтбораВсехДокументов, |ПериодОтбораСценарияУзла, ПредставлениеОтбораСценарияУзла"; - + ЗаполнитьЗначенияСвойств(ОбработкаДополнения, ДополнениеВыгрузки, СписокРеквизитов); ЗаполнитьТаблицуЗначений(ОбработкаДополнения.ДополнительнаяРегистрация, ДополнениеВыгрузки.ДополнительнаяРегистрация); @@ -10688,12 +11167,17 @@ // Компоновщик настроек собираем заново Данные = ОбработкаДополнения.КомпоновщикНастроекОбщегоОтбора(); - ОбработкаДополнения.КомпоновщикОтбораВсехДокументов = Новый КомпоновщикНастроекКомпоновкиДанных; - ОбработкаДополнения.КомпоновщикОтбораВсехДокументов.Инициализировать( - Новый ИсточникДоступныхНастроекКомпоновкиДанных(Данные.СхемаКомпоновки)); - ОбработкаДополнения.КомпоновщикОтбораВсехДокументов.ЗагрузитьНастройки(Данные.Настройки); - ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов = ПоместитьВоВременноеХранилище(Данные, ДополнениеВыгрузки.АдресХранилищаФормы); + Если ПустаяСтрока(ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов) Тогда + ИсточникНастроек = ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки; + Иначе + СтруктураКомпоновщика = ПолучитьИзВременногоХранилища(ДополнениеВыгрузки.АдресКомпоновщикаВсехДокументов); + ИсточникНастроек = СтруктураКомпоновщика.Настройки; + КонецЕсли; + + ОбработкаДополнения.КомпоновщикОтбораВсехДокументов = Новый КомпоновщикНастроекКомпоновкиДанных; + ОбработкаДополнения.КомпоновщикОтбораВсехДокументов.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(Данные.СхемаКомпоновки) ); + ОбработкаДополнения.КомпоновщикОтбораВсехДокументов.ЗагрузитьНастройки(ИсточникНастроек); // Собственно сохранение ОбработкаДополнения.СохранитьТекущееВНастройки(ПредставлениеНастройки); @@ -10702,6 +11186,7 @@ ДополнениеВыгрузки.ПредставлениеТекущейНастройки = ПредставлениеНастройки; КонецПроцедуры + // Заполняет реквизит формы по данным структуры настроек // // Параметры: @@ -10982,50 +11467,46 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Определяет доступный вариант запуска резервного копирования перед синхронизацией: +// Возвращаемое значение - Строка: +// "МодельСервиса" - доступен функционал резервного копирования модели сервиса +// "МодельСервисаТолькоИнструкция" - работа в модели сервиса, резервное копирования должно проводится администратором сервиса +// "РезервноеКопирование" - Работа происходит в файловой базе, доступна подсистема резервного копирования // - -// Для внутреннего использования +// Во всех остальных случаях возвращается пустая строка - резервное копирование недоступно // -Процедура ЗаполнитьТаблицуЗначений(Приемник, Знач Источник) Экспорт - Приемник.Очистить(); +Функция ВариантРезервногоКопирования() Экспорт - Если ТипЗнч(Источник)=Тип("ТаблицаЗначений") Тогда - КолонкиИсточника = Источник.Колонки; - Иначе - Времянка = Источник.Выгрузить(Новый Массив); - КолонкиИсточника = Времянка.Колонки; + РежимРаботы = Новый ФиксированнаяСтруктура( ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы() ); + Если РежимРаботы.МодельСервиса Тогда + + ЕстьПодсистемаКопирования = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных"); + Если ЕстьПодсистемаКопирования Тогда + МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); + + ПоддержкаРезервногоКопирования = МодульРезервноеКопированиеОбластейДанных.РезервноеКопированиеИспользуется(); + ЕстьПраваНаСозданиеКопии = Пользователи.ЭтоПолноправныйПользователь(); + + Если ПоддержкаРезервногоКопирования И ЕстьПраваНаСозданиеКопии Тогда + Возврат "МодельСервиса"; + КонецЕсли + КонецЕсли; + + Возврат "МодельСервисаТолькоИнструкция" КонецЕсли; - Если ТипЗнч(Приемник)=Тип("ТаблицаЗначений") Тогда - КолонкиПриемника = Приемник.Колонки; - КолонкиПриемника.Очистить(); - Для Каждого Колонка Из КолонкиИсточника Цикл - ЗаполнитьЗначенияСвойств(КолонкиПриемника.Добавить(), Колонка); - КонецЦикла; + ЕстьПодсистемаКопирования = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ"); + Если ЕстьПодсистемаКопирования Тогда + + ПоддержкаРезервногоКопирования = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ЕстьПраваНаСозданиеКопии = Пользователи.ЭтоПолноправныйПользователь(, Истина); + + Если ПоддержкаРезервногоКопирования И ЕстьПраваНаСозданиеКопии Тогда + Возврат "РезервноеКопирование"; + КонецЕсли; КонецЕсли; - Для Каждого Строка Из Источник Цикл - ЗаполнитьЗначенияСвойств(Приемник.Добавить(), Строка); - КонецЦикла; -КонецПроцедуры - -Функция ТаблицаВМассивСтруктур(Знач ТаблицаЗначений) - Результат = Новый Массив; - - ИменаКолонок = ""; - Для Каждого Колонка из ТаблицаЗначений.Колонки Цикл - ИменаКолонок = ИменаКолонок + "," + Колонка.Имя; - КонецЦикла; - ИменаКолонок = Сред(ИменаКолонок, 2); - - Для Каждого Строка Из ТаблицаЗначений Цикл - СтруктураСтроки = Новый Структура(ИменаКолонок); - ЗаполнитьЗначенияСвойств(СтруктураСтроки, Строка); - Результат.Добавить(СтруктураСтроки); - КонецЦикла; - - Возврат Результат; + Возврат ""; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 997d0e9ef..00cfa15b9 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -3,13 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Процедура-обработчик события "ПередЗаписью" документов для механизма регистрации объектов на узлах // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации // Источник - ДокументОбъект - источник события // Отказ - Булево - флаг отказа от выполнения обработчика // @@ -22,7 +21,7 @@ // Процедура-обработчик события "ПередЗаписью" ссылочных типов данных (кроме документов) для механизма регистрации объектов на узлах // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации // Источник - источник события, кроме типа ДокументОбъект // Отказ - Булево - флаг отказа от выполнения обработчика // @@ -35,7 +34,7 @@ // Процедура-обработчик события "ПередЗаписью" регистров для механизма регистрации объектов на узлах // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации // Источник - НаборЗаписейРегистра - источник события // Отказ - Булево - флаг отказа от выполнения обработчика // Замещение - Булево - признак замещения существующего набора записей @@ -49,7 +48,7 @@ // Процедура-обработчик события "ПередЗаписью" константы для механизма регистрации объектов на узлах // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации // Источник - КонстантаМенеджерЗначения - источник события // Отказ - Булево - флаг отказа от выполнения обработчика // @@ -62,7 +61,7 @@ // Процедура-обработчик события "ПередУдалением" ссылочных типов данных для механизма регистрации объектов на узлах // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации // Источник - источник события // Отказ - Булево - флаг отказа от выполнения обработчика // @@ -78,8 +77,8 @@ // Процедура дополняет список узлов-получателей объекта переданными значениями // // Параметры: -// Объект – объект, для которого выполняется правило регистрации -// Узлы – Массив – узлы плана обмена, которые необходимо добавить в список узлов-получателей объекта +// Объект - объект, для которого выполняется правило регистрации +// Узлы - Массив - узлы плана обмена, которые необходимо добавить в список узлов-получателей объекта // Процедура ДополнитьПолучателей(Объект, Узлы) Экспорт @@ -103,8 +102,8 @@ // Процедура вычитает из списка узлов-получателей объекта переданные значения // // Параметры: -// Объект – объект, для которого выполняется правило регистрации -// Узлы – Массив – узлы плана обмена, которые необходимо вычесть из списка узлов-получателей объекта +// Объект - объект, для которого выполняется правило регистрации +// Узлы - Массив - узлы плана обмена, которые необходимо вычесть из списка узлов-получателей объекта // Процедура СократитьПолучателей(Объект, Узлы) Экспорт @@ -123,7 +122,7 @@ // Параметры: // Объект - объект, для которого необходимо выполнить правила регистрации и выполнить регистрацию на узлах // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе -// Отправитель (необязательный) – ПланОбменаСсылка – узел плана обмена от которого принимается сообщение обмена +// Отправитель (необязательный) - ПланОбменаСсылка - узел плана обмена от которого принимается сообщение обмена // при загрузке данных: если задан, то регистрация объекта не этом узле выполнятся не будет. // Процедура ВыполнитьПравилаРегистрацииДляОбъекта(Объект, ИмяПланаОбмена, Отправитель = Неопределено) Экспорт @@ -151,10 +150,10 @@ // Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить // // Возвращаемое значение: -// Массив – список всех узлов заданного плана обмена. +// Массив - список всех узлов заданного плана обмена. // Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт @@ -197,13 +196,13 @@ // Определяет признак авторегистрации объекта метаданных в составе плана обмена. // // Параметры: -// ОбъектМетаданных (обязательный) – объект метаданных, для которого требуется получить признак авторегистрации -// ИмяПланаОбмена (обязательный) – Строка – имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. +// ОбъектМетаданных (обязательный) - объект метаданных, для которого требуется получить признак авторегистрации +// ИмяПланаОбмена (обязательный) - Строка - имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; -// Ложь – объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена -// или объект метаданных не входит в состав плана обмена. +// Истина - объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; +// Ложь - объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена +// или объект метаданных не входит в состав плана обмена. // Функция АвтоРегистрацияРазрешена(ОбъектМетаданных, ИмяПланаОбмена) Экспорт @@ -211,8 +210,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Процедура предназначена для определения вида отправки выгружаемого элемента данных // Вызывается из обработчиков планов обмена: ПриОтправкеДанныхГлавному(), ПриОтправкеДанныхПодчиненному() @@ -337,7 +337,7 @@ // Объект УдалениеОбъекта регистрируется безусловно. // // Параметры: -// Получатель – ПланОбменаСсылка – узел плана обмена, для которого выполняется регистрация изменений данных; +// Получатель - ПланОбменаСсылка - узел плана обмена, для которого выполняется регистрация изменений данных; // Данные - <Данные>, УдалениеОбъекта - объект, представляющий данные, хранимые в базе данных, такой как документ, // элемент справочника, счет бухгалтерского учета, менеджер записи константы, // набор записей регистра и т. п. @@ -393,8 +393,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события @@ -739,10 +740,10 @@ // на каких узлах каждого плана обмена должен быть зарегистрирован объект. // // Параметры: -// Объект - Произвольный - объект, набор записей, константа или сведения об удалении объекта. -// Отказ - Булево - флаг отказа. Если флаг отказа взведен, то процедура не выполняется. -// а также другие вспомогательные признаки. -// +// Объект - Произвольный - объект, набор записей, константа или сведения об удалении объекта. +// Отказ - Булево - Признак возникновения ошибки во время регистрации объекта на узлах: +// если во время регистрации объекта возникнут ошибки, то этот флаг будет установлен в значение Истина. +// Процедура ЗарегистрироватьИзменениеОбъекта(ИмяПланаОбмена, Объект, Отказ, РежимЗаписи = Неопределено, Замещение = Ложь, ЭтоРегистр = Ложь, ЭтоУдалениеОбъекта = Ложь, ЭтоКонстанта = Ложь) @@ -1117,6 +1118,11 @@ ПравилаРегистрацииОбъекта = Новый Массив; + ИмяПрофиляБезопасности = ОбменДаннымиПовтИсп.ИмяПрофиляБезопасности(ИмяПланаОбмена); + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; + Правила = ПравилаРегистрацииОбъекта(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()); Для Каждого Правило Из Правила Цикл @@ -1227,11 +1233,11 @@ // Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда» // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать всегда» +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Массив - Массив узлов плана обмена, для которых установлен признак «Выгружать всегда» // Функция ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт @@ -1259,12 +1265,12 @@ // Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» // // Параметры: -// Ссылка – ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» +// Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Массив - Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» // Функция ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт @@ -1511,12 +1517,14 @@ Если ЭтоВерсияОбъектаДоИзменения Тогда // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора); + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, + ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, НаборЗаписей.ДополнительныеСвойства); Иначе // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, + ИмяПланаОбмена, СтрокаНабора, Выгрузка, НаборЗаписей.ДополнительныеСвойства); КонецЕсли; @@ -1528,13 +1536,13 @@ КонецПроцедуры // Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. -// Ключ структуры – имя свойства; Значение – значение свойства объекта. +// Ключ структуры - имя свойства; Значение - значение свойства объекта. // // Параметры: -// Ссылка – ссылка на объект ИБ, значения свойств которого требуется получить -// -// Возвращаемое значение: -// Тип: Структура. Структура со значениями свойств объекта. +// Ссылка - ссылка на объект ИБ, значения свойств которого требуется получить +// +// Возвращаемое значение: +// Структура - Структура со значениями свойств объекта. // Функция ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт @@ -1585,7 +1593,7 @@ Возврат ЗначенияСвойств; КонецФункции -Функция ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойств, ПРО, Знач ИмяПланаОбмена, Объект, Знач Выгрузка) +Функция ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойств, ПРО, Знач ИмяПланаОбмена, Объект, Знач Выгрузка, ДополнительныеСвойства = Неопределено) ИспользоватьКэш = Истина; ТекстЗапроса = ПРО.ТекстЗапроса; @@ -1593,7 +1601,7 @@ // {Обработчик: При обработке} Начало Отказ = Ложь; - ВыполнитьОбработчикПРОПриОбработке(Отказ, ПРО, Объект, ТекстЗапроса, ЗначенияСвойств, ИспользоватьКэш, Выгрузка); + ВыполнитьОбработчикПРОПриОбработке(Отказ, ПРО, Объект, ТекстЗапроса, ЗначенияСвойств, ИспользоватьКэш, Выгрузка, ДополнительныеСвойства); Если Отказ Тогда Возврат Новый Массив; @@ -1621,7 +1629,7 @@ КонецФункции -Функция ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойств, ПРО, Знач ИмяПланаОбмена, Объект) +Функция ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойств, ПРО, Знач ИмяПланаОбмена, Объект, ДополнительныеСвойства = Неопределено) ИспользоватьКэш = Истина; ТекстЗапроса = ПРО.ТекстЗапроса; @@ -1629,7 +1637,7 @@ // {Обработчик: При обработке (дополнительный)} Начало Отказ = Ложь; - ВыполнитьОбработчикПРОПриОбработкеДополнительный(Отказ, ПРО, Объект, ТекстЗапроса, ЗначенияСвойств, ИспользоватьКэш); + ВыполнитьОбработчикПРОПриОбработкеДополнительный(Отказ, ПРО, Объект, ТекстЗапроса, ЗначенияСвойств, ИспользоватьКэш, ДополнительныеСвойства); Если Отказ Тогда Возврат Новый Массив; @@ -2161,7 +2169,8 @@ КонецПроцедуры -Процедура ВыполнитьОбработчикПРОПриОбработке(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, ИспользоватьКэш, Знач Выгрузка) +Процедура ВыполнитьОбработчикПРОПриОбработке(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, + ИспользоватьКэш, Знач Выгрузка, ДополнительныеСвойства = Неопределено) Если ПРО.ЕстьОбработчикПриОбработке Тогда @@ -2181,7 +2190,7 @@ КонецПроцедуры -Процедура ВыполнитьОбработчикПРОПриОбработкеДополнительный(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, ИспользоватьКэш) +Процедура ВыполнитьОбработчикПРОПриОбработкеДополнительный(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, ИспользоватьКэш, ДополнительныеСвойства = Неопределено) Если ПРО.ЕстьОбработчикПриОбработкеДополнительный Тогда @@ -2392,22 +2401,21 @@ // Заполняет значения реквизитов и табличных частей однотипных объектов информационной базы. // -// Параметры: -// Источник (обязательный) – объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) -// который является источником данных для заполнения. +// Параметры: +// Источник - Объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) +// который является источником данных для заполнения. // -// Приемник (обязательный) – объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) -// который будет заполнен данными источника. +// Приемник (обязательный) - объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) +// который будет заполнен данными источника. // -// СписокСвойств (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то заполнение свойств объекта будет выполняться согласно -// заданным свойствам, при этом параметр ИсключаяСвойства будет проигнорирован. +// СписокСвойств - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет +// выполняться согласно заданным свойствам, при этом параметр +// ИсключаяСвойства будет проигнорирован. // -// ИсключаяСвойства (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то заполнение свойств объекта будет выполняться -// для всех свойств и табличных частей, исключая заданные свойства. +// ИсключаяСвойства - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет выполняться +// для всех свойств и табличных частей, исключая заданные свойства. // Процедура ЗаполнитьЗначенияСвойствОбъекта(Приемник, Источник, Знач СписокСвойств = Неопределено, Знач ИсключаяСвойства = Неопределено) Экспорт @@ -2619,10 +2627,10 @@ // Создает новый экземпляр объекта Структура, заполняет объект данными указанной структуры. // // Параметры: -// СтруктураИсточник – Структура – структура, копию которой необходимо получить -// -// Возвращаемое значение: -// Тип: Структура. +// СтруктураИсточник - Структура - структура, копию которой необходимо получить +// +// Возвращаемое значение: +// Структура - копия переданной структуры. // Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт @@ -2683,34 +2691,33 @@ // Выполняет сравнение версий двух однотипных объектов. // -// Параметры: -// Данные1 (обязательный). Тип: -// СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланВидовРасчетаОбъект, -// ПланСчетовОбъект, -// ПланОбменаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект. -// Первая версия данных для сравнения. -// -// Данные2 (обязательный). Тип: см. тип параметра Данные1 -// Вторая версия данных для сравнения. -// -// СписокСвойств (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то сравнение версий данных будет выполняться согласно -// заданным свойствам, при этом параметр ИсключаяСвойства будет проигнорирован. -// -// ИсключаяСвойства (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то сравнение версий данных будет выполняться -// для всех свойств и табличных частей, исключая заданные свойства. +// Параметры: +// Данные1 - СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланВидовРасчетаОбъект, +// ПланСчетовОбъект, +// ПланОбменаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект - Первая версия данных для сравнения. +// Данные2 - СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланВидовРасчетаОбъект, +// ПланСчетовОбъект, +// ПланОбменаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект - Вторая версия данных для сравнения. +// СписокСвойств - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет +// выполняться согласно заданным свойствам, при этом параметр +// ИсключаяСвойства будет проигнорирован. +// ИсключаяСвойства - Строка - Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет выполняться +// для всех свойств и табличных частей, исключая заданные свойства. // // Возвращаемое значение: -// Тип: Булево. -// Возвращает Истина, если версии данных различаются; Ложь, если версии совпадают. +// Истина - если версии данных различаются, иначе Ложь. // Функция ДанныеРазличаются(Данные1, Данные2, СписокСвойств = Неопределено, ИсключаяСвойства = Неопределено) Экспорт @@ -2978,7 +2985,7 @@ // то считаем, что коллизии нет Если ЕстьКоллизия Тогда - Если ЭтоСсылочныйТип Тогда + Если ЭтоСсылочныйТип И Не ЭлементДанных.Ссылка.Пустая() Тогда ОбъектВБазе = ЭлементДанных.Ссылка.ПолучитьОбъект(); СсылкаСуществует = (ОбъектВБазе <> Неопределено); @@ -3057,7 +3064,7 @@ // Выполняет проверку на наличие запрета загрузки по дате // // Параметры: -// ЭлементДанных – СправочникОбъект, ДокументОбъект, РегистСведенийНаборЗаписей и др. данные. +// ЭлементДанных - СправочникОбъект, ДокументОбъект, РегистСведенийНаборЗаписей и др. данные. // Данные, которые были зачитаны из сообщения обмена, но еще не были записаны в ИБ. // ПолучениеЭлемента - ПолучениеЭлементаДанных. // Отправитель - ПланыОбменаСсылка. @@ -3237,4 +3244,6 @@ Возврат СтрокаОбъекта; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index 5529c4211..150a15195 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -3,23 +3,22 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Выполняет отправку сообщения в адресный канал сообщений. // Соответствует типу отправки "Конечная точка/Конечная точка". // // Параметры: -// КаналСообщений – Строка. Идентификатор адресного канала сообщений. -// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. -// Получатель (необязательный) – Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. -// Неопределено – получатель сообщения не указан. Сообщение будет отправлено конечным точкам, +// КаналСообщений - Строка. Идентификатор адресного канала сообщений. +// ТелоСообщения (необязательный) - Произвольный. Тело сообщения системы, которое необходимо отправить. +// Получатель (необязательный) - Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. +// Неопределено - получатель сообщения не указан. Сообщение будет отправлено конечным точкам, // которые определяются настройками текущей информационной системы: // в обработчике ОбменСообщениямиПереопределяемый.ПолучателиСообщения (программно) // и в регистре сведений НастройкиОтправителя (настройка системы). // ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, который соответствует конечной точке, // для которой предназначено сообщение. Сообщение будет отправлено только этой конечной точке. -// Массив – массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. +// Массив - массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. // Сообщение будет отправлено всем конечным точкам, указанным в массиве. // Значение по умолчанию: Неопределено. // @@ -33,16 +32,16 @@ // Соответствует типу отправки "Конечная точка/Конечная точка". // // Параметры: -// КаналСообщений – Строка. Идентификатор адресного канала сообщений. -// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. -// Получатель (необязательный) – Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. -// Неопределено – получатель сообщения не указан. Сообщение будет отправлено конечным точкам, +// КаналСообщений - Строка. Идентификатор адресного канала сообщений. +// ТелоСообщения (необязательный) - Произвольный. Тело сообщения системы, которое необходимо отправить. +// Получатель (необязательный) - Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. +// Неопределено - получатель сообщения не указан. Сообщение будет отправлено конечным точкам, // которые определяются настройками текущей информационной системы: // в обработчике ОбменСообщениямиПереопределяемый.ПолучателиСообщения (программно) // и в регистре сведений НастройкиОтправителя (настройка системы). // ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, который соответствует конечной точке, // для которой предназначено сообщение. Сообщение будет отправлено только этой конечной точке. -// Массив – массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. +// Массив - массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. // Сообщение будет отправлено всем конечным точкам, указанным в массиве. // Значение по умолчанию: Неопределено. // @@ -58,8 +57,8 @@ // Настройка подписок на широковещательный канал выполняется через регистр сведений ПодпискиПолучателей. // // Параметры: -// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. -// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// КаналСообщений - Строка. Идентификатор широковещательного канала сообщений. +// ТелоСообщения (необязательный) - Произвольный. Тело сообщения системы, которое необходимо отправить. // Процедура ОтправитьСообщениеПодписчикам(КаналСообщений, ТелоСообщения = Неопределено) Экспорт @@ -73,8 +72,8 @@ // Настройка подписок на широковещательный канал выполняется через регистр сведений ПодпискиПолучателей. // // Параметры: -// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. -// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// КаналСообщений - Строка. Идентификатор широковещательного канала сообщений. +// ТелоСообщения (необязательный) - Произвольный. Тело сообщения системы, которое необходимо отправить. // Процедура ОтправитьСообщениеПодписчикамСейчас(КаналСообщений, ТелоСообщения = Неопределено) Экспорт @@ -204,22 +203,25 @@ // Также проверяется то, что настройки подключения получателя указывают на текущего отправителя. // // Параметры: -// Отказ (обязательный). Тип: Булево. Флаг выполнения операции; поднимается в случае ошибок при подключении конечной точки. -// URLВебСервисаПолучателя (обязательный). Тип: Строка. Веб-адрес подключаемой конечной точки. -// ИмяПользователяПолучателя (обязательный). Тип: Строка. Пользователь для аутентификации в подключаемой конечной точке -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольПолучателя (обязательный). Тип: Строка. Пароль пользователя в подключаемой конечной точке. -// URLВебСервисаОтправителя (обязательный). Тип: Строка. Веб-адрес этой информационной базы со стороны подключаемой конечной точки. -// ИмяПользователяОтправителя (обязательный). Тип: Строка. Пользователь для аутентификации в этой информационной базе -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольОтправителя (обязательный). Тип: Строка. Пароль пользователя в этой информационной базе. -// КонечнаяТочка (необязательный). Тип: ПланОбменаСсылка.ОбменСообщениями; Неопределено. Если подключение конечной точки завершилось успешно, -// то в этот параметр возвращается ссылка на узел плана обмена, который соответствует подключенной конечной точке. -// Если подключить конечную точку не удалось, то возвращается Неопределено. -// НаименованиеКонечнойТочкиПолучателя (необязательный). Тип: Строка (150). Наименование подключаемой конечной точки. Если значение не задано, -// то в качестве наименования используется синоним конфигурации подключаемой конечной точки. -// НаименованиеКонечнойТочкиОтправителя (необязательный). Тип: Строка (150). Наименование конечной точки, которая соответствует этой информационной базе. -// Если значение не задано, то в качестве наименования используется синоним конфигурации этой информационной базы. +// Отказ - Булево - Флаг выполнения операции; поднимается в случае ошибок при подключении конечной точки. +// URLВебСервисаПолучателя - Строка - Веб-адрес подключаемой конечной точки. +// ИмяПользователяПолучателя - Строка - Пользователь для аутентификации в подключаемой конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольПолучателя - Строка - Пароль пользователя в подключаемой конечной точке. +// URLВебСервисаОтправителя - Строка - Веб-адрес этой информационной базы со стороны подключаемой конечной точки. +// ИмяПользователяОтправителя - Строка - Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольОтправителя - Строка - Пароль пользователя в этой информационной базе. +// КонечнаяТочка - ПланОбменаСсылка.ОбменСообщениями, Неопределено - Если подключение конечной точки завершилось успешно, +// то в этот параметр возвращается ссылка на узел плана обмена, +// который соответствует подключенной конечной точке. +// Если подключить конечную точку не удалось, то возвращается Неопределено. +// НаименованиеКонечнойТочкиПолучателя - Строка - Наименование подключаемой конечной точки. Если значение не задано, +// то в качестве наименования используется синоним +// конфигурации подключаемой конечной точки. +// НаименованиеКонечнойТочкиОтправителя - Строка - Наименование конечной точки, которая соответствует +// этой информационной базе. Если значение не задано, то в качестве +// наименования используется синоним конфигурации этой информационной базы. // Процедура ПодключитьКонечнуюТочку(Отказ, URLВебСервисаПолучателя, @@ -259,16 +261,16 @@ // Также проверяется то, что настройки подключения получателя указывают на текущего отправителя. // // Параметры: -// Отказ (обязательный). Тип: Булево. Флаг выполнения операции; поднимается в случае ошибок. -// КонечнаяТочка (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Ссылка на узел плана обмена, который соответствует конечной точке. -// URLВебСервисаПолучателя (обязательный). Тип: Строка. Веб-адрес конечной точки. -// ИмяПользователяПолучателя (обязательный). Тип: Строка. Пользователь для аутентификации в конечной точке -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольПолучателя (обязательный). Тип: Строка. Пароль пользователя в конечной точке. -// URLВебСервисаОтправителя (обязательный). Тип: Строка. Веб-адрес этой информационной базы со стороны конечной точки. -// ИмяПользователяОтправителя (обязательный). Тип: Строка. Пользователь для аутентификации в этой информационной базе -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольОтправителя (обязательный). Тип: Строка. Пароль пользователя в этой информационной базе. +// Отказ - Булево - Флаг выполнения операции; поднимается в случае ошибок. +// КонечнаяТочка - ПланОбменаСсылка.ОбменСообщениями - Ссылка на узел плана обмена, который соответствует конечной точке. +// URLВебСервисаПолучателя - Строка - Веб-адрес конечной точки. +// ИмяПользователяПолучателя - Строка - Пользователь для аутентификации в конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольПолучателя - Строка - Пароль пользователя в конечной точке. +// URLВебСервисаОтправителя - Строка - Веб-адрес этой информационной базы со стороны конечной точки. +// ИмяПользователяОтправителя - Строка - Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольОтправителя - Строка - Пароль пользователя в этой информационной базе. // Процедура ОбновитьНастройкиПодключенияКонечнойТочки(Отказ, КонечнаяТочка, @@ -294,8 +296,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет события подсистемы РаботаВМоделиСервиса.ОбменСообщениями: // @@ -329,8 +332,8 @@ // Обработчик получения динамического списка конечных точек сообщений // // Параметры: - // КаналСообщений – Строка. Идентификатор канала сообщений, для которого необходимо определить конечные точки. - // Получатели – Массив. Массив конечных точек, в которые следует адресовать сообщение. + // КаналСообщений - Строка - Идентификатор канала сообщений, для которого необходимо определить конечные точки. + // Получатели - Массив - Массив конечных точек, в которые следует адресовать сообщение. // Массив должен быть заполнен элементами типа ПланОбменаСсылка.ОбменСообщениями. // Этот параметр необходимо определить в теле обработчика. // @@ -346,10 +349,10 @@ // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. // - // Параметры: - // КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. - // ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. - // В обработчике события тело сообщения может быть изменено, например, дополнено информацией. + // Параметры: + // КаналСообщений - Строка - Идентификатор канала сообщений, в который отправляется сообщение. + // ТелоСообщения - Произвольный - Тело отправляемого сообщения. + // В обработчике события тело сообщения может быть изменено, например, дополнено информацией. // // Синтаксис: // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения) Экспорт @@ -363,10 +366,10 @@ // Обработчик данного события вызывается при получении сообщения из XML-потока. // Обработчик вызывается для каждого получаемого сообщения. // - // Параметры: - // КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. - // ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. - // В обработчике события тело сообщения может быть изменено, например, дополнено информацией. + // Параметры: + // КаналСообщений - Строка - Идентификатор канала сообщений, из которого получено сообщение. + // ТелоСообщения - Произвольный - Тело полученного сообщения. + // В обработчике события тело сообщения может быть изменено, например, дополнено информацией. // // Синтаксис: // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения) Экспорт @@ -406,8 +409,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОтправитьСообщениеВКаналСообщений(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение = Ложь) @@ -665,36 +669,36 @@ // // Параметры: // -// СтандартнаяОбработка. Тип: Булево. -// В данный параметр передается признак выполнения стандартной (системной) обработки события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная -// обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию: Истина. +// СтандартнаяОбработка - Булево - +// В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная +// обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию: Истина. // -// Получатель (только для чтения). Тип: ПланОбменаСсылка. -// Узел плана обмена, для которого выполняется выгрузка данных. +// Получатель - ПланОбменаСсылка - +// Узел плана обмена, для которого выполняется выгрузка данных. // -// ИмяФайлаСообщения (только для чтения). Тип: Строка. -// Имя файла, в который необходимо выполнить выгрузку данных. Если этот параметр заполнен, то система ожидает, -// что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. -// Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. +// ИмяФайлаСообщения - Строка - +// Имя файла, в который необходимо выполнить выгрузку данных. Если этот параметр заполнен, то система ожидает, +// что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. +// Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. // -// ДанныеСообщения. Тип: Произвольный. -// Если параметр ИмяФайлаСообщения пустой, то система ожидает, что данные будут выгружены в этот параметр. +// ДанныеСообщения - Произвольный - +// Если параметр ИмяФайлаСообщения пустой, то система ожидает, что данные будут выгружены в этот параметр. // -// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. -// Определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. -// При необходимости в обработчике следует реализовать логику установки транзакционных блокировок на выгружаемые данные. -// Значение параметра задается в настройках подсистемы обмена данными. +// КоличествоЭлементовВТранзакции - Число - +// Определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. +// При необходимости в обработчике следует реализовать логику установки транзакционных блокировок на выгружаемые данные. +// Значение параметра задается в настройках подсистемы обмена данными. // -// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. -// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации -// данных (ошибок, предупреждений, информации) с заданным именем события. -// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// ИмяСобытияЖурналаРегистрации - Строка - +// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации +// данных (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. // -// КоличествоОтправленныхОбъектов. Тип: Число. -// Счетчик отправленных объектов. Используется для определения количества отправленных объектов -// для последующей фиксации в протоколе обмена. +// КоличествоОтправленныхОбъектов - Число - +// Счетчик отправленных объектов. Используется для определения количества отправленных объектов +// для последующей фиксации в протоколе обмена. // Процедура ПриВыгрузкеДанныхСлужебный(СтандартнаяОбработка, Получатель, @@ -725,36 +729,29 @@ // // Параметры: // -// СтандартнаяОбработка. Тип: Булево. -// В данный параметр передается признак выполнения стандартной (системной) обработки события. -// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. -// Отказ от стандартной обработки не отменяет действие. -// Значение по умолчанию: Истина. -// -// Отправитель (только для чтения). Тип: ПланОбменаСсылка. -// Узел плана обмена, для которого выполняется загрузка данных. -// -// ИмяФайлаСообщения (только для чтения). Тип: Строка. -// Имя файла, из которого требуется выполнить загрузку данных. Если параметр не заполнен, то данные для загрузки -// передаются через параметр ДанныеСообщения. -// -// ДанныеСообщения. Тип: Произвольный. -// Параметр содержит данные, которые необходимо загрузить. Если параметр ИмяФайлаСообщения пустой, -// то данные для загрузки передаются через этот параметр. -// -// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. -// Определяет максимальное число элементов данных, которые читаются из сообщения и записываются в базу данных -// в рамках одной транзакции. При необходимости в обработчике следует реализовать логику записи данных в транзакции. -// Значение параметра задается в настройках подсистемы обмена данными. -// -// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. -// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации -// данных (ошибок, предупреждений, информации) с заданным именем события. -// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. -// -// КоличествоПолученныхОбъектов. Тип: Число. -// Счетчик полученных объектов. Используется для определения количества загруженных объектов -// для последующей фиксации в протоколе обмена. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения +// стандартной (системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка +// события производиться не будет. +// Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию: Истина. +// Отправитель - ПланОбменаСсылка -Узел плана обмена, для которого выполняется загрузка данных. +// ИмяФайлаСообщения - Строка - Имя файла, из которого требуется выполнить загрузку данных. +// Если параметр не заполнен, то данные для загрузки +// передаются через параметр ДанныеСообщения. +// ДанныеСообщения - Произвольный -Параметр содержит данные, которые необходимо загрузить. +// Если параметр ИмяФайлаСообщения пустой, +// то данные для загрузки передаются через этот параметр. +// КоличествоЭлементовВТранзакции - Число - Определяет максимальное число элементов данных, которые читаются из +// сообщения и записываются в базу данных в рамках одной транзакции. +// При необходимости в обработчике следует реализовать логику записи данных в транзакции. +// Значение параметра задается в настройках подсистемы обмена данными. +// ИмяСобытияЖурналаРегистрации - Строка - Имя события журнала регистрации текущего сеанса обмена данными. +// Используется для записи в журнал регистрации данных +// (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// КоличествоПолученныхОбъектов - Число - Счетчик полученных объектов. Используется для определения +// количества загруженных объектов для последующей фиксации в протоколе обмена. // Процедура ПриЗагрузкеДанныхСлужебный(СтандартнаяОбработка, Отправитель, @@ -825,10 +822,10 @@ // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - Тело полученного сообщения. В обработчике события +// тело сообщения может быть изменено, например, дополнено информацией. // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -845,10 +842,10 @@ // Обработчик данного события вызывается при получении сообщения из XML-потока. // Обработчик вызывается для каждого получаемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - Тело полученного сообщения. В обработчике события +// тело сообщения может быть изменено, например, дополнено информацией. // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -858,3 +855,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 9041d2f46..83d46ac91 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистемы Обмена данными @@ -51,18 +50,11 @@ ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Получатель); // считаем количество записанных объектов - КоличествоЗаписанныхОбъектов = 0; КоличествоОтправленныхОбъектов = 0; - ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; - // Получаем выборку измененных данных ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - Попытка Пока ВыборкаИзменений.Следующий() Цикл @@ -125,26 +117,10 @@ // Записываем данные в сообщение ЗаписатьXML(ЗаписьXML, СтрокаТаблицы.Данные); - КоличествоЗаписанныхОбъектов = КоличествоЗаписанныхОбъектов + 1; КоличествоОтправленныхОбъектов = КоличествоОтправленныхОбъектов + 1; - Если ИспользоватьТранзакции - И КоличествоЭлементовВТранзакции > 0 - И КоличествоЗаписанныхОбъектов = КоличествоЭлементовВТранзакции Тогда - - // промежуточную транзакцию закрываем и открываем новую - ЗафиксироватьТранзакцию(); - НачатьТранзакцию(); - - КоличествоЗаписанныхОбъектов = 0; - КонецЕсли; - КонецЦикла; - Если ИспользоватьТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - // Завершаем запись сообщения ЗаписьСообщения.ЗакончитьЗапись(); @@ -152,10 +128,6 @@ Исключение - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - ЗаписьСообщения.ПрерватьЗапись(); ЗаписьXML.Закрыть(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -212,15 +184,8 @@ КонецЕсли; // считаем сколько объектов прочитали - КоличествоЗаписанныхОбъектов = 0; КоличествоПолученныхОбъектов = 0; - ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; - - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - Попытка СообщениеОбменаМожетБытьПринятоЧастично = КорреспондентПоддерживаетЧастичноеПолучениеСообщенийОбмена(Отправитель); @@ -353,19 +318,6 @@ ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); КонецЕсли; - КоличествоЗаписанныхОбъектов = КоличествоЗаписанныхОбъектов + 1; - - Если ИспользоватьТранзакции - И КоличествоЭлементовВТранзакции > 0 - И КоличествоЗаписанныхОбъектов = КоличествоЭлементовВТранзакции Тогда - - // промежуточную транзакцию закрываем и открываем новую - ЗафиксироватьТранзакцию(); - НачатьТранзакцию(); - - КоличествоЗаписанныхОбъектов = 0; - КонецЕсли; - КонецЦикла; Если СообщениеОбменаПринятоЧастично Тогда @@ -381,14 +333,7 @@ ЧтениеXML.Закрыть(); - Если ИспользоватьТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - Исключение - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; ЧтениеСообщения.ПрерватьЧтение(); ЧтениеXML.Закрыть(); ВызватьИсключение; @@ -429,8 +374,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -439,9 +385,7 @@ // Процедура ОтправитьИПолучитьСообщенияПоРегламентномуЗаданию() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); ОтправитьИПолучитьСообщения(Ложь); @@ -450,7 +394,7 @@ // Выполняет отправку и получение сообщений системы // // Параметры: -// Отказ – Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. +// Отказ - Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. // Процедура ОтправитьИПолучитьСообщения(Отказ) Экспорт @@ -653,7 +597,6 @@ Иначе - ОбъектСообщения.КоличествоПопытокОбработкиСообщения = ОбъектСообщения.КоличествоПопытокОбработкиСообщения + 1; ОбъектСообщения.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки; @@ -809,9 +752,6 @@ СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияПолучателя.WSПароль); @@ -1128,7 +1068,7 @@ // Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменСообщениями. // // Параметры: -// Корреспондент – Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. +// Корреспондент - Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. // // Возвращаемое значение: // Массив номеров версий, поддерживаемых интерфейсом корреспондента. @@ -1368,9 +1308,6 @@ СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); @@ -1472,3 +1409,5 @@ ОбменСообщениямиПереопределяемый.ПриПолученииСообщения(КаналСообщений, ТелоСообщения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl index b260aa69f..4c013b1c4 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl @@ -3,13 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполняет отправку и получение сообщений системы // // Параметры: -// Отказ – Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. +// Отказ - Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. // Процедура ОтправитьИПолучитьСообщения(Отказ) Экспорт @@ -18,3 +17,5 @@ ОбменСообщениямиВнутренний.ОтправитьИПолучитьСообщения(Отказ); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl index 2a48bb7c9..f04f22f57 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполняет отправку и получение сообщений системы // @@ -76,3 +75,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl index 1359d2bef..954fedc1d 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получает список обработчиков сообщений, которые обрабатывает // данная информационная система. @@ -21,10 +20,10 @@ // Обработчик получения динамического списка конечных точек сообщений // // Параметры: -// КаналСообщений – Строка. Идентификатор канала сообщений, для которого необходимо определить конечные точки. -// Получатели – Массив. Массив конечных точек, в которые следует адресовать сообщение. -// Массив должен быть заполнен элементами типа ПланОбменаСсылка.ОбменСообщениями. -// Этот параметр необходимо определить в теле обработчика. +// КаналСообщений - Строка - Идентификатор канала сообщений, для которого необходимо определить конечные точки. +// Получатели - Массив - Массив конечных точек, в которые следует адресовать сообщение, +// должен быть заполнен элементами типа ПланОбменаСсылка.ОбменСообщениями. +// Этот параметр необходимо определить в теле обработчика. // Процедура ПолучателиСообщения(Знач КаналСообщений, Получатели) Экспорт @@ -39,10 +38,10 @@ // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - Идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения - Произвольный - Тело отправляемого сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения) Экспорт @@ -52,20 +51,13 @@ // Обработчик данного события вызывается при получении сообщения из XML-потока. // Обработчик вызывается для каждого получаемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - Тело полученного сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения) Экспорт КонецПроцедуры - - - - - - - - +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index a3add1c27..b675fe830 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает ссылку на объект WSПрокси для заданного узла обмена. // @@ -42,4 +41,6 @@ Возврат МассивСправочников; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 251b36749..72351b135 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -5,30 +5,24 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверить необходимость обновления информационной базы при смене версии конфигурации. // +// Возвращаемое значение: +// Булево +// Функция НеобходимоОбновлениеИнформационнойБазы() Экспорт - Если НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияИБ(Метаданные.Имя)) Тогда - Возврат Истина; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - Запустить = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ЗапуститьОбновлениеИнформационнойБазы"); - УстановитьПривилегированныйРежим(Ложь); - - Если Запустить <> Неопределено И ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; + Возврат ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы(); КонецФункции -// Возвращает Истина, если выполняется обновление ИБ +// Возвращает Истина, если в данный момент выполняется обновление ИБ. +// +// Возвращаемое значение: +// Булево +// Функция ВыполняетсяОбновлениеИнформационнойБазы() Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() @@ -43,61 +37,54 @@ // Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. // // Возвращаемое значение: -// ТаблицаЗначений – таблица с колонками: -// НачальноеЗаполнение - если Истина, то обработчик должен срабатывать при запуске -// на "пустой" базе. -// Версия - Строка, например, "2.1.3.39" - номер версии конфигурации, при переходе -// на которую должна быть выполнена процедура-обработчик обновления. -// - Пустая строка - значит обработчик только для начального заполнения -// (должно быть указано свойство НачальноеЗаполнение). -// Процедура - полное имя процедуры-обработчика обновления/начального заполнения. -// Обязательно должна быть экспортной. +// ТаблицаЗначений - таблица с колонками: +// * НачальноеЗаполнение - Булево - если Истина, то обработчик должен срабатывать при запуске на "пустой" базе. +// * Версия - Строка - например, "2.1.3.39". Номер версии конфигурации, при переходе +// на которую должна быть выполнена процедура-обработчик обновления. +// Если указана пустая строка, то это обработчик только для начального заполнения +// (должно быть указано свойство НачальноеЗаполнение). +// * Процедура - Строка - полное имя процедуры-обработчика обновления/начального заполнения. +// Например, "ОбновлениеИнформационнойБазыУПП.ЗаполнитьНовыйРеквизит" +// Обязательно должна быть экспортной. // -// ВыполнятьВГруппеОбязательных - Булево. Следует указывать если обработчик требуется -// выполнять в одной группе с обработчиками на версии "*". -// При этом, возможно менять порядок выполнения обработчика -// относительно других путем изменения приоритета. -// Приоритет - Число. Для внутреннего использования. +// * ВыполнятьВГруппеОбязательных - Булево - следует указывать, если обработчик требуется +// выполнять в одной группе с обработчиками на версии "*". +// При этом, возможно менять порядок выполнения обработчика +// относительно других путем изменения приоритета. +// * Приоритет - Число - для внутреннего использования. // -// ОбщиеДанные - если Истина, то обработчик должен срабатывать до -// выполнения любых обработчиков, использующих разделенные -// данные. -// УправлениеОбработчиками - Булево. Если Истина обработчик должен иметь -// параметр типа структура в котором есть свойство -// РазделенныеОбработчики - таблица значений со структурой возвращаемой -// этой функцией. Колонка Версия игнорируется. -// В случае необходимости выполнения разделенного обработчика, -// в данную таблицу необходимо добавить строку с описанием -// процедуры обработчика. -// Имеет смысл только для обязательных (Версия = *) -// обработчиков обновления с установленным флагом ОбщиеДанные -// Комментарий - Строка, описание действий, выполняемых обработчиком обновления. -// РежимВыполнения - Строка, режим выполнения обработчика обновления. Допустимые значения: -// Монопольно, Отложенно, Оперативно. Если значение не было заполнено, -// обработчик считается монопольным. -// МонопольныйРежим - Неопределено, Булево. -// Неопределено - обработчик должен безусловно выполняться в монопольном режиме. -// Для обработчиков перехода на конкретную версию (версия <> *): -// Ложь - обработчик не требует монопольного режима для выполнения. -// Истина - обработчик требует монопольного режима для выполнения. -// Для обязательных обработчиков обновления (Версия = "*"): -// Ложь - обработчик не требует монопольного режима. -// Истина - обработчик может требовать монопольного режима для выполнения. -// В такие обработчики передается параметр типа структура -// со свойством МонопольныйРежим (типа булево). -// При запуске обработчика в монопольном режиме передается -// значение Истина. В этом случае обработчик должен выполнить -// требуемые действия по обновлению. Изменение параметра -// в теле обработчика игнорируется. -// При запуске обработчика в немонопольном режиме передается -// значение Ложь. В этом случае обработчик не должен вносить -// никакие изменения в ИБ. -// Если в результате анализа выясняется что обработчику требуется -// изменить данные ИБ следует установить значение параметра в -// Истина и прекратить выполнение обработчика. -// В этом случае оперативное (немонопольное обновление ИБ) будет -// отменено и выдана ошибка с требованием выполнить обновление -// в монопольном режиме. +// * ОбщиеДанные - Булево - если Истина, то обработчик должен срабатывать до +// выполнения любых обработчиков, использующих разделенные данные. +// * УправлениеОбработчиками - Булево - если Истина, то обработчик должен иметь параметр типа структура, в котором есть свойство +// РазделенныеОбработчики - таблица значений со структурой, возвращаемой этой функцией. +// При этом колонка Версия игнорируется. В случае необходимости выполнения разделенного обработчика, +// в данную таблицу необходимо добавить строку с описанием процедуры обработчика. +// Имеет смысл только для обязательных (Версия = *) обработчиков обновления +// с установленным флагом ОбщиеДанные. +// * Комментарий - Строка - описание действий, выполняемых обработчиком обновления. +// * РежимВыполнения - Строка - режим выполнения обработчика обновления. Допустимые значения: +// Монопольно, Отложенно, Оперативно. Если значение не заполнено, обработчик считается монопольным. +// * МонопольныйРежим - Неопределено, Булево - если указано Неопределено, то обработчик +// должен безусловно выполняться в монопольном режиме. +// Для обработчиков перехода на конкретную версию (версия <> *): +// Ложь - обработчик не требует монопольного режима для выполнения. +// Истина - обработчик требует монопольного режима для выполнения. +// Для обязательных обработчиков обновления (Версия = "*"): +// Ложь - обработчик не требует монопольного режима. +// Истина - обработчик может требовать монопольного режима для выполнения. +// В такие обработчики передается параметр типа структура +// со свойством МонопольныйРежим (типа Булево). +// При запуске обработчика в монопольном режиме передается +// значение Истина. В этом случае обработчик должен выполнить +// требуемые действия по обновлению. Изменение параметра +// в теле обработчика игнорируется. +// При запуске обработчика в немонопольном режиме передается +// значение Ложь. В этом случае обработчик не должен вносить никакие изменения в ИБ. +// Если в результате анализа выясняется что обработчику требуется +// изменить данные ИБ следует установить значение параметра в +// Истина и прекратить выполнение обработчика. +// В этом случае оперативное (немонопольное обновление ИБ) будет +// отменено и выдана ошибка с требованием выполнить обновление в монопольном режиме. // Функция НоваяТаблицаОбработчиковОбновления() Экспорт @@ -127,154 +114,52 @@ // для библиотеки ИдентификаторБиблиотеки до версии ВерсияМетаданныхИБ. // // Параметры -// ИдентификаторБиблиотеки – Строка – имя конфигурации или идентификатор библиотеки. -// ВерсияМетаданныхИБ – Строка – версия метаданных, до которой необходимо -// выполнить обновление. -// ОбработчикиОбновления – Соответствие – список обработчиков обновления. +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. +// ВерсияМетаданныхИБ - Строка - версия метаданных, до которой необходимо выполнить обновление. +// ОбработчикиОбновления - Соответствие - список обработчиков обновления. // // Возвращаемое значение: -// ДеревоЗначений – выполненные обработчики обновления. +// ДеревоЗначений - выполненные обработчики обновления. // Функция ВыполнитьИтерациюОбновления(Знач ИдентификаторБиблиотеки, Знач ВерсияМетаданныхИБ, Знач ОбработчикиОбновления, Знач ХодВыполненияОбработчиков, Знач ОперативноеОбновление = Ложь) Экспорт - ТекущаяВерсияИБ = ВерсияИБ(ИдентификаторБиблиотеки); - Если ПустаяСтрока(ТекущаяВерсияИБ) Тогда - ТекущаяВерсияИБ = "0.0.0.0"; - КонецЕсли; - НоваяВерсияИБ = ТекущаяВерсияИБ; - ВерсияМетаданных = ВерсияМетаданныхИБ; - Если ПустаяСтрока(ВерсияМетаданных) Тогда - ВерсияМетаданных = "0.0.0.0"; - КонецЕсли; - - Если ТекущаяВерсияИБ <> "0.0.0.0" - И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - // Получение списка обработчиков сформированного на этапе выполнения неразделенных обработчиков - ВыполняемыеОбработчики = ПолучитьПланОбновления(ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ВерсияМетаданных); - Если ВыполняемыеОбработчики = Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'Не найден план обновления библиотеки %1 с версии %2 на версию %3'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторБиблиотеки, - ТекущаяВерсияИБ, ВерсияМетаданных); - ЗаписатьИнформацию(Сообщение); - - ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); - КонецЕсли; - Иначе - ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); - КонецЕсли; - - ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков); - - ОбязательныеРазделенныеОбработчики = НоваяТаблицаОбработчиковОбновления(); - - ИсходнаяВерсияИБ = ТекущаяВерсияИБ; - - ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); - - Для Каждого Версия Из ВыполняемыеОбработчики.Строки Цикл - - Если Версия.Версия = "*" Тогда - Сообщение = НСтр("ru = 'Выполняются обязательные процедуры обновления информационной базы.'"); - Иначе - НоваяВерсияИБ = Версия.Версия; - - Если ИдентификаторБиблиотеки = Метаданные.Имя Тогда - Сообщение = НСтр("ru = 'Выполняется обновление информационной базы с версии %1 на версию %2.'"); - Иначе - Сообщение = НСтр("ru = 'Выполняется обновление информационной базы родительской конфигурации %3 с версии %1 на версию %2.'"); - КонецЕсли; - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); - - КонецЕсли; - - ЗаписатьИнформацию(Сообщение); - - Для Каждого Обработчик Из Версия.Строки Цикл - - ПараметрыОбработчика = Неопределено; - Если Обработчик.ВерсияРегистрации = "*" Тогда - - Если Обработчик.УправлениеОбработчиками Тогда - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("РазделенныеОбработчики", ОбязательныеРазделенныеОбработчики); - КонецЕсли; - - Если Обработчик.МонопольныйРежим = Истина Тогда - Если ОперативноеОбновление Тогда - // Проверки выполняются в ВозможноОперативноеОбновление, а само обновление для таких - // обработчиков выполняется только при неоперативном обновление - Продолжить; - КонецЕсли; - - Если ПараметрыОбработчика = Неопределено Тогда - ПараметрыОбработчика = Новый Структура; - КонецЕсли; - ПараметрыОбработчика.Вставить("МонопольныйРежим", Истина); - КонецЕсли; - КонецЕсли; - - ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков", - ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков); - - ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); - КонецЦикла; - - Если Версия.Версия = "*" Тогда - Сообщение = НСтр("ru = 'Выполнены обязательные процедуры обновления информационной базы.'"); - Иначе - // Установка номера версии информационной базы - УстановитьВерсиюИБ(ИдентификаторБиблиотеки, НоваяВерсияИБ); - - Если ИдентификаторБиблиотеки = Метаданные.Имя Тогда - Сообщение = НСтр("ru = 'Выполнено обновление информационной базы с версии %1 на версию %2.'"); - Иначе - Сообщение = НСтр("ru = 'Выполнено обновление информационной базы родительской конфигурации %3 с версии %1 на версию %2.'"); - КонецЕсли; - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); - - ТекущаяВерсияИБ = НоваяВерсияИБ; - - КонецЕсли; - ЗаписатьИнформацию(Сообщение); - - КонецЦикла; - - // Установка номера версии информационной базы - Если ВерсияИБ(ИдентификаторБиблиотеки) <> ВерсияМетаданныхИБ Тогда - УстановитьВерсиюИБ(ИдентификаторБиблиотеки, ВерсияМетаданныхИБ); - КонецЕсли; - - Если ТекущаяВерсияИБ <> "0.0.0.0" Тогда - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.СформироватьПланОбновленияОбластиДанных(ИдентификаторБиблиотеки, ОбработчикиОбновления, - ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ); - - КонецЕсли; - - КонецЕсли; - - Возврат ВыполняемыеОбработчики; + ИтерацияОбновления = ОбновлениеИнформационнойБазыСлужебный.ИтерацияОбновления(ИдентификаторБиблиотеки, + ВерсияМетаданныхИБ, ОбработчикиОбновления); + Возврат ОбновлениеИнформационнойБазыСлужебный.ВыполнитьИтерациюОбновления(ИтерацияОбновления, + ХодВыполненияОбработчиков, ОперативноеОбновление); КонецФункции +// Выполнить неинтерактивное обновление данных ИБ. +// Для вызова через внешнее соединение. +// +// Для использования в других библиотеках и конфигурациях. +// +// Возвращаемое значение: +// Строка - признак выполнения обработчиков обновления: +// "Успешно", "НеТребуется", "ОшибкаУстановкиМонопольногоРежима". +// +Функция ВыполнитьОбновлениеИнформационнойБазы() Экспорт + + Возврат ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для использования в обработчиках обновления. +// + // Записывает изменения в переданном объекте. +// Для использования в обработчиках обновления. // // Параметры: -// Данные - объект, который необходимо записать. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// Данные - Произвольный - объект, набор записей или менеджер константы, который необходимо записать. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. // -Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, + Знач ВключитьБизнесЛогику = Ложь) Экспорт Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; Если Не РегистрироватьНаУзлахПлановОбмена Тогда @@ -287,13 +172,15 @@ КонецПроцедуры // Удаляет переданный объект. +// Для использования в обработчиках обновления. // // Параметры: -// Данные - объект, который необходимо удалить. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// Данные - Произвольный - объект, который необходимо удалить. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. // -Процедура УдалитьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт +Процедура УдалитьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, + Знач ВключитьБизнесЛогику = Ложь) Экспорт Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; Если Не РегистрироватьНаУзлахПлановОбмена Тогда @@ -305,982 +192,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Объявляет события подсистемы ОбновлениеВерсииИБ: -// -// Серверные события: -// ПриДобавленииОбработчиковОбновления, -// ПередОбновлениемИнформационнойБазы, -// ПослеОбновленияИнформационнойБазы. -// -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт - - // СЕРВЕРНЫЕ СОБЫТИЯ. - - // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. - // - // Параметры: - // Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления - // общего модуля ОбновлениеИнформационнойБазы. - // - // Синтаксис: - // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - // - // Для использования в других библиотеках. - // - // (Аналог функции ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления). - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"); - - // Вызывается перед обработчиками обновления данных ИБ. - // - // Синтаксис: - // Процедура ПередОбновлениемИнформационнойБазы() Экспорт - // - // (То же, что ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы). - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПередОбновлениемИнформационнойБазы"); - - // Вызывается после завершения монопольного обновления версии ИБ - // - // Параметры: - // ПредыдущаяВерсия - Строка - версия подсистемы до обновления. "0.0.0.0" для "пустой" ИБ. - // ТекущаяВерсия - Строка - версия подсистемы после обновления. - // ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления - // подсистемы, сгруппированных по номеру версии. - // Процедура обхода выполненных обработчиков: - // - // Для Каждого Версия Из ВыполненныеОбработчики.Строки Цикл - // - // Если Версия.Версия = "*" Тогда - // // Обработчик, который может выполнятся при каждой смене версии. - // Иначе - // // Обработчик, который выполняется для определенной версии. - // КонецЕсли; - // - // Для Каждого Обработчик Из Версия.Строки Цикл - // ... - // КонецЦикла; - // - // КонецЦикла; - // - // ВыводитьОписаниеОбновлений - Булево (возвращаемое значение)- если установить Истина, - // тогда выводить форму с описанием обновлений. - // МонопольныйРежим - Булево - признак выполнения обновления в монопольном режиме. - // Истина - обновление выполнялось в монопольном режиме. - // - // Синтаксис: - // Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, - // Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт - // - // (То же, что ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновленияИнформационнойБазы). - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПослеОбновленияИнформационнойБазы"); - -КонецПроцедуры - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. - - КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( - "ОбновлениеИнформационнойБазыКлиент"); - - КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриНачалеРаботыСистемы"].Добавить( - "ОбновлениеИнформационнойБазыКлиент"); - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ОбновлениеИнформационнойБазы"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "ОбновлениеИнформационнойБазы"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( - "ОбновлениеИнформационнойБазы"); - КонецЕсли; - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ОбновлениеИнформационнойБазы"); - -КонецПроцедуры - -// Инициализирует параметр сеанса ВыполняетсяОбновлениеИБ. -// -Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт - - Если ИмяПараметра <> "ВыполняетсяОбновлениеИБ" Тогда - Возврат; - КонецЕсли; - - ПараметрыСеанса.ВыполняетсяОбновлениеИБ = НеобходимоОбновлениеИнформационнойБазы(); - УстановленныеПараметры.Добавить("ВыполняетсяОбновлениеИБ"); - -КонецПроцедуры - -// Проверить необходимость обновления неразделенных данных информационной базы -// при смене версии конфигурации. -// -Функция НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ВерсияМетаданных = Метаданные.Версия; - Если ПустаяСтрока(ВерсияМетаданных) Тогда - ВерсияМетаданных = "0.0.0.0"; - КонецЕсли; - - ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина); - - Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда - Возврат Истина; - КонецЕсли; - - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - УстановитьПривилегированныйРежим(Истина); - Запустить = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ЗапуститьОбновлениеИнформационнойБазы"); - УстановитьПривилегированныйРежим(Ложь); - - Если Запустить <> Неопределено И ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя -// для этого недостаточно прав, иначе возвращает пустую строку. -// -// Параметры: -// УчитыватьПривилегированныйРежим - Булево. Начальное значение Истина. Если указать Ложь, -// то при проверке полноправности текущего пользователя -// наличие привилегированного режиме не будет учитываться. -// -// ПриЗапускеКлиентскогоПриложения - Булево. Начальное значение Ложь. Если указать Истина, -// тогда в случае, если выполнен запуск с пустым списком -// пользователей, то возвращается пустая строка, вместо -// сообщения о недостатке прав (когда есть недостаток), -// т.к. проверка на запуск с пустым списком пользователей -// при недостатке прав проверяется позднее и отдельно, -// в результате чего происходит добавление пользователя ИБ -// администратор с ролями АдминистраторСистемы и ПолныеПрава. -// -// Возвращаемое значение: -// Строка. Если база не заблокирована, тогда пустая строка, иначе сообщение о причине блокировки. -// -Функция ИнформационнаяБазаЗаблокированаДляОбновления(УчитыватьПривилегированныйРежим = Истина, Знач ПриЗапускеКлиентскогоПриложения = Ложь) Экспорт - - Сообщение = ""; - - ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - - Если УчитыватьПривилегированныйРежим Тогда - ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные); - Иначе - ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ); - КонецЕсли; - - СообщениеАдминистраторуСистемы = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Для завершения обновления версии программы требуются административные права - |(роли ""Администратор системы"" и ""Полные права"").'"); - - УстановитьПривилегированныйРежим(Истина); - РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); - УстановитьПривилегированныйРежим(Ложь); - - Если НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда - - СообщениеАдминистраторуОбластиДанных = - НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору сервиса за подробностями.'"); - - Если ДоступноИспользованиеРазделенныхДанных Тогда - Сообщение = СообщениеАдминистраторуОбластиДанных; - - ИначеЕсли НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Ложь) Тогда - - Если ЕстьПравоАдминистрирование Тогда - Сообщение = СообщениеАдминистраторуСистемы; - Иначе - Сообщение = СообщениеАдминистраторуОбластиДанных; - КонецЕсли; - КонецЕсли; - - Возврат Сообщение; - КонецЕсли; - - // Сообщение администратору сервиса не выдается - Если РазделениеВключено И Не ДоступноИспользованиеРазделенныхДанных Тогда - Возврат ""; - КонецЕсли; - - Если ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда - Возврат ""; - КонецЕсли; - - ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Ложь; - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); - Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда - ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Истина; - КонецЕсли; - КонецЕсли; - - Если Не НеобходимоОбновлениеИнформационнойБазы() - И Не ТребуетсяПроверитьЛегальностьПолученияОбновления() - И Не ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Тогда - Возврат ""; - КонецЕсли; - - ЭтоЗапускСПустымСпискомПользователей = ЭтоЗапускСПустымСпискомПользователей(); - - Если ПривилегированныйРежим() И НЕ УчитыватьПривилегированныйРежим И ЭтоЗапускСПустымСпискомПользователей Тогда - Возврат ""; // Возможно, использован параметр запуска UsePrivilegedMode. - КонецЕсли; - - Если ЭтоЗапускСПустымСпискомПользователей Тогда - - Если ПриЗапускеКлиентскогоПриложения Тогда - // Проверка выполняется в подсистеме пользователи (с предложением добавить администратора). - Возврат ""; - КонецЕсли; - - // Сообщение администратору системы при пустом списке пользователей. - Сообщение = - НСтр("ru = 'Для завершения обновления версии программы требуются административные права. - |Необходимо добавить в список пользователей информационной базы учетную запись - |администратора с двумя ролями ""Администратор системы"" и ""Полные права"", - |и повторить запуск программы от его имени. - | - |Для перехода к списку пользователей информационной базы необходимо открыть Конфигуратор и - |воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); - Возврат Сообщение; - КонецЕсли; - - Если ЕстьПравоАдминистрирование Тогда - Возврат СообщениеАдминистраторуСистемы; - КонецЕсли; - - Если РазделениеВключено Тогда - // Сообщение пользователю сервиса. - Сообщение = - НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору сервиса за подробностями.'"); - Иначе - // Сообщение пользователю локального режима. - Сообщение = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору за подробностями.'"); - КонецЕсли; - - Возврат Сообщение; - -КонецФункции - -// Выполнить неинтерактивное обновление данных ИБ. -// -// Параметры: -// -// ИсключениеПриНевозможностиБлокировкиИБ - Булево - если Ложь, тогда при неудачной -// попытке установки монопольного режима исключение не вызывается, -// а возвращается строка "ОшибкаУстановкиМонопольногоРежима". -// -// ПриЗапускеКлиентскогоПриложения - Булево - Начальное значение Ложь. Если указать Истина, -// тогда параметры работы программы не будут обновляться, т.к. при клиентском -// запуске они обновляются в самом начале (до авторизации пользователи и обновления ИБ). -// Параметр требуется для оптимизации клиентского режима запуска, чтобы не выполнять -// обновление параметров работы программы дважды. -// При внешнем вызове, например, в сеансе внешнего соединения, параметры работы -// программы должны быть обновлены до продолжения обновления ИБ. -// -// Возвращаемое значение: -// Строка - признак выполнения обработчиков обновления: -// "Успешно", "НеТребуется", "ОшибкаУстановкиМонопольногоРежима". -// -Функция ВыполнитьОбновлениеИнформационнойБазы(ИсключениеПриНевозможностиБлокировкиИБ = Истина, - Знач ПриЗапускеКлиентскогоПриложения = Ложь, - Перезапустить = Ложь) Экспорт - - Если НЕ ПриЗапускеКлиентскогоПриложения Тогда - Попытка - СтандартныеПодсистемыСервер.ЗагрузитьОбновитьПараметрыРаботыПрограммы(); - Исключение - ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - КонецЕсли; - - НачальноеЗаполнениеДанных = НачальноеЗаполнениеДанных(); - - ВерсияМетаданных = Метаданные.Версия; - Если ПустаяСтрока(ВерсияМетаданных) Тогда - ВерсияМетаданных = "0.0.0.0"; - КонецЕсли; - ВерсияДанных = ВерсияИБ(Метаданные.Имя); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина); - Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда - Сообщение = - НСтр("ru = 'Не выполнена общая часть обновления информационной базы. - |Обратитесь к системному администратору.'"); - ЗаписатьОшибку(Сообщение); - ВызватьИсключение Сообщение; - КонецЕсли; - КонецЕсли; - - Если НЕ НеобходимоОбновлениеИнформационнойБазы() Тогда - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - // Загрузка и выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы( - ПриЗапускеКлиентскогоПриложения, Перезапустить); - - КонецЕсли; - - Возврат "НеТребуется"; - КонецЕсли; - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - // Загрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); - - КонецЕсли; - - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); - Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); - Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда - Продолжить; - КонецЕсли; - Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); - Модуль.ПередОбновлениемИнформационнойБазы(); - КонецЦикла; - ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы(); - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменился номер версии конфигурации: с ""%1"" на ""%2"". - |Будет выполнено обновление информационной базы.'"), - ВерсияДанных, ВерсияМетаданных); - ЗаписатьИнформацию(Сообщение); - - // Проверка наличия прав для обновления информационной базы. - Если НЕ ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда - Сообщение = НСтр("ru = 'Недостаточно прав для выполнения обновления. - |Обратитесь к системному администратору.'"); - ЗаписатьОшибку(Сообщение); - ВызватьИсключение Сообщение; - КонецЕсли; - - КлючЗаписи = Неопределено; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - КлючЗаписи = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.КлючЗаписиВерсийПодсистем(); - КонецЕсли; - - КонецЕсли; - - Если КлючЗаписи <> Неопределено Тогда - Попытка - ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Обновление области данных'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); - КонецПопытки; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - РежимОтладки = Ложь; - Иначе - ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить("ОбновлениеВерсииИБ", "РежимОтладки"); - РежимОтладки = ЗначениеНастройки = Истина; - КонецЕсли; - - ИтерацииОбновления = ИтерацииОбновления(); - - ОперативноеОбновление = Ложь; - - // Установка монопольного режима для обновления информационной базы. - Если НЕ РежимОтладки Тогда - Попытка - ОбщегоНазначения.ЗаблокироватьИБ(); - Исключение - - Если ВозможноОперативноеОбновление(ИтерацииОбновления) Тогда - ОперативноеОбновление = Истина; - Иначе - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима - | - |Подробности ошибки: - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписатьОшибку(Сообщение); - - Если КлючЗаписи <> Неопределено Тогда - РазблокироватьДанныеДляРедактирования(КлючЗаписи); - КонецЕсли; - - ИспользуетсяЗавершениеРаботыПользователей = Ложь; - ПриОпределенииИспользованияПодсистемыЗавершениеРаботыПользователей( - ИспользуетсяЗавершениеРаботыПользователей); - - БазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - Если БазаФайловая - И Не ИсключениеПриНевозможностиБлокировкиИБ - И ИспользуетсяЗавершениеРаботыПользователей Тогда - - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - - Если Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда - Возврат "ПрекратитьРаботуСистемы"; - КонецЕсли; - - Возврат "ОшибкаУстановкиМонопольногоРежима"; - Иначе - ВызватьИсключение Сообщение; - КонецЕсли; - КонецЕсли; - - КонецПопытки; - КонецЕсли; - - Попытка - - ХодВыполненияОбработчиков = КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления); - // Выполняем все обработчики обновления для подсистем конфигурации. - Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления( - ИтерацияОбновления.Подсистема, - ИтерацияОбновления.Версия, - ИтерацияОбновления.Обработчики, - ХодВыполненияОбработчиков, - ОперативноеОбновление); - КонецЦикла; - - // Для файловой базы отложенные обработчики выполняются в основном цикле обновления - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И - (Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()) Тогда - - ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных); - - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда - ВыполнитьОтложенноеОбновлениеСейчас(); - КонецЕсли; - - КонецЕсли; - - Исключение - // Отключение монопольного режима. - Если НЕ РежимОтладки Тогда - - Если МонопольныйРежим() Тогда - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - КонецЕсли; - - ОбщегоНазначения.РазблокироватьИБ(); - - Если КлючЗаписи <> Неопределено Тогда - РазблокироватьДанныеДляРедактирования(КлючЗаписи); - КонецЕсли; - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - ОбновитьРазделыОписанияИзменений(); - КонецЕсли; - - // Отключение монопольного режима. - Если НЕ РежимОтладки Тогда - ОбщегоНазначения.РазблокироватьИБ(); - Если КлючЗаписи <> Неопределено Тогда - РазблокироватьДанныеДляРедактирования(КлючЗаписи); - КонецЕсли; - КонецЕсли; - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обновление информационной базы на версию ""%1"" выполнено успешно.'"), ВерсияМетаданных); - ЗаписатьИнформацию(Сообщение); - - ВыводитьОписаниеОбновлений = ВерсияДанных <> "0.0.0.0"; - - ОбновитьПовторноИспользуемыеЗначения(); - - Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - ИтерацияОбновления.ОсновнойСерверныйМодуль.ПослеОбновленияИнформационнойБазы( - ИтерацияОбновления.ПредыдущаяВерсия, - ИтерацияОбновления.Версия, - ИтерацияОбновления.ВыполненныеОбработчики, - ВыводитьОписаниеОбновлений, - НЕ ОперативноеОбновление); - КонецЦикла; - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - // Выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); - - КонецЕсли; - - // Для клиент-серверной базы запланировать выполнение отложенных обработчиков обновления - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных); - КонецЕсли; - - КонецЕсли; - - Если Не НачальноеЗаполнениеДанных И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", Истина, , ИмяПользователя()); - КонецЕсли; - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда - - // Сброс неуспешного статуса обновления конфигурации - // при завершении обновления вручную (без скрипта). - МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); - МодульОбновлениеКонфигурации.ПослеОбновленияИнформационнойБазы(); - КонецЕсли; - - ОбновитьПовторноИспользуемыеЗначения(); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПараметрыСеанса.ВыполняетсяОбновлениеИБ = Ложь; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - СтандартныеПодсистемыСервер.УстановитьЗапускОбновленияИнформационнойБазы(Ложь); - УстановитьПривилегированныйРежим(Ложь); - - Возврат "Успешно"; - -КонецФункции - -// Получить версию конфигурации или родительской конфигурации (библиотеки), -// которая хранится в информационной базе. -// -// Параметры -// ИдентификаторБиблиотеки – Строка – имя конфигурации или идентификатор библиотеки. -// -// Возвращаемое значение: -// Строка – версия. -// -// Пример использования: -// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); -// -Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СтандартнаяОбработка = Истина; - Результат = ""; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииВерсииИБ(ИдентификаторБиблиотеки, ПолучитьВерсиюОбщихДанных, - СтандартнаяОбработка, Результат); - - КонецЕсли; - - Если СтандартнаяОбработка Тогда - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииПодсистем.Версия - |ИЗ - | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем - |ГДЕ - | ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы"; - - Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); - ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); - Результат = ""; - Если ТаблицаЗначений.Количество() > 0 Тогда - Результат = СокрЛП(ТаблицаЗначений[0].Версия); - КонецЕсли; - - Если ПустаяСтрока(Результат) Тогда - - // Поддержка обновления с БСП 2.1.2 до БСП 2.1.3 - ТекстЗапроса = - "ВЫБРАТЬ - | УдалитьВерсииПодсистем.Версия - |ИЗ - | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем - |ГДЕ - | УдалитьВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы - | И УдалитьВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Запрос.УстановитьПараметр("ОбластьДанных", -1); - Иначе - Запрос.УстановитьПараметр("ОбластьДанных", 0); - КонецЕсли; - ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); - Если ТаблицаЗначений.Количество() > 0 Тогда - Результат = СокрЛП(ТаблицаЗначений[0].Версия); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Возврат ?(ПустаяСтрока(Результат), "0.0.0.0", Результат); - -КонецФункции - -// Записывает в информационную базу версию конфигурации или родительской конфигурации (библиотеки). -// -// Параметры: -// ИдентификаторБиблиотеки - Строка, имя конфигурации или родительской конфигурации (библиотеки), -// НомерВерсии - Строка, номер версии. -// -Процедура УстановитьВерсиюИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии) Экспорт - - СтандартнаяОбработка = Истина; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриУстановкеВерсииИБ(ИдентификаторБиблиотеки, НомерВерсии, СтандартнаяОбработка); - - КонецЕсли; - - Если СтандартнаяОбработка Тогда - - НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИдентификаторБиблиотеки); - - НоваяЗапись = НаборЗаписей.Добавить(); - - НоваяЗапись.ИмяПодсистемы = ИдентификаторБиблиотеки; - НоваяЗапись.Версия = НомерВерсии; - - НаборЗаписей.Записать(); - - КонецЕсли; - -КонецПроцедуры - -// Возвращает Истина, если при входе будет выполнено начальное заполнение -// информационной базы (или области данных), а не обновление, иначе возвращает Ложь. -// -// Допускается вызывать только до обновления информационной базы (иначе возвращает Ложь). -// -Функция НачальноеЗаполнениеДанных() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СтандартнаяОбработка = Истина; - Результат = Неопределено; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат); - - КонецЕсли; - - Если СтандартнаяОбработка Тогда - Результат = НачальноеЗаполнениеДанныхВЛокальномРежиме(); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - -КонецПроцедуры - -// Проверяет наличие обработчиков в текущем плане обновления -// -// Параметры -// ИдентификаторБиблиотеки – Строка – имя конфигурации или идентификатор библиотеки. -// -// Возвращаемое значение: -// Булево – Истина - текущий план обновления пустой, Ложь - иначе. -// -Функция ТекущийПланОбновленияПустой(Знач ИдентификаторБиблиотеки) Экспорт - - МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; - МенеджерЗаписи.Прочитать(); - Если НЕ МенеджерЗаписи.Выбран() Тогда - Возврат Истина; - КонецЕсли; - - ОписаниеПлана = МенеджерЗаписи.ПланОбновления.Получить(); - - Если ОписаниеПлана = Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Возврат ОписаниеПлана.План.Строки.Количество() = 0; - -КонецФункции - -// Для внутреннего использования -Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, - Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач Отбор = "Монопольно") Экспорт - - // Добавление номера в таблицу, для упорядочивания в порядке добавления - ВсеОбработчики = ИсходнаяТаблицаОбработчиков.Скопировать(); - - ВсеОбработчики.Колонки.Добавить("НомерПоПорядку", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))); - Для Индекс = 0 По ВсеОбработчики.Количество() - 1 Цикл - СтрокаОбработчика = ВсеОбработчики[Индекс]; - СтрокаОбработчика.НомерПоПорядку = Индекс + 1; - КонецЦикла; - - // Подготовка параметров - ВыбиратьРазделенныеОбработчики = Истина; - ВыбиратьНеразделенныеОбработчики = Истина; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ПолучатьРазделенные Тогда - ВыбиратьНеразделенныеОбработчики = Ложь; - Иначе - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ВыбиратьНеразделенныеОбработчики = Ложь; - Иначе - ВыбиратьРазделенныеОбработчики = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Формирование дерева обработчиков - Схема = ПолучитьОбщийМакет("ПолучениеДереваОбработчиковОбновления"); - Схема.Параметры.Найти("ВыбиратьРазделенныеОбработчики").Значение = ВыбиратьРазделенныеОбработчики; - Схема.Параметры.Найти("ВыбиратьНеразделенныеОбработчики").Значение = ВыбиратьНеразделенныеОбработчики; - Схема.Параметры.Найти("ВерсияОт").Значение = ВерсияОт; - Схема.Параметры.Найти("ВерсияДо").Значение = ВерсияДо; - Схема.Параметры.Найти("ВесВерсииОт").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияОт").Значение); - Схема.Параметры.Найти("ВесВерсииДо").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияДо").Значение); - Схема.Параметры.Найти("ОперативноеОбновление").Значение = (Отбор = "Оперативно"); - Схема.Параметры.Найти("ОтложенноеОбновление").Значение = (Отбор = "Отложенно"); - - Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных; - Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - - ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; - ПроцессорКомпоновки.Инициализировать(Макет, Новый Структура("Обработчики", ВсеОбработчики), , Истина); - - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; - ПроцессорВывода.УстановитьОбъект(Новый ДеревоЗначений); - - ВыполняемыеОбработчики = ПроцессорВывода.Вывести(ПроцессорКомпоновки); - - ВыполняемыеОбработчики.Колонки.Версия.Имя = "ВерсияРегистрации"; - ВыполняемыеОбработчики.Колонки.ГруппаВерсии.Имя = "Версия"; - - Возврат ВыполняемыеОбработчики; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в эту подсистемы - -// Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). -Процедура ПослеЗавершенияОбновления() Экспорт - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Общего назначения - -// Для внутреннего использования. -// -Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт - Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; -КонецФункции - -// Возвращает числовой вес версии для сравнения версий между собой -// -// Параметры: -// Версия - Строка - Версия в строковом формате -// -// Возвращаемое значение: -// Число - вес версии -// -Функция ВесВерсии(Знач Версия) Экспорт - - Если Версия = "" Тогда - Возврат 0; - КонецЕсли; - - Возврат ВесВерсииИзМассиваСтрок(СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, ".")); - -КонецФункции - -// Для внутреннего использования. -// -Функция ИтерацииОбновления() Экспорт - - ИмяОсновнойПодсистемы = Метаданные.Имя; - ИтерацияОбновлениеОсновнойПодсистемы = Неопределено; - - ИтерацииОбновления = Новый Массив; - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); - Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл - ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); - Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда - Продолжить; - КонецЕсли; - Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); - - ИтерацияОбновления = Новый Структура; - ИтерацияОбновления.Вставить("Подсистема", ОписаниеПодсистемы.Имя); - ИтерацияОбновления.Вставить("Версия", ОписаниеПодсистемы.Версия); - ИтерацияОбновления.Вставить("Обработчики", НоваяТаблицаОбработчиковОбновления()); - ИтерацияОбновления.Вставить("ВыполненныеОбработчики", Неопределено); - ИтерацияОбновления.Вставить("ОсновнойСерверныйМодуль", Модуль); - ИтерацияОбновления.Вставить("ПредыдущаяВерсия", ВерсияИБ(ОписаниеПодсистемы.Имя)); - ИтерацииОбновления.Добавить(ИтерацияОбновления); - - Модуль.ПриДобавленииОбработчиковОбновления(ИтерацияОбновления.Обработчики); - - Если ОписаниеПодсистемы.Имя = ИмяОсновнойПодсистемы Тогда - ИтерацияОбновлениеОсновнойПодсистемы = ИтерацияОбновления; - КонецЕсли; - - ПроверитьСвойстваОбработчиков(ИтерацияОбновления, ОписаниеПодсистемы.Имя = ИмяОсновнойПодсистемы); - КонецЦикла; - - // Для обратной совместимости. - Если ИтерацияОбновлениеОсновнойПодсистемы = Неопределено Тогда - - ИтерацияОбновления = Новый Структура; - ИтерацияОбновления.Вставить("Подсистема", ИмяОсновнойПодсистемы); - ИтерацияОбновления.Вставить("Версия", Метаданные.Версия); - ИтерацияОбновления.Вставить("Обработчики", ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления()); - ИтерацияОбновления.Вставить("ВыполненныеОбработчики", Неопределено); - ИтерацияОбновления.Вставить("ОсновнойСерверныйМодуль", ОбновлениеИнформационнойБазыПереопределяемый); - ИтерацияОбновления.Вставить("ПредыдущаяВерсия", ВерсияИБ(ИмяОсновнойПодсистемы)); - ИтерацииОбновления.Добавить(ИтерацияОбновления); - - ПроверитьСвойстваОбработчиков(ИтерацияОбновления, Истина); - КонецЕсли; - - Возврат ИтерацииОбновления; - -КонецФункции - -// Проверить права текущего пользователя на выполнение обновления информационной базы. -Функция ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим = Истина, РазделенныеДанные = Неопределено) Экспорт - - ПроверятьПраваАдминистрированияСистемы = Истина; - - Если РазделенныеДанные = Неопределено Тогда - РазделенныеДанные = НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И РазделенныеДанные Тогда - - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат Ложь; - КонецЕсли; - ПроверятьПраваАдминистрированияСистемы = Ложь; - КонецЕсли; - - Возврат Пользователи.ЭтоПолноправныйПользователь( - , ПроверятьПраваАдминистрированияСистемы, УчитыватьПривилегированныйРежим); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Протоколирование хода обновления - // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: @@ -1288,1519 +199,27 @@ // Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат ОбновлениеИнформационнойБазыСлужебный.СобытиеЖурналаРегистрации(); КонецФункции -// Возвращает строковую константу для формирования сообщений журнала регистрации -// протоколирования хода выполнения обработчиков обновления. +// Получить версию конфигурации или родительской конфигурации (библиотеки), +// которая хранится в информационной базе. +// +// Параметры: +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. // // Возвращаемое значение: -// Строка +// Строка - версия. // -Функция СобытиеЖурналаРегистрацииПротокол() Экспорт +// Пример использования: +// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); +// +Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт - Возврат СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Протокол выполнения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Описание обновлений +#КонецОбласти -// Формирует табличный документ с описанием изменений в версиях, -// которые соответствуют переданному списку версий Разделы. -// -Функция ДокументОписаниеОбновлений(Знач Разделы) Экспорт - - ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); - Если Разделы.Количество() = 0 Тогда - Возврат ДокументОписаниеОбновлений; - КонецЕсли; - - МакетОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); - Если МакетОписаниеОбновлений <> Неопределено Тогда - МакетОписаниеОбновлений = ПолучитьОбщийМакет(МакетОписаниеОбновлений); - Иначе - Возврат Новый ТабличныйДокумент(); - КонецЕсли; - - Для Каждого Версия Из Разделы Цикл - - ВывестиОписаниеИзменений(Версия, ДокументОписаниеОбновлений, МакетОписаниеОбновлений); - - КонецЦикла; - - Возврат ДокументОписаниеОбновлений; - -КонецФункции - -// Возвращает массив версий больше последней отображавшейся версии, -// для которых есть описания изменений системы. -// -// Возвращаемое значение: -// Массив - содержит строки с версиями -// -Функция НеотображавшиесяРазделыОписанияИзменений() Экспорт - - Разделы = РазделыОписанияИзменений(); - - ПоследняяВерсия = ПоследняяВерсияОтображенияИзмененийСистемы(); - - Если ПоследняяВерсия = Неопределено Тогда - Возврат Новый Массив; - КонецЕсли; - - Возврат ПолучитьВерсииБольшеЗаданной(Разделы, ПоследняяВерсия); - -КонецФункции - -// Устанавливает флаг отображения описаний изменений версий по -// текущую версию включительно. -// -// Параметры: -// ИмяПользователя - Строка - имя пользователя, для которого -// необходимо установить флаг. -// -Процедура УстановитьФлагОтображенияОписанийПоТекущуюВерсию(Знач ИмяПользователя = Неопределено) Экспорт - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", - "ПоследняяВерсияОтображенияИзмененийСистемы", Метаданные.Версия, , ИмяПользователя); - -КонецПроцедуры - -// Устанавливает флаг отображения описаний изменений версий по -// текущую версию включительно, если для пользователя флаг не -// был установлен ранее. -// -// Параметры: -// ИмяПользователя - Строка - имя пользователя, для которого -// необходимо установить флаг. -// -Процедура УстановитьФлагОтображенияОписанийДляНовогоПользователя(Знач ИмяПользователя = Неопределено) Экспорт - - Если ПоследняяВерсияОтображенияИзмененийСистемы(ИмяПользователя) = Неопределено Тогда - УстановитьФлагОтображенияОписанийПоТекущуюВерсию(ИмяПользователя); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Механизм отложенного обновления - -// Удаляет отложенный обработчики из очереди выполняемых обработчиков на новую версию. -// -// Параметры: -// ИмяОбработчика - Строка - Строковый идентификатор отложенного обработчика. -// -Процедура УдалитьОтложенныйОбработчикИзОчереди(ИмяОбработчика) Экспорт - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении = Неопределено Тогда - Возврат; - КонецЕсли; - - ОтобранныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.НайтиСтроки(Новый Структура("ИмяОбработчика", ИмяОбработчика)); - Если ОтобранныйОбработчик <> Неопределено И ОтобранныйОбработчик.Количество() > 0 Тогда - - Для Каждого СтрокаОбработчик Из ОтобранныйОбработчик Цикл - СтрокаОбработчик.Родитель.Удалить(СтрокаОбработчик); - КонецЦикла; - - КонецЕсли; - - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - -КонецПроцедуры - -// Формирует дерево отложенных обработчиков и активирует регламентное задание. -Процедура ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных) - - ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(НачальноеЗаполнениеДанных); - СведенияОбОбновлении = НовыеСведенияОбОбновлении(); - - ИмяБиблиотеки = ""; - НомерВерсии = ""; - - Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - - ИмяБиблиотеки = ИтерацияОбновления.Подсистема; - ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, - ИтерацияОбновления.ПредыдущаяВерсия, - ИтерацияОбновления.Версия, - Истина, - "Отложенно"); - - Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - // Добавление строки библиотеки. - НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(ИмяБиблиотеки, "ИмяБиблиотеки"); - Если НайденнаяСтрока <> Неопределено Тогда - СтрокаДереваБиблиотека = НайденнаяСтрока; - Иначе - СтрокаДереваБиблиотека = ДеревоОбработчиков.Строки.Добавить(); - СтрокаДереваБиблиотека.ИмяБиблиотеки = ИмяБиблиотеки; - КонецЕсли; - СтрокаДереваБиблиотека.Статус = ""; - - Для каждого СтрокаВерсия Из ОбработчикиПоВерсиям.Строки Цикл - НайденнаяСтрока = СтрокаДереваБиблиотека.Строки.Найти(СтрокаВерсия.Версия, "НомерВерсии"); - Если НайденнаяСтрока <> Неопределено Тогда - НайденнаяСтрока.Статус = ""; - - Для Каждого НевыполненныйОбработчик Из НайденнаяСтрока.Строки Цикл - НевыполненныйОбработчик.ЧислоПопыток = 0; - КонецЦикла; - - Продолжить; - КонецЕсли; - СтрокаДереваВерсии = СтрокаДереваБиблиотека.Строки.Добавить(); - СтрокаДереваВерсии.НомерВерсии = СтрокаВерсия.Версия; - СтрокаДереваВерсии.Статус = ""; - - Для Каждого СтрокаОбработчики Из СтрокаВерсия.Строки Цикл - - Если СтрокаОбработчики.МонопольныйРежим = Истина Тогда - - ТекстОшибки = НСтр("ru = 'У отложенного обработчика ""%1"" - |не должен быть установлен признак ""МонопольныйРежим"".'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстОшибки, СтрокаОбработчики.Процедура); - ЗаписатьОшибку(ТекстОшибки); - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - - СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); - СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; - СтрокаДереваОбработчики.НомерВерсии = СтрокаОбработчики.Версия; - СтрокаДереваОбработчики.ВерсияРегистрации = СтрокаОбработчики.ВерсияРегистрации; - СтрокаДереваОбработчики.ИмяОбработчика = СтрокаОбработчики.Процедура; - СтрокаДереваОбработчики.Комментарий = СтрокаОбработчики.Комментарий; - СтрокаДереваОбработчики.Статус = "НеВыполнено"; - СтрокаДереваОбработчики.ЧислоПопыток = 0; - КонецЦикла; - - КонецЦикла; - - КонецЦикла; - - ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков); - СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - // Планирование выполнения регламентного задания - // При работе в модели сервиса - добавляется регламентное задание в очередь - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПриВключенииОтложенногоОбновления(Истина); - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); - РегламентноеЗадание.Использование = Истина; - РегламентноеЗадание.Записать(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Управляет процессом выполнения отложенных обработчиков обновления. -// -Процедура ВыполнитьОтложенноеОбновление() Экспорт - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - И СведенияОбОбновлении.ВремяОкончанияОбновления = Неопределено Тогда - Возврат; // Ожидаем, пока запишется вся информация об основном цикле обновления - КонецЕсли; - - Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда - ОтключитьОтложенноеОбновление(); - Возврат; - КонецЕсли; - - Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда - СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); - КонецЕсли; - Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда - СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; - КонецЕсли; - СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - Если Не ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении) Тогда - ОтключитьОтложенноеОбновление(); - КонецЕсли; - -КонецПроцедуры - -// Выполняет все процедуры отложенного обновления в цикле за один вызов. -// -Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда - Возврат; - КонецЕсли; - - Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда - СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); - КонецЕсли; - - Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда - СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; - КонецЕсли; - СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - ОбработчикиВыполнялись = Истина; - КоличествоЗапусков = 0; // защита от бесконечного зацикливания из-за возможных ошибок в обработчиках обновления - Пока ОбработчикиВыполнялись И КоличествоЗапусков < 10000 Цикл - ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); - КоличествоЗапусков = КоличествоЗапусков + 1; - КонецЦикла; - -КонецПроцедуры - -// Получает сведения об обновлении информационной базы. -Функция СведенияОбОбновленииИнформационнойБазы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Возврат НовыеСведенияОбОбновлении(); - КонецЕсли; - - СведенияОбОбновленииИБ = Константы.СведенияОбОбновленииИБ.Получить().Получить(); - Если ТипЗнч(СведенияОбОбновленииИБ) = Тип("Структура") Тогда - Если СведенияОбОбновленииИБ.Количество() = 1 Тогда - СведенияОбОбновленииИБ = Неопределено; - Иначе - СведенияОбОбновленииИБ = НовыеСведенияОбОбновлении(СведенияОбОбновленииИБ); - КонецЕсли; - Иначе - СведенияОбОбновленииИБ = Неопределено; - КонецЕсли; - - Возврат СведенияОбОбновленииИБ; - -КонецФункции - -// Записывает данные по обновлению в константу "СведенияОбОбновлении". -Процедура ЗаписатьСведенияОбОбновленииИнформационнойБазы(Знач СведенияОбОбновлении) Экспорт - - Если СведенияОбОбновлении = Неопределено Тогда - НовоеЗначение = Новый Структура; - Иначе - НовоеЗначение = СведенияОбОбновлении; - КонецЕсли; - - СтароеЗначение = Константы.СведенияОбОбновленииИБ.Получить().Получить(); - - Если ТипЗнч(СтароеЗначение) = Тип("Структура") И СтароеЗначение.Свойство("ЛегальнаяВерсия") Тогда - НовоеЗначение.Вставить("ЛегальнаяВерсия", СтароеЗначение.ЛегальнаяВерсия); - КонецЕсли; - - МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); - ЗаписатьДанные(МенеджерКонстанты); - -КонецПроцедуры - -// Только для внутреннего использования -Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт - - Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда - Возврат Ложь; - КонецЕсли; - - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Возврат Ложь; - КонецЕсли; - - ЛегальнаяВерсия = ""; - - Если НачальноеЗаполнениеДанныхВЛокальномРежиме() Тогда - ЛегальнаяВерсия = Метаданные.Версия; - Иначе - УстановитьПривилегированныйРежим(Истина); - Свойства = Константы.СведенияОбОбновленииИБ.Получить().Получить(); - Если ТипЗнч(Свойства) = Тип("Структура") И Свойства.Свойство("ЛегальнаяВерсия") Тогда - ЛегальнаяВерсия = Свойства.ЛегальнаяВерсия; - КонецЕсли; - КонецЕсли; - - Возврат ЛегальнаяВерсия <> Метаданные.Версия; - -КонецФункции - -// Только для внутреннего использования -Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Возврат; - КонецЕсли; - - СтароеЗначение = Константы.СведенияОбОбновленииИБ.Получить().Получить(); - Если ТипЗнч(СтароеЗначение) = Тип("Структура") Тогда - НовоеЗначение = СтароеЗначение; - Иначе - НовоеЗначение = Новый Структура; - КонецЕсли; - - НовоеЗначение.Вставить("ЛегальнаяВерсия", Метаданные.Версия); - - МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); - ЗаписатьДанные(МенеджерКонстанты); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. -// -Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт - - ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); - -КонецПроцедуры - -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. -// -// Параметры: -// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. -// -Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт - - ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента); - -КонецПроцедуры - -// Добавляет параметры работы клиентской логики при запуске системы для подсистемы обмена данными в модели сервиса -// -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт - - Параметры.Вставить("НачальноеЗаполнениеДанных", НачальноеЗаполнениеДанных()); - Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", ПоказатьОписаниеИзмененийСистемы()); - -КонецПроцедуры - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "ОбновлениеИнформационнойБазы.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений"; - КонецЕсли; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.19"; - Обработчик.Процедура = "ОбновлениеИнформационнойБазы.ПеренестиВерсииПодсистемВНеразделенныеДанные"; - Обработчик.ОбщиеДанные = Истина; - -КонецПроцедуры - -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.РазделыОписанияИзмененийСистемы); - - КонецЕсли; - -КонецПроцедуры - -// Обработчик события ПриПолученииСпискаШаблонов. -// -// Формирует список шаблонов заданий очереди. -// -// Параметры: -// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных -// неразделенных регламентных заданий, которые должны использоваться в качестве -// шаблонов для заданий очереди. -// -Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - - Шаблоны.Добавить("ОтложенноеОбновлениеИБ"); - -КонецПроцедуры - -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - - Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазы.УстановкаПараметровСеанса"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы - -// Определяет используется ли в конфигурации подсистема -// "Завершение работы пользователей" -// -// Параметры: -// Используется - Булево - Истина, если используется, Ложь - иначе. -// -Процедура ПриОпределенииИспользованияПодсистемыЗавершениеРаботыПользователей(Используется) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - Используется = Истина; - КонецЕсли; - -КонецПроцедуры - -// Снимает блокировку информационной файловой базы. -// -Процедура ПриСнятииБлокировкиФайловойБазы() Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); - МодульСоединенияИБ.ПриСнятииБлокировкиФайловойБазы(); - КонецЕсли; - -КонецПроцедуры - -// Устанавливает использование регламентного задания заполнения данных управления доступом. -// -// Параметры: -// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. -// -Процедура ПриВключенииОтложенногоОбновления(Знач Использование) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриВключенииОтложенногоОбновления(Использование); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ - -// Переносит данные из регистра сведений УдалитьВерсииПодсистем в регистр -// сведений ВерсииПодсистем -Процедура ПеренестиВерсииПодсистемВНеразделенныеДанные() Экспорт - - НачатьТранзакцию(); - - Попытка - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДляОбщихДанных = -1; - Иначе - ОбластьДляОбщихДанных = 0; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | УдалитьВерсииПодсистем.ИмяПодсистемы, - | УдалитьВерсииПодсистем.Версия, - | УдалитьВерсииПодсистем.ПланОбновления - |ИЗ - | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем - |ГДЕ - | УдалитьВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДляОбщихДанных); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Менеджер = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); - Менеджер.ИмяПодсистемы = Выборка.ИмяПодсистемы; - Менеджер.Версия = Выборка.Версия; - Менеджер.ПланОбновления = Выборка.ПланОбновления; - Менеджер.Записать(); - - КонецЦикла; - - Набор = РегистрыСведений.УдалитьВерсииПодсистем.СоздатьНаборЗаписей(); - Набор.Отбор.ОбластьДанных.Установить(ОбластьДляОбщихДанных); - Набор.Записать(); - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Общего назначения - -Функция ВозможноОперативноеОбновление(ИтерацииОбновления) - - ФильтрыРазделенностиОбработчиков = Новый Массив; - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ФильтрыРазделенностиОбработчиков.Добавить(Ложь); - КонецЕсли; - ФильтрыРазделенностиОбработчиков.Добавить(Истина); - - ОбязательныеРазделенныеОбработчики = НоваяТаблицаОбработчиковОбновления(); // В режиме проверки параметр не используется - - ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); - - // Проверяем обработчики обновления с флагом МонопольныйРежим для подсистем конфигурации. - Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - - Для каждого ФлагРазделенности Из ФильтрыРазделенностиОбработчиков Цикл - - ДеревоОбработчиков = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, - ИтерацияОбновления.ПредыдущаяВерсия, - ИтерацияОбновления.Версия, - ФлагРазделенности, - "Оперативно"); - - Если ДеревоОбработчиков.Строки.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - Если ДеревоОбработчиков.Строки.Количество() > 1 - ИЛИ ДеревоОбработчиков.Строки[0].Версия <> "*" Тогда - - Возврат Ложь; // Есть монопольные обработчики обновления на версию - КонецЕсли; - - Если ФлагРазделенности - И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - // При обновлении неразделенной версии ИБ, для разделенных обязательных - // обработчиков обновления монопольным режимом управляет неразделенный обработчик - Продолжить; - КонецЕсли; - - Если ДеревоОбработчиков.Строки[0].Строки.НайтиСтроки( - Новый Структура("МонопольныйРежим", Неопределено)).Количество() > 0 Тогда - - Возврат Ложь; // Есть обязательные обработчики с безусловным монопольным режимом - КонецЕсли; - - // Вызов обязательных обработчиков обновления в режиме проверки - Для каждого Обработчик Из ДеревоОбработчиков.Строки[0].Строки Цикл - Если Обработчик.ВерсияРегистрации <> "*" Тогда - Возврат Ложь; // Есть монопольные обработчики обновления на версию - КонецЕсли; - - ПараметрыОбработчика = Новый Структура; - Если Обработчик.УправлениеОбработчиками Тогда - ПараметрыОбработчика.Вставить("РазделенныеОбработчики", ОбязательныеРазделенныеОбработчики); - КонецЕсли; - ПараметрыОбработчика.Вставить("МонопольныйРежим", Ложь); - - ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков", - ЗаписыватьВЖурнал, ИтерацияОбновления.Подсистема, Неопределено); - - ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); - - Если ПараметрыОбработчика.МонопольныйРежим = Истина Тогда - Возврат Ложь; // Требуется обновление в монопольном режиме - КонецЕсли; - КонецЦикла; - - КонецЦикла; - КонецЦикла; - - Возврат Истина; - -КонецФункции - -Функция ЭтоЗапускСПустымСпискомПользователей() - - ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - - Если ЗначениеЗаполнено(ПользовательИБ.Имя) Тогда - Возврат Ложь; - КонецЕсли; - - Если НЕ ПравоДоступа("Администрирование", Метаданные, ПользовательИБ) Тогда - Возврат Ложь; - КонецЕсли; - - Если СтандартныеПодсистемыПовтИсп.ИмяТекущегоПриложения() <> "BackgroundJob" Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -Процедура СкопироватьСтрокиВДерево(Знач СтрокиПриемника, Знач СтрокиИсточника, Знач СтруктураКолонок) - - Для каждого СтрокаИсточника Из СтрокиИсточника Цикл - ЗаполнитьЗначенияСвойств(СтруктураКолонок, СтрокаИсточника); - НайденныеСтроки = СтрокиПриемника.НайтиСтроки(СтруктураКолонок); - Если НайденныеСтроки.Количество() = 0 Тогда - СтрокаПриемника = СтрокиПриемника.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаПриемника, СтрокаИсточника); - Иначе - СтрокаПриемника = НайденныеСтроки[0]; - КонецЕсли; - - СкопироватьСтрокиВДерево(СтрокаПриемника.Строки, СтрокаИсточника.Строки, СтруктураКолонок); - КонецЦикла; - -КонецПроцедуры - -Функция ПолучитьПланОбновления(Знач ИдентификаторБиблиотеки, Знач ВерсияС, Знач ВерсияНа) - - МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; - МенеджерЗаписи.Прочитать(); - Если НЕ МенеджерЗаписи.Выбран() Тогда - Возврат Неопределено; - КонецЕсли; - - ОписаниеПлана = МенеджерЗаписи.ПланОбновления.Получить(); - Если ОписаниеПлана = Неопределено Тогда - - Возврат Неопределено; - - Иначе - - Если ОписаниеПлана.ВерсияС <> ВерсияС - ИЛИ ОписаниеПлана.ВерсияНа <> ВерсияНа Тогда - - // План устарел и не соответствует текущей версии - Возврат Неопределено; - КонецЕсли; - - Возврат ОписаниеПлана.План; - - КонецЕсли; - -КонецФункции - -// Отключает обработчики обновления, заполненные в процедуре -// ОбновлениеИнформационнойБазыПереопределяемый.ДобавитьОтключаемыеОбработчикиОбновления. -// -// Параметры: -// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. -// ВыполняемыеОбработчики - ДеревоЗначений - обработчики обновления ИБ. -// ВерсияМетаданныхИБ – Строка – версия метаданных. Отключаются только те обработчики -// у которых версия совпадает с версией метаданных. -// -Процедура ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков) - - ОтключаемыеОбработчики = Новый ТаблицаЗначений; - ОтключаемыеОбработчики.Колонки.Добавить("ИдентификаторБиблиотеки"); - ОтключаемыеОбработчики.Колонки.Добавить("Процедура"); - ОтключаемыеОбработчики.Колонки.Добавить("Версия"); - - ОбновлениеИнформационнойБазыПереопределяемый.ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики); - // Поиск строки дерева, содержащей обработчики обновления с версией "*" - ОбработчикиБиблиотеки = ВыполняемыеОбработчики.Строки.Найти("*", "Версия", Ложь); - - Для Каждого ОтключаемыйОбработчик Из ОтключаемыеОбработчики Цикл - - // Проверка того, что отключаемый обработчик принадлежит переданной библиотеке - Если ИдентификаторБиблиотеки <> ОтключаемыйОбработчик.ИдентификаторБиблиотеки Тогда - Продолжить; - КонецЕсли; - - // Проверка, находится ли обработчик в списке исключения - ВыполняемыйОбработчик = ВыполняемыеОбработчики.Строки.Найти(ОтключаемыйОбработчик.Процедура, "Процедура", Истина); - Если ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия = "*" - И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда - ОбработчикиБиблиотеки.Строки.Удалить(ВыполняемыйОбработчик); - ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию = ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию - 1; - ИначеЕсли ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия <> "*" - И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда - ТекстИсключения = НСтр("ru='Обработчик обновления %1 не может быть отключен, - |так как он выполняется только при переходе на версию %2'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - ВыполняемыйОбработчик.Процедура, ВыполняемыйОбработчик.Версия); - - ВызватьИсключение ТекстИсключения; - ИначеЕсли ВыполняемыйОбработчик = Неопределено Тогда - ТекстИсключения = НСтр("ru='Отключаемый обработчик обновления %1 не существует'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - ОтключаемыйОбработчик.Процедура); - - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВыполнитьОбработчикОбновления(Обработчик, Параметры, ДополнительныеПараметры) - - ЗаписатьИнформациюОХодеОбновления(Обработчик, ДополнительныеПараметры.ХодВыполненияОбработчиков); - - Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда - ОписаниеОбработчика = - ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ДополнительныеПараметры.ИдентификаторБиблиотеки); - КонецЕсли; - - Если Параметры <> Неопределено Тогда - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(Параметры); - Иначе - ПараметрыОбработчика = Неопределено; - КонецЕсли; - - ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); - - Попытка - ОбщегоНазначения.ВыполнитьБезопасно(Обработчик.Процедура, ПараметрыОбработчика); - Исключение - - Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - - ИмяОбработчика = Обработчик.Процедура + "(" + ?(ПараметрыОбработчика = Неопределено, "", "Параметры") + ")"; - ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При вызове обработчика обновления: - |""%1"" - |произошла ошибка: - |""%2"".'"), - ИмяОбработчика, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - - ВызватьИсключение; - КонецПопытки; - - ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, Обработчик.Процедура); - - Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - -КонецПроцедуры - -Функция ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ИдентификаторБиблиотеки, ОбработчикОтложенный = Ложь) - - ОписаниеОбработчика = Новый Структура; - ОписаниеОбработчика.Вставить("Библиотека", ИдентификаторБиблиотеки); - Если ОбработчикОтложенный Тогда - ОписаниеОбработчика.Вставить("Версия", Обработчик.НомерВерсии); - ОписаниеОбработчика.Вставить("Процедура", Обработчик.ИмяОбработчика); - Иначе - ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); - ОписаниеОбработчика.Вставить("Процедура", Обработчик.Процедура); - КонецЕсли; - ОписаниеОбработчика.Вставить("ВерсияРегистрации", Обработчик.ВерсияРегистрации); - ОписаниеОбработчика.Вставить("Параметры", Параметры); - - Если ОбработчикОтложенный Тогда - ОписаниеОбработчика.Вставить("РежимВыполнения", "Отложенно"); - ИначеЕсли ЗначениеЗаполнено(Обработчик.РежимВыполнения) Тогда - ОписаниеОбработчика.Вставить("РежимВыполнения", Обработчик.РежимВыполнения); - Иначе - ОписаниеОбработчика.Вставить("РежимВыполнения", "Монопольно"); - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() - И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - - ОписаниеОбработчика.Вставить("ОбластьДанныхЗначение", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - ОписаниеОбработчика.Вставить("ОбластьДанныхИспользование", Истина); - - Иначе - - ОписаниеОбработчика.Вставить("ОбластьДанныхЗначение", -1); - ОписаниеОбработчика.Вставить("ОбластьДанныхИспользование", Ложь); - - КонецЕсли; - - ОписаниеОбработчика.Вставить("ЗначениеНаНачало", ТекущаяУниверсальнаяДатаВМиллисекундах()); - - Возврат ОписаниеОбработчика; - -КонецФункции - -Процедура ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика) - - Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - ОписаниеОбработчика.ЗначениеНаНачало; - - ОписаниеОбработчика.Вставить("Выполнен", Ложь); - ОписаниеОбработчика.Вставить("Длительность", Длительность / 1000); // В секундах - - ЗаписьЖурналаРегистрации( - СобытиеЖурналаРегистрацииПротокол(), - УровеньЖурналаРегистрации.Информация, - , - , - ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеОбработчика)); - -КонецПроцедуры - -Процедура ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, НазваниеОбработчика) - - Если ТранзакцияАктивнаНаНачалоВыполнения Тогда - Если ТранзакцияАктивна() Тогда - // Проверка поглощенных исключений в обработчиках - Попытка - Константы.ИспользоватьРазделениеПоОбластямДанных.Получить(); - Исключение - ШаблонКомментария = НСтр("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); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Протоколирование хода обновления - -Процедура ЗаписатьИнформацию(Знач Текст) - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, Текст); - -КонецПроцедуры - -Процедура ЗаписатьОшибку(Знач Текст) - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Текст); - -КонецПроцедуры - -Процедура ЗаписатьИнформациюОХодеОбновления(Обработчик, ХодВыполненияОбработчиков) - - Если ХодВыполненияОбработчиков <> Неопределено И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; - Сообщение = НСтр("ru = 'Выполняется обработчик обновления %1 (%2 из %3).'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Сообщение, Обработчик.Процедура, - ХодВыполненияОбработчиков.ВыполненоОбработчиков, ХодВыполненияОбработчиков.ВсегоОбработчиков); - ЗаписатьИнформацию(Сообщение); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Описание обновлений - -// Вывести описания изменений в указанной версии -// -// Параметры -// НомерВерсии – Строка - номер версии, для которого выводится описание из макета -// табличного документа МакетОписаниеОбновлений в табличный документ -// ДокументОписаниеОбновлений. -// -Процедура ВывестиОписаниеИзменений(Знач НомерВерсии, ДокументОписаниеОбновлений, МакетОписаниеОбновлений) - - Номер = СтрЗаменить(НомерВерсии, ".", "_"); - - Если МакетОписаниеОбновлений.Области.Найти("Шапка" + Номер) = Неопределено Тогда - Возврат; - КонецЕсли; - - ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Шапка" + Номер)); - ДокументОписаниеОбновлений.НачатьГруппуСтрок("Версия" + Номер); - ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Версия" + Номер)); - ДокументОписаниеОбновлений.ЗакончитьГруппуСтрок(); - ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Отступ")); - -КонецПроцедуры - -// Возвращает Истина, если у пользователя не отключен показ описания изменений -// системы после обновления и есть непоказанные изменения. -// -Функция ПоказатьОписаниеИзмененийСистемы() - - Если НЕ ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - // Анонимным пользователям новое в версии не показываем - Возврат Ложь; - КонецЕсли; - - ВывестиОписаниеИзмененийДляАдминистратора = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора",,, ИмяПользователя()); - Если ВывестиОписаниеИзмененийДляАдминистратора = Истина Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", ИмяПользователя()); - Возврат Истина; - КонецЕсли; - - Если Не РольДоступна(Метаданные.Роли.ПросмотрОписанияИзмененийПрограммы) - И Не РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда - Возврат Ложь; - КонецЕсли; - - ПоследняяВерсия = ПоследняяВерсияОтображенияИзмененийСистемы(); - Если ПоследняяВерсия = Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Разделы = РазделыОписанияИзменений(); - - Если Разделы = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ПолучитьВерсииБольшеЗаданной(Разделы, ПоследняяВерсия).Количество() > 0; - -КонецФункции - -Функция ПоследняяВерсияОтображенияИзмененийСистемы(Знач ИмяПользователя = Неопределено) - - Если ИмяПользователя = Неопределено Тогда - ИмяПользователя = ИмяПользователя(); - КонецЕсли; - - ПоследняяВерсия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", - "ПоследняяВерсияОтображенияИзмененийСистемы", , , ИмяПользователя); - - Возврат ПоследняяВерсия; - -КонецФункции - -// Получает список версий из общего макета ОписаниеИзмененийСистемы и сохраняет его -// в константе РазделыОписанияИзмененийСистемы. -// -Процедура ОбновитьРазделыОписанияИзменений() - - Разделы = Новый СписокЗначений; - - МакетОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); - Если МакетОписаниеОбновлений <> Неопределено Тогда - ПредикатВерсии = "Версия"; - ПредикатШапки = "Шапка"; - Макет = ПолучитьОбщийМакет(МакетОписаниеОбновлений); - - Для каждого Область Из Макет.Области Цикл - Если Найти(Область.Имя, ПредикатВерсии) = 0 Тогда - Продолжить; - КонецЕсли; - - ВерсияВФорматеОписания = Сред(Область.Имя, СтрДлина(ПредикатВерсии) + 1); - - Если Макет.Области.Найти(ПредикатШапки + ВерсияВФорматеОписания) = Неопределено Тогда - Продолжить; - КонецЕсли; - - РазрядыВерсииСтроками = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияВФорматеОписания, "_"); - Если РазрядыВерсииСтроками.Количество() <> 4 Тогда - Продолжить; - КонецЕсли; - - ВесВерсии = ВесВерсииИзМассиваСтрок(РазрядыВерсииСтроками); - - Версия = "" - + Число(РазрядыВерсииСтроками[0]) + "." - + Число(РазрядыВерсииСтроками[1]) + "." - + Число(РазрядыВерсииСтроками[2]) + "." - + Число(РазрядыВерсииСтроками[3]); - - Разделы.Добавить(ВесВерсии, Версия); - КонецЦикла; - - Разделы.СортироватьПоЗначению(); - КонецЕсли; - - Константы.РазделыОписанияИзмененийСистемы.Установить(Новый ХранилищеЗначения(Разделы)); - -КонецПроцедуры - -// Возвращает список разделов описания изменений системы. -// -// Возвращаемое значение: -// СписокЗначение - Значение - вес версии (число), -// Представление - строка версии -// -Функция РазделыОписанияИзменений() - - Возврат Константы.РазделыОписанияИзмененийСистемы.Получить().Получить(); - -КонецФункции - -Функция ВесВерсииИзМассиваСтрок(РазрядыВерсииСтроками) - - Возврат 0 - + Число(РазрядыВерсииСтроками[0]) * 1000000000 - + Число(РазрядыВерсииСтроками[1]) * 1000000 - + Число(РазрядыВерсииСтроками[2]) * 1000 - + Число(РазрядыВерсииСтроками[3]); - -КонецФункции - -Функция ПолучитьВерсииБольшеЗаданной(Разделы, Версия) - - Результат = Новый Массив; - - Если Разделы = Неопределено Тогда - ОбновитьРазделыОписанияИзменений(); - Разделы = РазделыОписанияИзменений(); - КонецЕсли; - - ВесВерсии = ВесВерсии(Версия); - Для каждого ЭлементСписка Из Разделы Цикл - Если ЭлементСписка.Значение <= ВесВерсии Тогда - Продолжить; - КонецЕсли; - - Результат.Добавить(ЭлементСписка.Представление); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции отложенного обновления - -// Только для внутреннего использования. -// -Функция ВыполненныеОбработчикиПрошлыхВерсий(НачальноеЗаполнениеДанных) - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - Если СведенияОбОбновлении <> Неопределено - И СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Ложь Тогда - - // Оставляем только не выполненные - НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); - Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл - СтрокаВерсии = ЭлементДерева.Родитель.Строки; - СтрокаВерсии.Удалить(ЭлементДерева); - КонецЦикла; - // Сбрасываем количество попыток у обработчиков со статусом "Ошибка". - НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Ошибка"), Истина); - Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл - ЭлементДерева.ЧислоПопыток = 0; - КонецЦикла; - - Возврат СведенияОбОбновлении.ДеревоОбработчиков; - - Иначе - Возврат НовыеСведенияОбОбработчикахОбновления(); - КонецЕсли; - -КонецФункции - -// Только для внутреннего использования. -// -Процедура ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков) - - Для Каждого СтрокаДереваБиблиотека Из ДеревоОбработчиков.Строки Цикл - - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - - Если СтрокаДереваВерсия.Строки.Количество() = 0 Тогда - СтрокаДереваВерсия.Статус = "Завершено"; - Иначе - СтрокаДереваВерсия.Статус = ""; - КонецЕсли; - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -// Только для внутреннего использования. -// -Процедура ОтключитьОтложенноеОбновление() - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПриВключенииОтложенногоОбновления(Ложь); - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); - РегламентноеЗадание.Использование = Ложь; - РегламентноеЗадание.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -// -Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ВыполнитьНеудачные = Ложь) - - ОбработчикиВыполнялись = Ложь; - ЕстьНеудачные = Ложь; - ЕстьПропущенныеОбработчики = Ложь; - ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); - - Для Каждого ДеревоОбработчиковБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - - Если ДеревоОбработчиковБиблиотека.Статус = "Завершено" Тогда - Продолжить; - КонецЕсли; - - Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл - - Если ДеревоОбработчиковВерсия.Статус = "Завершено" Тогда - Продолжить; - КонецЕсли; - - Для Каждого ОбработчикОбновления Из ДеревоОбработчиковВерсия.Строки Цикл - - Если ОбработчикОбновления.Статус = "Выполнено" Тогда - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.ЧислоПопыток > 0 И Не ВыполнитьНеудачные Тогда - ЕстьНеудачные = Истина; - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.ЧислоПопыток >= 3 Тогда - ЕстьПропущенныеОбработчики = Истина; - Продолжить; - КонецЕсли; - - ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); - ОбработчикиВыполнялись = Истина; - ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; - Попытка - СообщениеОЗапущенномОбработчике = НСтр("ru = 'Выполняется процедура обновления ""%1"".'"); - СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОЗапущенномОбработчике, ИмяОбработчика); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); - - Параметры = Новый Структура("ОбработкаЗавершена", Истина); - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(Параметры); - - Если ЗаписыватьВЖурнал Тогда - ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); - КонецЕсли; - - ОбработчикОбновления.Статус = "Выполняется"; - ОбщегоНазначения.ВыполнитьБезопасно(ИмяОбработчика, ПараметрыОбработчика); - Если Параметры.ОбработкаЗавершена Тогда - ОбработчикОбновления.Статус = "Выполнено"; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецЕсли; - Исключение - - Если ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - - ОбработчикОбновления.Статус = "Ошибка"; - ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОбработчикОбновления.ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - ВызватьИсключение; - КонецПопытки; - - ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); - - Если ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - - Прервать; - КонецЦикла; - - Если Не ОбработчикиВыполнялись И ЕстьНеудачные И Не ВыполнитьНеудачные Тогда - Возврат ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, Истина); - КонецЕсли; - - Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда - Прервать; - Иначе - - Если ЕстьПропущенныеОбработчики Тогда - ДеревоОбработчиковВерсия.Статус = "ЕстьПропущенныеОбработчики"; - Иначе - ДеревоОбработчиковВерсия.Статус = "Завершено"; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда - Прервать; - Иначе - - Если ЕстьПропущенныеОбработчики Тогда - ДеревоОбработчиковБиблиотека.Статус = "ЕстьПропущенныеОбработчики"; - Прервать; - КонецЕсли; - - ДеревоОбработчиковБиблиотека.Статус = "Завершено"; - КонецЕсли; - - КонецЦикла; - - Если Не ОбработчикиВыполнялись Тогда - - СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); - СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Не ЕстьПропущенныеОбработчики; - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - КонецЕсли; - Возврат ОбработчикиВыполнялись; - -КонецФункции - -// Только для внутреннего использования -// -Функция НовыеСведенияОбОбновлении(СтарыеСведения = Неопределено) - - СведенияОбОбновлении = Новый Структура; - СведенияОбОбновлении.Вставить("ВремяНачалаОбновления"); - СведенияОбОбновлении.Вставить("ВремяОкончанияОбновления"); - СведенияОбОбновлении.Вставить("ПродолжительностьОбновления"); - СведенияОбОбновлении.Вставить("ВремяНачалаОтложенногоОбновления"); - СведенияОбОбновлении.Вставить("ВремяОкончаниеОтложенногоОбновления"); - СведенияОбОбновлении.Вставить("НомерСеанса"); - СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); - СведенияОбОбновлении.Вставить("ДеревоОбработчиков"); - - Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(СведенияОбОбновлении, СтарыеСведения); - КонецЕсли; - - Возврат СведенияОбОбновлении; - -КонецФункции - -// Только для внутреннего использования -// -Функция НовыеСведенияОбОбработчикахОбновления() - - ДеревоОбработчиков = Новый ДеревоЗначений; - ДеревоОбработчиков.Колонки.Добавить("ИмяБиблиотеки"); - ДеревоОбработчиков.Колонки.Добавить("НомерВерсии"); - ДеревоОбработчиков.Колонки.Добавить("ВерсияРегистрации"); - ДеревоОбработчиков.Колонки.Добавить("ИмяОбработчика"); - ДеревоОбработчиков.Колонки.Добавить("Статус"); - ДеревоОбработчиков.Колонки.Добавить("ЧислоПопыток"); - ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); - ДеревоОбработчиков.Колонки.Добавить("Комментарий"); - - Возврат ДеревоОбработчиков; - -КонецФункции - -Функция НачальноеЗаполнениеДанныхВЛокальномРежиме() - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | 1 КАК Поле1 - |ИЗ - | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | 1 - |ИЗ - | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем"; - - Возврат Запрос.Выполнить().Пустой(); - -КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index db0239da3..3146f8ad0 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Сведения о библиотеке (или конфигурации). @@ -15,20 +14,20 @@ // Параметры: // Описание - Структура - сведения о библиотеке: // -// Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". -// Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". +// * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". +// * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". // -// ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. -// Обработчики обновления таких библиотек должны быть вызваны ранее -// обработчиков обновления данной библиотеки. -// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей, -// порядок вызова обработчиков обновления определяется порядком добавления модулей -// в процедуре ПриДобавленииПодсистем общего модуля ПодсистемыКонфигурацииПереопределяемый. +// * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. +// Обработчики обновления таких библиотек должны быть вызваны ранее +// обработчиков обновления данной библиотеки. +// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей, +// порядок вызова обработчиков обновления определяется порядком добавления модулей +// в процедуре ПриДобавленииПодсистем общего модуля ПодсистемыКонфигурацииПереопределяемый. // Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.2.1.35"; + Описание.Версия = "2.2.2.48"; КонецПроцедуры @@ -101,8 +100,9 @@ // ТекущаяВерсия - Строка - версия после обновления. // ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления, // сгруппированных по номеру версии. -// ВыводитьОписаниеОбновлений - Булево - (возвращаемое значение) если установить Истина, -// то будет выведена форма с описанием обновлений. По умолчанию, Истина. +// ВыводитьОписаниеОбновлений - Булево - если установить Истина, то будет выведена форма +// с описанием обновлений. По умолчанию, Истина. +// Возвращаемое значение. // МонопольныйРежим - Булево - Истина, если обновление выполнялось в монопольном режиме. // // Пример обхода выполненных обработчиков обновления: @@ -149,3 +149,5 @@ Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl index faed424db..eab9bf736 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl @@ -5,28 +5,34 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // См. описание этой же функции в модуле ОбновлениеИнформационнойБазы. +// +// Для использования в других библиотеках и конфигурациях. +// Функция ВыполнитьОбновлениеИнформационнойБазы(ИсключениеПриНевозможностиБлокировкиИБ = Истина, - ПриЗапускеКлиентскогоПриложения = Ложь, - Перезапустить = Ложь) Экспорт + ПриЗапускеКлиентскогоПриложения = Ложь, Перезапустить = Ложь) Экспорт - Возврат ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы( + Возврат ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы( ИсключениеПриНевозможностиБлокировкиИБ, ПриЗапускеКлиентскогоПриложения, Перезапустить); КонецФункции +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + // Снимает блокировку информационной файловой базы. Процедура СнятьБлокировкуФайловойБазы() Экспорт - ОбновлениеИнформационнойБазы.ПриСнятииБлокировкиФайловойБазы(); + ОбновлениеИнформационнойБазыСлужебный.ПриСнятииБлокировкиФайловойБазы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Записывает в константу продолжительность основного цикла обновления. // @@ -36,7 +42,7 @@ Возврат; КонецЕсли; - СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); СведенияОбОбновлении.ВремяНачалаОбновления = ВремяНачалаОбновления; СведенияОбОбновлении.ВремяОкончанияОбновления = ВремяОкончанияОбновления; @@ -52,13 +58,10 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 мин'"), Минуты)); ПродолжительностьСекунды = ?(Секунды = 0, "", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 сек'"), Секунды)); - ПродолжительностьОбновления = ПродолжительностьЧасы + " " + ПродолжительностьМинуты + " " + ПродолжительностьСекунды; - СведенияОбОбновлении.ПродолжительностьОбновления = СокрЛП(ПродолжительностьОбновления); - ОбновлениеИнформационнойБазы.ЗаписатьСведенияОбОбновленииИнформационнойБазы( - СведенияОбОбновлении); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); КонецПроцедуры @@ -70,7 +73,7 @@ Возврат ""; КонецЕсли; - СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); Если СведенияОбОбновлении = Неопределено Тогда Возврат ""; КонецЕсли; @@ -89,4 +92,6 @@ Возврат ""; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl index b62ff5822..6c98e6787 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Проверяет статус отложенного обновления. Если обновление завершилось // с ошибками - информирует об этом пользователя и администратора. @@ -34,3 +33,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index 67521dafe..6b25aaeb4 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. описание параметра ПриЗапускеКлиентскогоПриложения в модуле ОбновлениеИнформационнойБазы // в описании функции ВыполнитьОбновлениеИнформационнойБазы. @@ -14,33 +13,68 @@ ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + ЗакрытьФормуИндикацииХодаОбновленияЕслиОткрыта(Параметры); Возврат; КонецЕсли; - Если НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы Тогда + Если ПараметрыРаботыКлиента.Свойство("НеобходимоОбновлениеИнформационнойБазы") Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "НачатьОбновлениеИнформационнойБазы", ЭтотОбъект); + Иначе Если ПараметрыРаботыКлиента.Свойство("ЗагрузитьСообщениеОбменаДанными") Тогда Перезапустить = Ложь; ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(, Истина, Перезапустить); Если Перезапустить Тогда Параметры.Отказ = Истина; Параметры.Перезапустить = Истина; - Возврат; КонецЕсли; КонецЕсли; - Возврат; + ЗакрытьФормуИндикацииХодаОбновленияЕслиОткрыта(Параметры); КонецЕсли; - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "НачатьОбновлениеИнформационнойБазы", ЭтотОбъект); - КонецПроцедуры -// Только для внутреннего использования. Продолжение процедуры ОбновитьИнформационнуюБазу -Процедура НачатьОбновлениеИнформационнойБазы(Параметры, Неопределен) Экспорт +// Для процедуры ОбновитьИнформационнуюБазу. +Процедура ЗакрытьФормуИндикацииХодаОбновленияЕслиОткрыта(Параметры) - ПараметрыФормы = Новый Структура("ПриЗапускеКлиентскогоПриложения", Истина); - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ", ПараметрыФормы, - ,,,, Новый ОписаниеОповещения("ПослеЗакрытияФормыИндикацияХодаОбновленияИБ", ЭтотОбъект, Параметры)); + Если Параметры.Свойство("ФормаИндикацияХодаОбновленияИБ") Тогда + Если Параметры.ФормаИндикацияХодаОбновленияИБ.Открыта() Тогда + Параметры.ФормаИндикацияХодаОбновленияИБ.НачатьЗакрытие(); + КонецЕсли; + Параметры.Удалить("ФормаИндикацияХодаОбновленияИБ"); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ОбновитьИнформационнуюБазу. +Процедура НачатьОбновлениеИнформационнойБазы(Параметры, ОбработкаПродолжения) Экспорт + + Если Параметры.Свойство("ФормаИндикацияХодаОбновленияИБ") Тогда + Форма = Параметры.ФормаИндикацияХодаОбновленияИБ; + Иначе + ИмяФормы = "Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ"; + + Форма = ОткрытьФорму(ИмяФормы,,,,,, Новый ОписаниеОповещения( + "ПослеЗакрытияФормыИндикацияХодаОбновленияИБ", ЭтотОбъект, Параметры)); + + Параметры.Вставить("ФормаИндикацияХодаОбновленияИБ", Форма); + КонецЕсли; + + Форма.ОбновитьИнформационнуюБазу(); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыПрограммы. +Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры, Неопределен) Экспорт + + ИмяФормы = "Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ"; + + Форма = ОткрытьФорму(ИмяФормы,,,,,, Новый ОписаниеОповещения( + "ПослеЗакрытияФормыИндикацияХодаОбновленияИБ", ЭтотОбъект, Параметры)); + + Параметры.Вставить("ФормаИндикацияХодаОбновленияИБ", Форма); + + Форма.ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры); КонецПроцедуры @@ -128,7 +162,18 @@ "ПоказатьПредупреждениеИПродолжить", СтандартныеПодсистемыКлиент.ЭтотОбъект, ПараметрыКлиента.ИнформационнаяБазаЗаблокированаДляОбновления); - Возврат; + + ИначеЕсли ПараметрыКлиента.Свойство("НеобходимоОбновлениеПараметровРаботыПрограммы") Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ЗагрузитьОбновитьПараметрыРаботыПрограммы", ЭтотОбъект, Параметры); + + ИначеЕсли Найти(НРег(ПараметрЗапуска), НРег("ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ")) > 0 Тогда + Параметры.Отказ = Истина; + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ПоказатьПредупреждениеИПродолжить", + СтандартныеПодсистемыКлиент.ЭтотОбъект, + НСтр("ru = 'Параметр запуска ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ + |можно использовать только совместно с параметром ЗапуститьОбновлениеИнформационнойБазы.'")); КонецЕсли; КонецПроцедуры @@ -147,3 +192,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl index 520535c42..9c5232121 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается при нажатии на гиперссылку или двойном щелчке на ячейке // табличного документа с описанием изменений системы. @@ -20,3 +19,5 @@ КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index ecf7c91a1..90ac005c7 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -3,15 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается перед обработчиками обновления данных ИБ. // Процедура ПередОбновлениемИнформационнойБазы() Экспорт - - КонецПроцедуры // Вызывается после завершении обновления данных ИБ. @@ -44,8 +41,6 @@ Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсияИБ, Знач ТекущаяВерсияИБ, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт - - КонецПроцедуры // Вызывается при подготовке табличного документа с описанием изменений системы. @@ -57,8 +52,6 @@ // Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт - - КонецПроцедуры // Получает список обработчиков обновления ИБ, которые не нужно выполнять. @@ -75,7 +68,6 @@ // Процедура ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики) Экспорт - КонецПроцедуры // Переопределяет текст подсказки, указывающий путь к форме "Результаты обновления программы". @@ -85,7 +77,6 @@ // Процедура ПолучитьТекстПоясненияДляРезультатовОбновленияПрограммы(ТекстПодсказки) Экспорт - КонецПроцедуры // Устарела. Следует использовать процедуру ПриДобавленииПодсистем @@ -111,3 +102,5 @@ Возврат Обработчики; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl new file mode 100644 index 000000000..48789d401 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -0,0 +1,3080 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ" +// Серверные процедуры и функции обновления информационной базы +// при смене версии конфигурации. +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Объявляет события подсистемы ОбновлениеВерсииИБ: +// +// Серверные события: +// ПриДобавленииОбработчиковОбновления, +// ПередОбновлениемИнформационнойБазы, +// ПослеОбновленияИнформационнойБазы. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. + // + // Параметры: + // Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления + // общего модуля ОбновлениеИнформационнойБазы. + // + // Синтаксис: + // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + // + // Для использования в других библиотеках. + // + // (Аналог функции ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления). + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"); + + // Вызывается перед обработчиками обновления данных ИБ. + // + // Синтаксис: + // Процедура ПередОбновлениемИнформационнойБазы() Экспорт + // + // (То же, что ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы). + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПередОбновлениемИнформационнойБазы"); + + // Вызывается после завершения монопольного обновления версии ИБ + // + // Параметры: + // ПредыдущаяВерсия - Строка - версия подсистемы до обновления. "0.0.0.0" для "пустой" ИБ. + // ТекущаяВерсия - Строка - версия подсистемы после обновления. + // ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления + // подсистемы, сгруппированных по номеру версии. + // Процедура обхода выполненных обработчиков: + // + // Для Каждого Версия Из ВыполненныеОбработчики.Строки Цикл + // + // Если Версия.Версия = "*" Тогда + // // Обработчик, который может выполнятся при каждой смене версии. + // Иначе + // // Обработчик, который выполняется для определенной версии. + // КонецЕсли; + // + // Для Каждого Обработчик Из Версия.Строки Цикл + // ... + // КонецЦикла; + // + // КонецЦикла; + // + // ВыводитьОписаниеОбновлений - Булево (возвращаемое значение)- если установить Истина, + // тогда выводить форму с описанием обновлений. + // МонопольныйРежим - Булево - признак выполнения обновления в монопольном режиме. + // Истина - обновление выполнялось в монопольном режиме. + // + // Синтаксис: + // Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, + // Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт + // + // (То же, что ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновленияИнформационнойБазы). + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПослеОбновленияИнформационнойБазы"); + +КонецПроцедуры + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. + + КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( + "ОбновлениеИнформационнойБазыКлиент"); + + КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриНачалеРаботыСистемы"].Добавить( + "ОбновлениеИнформационнойБазыКлиент"); + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + КонецЕсли; + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + +КонецПроцедуры + +// Инициализирует параметр сеанса ВыполняетсяОбновлениеИБ. +// +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра <> "ВыполняетсяОбновлениеИБ" Тогда + Возврат; + КонецЕсли; + + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); + УстановленныеПараметры.Добавить("ВыполняетсяОбновлениеИБ"); + +КонецПроцедуры + +// Проверить необходимость обновления неразделенных данных информационной базы +// при смене версии конфигурации. +// +Функция НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ВерсияМетаданных = Метаданные.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + ВерсияМетаданных = "0.0.0.0"; + КонецЕсли; + + ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина); + + Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + УстановитьПривилегированныйРежим(Истина); + Запустить = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ЗапуститьОбновлениеИнформационнойБазы"); + УстановитьПривилегированныйРежим(Ложь); + + Если Запустить <> Неопределено И ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя +// для этого недостаточно прав, иначе возвращает пустую строку. +// +// Параметры: +// УчитыватьПривилегированныйРежим - Булево. Начальное значение Истина. Если указать Ложь, +// то при проверке полноправности текущего пользователя +// наличие привилегированного режима не будет учитываться. +// +// Возвращаемое значение: +// Строка. Если база не заблокирована, тогда пустая строка, иначе сообщение о причине блокировки. +// +Функция ИнформационнаяБазаЗаблокированаДляОбновления(УчитыватьПривилегированныйРежим = Истина) Экспорт + + Сообщение = ""; + + ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Если УчитыватьПривилегированныйРежим Тогда + ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные); + Иначе + ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ); + КонецЕсли; + + СообщениеАдминистраторуСистемы = + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Для завершения обновления версии программы требуются административные права + |(роли ""Администратор системы"" и ""Полные права"").'"); + + УстановитьПривилегированныйРежим(Истина); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + УстановитьПривилегированныйРежим(Ложь); + + Если НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + + СообщениеАдминистраторуОбластиДанных = + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору сервиса за подробностями.'"); + + Если ДоступноИспользованиеРазделенныхДанных Тогда + Сообщение = СообщениеАдминистраторуОбластиДанных; + + ИначеЕсли НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Ложь) Тогда + + Если ЕстьПравоАдминистрирование Тогда + Сообщение = СообщениеАдминистраторуСистемы; + Иначе + Сообщение = СообщениеАдминистраторуОбластиДанных; + КонецЕсли; + КонецЕсли; + + Возврат Сообщение; + КонецЕсли; + + // Сообщение администратору сервиса не выдается + Если РазделениеВключено И Не ДоступноИспользованиеРазделенныхДанных Тогда + Возврат ""; + КонецЕсли; + + Если ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда + Возврат ""; + КонецЕсли; + + ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Ложь; + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); + Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Истина; + КонецЕсли; + КонецЕсли; + + Если Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() + И Не ТребуетсяПроверитьЛегальностьПолученияОбновления() + И Не ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Тогда + Возврат ""; + КонецЕсли; + + Если ЕстьПравоАдминистрирование Тогда + Возврат СообщениеАдминистраторуСистемы; + КонецЕсли; + + Если РазделениеВключено Тогда + // Сообщение пользователю сервиса. + Сообщение = + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору сервиса за подробностями.'"); + Иначе + // Сообщение пользователю локального режима. + Сообщение = + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору за подробностями.'"); + КонецЕсли; + + Возврат Сообщение; + +КонецФункции + +// Выполнить неинтерактивное обновление данных ИБ. +// +// Параметры: +// +// ИсключениеПриНевозможностиБлокировкиИБ - Булево - если Ложь, тогда при неудачной +// попытке установки монопольного режима исключение не вызывается, +// а возвращается строка "ОшибкаУстановкиМонопольногоРежима". +// +// ПриЗапускеКлиентскогоПриложения - Булево - Начальное значение Ложь. Если указать Истина, +// тогда параметры работы программы не будут обновляться, т.к. при клиентском +// запуске они обновляются в самом начале (до авторизации пользователи и обновления ИБ). +// Параметр требуется для оптимизации клиентского режима запуска, чтобы не выполнять +// обновление параметров работы программы дважды. +// При внешнем вызове, например, в сеансе внешнего соединения, параметры работы +// программы должны быть обновлены до продолжения обновления ИБ. +// +// Возвращаемое значение: +// Строка - признак выполнения обработчиков обновления: +// "Успешно", "НеТребуется", "ОшибкаУстановкиМонопольногоРежима". +// +Функция ВыполнитьОбновлениеИнформационнойБазы(ИсключениеПриНевозможностиБлокировкиИБ = Истина, + Знач ПриЗапускеКлиентскогоПриложения = Ложь, Перезапустить = Ложь, УстановленнаяБлокировкаИБ = Неопределено, ВФоне = Ложь) Экспорт + + Если НЕ ПриЗапускеКлиентскогоПриложения Тогда + Попытка + СтандартныеПодсистемыСервер.ЗагрузитьОбновитьПараметрыРаботыПрограммы(); + Исключение + ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + // Определяем факт смены имени конфигурации. + + РежимОбновленияДанных = РежимОбновленияДанных(); + ВерсияМетаданных = Метаданные.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + ВерсияМетаданных = "0.0.0.0"; + КонецЕсли; + ВерсияДанных = ВерсияИБ(Метаданные.Имя); + + // Перед обновлением информационной базы. + // + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПередОбновлениемИнформационнойБазы(); + + // Установка привилегированного режима для возможности обновления ИБ в модели сервиса, + // в случае когда администратор области данных выполняет вход в область до завершения обновления области. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + КонецЕсли; + + // Загрузка и выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПередОбновлениемИнформационнойБазы(ПриЗапускеКлиентскогоПриложения, Перезапустить); + КонецЕсли; + + Если НЕ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Возврат "НеТребуется"; + КонецЕсли; + + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=15/5"); + КонецЕсли; + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда + Продолжить; + КонецЕсли; + Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); + Модуль.ПередОбновлениемИнформационнойБазы(); + КонецЦикла; + ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы(); + + // Проверка наличия прав для обновления информационной базы. + Если НЕ ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда + Сообщение = НСтр("ru = 'Недостаточно прав для обновления версии программы.'"); + ЗаписатьОшибку(Сообщение); + ВызватьИсключение Сообщение; + КонецЕсли; + + Если РежимОбновленияДанных = "ПереходСДругойПрограммы" Тогда + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменилось имя конфигурации на ""%1"". + |Будет выполнен переход с другой программы.'"), + Метаданные.Имя); + ИначеЕсли РежимОбновленияДанных = "ОбновлениеВерсии" Тогда + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменился номер версии конфигурации: с ""%1"" на ""%2"". + |Будет выполнено обновление информационной базы.'"), + ВерсияДанных, ВерсияМетаданных); + Иначе + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется начальное заполнение данных до версии ""%1"".'"), + ВерсияМетаданных); + КонецЕсли; + ЗаписатьИнформацию(Сообщение); + + // Установка блокировки информационной базы + БлокировкаУстановленаРанее = УстановленнаяБлокировкаИБ <> Неопределено И УстановленнаяБлокировкаИБ.Установлена; + Если БлокировкаУстановленаРанее Тогда + ИтерацииОбновления = ИтерацииОбновления(); + БлокировкаИБ = УстановленнаяБлокировкаИБ; + Иначе + БлокировкаИБ = Неопределено; + ИтерацииОбновления = ЗаблокироватьИБ(БлокировкаИБ, ИсключениеПриНевозможностиБлокировкиИБ); + Если БлокировкаИБ.Ошибка <> Неопределено Тогда + Возврат БлокировкаИБ.Ошибка; + КонецЕсли; + КонецЕсли; + + ОперативноеОбновление = БлокировкаИБ.ОперативноеОбновление; + КлючЗаписи = БлокировкаИБ.КлючЗаписи; + + Попытка + + Если РежимОбновленияДанных = "ПереходСДругойПрограммы" Тогда + + ПерейтиСДругойПрограммы(); + + РежимОбновленияДанных = РежимОбновленияДанных(); + ОперативноеОбновление = Ложь; + ИтерацииОбновления = ИтерацииОбновления(); + КонецЕсли; + + Исключение + + Если Не БлокировкаУстановленаРанее Тогда + РазблокироватьИБ(БлокировкаИБ); + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; + + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=20/75"); + КонецЕсли; + + Попытка + + ХодВыполненияОбработчиков = КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления); + // Выполняем все обработчики обновления для подсистем конфигурации. + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления( + ИтерацияОбновления, + ХодВыполненияОбработчиков, + ОперативноеОбновление, + ВФоне); + КонецЦикла; + + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=95/5"); + КонецЕсли; + + // Для файловой базы отложенные обработчики выполняются в основном цикле обновления + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И + (Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()) Тогда + + ЗапланироватьОтложенноеОбновление(ИтерацииОбновления); + + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда + + ВыполнитьОтложенноеОбновлениеСейчас(); + + КонецЕсли; + + КонецЕсли; + + Исключение + + Если Не БлокировкаУстановленаРанее Тогда + РазблокироватьИБ(БлокировкаИБ); + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; + + // Отключение монопольного режима. + Если Не БлокировкаУстановленаРанее Тогда + РазблокироватьИБ(БлокировкаИБ); + КонецЕсли; + + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обновление информационной базы на версию ""%1"" выполнено успешно.'"), ВерсияМетаданных); + ЗаписатьИнформацию(Сообщение); + + ВыводитьОписаниеОбновлений = (РежимОбновленияДанных <> "НачальноеЗаполнение"); + + ОбновитьПовторноИспользуемыеЗначения(); + + // После обновления информационной базы. + // + ВыполнитьОбработчикиПослеОбновленияИнформационнойБазы( + ИтерацииОбновления, + Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(), + ВыводитьОписаниеОбновлений, + ОперативноеОбновление); + + ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновленияИнформационнойБазы( + ВерсияДанных, + ВерсияМетаданных, + ИтерацииОбновления, + ВыводитьОписаниеОбновлений, + Не ОперативноеОбновление); + + // Выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПослеОбновленияИнформационнойБазы(); + КонецЕсли; + + // Для клиент-серверной базы запланировать выполнение отложенных обработчиков обновления + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ЗапланироватьОтложенноеОбновление(ИтерацииОбновления); + КонецЕсли; + + КонецЕсли; + + ОпределитьВыводОписанияОбновлений(ВыводитьОписаниеОбновлений); + + // Сброс неуспешного статуса обновления конфигурации при завершении обновления вручную (без скрипта). + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); + МодульОбновлениеКонфигурации.ПослеОбновленияИнформационнойБазы(); + КонецЕсли; + + ОбновитьПовторноИспользуемыеЗначения(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + СтандартныеПодсистемыСервер.УстановитьЗапускОбновленияИнформационнойБазы(Ложь); + + Возврат "Успешно"; + +КонецФункции + +// Получить версию конфигурации или родительской конфигурации (библиотеки), +// которая хранится в информационной базе. +// +// Параметры +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. +// +// Возвращаемое значение: +// Строка - версия. +// +// Пример использования: +// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); +// +Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтандартнаяОбработка = Истина; + Результат = ""; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииВерсииИБ(ИдентификаторБиблиотеки, ПолучитьВерсиюОбщихДанных, + СтандартнаяОбработка, Результат); + + КонецЕсли; + + Если СтандартнаяОбработка Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистем.Версия + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы"; + + Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + Результат = ""; + Если ТаблицаЗначений.Количество() > 0 Тогда + Результат = СокрЛП(ТаблицаЗначений[0].Версия); + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + + // Поддержка обновления с БСП 2.1.2 + ТекстЗапроса = + "ВЫБРАТЬ + | УдалитьВерсииПодсистем.Версия + |ИЗ + | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем + |ГДЕ + | УдалитьВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы + | И УдалитьВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Запрос.УстановитьПараметр("ОбластьДанных", -1); + Иначе + Запрос.УстановитьПараметр("ОбластьДанных", 0); + КонецЕсли; + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + Если ТаблицаЗначений.Количество() > 0 Тогда + Результат = СокрЛП(ТаблицаЗначений[0].Версия); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат ?(ПустаяСтрока(Результат), "0.0.0.0", Результат); + +КонецФункции + +// Записывает в информационную базу версию конфигурации или родительской конфигурации (библиотеки). +// +// Параметры: +// ИдентификаторБиблиотеки - Строка, имя конфигурации или родительской конфигурации (библиотеки), +// НомерВерсии - Строка, номер версии. +// +Процедура УстановитьВерсиюИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии, Знач ЭтоОсновнаяКонфигурация) Экспорт + + СтандартнаяОбработка = Истина; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриУстановкеВерсииИБ(ИдентификаторБиблиотеки, НомерВерсии, СтандартнаяОбработка); + + КонецЕсли; + + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИдентификаторБиблиотеки); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.ИмяПодсистемы = ИдентификаторБиблиотеки; + НоваяЗапись.Версия = НомерВерсии; + НоваяЗапись.ЭтоОсновнаяКонфигурация = ЭтоОсновнаяКонфигурация; + + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Возвращает режим обновления данных информационной базы. +// Допускается вызывать только до начала обновления информационной базы (иначе возвращает "ОбновлениеВерсии"). +// +// Возвращаемое значение: +// Строка - "НачальноеЗаполнение", если это первый запуск пустой базы (области данных); +// "ОбновлениеВерсии", если выполняется первый запуск после обновление конфигурации базы данных; +// "ПереходСДругойПрограммы", если выполняется первый запуск после обновление конфигурации базы данных, +// в которой изменилось имя основной конфигурации. +// +Функция РежимОбновленияДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтандартнаяОбработка = Истина; + РежимОбновленияДанных = ""; + + ИмяОсновнойКонфигурации = Метаданные.Имя; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда + Продолжить; + КонецЕсли; + + Если ОписаниеПодсистемы.Имя <> ИмяОсновнойКонфигурации Тогда + Продолжить; + КонецЕсли; + + Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); + Модуль.ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка); + КонецЦикла; + + Если НЕ СтандартнаяОбработка Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПриОпределенииРежимаОбновленияДанных", "РежимОбновленияДанных", + РежимОбновленияДанных, Тип("Строка")); + Сообщение = НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; передано значение: %4 (тип %5).'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + "РежимОбновленияДанных", "ПриОпределенииРежимаОбновленияДанных", + НСтр("ru = 'НачальноеЗаполнение, ОбновлениеВерсии или ПереходСДругойПрограммы'"), + РежимОбновленияДанных, ТипЗнч(РежимОбновленияДанных)); + ОбщегоНазначенияКлиентСервер.Проверить(РежимОбновленияДанных = "НачальноеЗаполнение" Или + РежимОбновленияДанных = "ОбновлениеВерсии" Или РежимОбновленияДанных = "ПереходСДругойПрограммы", Сообщение); + Возврат РежимОбновленияДанных; + КонецЕсли; + + Результат = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат); + КонецЕсли; + + Если НЕ СтандартнаяОбработка Тогда + Возврат ?(Результат = Истина, "НачальноеЗаполнение", "ОбновлениеВерсии"); + КонецЕсли; + + Возврат РежимОбновленияДанныхВЛокальномРежимеРаботы(); + +КонецФункции + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + +КонецПроцедуры + +// Проверяет наличие обработчиков в текущем плане обновления +// +// Параметры +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. +// +// Возвращаемое значение: +// Булево - Истина - текущий план обновления пустой, Ложь - иначе. +// +Функция ТекущийПланОбновленияПустой(Знач ИдентификаторБиблиотеки) Экспорт + + МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + Возврат Истина; + КонецЕсли; + + ОписаниеПлана = МенеджерЗаписи.ПланОбновления.Получить(); + + Если ОписаниеПлана = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат ОписаниеПлана.План.Строки.Количество() = 0; + +КонецФункции + +// Для внутреннего использования +Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, + Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач Отбор = "Монопольно") Экспорт + + // Добавление номера в таблицу, для упорядочивания в порядке добавления + ВсеОбработчики = ИсходнаяТаблицаОбработчиков.Скопировать(); + + ВсеОбработчики.Колонки.Добавить("НомерПоПорядку", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))); + Для Индекс = 0 По ВсеОбработчики.Количество() - 1 Цикл + СтрокаОбработчика = ВсеОбработчики[Индекс]; + СтрокаОбработчика.НомерПоПорядку = Индекс + 1; + КонецЦикла; + + // Подготовка параметров + ВыбиратьРазделенныеОбработчики = Истина; + ВыбиратьНеразделенныеОбработчики = Истина; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПолучатьРазделенные Тогда + ВыбиратьНеразделенныеОбработчики = Ложь; + Иначе + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВыбиратьНеразделенныеОбработчики = Ложь; + Иначе + ВыбиратьРазделенныеОбработчики = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Формирование дерева обработчиков + Схема = ПолучитьОбщийМакет("ПолучениеДереваОбработчиковОбновления"); + Схема.Параметры.Найти("ВыбиратьРазделенныеОбработчики").Значение = ВыбиратьРазделенныеОбработчики; + Схема.Параметры.Найти("ВыбиратьНеразделенныеОбработчики").Значение = ВыбиратьНеразделенныеОбработчики; + Схема.Параметры.Найти("ВерсияОт").Значение = ВерсияОт; + Схема.Параметры.Найти("ВерсияДо").Значение = ВерсияДо; + Схема.Параметры.Найти("ВесВерсииОт").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияОт").Значение); + Схема.Параметры.Найти("ВесВерсииДо").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияДо").Значение); + Схема.Параметры.Найти("ОперативноеОбновление").Значение = (Отбор = "Оперативно"); + Схема.Параметры.Найти("ОтложенноеОбновление").Значение = (Отбор = "Отложенно"); + + Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных; + Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(Макет, Новый Структура("Обработчики", ВсеОбработчики), , Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ПроцессорВывода.УстановитьОбъект(Новый ДеревоЗначений); + + ВыполняемыеОбработчики = ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ВыполняемыеОбработчики.Колонки.Версия.Имя = "ВерсияРегистрации"; + ВыполняемыеОбработчики.Колонки.ГруппаВерсии.Имя = "Версия"; + + Возврат ВыполняемыеОбработчики; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистемы + +// Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). +Процедура ПослеЗавершенияОбновления() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Общего назначения + +// Для внутреннего использования. +// +Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт + Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; +КонецФункции + +// Возвращает числовой вес версии для сравнения версий между собой +// +// Параметры: +// Версия - Строка - Версия в строковом формате +// +// Возвращаемое значение: +// Число - вес версии +// +Функция ВесВерсии(Знач Версия) Экспорт + + Если Версия = "" Тогда + Возврат 0; + КонецЕсли; + + Возврат ВесВерсииИзМассиваСтрок(СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, ".")); + +КонецФункции + +// Для внутреннего использования. +// +Функция ИтерацияОбновления(ИмяКонфигурацииИлиБиблиотеки, Версия, Обработчики, ЭтоОсновнаяКонфигурация = Неопределено) Экспорт + + ИтерацияОбновления = Новый Структура; + ИтерацияОбновления.Вставить("Подсистема", ИмяКонфигурацииИлиБиблиотеки); + ИтерацияОбновления.Вставить("Версия", Версия); + ИтерацияОбновления.Вставить("ЭтоОсновнаяКонфигурация", + ?(ЭтоОсновнаяКонфигурация <> Неопределено, ЭтоОсновнаяКонфигурация, ИмяКонфигурацииИлиБиблиотеки = Метаданные.Имя)); + ИтерацияОбновления.Вставить("Обработчики", Обработчики); + ИтерацияОбновления.Вставить("ВыполненныеОбработчики", Неопределено); + ИтерацияОбновления.Вставить("ИмяОсновногоСерверногоМодуля", ""); + ИтерацияОбновления.Вставить("ОсновнойСерверныйМодуль", ""); + ИтерацияОбновления.Вставить("ПредыдущаяВерсия", ""); + Возврат ИтерацияОбновления; + +КонецФункции + +// Для внутреннего использования. +// +Функция ИтерацииОбновления() Экспорт + + ИмяОсновнойКонфигурации = Метаданные.Имя; + ИтерацияОбновлениеОсновнойПодсистемы = Неопределено; + + ИтерацииОбновления = Новый Массив; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда + Продолжить; + КонецЕсли; + Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); + + ИтерацияОбновления = ИтерацияОбновления(ОписаниеПодсистемы.Имя, ОписаниеПодсистемы.Версия, + ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(), ОписаниеПодсистемы.Имя = ИмяОсновнойКонфигурации); + ИтерацияОбновления.ИмяОсновногоСерверногоМодуля = ОписаниеПодсистемы.ОсновнойСерверныйМодуль; + ИтерацияОбновления.ОсновнойСерверныйМодуль = Модуль; + ИтерацияОбновления.ПредыдущаяВерсия = ВерсияИБ(ОписаниеПодсистемы.Имя); + ИтерацииОбновления.Добавить(ИтерацияОбновления); + + Модуль.ПриДобавленииОбработчиковОбновления(ИтерацияОбновления.Обработчики); + + Если ОписаниеПодсистемы.Имя = ИмяОсновнойКонфигурации Тогда + ИтерацияОбновлениеОсновнойПодсистемы = ИтерацияОбновления; + КонецЕсли; + + ПроверитьСвойстваОбработчиков(ИтерацияОбновления); + КонецЦикла; + + // Для обратной совместимости. + Если ИтерацияОбновлениеОсновнойПодсистемы = Неопределено Тогда + + ИтерацияОбновления = ИтерацияОбновления(ИмяОсновнойКонфигурации, Метаданные.Версия, + ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления(), Истина); + ИтерацияОбновления.ИмяОсновногоСерверногоМодуля = "ОбновлениеИнформационнойБазыПереопределяемый"; + ИтерацияОбновления.ОсновнойСерверныйМодуль = ОбновлениеИнформационнойБазыПереопределяемый; + ИтерацияОбновления.ПредыдущаяВерсия = ВерсияИБ(ИмяОсновнойКонфигурации); + ИтерацииОбновления.Добавить(ИтерацияОбновления); + + ПроверитьСвойстваОбработчиков(ИтерацияОбновления); + КонецЕсли; + + Возврат ИтерацииОбновления; + +КонецФункции + +// Для внутреннего использования. +// +Функция ВыполнитьИтерациюОбновления(Знач ИтерацияОбновления, Знач ХодВыполненияОбработчиков, Знач ОперативноеОбновление = Ложь, Знач ВФоне = Ложь) Экспорт + + ИдентификаторБиблиотеки = ИтерацияОбновления.Подсистема; + ВерсияМетаданныхИБ = ИтерацияОбновления.Версия; + ОбработчикиОбновления = ИтерацияОбновления.Обработчики; + + ТекущаяВерсияИБ = ВерсияИБ(ИдентификаторБиблиотеки); + // Для предотвращения неоднозначности с переходом с другой конфигурации. + Если ТекущаяВерсияИБ = "0.0.0.0" Тогда + УстановитьВерсиюИБ(ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ИтерацияОбновления.ЭтоОсновнаяКонфигурация); + КонецЕсли; + + НоваяВерсияИБ = ТекущаяВерсияИБ; + ВерсияМетаданных = ВерсияМетаданныхИБ; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + ВерсияМетаданных = "0.0.0.0"; + КонецЕсли; + + Если ТекущаяВерсияИБ <> "0.0.0.0" + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + // Получение списка обработчиков сформированного на этапе выполнения неразделенных обработчиков + ВыполняемыеОбработчики = ПолучитьПланОбновления(ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ВерсияМетаданных); + Если ВыполняемыеОбработчики = Неопределено Тогда + Если ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда + ШаблонСообщения = НСтр("ru = 'Не найден план обновления конфигурации %1 с версии %2 на версию %3'"); + Иначе + ШаблонСообщения = НСтр("ru = 'Не найден план обновления библиотеки %1 с версии %2 на версию %3'"); + КонецЕсли; + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторБиблиотеки, + ТекущаяВерсияИБ, ВерсияМетаданных); + ЗаписатьИнформацию(Сообщение); + + ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); + КонецЕсли; + Иначе + ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); + КонецЕсли; + + ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков); + + ОбязательныеРазделенныеОбработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); + ИсходнаяВерсияИБ = ТекущаяВерсияИБ; + ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + + Для Каждого Версия Из ВыполняемыеОбработчики.Строки Цикл + + Если Версия.Версия = "*" Тогда + Сообщение = НСтр("ru = 'Выполняются обязательные процедуры обновления информационной базы.'"); + Иначе + НоваяВерсияИБ = Версия.Версия; + Если ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда + Сообщение = НСтр("ru = 'Выполняется обновление информационной базы с версии %1 на версию %2.'"); + Иначе + Сообщение = НСтр("ru = 'Выполняется обновление данных библиотеки %3 с версии %1 на версию %2.'"); + КонецЕсли; + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); + КонецЕсли; + ЗаписатьИнформацию(Сообщение); + + Для Каждого Обработчик Из Версия.Строки Цикл + + ПараметрыОбработчика = Неопределено; + Если Обработчик.ВерсияРегистрации = "*" Тогда + + Если Обработчик.УправлениеОбработчиками Тогда + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("РазделенныеОбработчики", ОбязательныеРазделенныеОбработчики); + КонецЕсли; + + Если Обработчик.МонопольныйРежим = Истина Тогда + Если ОперативноеОбновление Тогда + // Проверки выполняются в ВозможноОперативноеОбновление, а само обновление для таких + // обработчиков выполняется только при неоперативном обновлении. + Продолжить; + КонецЕсли; + + Если ПараметрыОбработчика = Неопределено Тогда + ПараметрыОбработчика = Новый Структура; + КонецЕсли; + ПараметрыОбработчика.Вставить("МонопольныйРежим", Истина); + КонецЕсли; + КонецЕсли; + + ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков, ВФоне", + ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков, ВФоне); + ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); + КонецЦикла; + + Если Версия.Версия = "*" Тогда + Сообщение = НСтр("ru = 'Выполнены обязательные процедуры обновления информационной базы.'"); + Иначе + // Установка номера версии информационной базы + УстановитьВерсиюИБ(ИдентификаторБиблиотеки, НоваяВерсияИБ, ИтерацияОбновления.ЭтоОсновнаяКонфигурация); + + Если ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда + Сообщение = НСтр("ru = 'Выполнено обновление информационной базы с версии %1 на версию %2.'"); + Иначе + Сообщение = НСтр("ru = 'Выполнено обновление данных библиотеки %3 с версии %1 на версию %2.'"); + КонецЕсли; + + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); + ТекущаяВерсияИБ = НоваяВерсияИБ; + КонецЕсли; + ЗаписатьИнформацию(Сообщение); + + КонецЦикла; + + // Установка номера версии информационной базы + Если ВерсияИБ(ИдентификаторБиблиотеки) <> ВерсияМетаданныхИБ Тогда + УстановитьВерсиюИБ(ИдентификаторБиблиотеки, ВерсияМетаданныхИБ, ИтерацияОбновления.ЭтоОсновнаяКонфигурация); + КонецЕсли; + + Если ТекущаяВерсияИБ <> "0.0.0.0" Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.СформироватьПланОбновленияОбластиДанных(ИдентификаторБиблиотеки, ОбработчикиОбновления, + ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ); + + КонецЕсли; + + КонецЕсли; + + Возврат ВыполняемыеОбработчики; + +КонецФункции + +// Проверить права текущего пользователя на выполнение обновления информационной базы. +Функция ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим = Истина, РазделенныеДанные = Неопределено) Экспорт + + ПроверятьПраваАдминистрированияСистемы = Истина; + + Если РазделенныеДанные = Неопределено Тогда + РазделенныеДанные = НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И РазделенныеДанные Тогда + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + ПроверятьПраваАдминистрированияСистемы = Ложь; + КонецЕсли; + + Возврат Пользователи.ЭтоПолноправныйПользователь( + , ПроверятьПраваАдминистрированияСистемы, УчитыватьПривилегированныйРежим); + +КонецФункции + +// Для внутреннего использования. +// +Функция ОбновитьИнформационнуюБазуВФоне(УникальныйИдентификаторФормы, БлокировкаИБ) Экспорт + + ИнформацияОбОшибке = Неопределено; + + // Запуск фонового задания + ПараметрыОбновленияИБ = Новый Структура; + ПараметрыОбновленияИБ.Вставить("ИсключениеПриНевозможностиБлокировкиИБ", Ложь); + ПараметрыОбновленияИБ.Вставить("БлокировкаИБ", БлокировкаИБ); + ПараметрыОбновленияИБ.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); + + // Установка монопольного режима до запуска фонового выполнения обновления. + Попытка + ЗаблокироватьИБ(ПараметрыОбновленияИБ.БлокировкаИБ, Ложь); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат = Новый Структура; + Результат.Вставить("ЗаданиеВыполнено", Ложь); + Результат.Вставить("БлокировкаИБ", ПараметрыОбновленияИБ.БлокировкаИБ); + Результат.Вставить("КраткоеСообщениеОбОшибке", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Результат.Вставить("ПодробноеСообщениеОбОшибке", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат Результат; + КонецПопытки; + + ПараметрыОбновленияИБ.Вставить("ВФоне", Не ПараметрыОбновленияИБ.БлокировкаИБ.РежимОтладки); + + Попытка + + Если Не ПараметрыОбновленияИБ.ВФоне Тогда + + ПараметрыОбновленияИБ.Удалить("ПараметрыКлиентаНаСервере"); + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификаторФормы); + ВыполнитьОбновлениеИнформационнойБазыВФоне(ПараметрыОбновленияИБ, АдресХранилища); + Результат = Новый Структура; + Результат.Вставить("АдресХранилища", АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено", Истина); + + Иначе // Запуск обновления ИБ в фоне. + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификаторФормы, + "ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазыВФоне", + ПараметрыОбновленияИБ, + НСтр("ru = 'Фоновое обновление информационной базы'")); + КонецЕсли; + + Результат.Вставить("БлокировкаИБ", ПараметрыОбновленияИБ.БлокировкаИБ); + Результат.Вставить("КраткоеСообщениеОбОшибке", Неопределено); + Результат.Вставить("ПодробноеСообщениеОбОшибке", Неопределено); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Результат = Новый Структура; + Результат.Вставить("ЗаданиеВыполнено", Ложь); + Результат.Вставить("БлокировкаИБ", ПараметрыОбновленияИБ.БлокировкаИБ); + Результат.Вставить("КраткоеСообщениеОбОшибке", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Результат.Вставить("ПодробноеСообщениеОбОшибке", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + // Если обновление ИБ уже выполнилось - разблокируем ИБ. + Если Результат.ЗаданиеВыполнено = Истина Или ИнформацияОбОшибке <> Неопределено Тогда + РазблокироватьИБ(ПараметрыОбновленияИБ.БлокировкаИБ); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Запускает обновление информационной базы в длительной операции. +Функция ВыполнитьОбновлениеИнформационнойБазыВФоне(ПараметрыОбновленияИБ, АдресХранилища) Экспорт + + Если ПараметрыОбновленияИБ.ВФоне Тогда + ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыОбновленияИБ.ПараметрыКлиентаНаСервере; + КонецЕсли; + + Результат = ВыполнитьОбновлениеИнформационнойБазы( + ПараметрыОбновленияИБ.ИсключениеПриНевозможностиБлокировкиИБ, Истина, Ложь, + ПараметрыОбновленияИБ.БлокировкаИБ, ПараметрыОбновленияИБ.ВФоне); + + Если Не ПараметрыОбновленияИБ.ВФоне Тогда + РезультатОбновления = Результат; + Иначе + РезультатОбновления = Новый Структура; + РезультатОбновления.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); + РезультатОбновления.Вставить("Результат", Результат); + КонецЕсли; + ПоместитьВоВременноеХранилище(РезультатОбновления, АдресХранилища); + +КонецФункции + +// Для внутреннего использования. +// +Функция ЗаблокироватьИБ(БлокировкаИБ, ИсключениеПриНевозможностиБлокировкиИБ) + + ИтерацииОбновления = Неопределено; + Если БлокировкаИБ = Неопределено Тогда + БлокировкаИБ = БлокировкаИБ(); + КонецЕсли; + + БлокировкаИБ.Установлена = Истина; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + БлокировкаИБ.РежимОтладки = Ложь; + Иначе + ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить("ОбновлениеВерсииИБ", "РежимОтладки"); + БлокировкаИБ.РежимОтладки = (ЗначениеНастройки = Истина); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + БлокировкаИБ.КлючЗаписи = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ЗаблокироватьВерсииОбластиДанных(); + КонецЕсли; + + ИтерацииОбновления = ИтерацииОбновления(); + БлокировкаИБ.ОперативноеОбновление = Ложь; + + Если БлокировкаИБ.РежимОтладки Тогда + Возврат ИтерацииОбновления; + КонецЕсли; + + // Установка монопольного режима для обновления информационной базы. + ИнформацияОбОшибке = Неопределено; + Попытка + ОбщегоНазначения.ЗаблокироватьИБ(); + Возврат ИтерацииОбновления; + Исключение + Если ВозможноОперативноеОбновление(ИтерацииОбновления) Тогда + БлокировкаИБ.ОперативноеОбновление = Истина; + Возврат ИтерацииОбновления; + КонецЕсли; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + + // Обработка неудачной попытки установки монопольного режима. + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима + | + |Подробности ошибки: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписатьОшибку(Сообщение); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.РазблокироватьВерсииОбластиДанных(БлокировкаИБ.КлючЗаписи); + КонецЕсли; + + ИспользуетсяЗавершениеРаботыПользователей = Ложь; + ПриОпределенииИспользованияПодсистемыЗавершениеРаботыПользователей(ИспользуетсяЗавершениеРаботыПользователей); + БазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Если БазаФайловая И Не ИсключениеПриНевозможностиБлокировкиИБ + И ИспользуетсяЗавершениеРаботыПользователей Тогда + + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда + БлокировкаИБ.Ошибка = "ЗаблокироватьВыполнениеРегламентныхЗаданий"; + Иначе + БлокировкаИБ.Ошибка = "ОшибкаУстановкиМонопольногоРежима"; + КонецЕсли; + КонецЕсли; + + ВызватьИсключение Сообщение; + +КонецФункции + +// Для внутреннего использования. +// +Процедура РазблокироватьИБ(БлокировкаИБ) Экспорт + + Если БлокировкаИБ.РежимОтладки Тогда + Возврат; + КонецЕсли; + + Если МонопольныйРежим() Тогда + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + КонецЕсли; + + ОбщегоНазначения.РазблокироватьИБ(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.РазблокироватьВерсииОбластиДанных(БлокировкаИБ.КлючЗаписи); + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Функция БлокировкаИБ() + + Результат = Новый Структура; + Результат.Вставить("Установлена", Ложь); + Результат.Вставить("Ошибка", Неопределено); + Результат.Вставить("ОперативноеОбновление", Неопределено); + Результат.Вставить("КлючЗаписи", Неопределено); + Результат.Вставить("РежимОтладки", Неопределено); + Возврат Результат; + +КонецФункции + +// Для внутреннего использования. +// +Функция НоваяТаблицаОбработчиковПереходаСДругойПрограммы() Экспорт + + Обработчики = Новый ТаблицаЗначений; + Обработчики.Колонки.Добавить("ПредыдущееИмяКонфигурации", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Обработчики.Колонки.Добавить("Процедура", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Возврат Обработчики; + +КонецФункции + +// Для внутреннего использования. +// +Функция ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации) + + ОбработчикиПерехода = НоваяТаблицаОбработчиковПереходаСДругойПрограммы(); + ИмяОсновнойКонфигурации = Метаданные.Имя; + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); + Если НЕ ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда + Продолжить; + КонецЕсли; + + Если ОписаниеПодсистемы.Имя <> ИмяОсновнойКонфигурации Тогда + Продолжить; + КонецЕсли; + + Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль); + Модуль.ПриДобавленииОбработчиковПереходаСДругойПрограммы(ОбработчикиПерехода); + КонецЦикла; + + Возврат ОбработчикиПерехода.НайтиСтроки(Новый Структура("ПредыдущееИмяКонфигурации", ПредыдущееИмяКонфигурации)); + +КонецФункции + +Процедура ПерейтиСДругойПрограммы() + + // Предыдущее имя конфигурации, с которой нужно выполнить переход. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВерсииПодсистем.ИмяПодсистемы КАК ИмяПодсистемы + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ЭтоОсновнаяКонфигурация = ИСТИНА"; + РезультатЗапроса = Запрос.Выполнить(); + // Если по каким-то причинам не отработал обработчик обновления ЗаполнитьРеквизитЭтоОсновнаяКонфигурация + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'При работе в модели сервиса переход с другой программы не предусмотрен.'"); + КонецЕсли; + + ПредыдущееИмяКонфигурации = Запрос.Выполнить().Выгрузить()[0].ИмяПодсистемы; + Обработчики = ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации); + + // Выполняем все обработчики перехода. + Для Каждого Обработчик Из Обработчики Цикл + + ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); + Попытка + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик.Процедура); + Исключение + + ИмяОбработчика = Обработчик.Процедура; + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове обработчика перехода с другой программы: + |""%1"" + |произошла ошибка: + |""%2"".'"), + ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + ВызватьИсключение; + КонецПопытки; + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, Обработчик.Процедура); + + КонецЦикла; + + // Установка текущих имени и версии конфигурации + НачатьТранзакцию(); + НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ПредыдущееИмяКонфигурации); + НаборЗаписей.Записать(); + + НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИмяПодсистемы.Установить(Метаданные.Имя); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.ИмяПодсистемы = Метаданные.Имя; + НоваяЗапись.Версия = Метаданные.Версия; + НоваяЗапись.ПланОбновления = Неопределено; + НоваяЗапись.ЭтоОсновнаяКонфигурация = Истина; + + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Протоколирование хода обновления + +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Возвращает строковую константу для формирования сообщений журнала регистрации +// протоколирования хода выполнения обработчиков обновления. +// +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрацииПротокол() Экспорт + + Возврат СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Протокол выполнения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Описание обновлений + +// Формирует табличный документ с описанием изменений в версиях, +// которые соответствуют переданному списку версий Разделы. +// +Функция ДокументОписаниеОбновлений(Знач Разделы) Экспорт + + ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); + Если Разделы.Количество() = 0 Тогда + Возврат ДокументОписаниеОбновлений; + КонецЕсли; + + МакетОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); + Если МакетОписаниеОбновлений <> Неопределено Тогда + МакетОписаниеОбновлений = ПолучитьОбщийМакет(МакетОписаниеОбновлений); + Иначе + Возврат Новый ТабличныйДокумент(); + КонецЕсли; + + Для Каждого Версия Из Разделы Цикл + + ВывестиОписаниеИзменений(Версия, ДокументОписаниеОбновлений, МакетОписаниеОбновлений); + + КонецЦикла; + + Возврат ДокументОписаниеОбновлений; + +КонецФункции + +// Возвращает массив версий больше последней отображавшейся версии, +// для которых есть описания изменений системы. +// +// Возвращаемое значение: +// Массив - содержит строки с версиями +// +Функция НеотображавшиесяРазделыОписанияИзменений() Экспорт + + Разделы = РазделыОписанияИзменений(); + + ПоследняяВерсия = ПоследняяВерсияОтображенияИзмененийСистемы(); + + Если ПоследняяВерсия = Неопределено Тогда + Возврат Новый Массив; + КонецЕсли; + + Возврат ПолучитьВерсииБольшеЗаданной(Разделы, ПоследняяВерсия); + +КонецФункции + +// Устанавливает флаг отображения описаний изменений версий по +// текущую версию включительно. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя, для которого +// необходимо установить флаг. +// +Процедура УстановитьФлагОтображенияОписанийПоТекущуюВерсию(Знач ИмяПользователя = Неопределено) Экспорт + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", + "ПоследняяВерсияОтображенияИзмененийСистемы", Метаданные.Версия, , ИмяПользователя); + +КонецПроцедуры + +// Устанавливает флаг отображения описаний изменений версий по +// текущую версию включительно, если для пользователя флаг не +// был установлен ранее. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя, для которого +// необходимо установить флаг. +// +Процедура УстановитьФлагОтображенияОписанийДляНовогоПользователя(Знач ИмяПользователя = Неопределено) Экспорт + + Если ПоследняяВерсияОтображенияИзмененийСистемы(ИмяПользователя) = Неопределено Тогда + УстановитьФлагОтображенияОписанийПоТекущуюВерсию(ИмяПользователя); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Механизм отложенного обновления + +// Удаляет отложенный обработчики из очереди выполняемых обработчиков на новую версию. +// +// Параметры: +// ИмяОбработчика - Строка - Строковый идентификатор отложенного обработчика. +// +Процедура УдалитьОтложенныйОбработчикИзОчереди(ИмяОбработчика) Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении = Неопределено Тогда + Возврат; + КонецЕсли; + + ОтобранныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("ИмяОбработчика", ИмяОбработчика), Истина); + Если ОтобранныйОбработчик <> Неопределено И ОтобранныйОбработчик.Количество() > 0 Тогда + + Для Каждого СтрокаОбработчик Из ОтобранныйОбработчик Цикл + СтрокаОбработчик.Родитель.Строки.Удалить(СтрокаОбработчик); + КонецЦикла; + + КонецЕсли; + + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры + +// Формирует дерево отложенных обработчиков и активирует регламентное задание. +Процедура ЗапланироватьОтложенноеОбновление(ИтерацииОбновления) + + ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления); + СведенияОбОбновлении = НовыеСведенияОбОбновлении(); + + ИмяБиблиотеки = ""; + НомерВерсии = ""; + + Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + ИмяБиблиотеки = ИтерацияОбновления.Подсистема; + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, + ИтерацияОбновления.ПредыдущаяВерсия, + ИтерацияОбновления.Версия, + Истина, + "Отложенно"); + + Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + // Добавление строки библиотеки. + НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(ИмяБиблиотеки, "ИмяБиблиотеки"); + Если НайденнаяСтрока <> Неопределено Тогда + СтрокаДереваБиблиотека = НайденнаяСтрока; + Иначе + СтрокаДереваБиблиотека = ДеревоОбработчиков.Строки.Добавить(); + СтрокаДереваБиблиотека.ИмяБиблиотеки = ИмяБиблиотеки; + КонецЕсли; + СтрокаДереваБиблиотека.Статус = ""; + + Для каждого СтрокаВерсия Из ОбработчикиПоВерсиям.Строки Цикл + + НайденнаяСтрока = СтрокаДереваБиблиотека.Строки.Найти(СтрокаВерсия.Версия, "НомерВерсии"); + ЕстьНевыполненныеОбработчики = Ложь; + Если НайденнаяСтрока <> Неопределено Тогда + НайденнаяСтрока.Статус = ""; + + Для Каждого НевыполненныйОбработчик Из НайденнаяСтрока.Строки Цикл + ЕстьНевыполненныеОбработчики = Истина; + НевыполненныйОбработчик.ЧислоПопыток = 0; + КонецЦикла; + СтрокаДереваВерсии = НайденнаяСтрока; + Иначе + СтрокаДереваВерсии = СтрокаДереваБиблиотека.Строки.Добавить(); + СтрокаДереваВерсии.НомерВерсии = СтрокаВерсия.Версия; + СтрокаДереваВерсии.Статус = ""; + КонецЕсли; + + Для Каждого СтрокаОбработчики Из СтрокаВерсия.Строки Цикл + + Если ЕстьНевыполненныеОбработчики Тогда + НайденнаяСтрока = СтрокаДереваВерсии.Строки.Найти(СтрокаОбработчики.Процедура, "ИмяОбработчика"); + Если НайденнаяСтрока <> Неопределено Тогда + Продолжить; // Данный обработчик на эту версию уже существует. + КонецЕсли; + КонецЕсли; + + Если СтрокаОбработчики.МонопольныйРежим = Истина Тогда + + ТекстОшибки = НСтр("ru = 'У отложенного обработчика ""%1"" + |не должен быть установлен признак ""МонопольныйРежим"".'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, СтрокаОбработчики.Процедура); + ЗаписатьОшибку(ТекстОшибки); + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); + СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; + СтрокаДереваОбработчики.НомерВерсии = СтрокаОбработчики.Версия; + СтрокаДереваОбработчики.ВерсияРегистрации = СтрокаОбработчики.ВерсияРегистрации; + СтрокаДереваОбработчики.ИмяОбработчика = СтрокаОбработчики.Процедура; + СтрокаДереваОбработчики.Комментарий = СтрокаОбработчики.Комментарий; + СтрокаДереваОбработчики.Статус = "НеВыполнено"; + СтрокаДереваОбработчики.ЧислоПопыток = 0; + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков); + СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + // Планирование выполнения регламентного задания + // При работе в модели сервиса - добавляется регламентное задание в очередь + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПриВключенииОтложенногоОбновления(Истина); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Использование = Истина; + РегламентноеЗадание.Записать(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Управляет процессом выполнения отложенных обработчиков обновления. +// +Процедура ВыполнитьОтложенноеОбновление() Экспорт + + // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, + // т.к. необходимые действия выполняются в частном порядке. + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + ОтключитьОтложенноеОбновление(); + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + Если Не ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении) Тогда + ОтключитьОтложенноеОбновление(); + КонецЕсли; + +КонецПроцедуры + +// Выполняет все процедуры отложенного обновления в цикле за один вызов. +// +Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ОбработчикиВыполнялись = Истина; + КоличествоЗапусков = 0; // защита от бесконечного зацикливания из-за возможных ошибок в обработчиках обновления + Пока ОбработчикиВыполнялись И КоличествоЗапусков < 10000 Цикл + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); + КоличествоЗапусков = КоличествоЗапусков + 1; + КонецЦикла; + +КонецПроцедуры + +// Получает сведения об обновлении информационной базы. +Функция СведенияОбОбновленииИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат НовыеСведенияОбОбновлении(); + КонецЕсли; + + СведенияОбОбновленииИБ = Константы.СведенияОбОбновленииИБ.Получить().Получить(); + Если ТипЗнч(СведенияОбОбновленииИБ) = Тип("Структура") Тогда + Если СведенияОбОбновленииИБ.Количество() = 1 Тогда + СведенияОбОбновленииИБ = Неопределено; + Иначе + СведенияОбОбновленииИБ = НовыеСведенияОбОбновлении(СведенияОбОбновленииИБ); + КонецЕсли; + Иначе + СведенияОбОбновленииИБ = Неопределено; + КонецЕсли; + + Возврат СведенияОбОбновленииИБ; + +КонецФункции + +// Записывает данные по обновлению в константу "СведенияОбОбновлении". +Процедура ЗаписатьСведенияОбОбновленииИнформационнойБазы(Знач СведенияОбОбновлении) Экспорт + + Если СведенияОбОбновлении = Неопределено Тогда + НовоеЗначение = Новый Структура; + Иначе + НовоеЗначение = СведенияОбОбновлении; + КонецЕсли; + + СтароеЗначение = Константы.СведенияОбОбновленииИБ.Получить().Получить(); + + Если ТипЗнч(СтароеЗначение) = Тип("Структура") И СтароеЗначение.Свойство("ЛегальнаяВерсия") Тогда + НовоеЗначение.Вставить("ЛегальнаяВерсия", СтароеЗначение.ЛегальнаяВерсия); + КонецЕсли; + + МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); + +КонецПроцедуры + +// Только для внутреннего использования +Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда + Возврат Ложь; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Возврат Ложь; + КонецЕсли; + + ЛегальнаяВерсия = ""; + + Если РежимОбновленияДанныхВЛокальномРежимеРаботы() = "НачальноеЗаполнение" Тогда + ЛегальнаяВерсия = Метаданные.Версия; + Иначе + УстановитьПривилегированныйРежим(Истина); + Свойства = Константы.СведенияОбОбновленииИБ.Получить().Получить(); + Если ТипЗнч(Свойства) = Тип("Структура") И Свойства.Свойство("ЛегальнаяВерсия") Тогда + ЛегальнаяВерсия = Свойства.ЛегальнаяВерсия; + КонецЕсли; + КонецЕсли; + + Возврат ЛегальнаяВерсия <> Метаданные.Версия; + +КонецФункции + +// Только для внутреннего использования +Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат; + КонецЕсли; + + СтароеЗначение = Константы.СведенияОбОбновленииИБ.Получить().Получить(); + Если ТипЗнч(СтароеЗначение) = Тип("Структура") Тогда + НовоеЗначение = СтароеЗначение; + Иначе + НовоеЗначение = Новый Структура; + КонецЕсли; + + НовоеЗначение.Вставить("ЛегальнаяВерсия", Метаданные.Версия); + + МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем БСП + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт + + ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт + + ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента); + +КонецПроцедуры + +// Добавляет параметры работы клиентской логики при запуске системы для подсистемы обмена данными в модели сервиса +// +Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт + + Параметры.Вставить("НачальноеЗаполнениеДанных", РежимОбновленияДанных() = "НачальноеЗаполнение"); + Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", ПоказатьОписаниеИзмененийСистемы()); + +КонецПроцедуры + +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений"; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.3.19"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ПеренестиВерсииПодсистемВНеразделенныеДанные"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.7"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ЗаполнитьРеквизитЭтоОсновнаяКонфигурация"; + Обработчик.ОбщиеДанные = Истина; + +КонецПроцедуры + +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые должны входить в состав плана обмена +// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. +// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла +// и не мигрируют в процессе обмена. +// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации. +// +Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт + + Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. +// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Константы.РазделыОписанияИзмененийСистемы); + + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриПолученииСпискаШаблонов. +// +// Формирует список шаблонов заданий очереди. +// +// Параметры: +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. +// +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт + + Шаблоны.Добавить("ОтложенноеОбновлениеИБ"); + +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы + +// Определяет используется ли в конфигурации подсистема +// "Завершение работы пользователей" +// +// Параметры: +// Используется - Булево - Истина, если используется, Ложь - иначе. +// +Процедура ПриОпределенииИспользованияПодсистемыЗавершениеРаботыПользователей(Используется) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + Используется = Истина; + КонецЕсли; + +КонецПроцедуры + +// Снимает блокировку информационной файловой базы. +// +Процедура ПриСнятииБлокировкиФайловойБазы() Экспорт + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.РазрешитьРаботуПользователей(); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает использование регламентного задания заполнения данных управления доступом. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура ПриВключенииОтложенногоОбновления(Знач Использование) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриВключенииОтложенногоОбновления(Использование); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ + +// Переносит данные из регистра сведений УдалитьВерсииПодсистем в регистр сведений ВерсииПодсистем. +// +Процедура ПеренестиВерсииПодсистемВНеразделенныеДанные() Экспорт + + НачатьТранзакцию(); + + Попытка + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДляОбщихДанных = -1; + Иначе + ОбластьДляОбщихДанных = 0; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | УдалитьВерсииПодсистем.ИмяПодсистемы, + | УдалитьВерсииПодсистем.Версия, + | УдалитьВерсииПодсистем.ПланОбновления + |ИЗ + | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем + |ГДЕ + | УдалитьВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДляОбщихДанных); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Менеджер = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); + Менеджер.ИмяПодсистемы = Выборка.ИмяПодсистемы; + Менеджер.Версия = Выборка.Версия; + Менеджер.ПланОбновления = Выборка.ПланОбновления; + Менеджер.Записать(); + + КонецЦикла; + + Набор = РегистрыСведений.УдалитьВерсииПодсистем.СоздатьНаборЗаписей(); + Набор.Отбор.ОбластьДанных.Установить(ОбластьДляОбщихДанных); + Набор.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Заполняет значение реквизита ЭтоОсновнаяКонфигурация в записях регистра сведений ВерсииПодсистем. +// +Процедура ЗаполнитьРеквизитЭтоОсновнаяКонфигурация() Экспорт + + УстановитьВерсиюИБ(Метаданные.Имя, ВерсияИБ(Метаданные.Имя), Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Общего назначения + +Функция РежимОбновленияДанныхВЛокальномРежимеРаботы() + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | 1 + |ИЗ + | РегистрСведений.УдалитьВерсииПодсистем КАК УдалитьВерсииПодсистем"; + + РезультатВыполненияПакета = Запрос.ВыполнитьПакет(); + Если РезультатВыполненияПакета[0].Пустой() И РезультатВыполненияПакета[1].Пустой() Тогда + Возврат "НачальноеЗаполнение"; + ИначеЕсли РезультатВыполненияПакета[0].Пустой() И Не РезультатВыполненияПакета[1].Пустой() Тогда + Возврат "ОбновлениеВерсии"; // поддержка обновления с БСП 2.1.2 + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ЭтоОсновнаяКонфигурация = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ИмяПодсистемы = &ИмяОсновнойКонфигурации + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ЭтоОсновнаяКонфигурация = ИСТИНА + | И ВерсииПодсистем.ИмяПодсистемы = &ИмяОсновнойКонфигурации"; + Запрос.УстановитьПараметр("ИмяОсновнойКонфигурации", Метаданные.Имя); + РезультатВыполненияПакета = Запрос.ВыполнитьПакет(); + Если РезультатВыполненияПакета[0].Пустой() И Не РезультатВыполненияПакета[1].Пустой() Тогда + Возврат "ОбновлениеВерсии"; // признак ЭтоОсновнаяКонфигурация еще не был заполнен + КонецЕсли; + + // Определяем по ранее заполненному признаку ЭтоОсновнаяКонфигурация. + Возврат ?(РезультатВыполненияПакета[2].Пустой(), "ПереходСДругойПрограммы", "ОбновлениеВерсии"); + +КонецФункции + +Функция ВозможноОперативноеОбновление(ИтерацииОбновления) + + ФильтрыРазделенностиОбработчиков = Новый Массив; + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ФильтрыРазделенностиОбработчиков.Добавить(Ложь); + КонецЕсли; + ФильтрыРазделенностиОбработчиков.Добавить(Истина); + + ОбязательныеРазделенныеОбработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); // В режиме проверки параметр не используется + + ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + + // Проверяем обработчики обновления с флагом МонопольныйРежим для подсистем конфигурации. + Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + Для каждого ФлагРазделенности Из ФильтрыРазделенностиОбработчиков Цикл + + ДеревоОбработчиков = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, + ИтерацияОбновления.ПредыдущаяВерсия, + ИтерацияОбновления.Версия, + ФлагРазделенности, + "Оперативно"); + + Если ДеревоОбработчиков.Строки.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Если ДеревоОбработчиков.Строки.Количество() > 1 + ИЛИ ДеревоОбработчиков.Строки[0].Версия <> "*" Тогда + + Возврат Ложь; // Есть монопольные обработчики обновления на версию + КонецЕсли; + + Если ФлагРазделенности + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + // При обновлении неразделенной версии ИБ, для разделенных обязательных + // обработчиков обновления монопольным режимом управляет неразделенный обработчик + Продолжить; + КонецЕсли; + + Если ДеревоОбработчиков.Строки[0].Строки.НайтиСтроки( + Новый Структура("МонопольныйРежим", Неопределено)).Количество() > 0 Тогда + + Возврат Ложь; // Есть обязательные обработчики с безусловным монопольным режимом + КонецЕсли; + + // Вызов обязательных обработчиков обновления в режиме проверки + Для каждого Обработчик Из ДеревоОбработчиков.Строки[0].Строки Цикл + Если Обработчик.ВерсияРегистрации <> "*" Тогда + Возврат Ложь; // Есть монопольные обработчики обновления на версию + КонецЕсли; + + ПараметрыОбработчика = Новый Структура; + Если Обработчик.УправлениеОбработчиками Тогда + ПараметрыОбработчика.Вставить("РазделенныеОбработчики", ОбязательныеРазделенныеОбработчики); + КонецЕсли; + ПараметрыОбработчика.Вставить("МонопольныйРежим", Ложь); + + ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков, ВФоне", + ЗаписыватьВЖурнал, ИтерацияОбновления.Подсистема, Неопределено, Ложь); + + ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); + + Если ПараметрыОбработчика.МонопольныйРежим = Истина Тогда + Возврат Ложь; // Требуется обновление в монопольном режиме + КонецЕсли; + КонецЦикла; + + КонецЦикла; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Процедура СкопироватьСтрокиВДерево(Знач СтрокиПриемника, Знач СтрокиИсточника, Знач СтруктураКолонок) + + Для каждого СтрокаИсточника Из СтрокиИсточника Цикл + ЗаполнитьЗначенияСвойств(СтруктураКолонок, СтрокаИсточника); + НайденныеСтроки = СтрокиПриемника.НайтиСтроки(СтруктураКолонок); + Если НайденныеСтроки.Количество() = 0 Тогда + СтрокаПриемника = СтрокиПриемника.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПриемника, СтрокаИсточника); + Иначе + СтрокаПриемника = НайденныеСтроки[0]; + КонецЕсли; + + СкопироватьСтрокиВДерево(СтрокаПриемника.Строки, СтрокаИсточника.Строки, СтруктураКолонок); + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьПланОбновления(Знач ИдентификаторБиблиотеки, Знач ВерсияС, Знач ВерсияНа) + + МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + Возврат Неопределено; + КонецЕсли; + + ОписаниеПлана = МенеджерЗаписи.ПланОбновления.Получить(); + Если ОписаниеПлана = Неопределено Тогда + + Возврат Неопределено; + + Иначе + + Если ОписаниеПлана.ВерсияС <> ВерсияС + ИЛИ ОписаниеПлана.ВерсияНа <> ВерсияНа Тогда + + // План устарел и не соответствует текущей версии + Возврат Неопределено; + КонецЕсли; + + Возврат ОписаниеПлана.План; + + КонецЕсли; + +КонецФункции + +// Отключает обработчики обновления, заполненные в процедуре +// ОбновлениеИнформационнойБазыПереопределяемый.ДобавитьОтключаемыеОбработчикиОбновления. +// +// Параметры: +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. +// ВыполняемыеОбработчики - ДеревоЗначений - обработчики обновления ИБ. +// ВерсияМетаданныхИБ - Строка - версия метаданных. Отключаются только те обработчики +// у которых версия совпадает с версией метаданных. +// +Процедура ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков) + + ОтключаемыеОбработчики = Новый ТаблицаЗначений; + ОтключаемыеОбработчики.Колонки.Добавить("ИдентификаторБиблиотеки"); + ОтключаемыеОбработчики.Колонки.Добавить("Процедура"); + ОтключаемыеОбработчики.Колонки.Добавить("Версия"); + + ОбновлениеИнформационнойБазыПереопределяемый.ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики); + // Поиск строки дерева, содержащей обработчики обновления с версией "*" + ОбработчикиБиблиотеки = ВыполняемыеОбработчики.Строки.Найти("*", "Версия", Ложь); + + Для Каждого ОтключаемыйОбработчик Из ОтключаемыеОбработчики Цикл + + // Проверка того, что отключаемый обработчик принадлежит переданной библиотеке + Если ИдентификаторБиблиотеки <> ОтключаемыйОбработчик.ИдентификаторБиблиотеки Тогда + Продолжить; + КонецЕсли; + + // Проверка, находится ли обработчик в списке исключения + ВыполняемыйОбработчик = ВыполняемыеОбработчики.Строки.Найти(ОтключаемыйОбработчик.Процедура, "Процедура", Истина); + Если ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия = "*" + И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда + ОбработчикиБиблиотеки.Строки.Удалить(ВыполняемыйОбработчик); + ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию = ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию - 1; + ИначеЕсли ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия <> "*" + И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда + ТекстИсключения = НСтр("ru='Обработчик обновления %1 не может быть отключен, + |так как он выполняется только при переходе на версию %2'"); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, + ВыполняемыйОбработчик.Процедура, ВыполняемыйОбработчик.Версия); + + ВызватьИсключение ТекстИсключения; + ИначеЕсли ВыполняемыйОбработчик = Неопределено Тогда + ТекстИсключения = НСтр("ru='Отключаемый обработчик обновления %1 не существует'"); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, + ОтключаемыйОбработчик.Процедура); + + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ВыполнитьОбработчикОбновления(Обработчик, Параметры, ДополнительныеПараметры) + + ЗаписатьИнформациюОХодеОбновления(Обработчик, ДополнительныеПараметры.ХодВыполненияОбработчиков, ДополнительныеПараметры.ВФоне); + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ОписаниеОбработчика = + ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ДополнительныеПараметры.ИдентификаторБиблиотеки); + КонецЕсли; + + Если Параметры <> Неопределено Тогда + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(Параметры); + Иначе + ПараметрыОбработчика = Неопределено; + КонецЕсли; + + ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); + + Попытка + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика); + Исключение + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + ИмяОбработчика = Обработчик.Процедура + "(" + ?(ПараметрыОбработчика = Неопределено, "", "Параметры") + ")"; + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове обработчика обновления: + |""%1"" + |произошла ошибка: + |""%2"".'"), + ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + ВызватьИсключение; + КонецПопытки; + + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, Обработчик.Процедура); + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОбработчикиПослеОбновленияИнформационнойБазы(Знач ИтерацииОбновления, Знач ЗаписыватьВЖурнал, ВыводитьОписаниеОбновлений, Знач ОперативноеОбновление) + + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + Если ЗаписыватьВЖурнал Тогда + Обработчик = Новый Структура(); + Обработчик.Вставить("Версия", "*"); + Обработчик.Вставить("ВерсияРегистрации", "*"); + Обработчик.Вставить("РежимВыполнения", "Оперативно"); + Обработчик.Вставить("Процедура", ИтерацияОбновления.ИмяОсновногоСерверногоМодуля + ".ПослеОбновленияИнформационнойБазы"); + ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Неопределено, ИтерацияОбновления.Подсистема); + КонецЕсли; + + Попытка + + ИтерацияОбновления.ОсновнойСерверныйМодуль.ПослеОбновленияИнформационнойБазы( + ИтерацияОбновления.ПредыдущаяВерсия, + ИтерацияОбновления.Версия, + ИтерацияОбновления.ВыполненныеОбработчики, + ВыводитьОписаниеОбновлений, + НЕ ОперативноеОбновление); + + Исключение + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + ВызватьИсключение; + + КонецПопытки; + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ИдентификаторБиблиотеки, ОбработчикОтложенный = Ложь) + + ОписаниеОбработчика = Новый Структура; + ОписаниеОбработчика.Вставить("Библиотека", ИдентификаторБиблиотеки); + Если ОбработчикОтложенный Тогда + ОписаниеОбработчика.Вставить("Версия", Обработчик.НомерВерсии); + ОписаниеОбработчика.Вставить("Процедура", Обработчик.ИмяОбработчика); + Иначе + ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); + ОписаниеОбработчика.Вставить("Процедура", Обработчик.Процедура); + КонецЕсли; + ОписаниеОбработчика.Вставить("ВерсияРегистрации", Обработчик.ВерсияРегистрации); + ОписаниеОбработчика.Вставить("Параметры", Параметры); + + Если ОбработчикОтложенный Тогда + ОписаниеОбработчика.Вставить("РежимВыполнения", "Отложенно"); + ИначеЕсли ЗначениеЗаполнено(Обработчик.РежимВыполнения) Тогда + ОписаниеОбработчика.Вставить("РежимВыполнения", Обработчик.РежимВыполнения); + Иначе + ОписаниеОбработчика.Вставить("РежимВыполнения", "Монопольно"); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() + И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + + ОписаниеОбработчика.Вставить("ОбластьДанныхЗначение", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ОписаниеОбработчика.Вставить("ОбластьДанныхИспользование", Истина); + + Иначе + + ОписаниеОбработчика.Вставить("ОбластьДанныхЗначение", -1); + ОписаниеОбработчика.Вставить("ОбластьДанныхИспользование", Ложь); + + КонецЕсли; + + ОписаниеОбработчика.Вставить("ЗначениеНаНачало", ТекущаяУниверсальнаяДатаВМиллисекундах()); + + Возврат ОписаниеОбработчика; + +КонецФункции + +Процедура ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика) + + Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - ОписаниеОбработчика.ЗначениеНаНачало; + + ОписаниеОбработчика.Вставить("Выполнен", Ложь); + ОписаниеОбработчика.Вставить("Длительность", Длительность / 1000); // В секундах + + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрацииПротокол(), + УровеньЖурналаРегистрации.Информация, + , + , + ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеОбработчика)); + +КонецПроцедуры + +Процедура ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, НазваниеОбработчика) + + Если ТранзакцияАктивнаНаНачалоВыполнения Тогда + Если ТранзакцияАктивна() Тогда + // Проверка поглощенных исключений в обработчиках + Попытка + Константы.ИспользоватьРазделениеПоОбластямДанных.Получить(); + Исключение + ШаблонКомментария = НСтр("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); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Протоколирование хода обновления + +Процедура ЗаписатьИнформацию(Знач Текст) + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, Текст); + +КонецПроцедуры + +Процедура ЗаписатьОшибку(Знач Текст) + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Текст); + +КонецПроцедуры + +Процедура ЗаписатьИнформациюОХодеОбновления(Обработчик, ХодВыполненияОбработчиков, ВФоне) + + Если ХодВыполненияОбработчиков = Неопределено Тогда + Возврат; + КонецЕсли; + + ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Сообщение = НСтр("ru = 'Выполняется обработчик обновления %1 (%2 из %3).'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение, Обработчик.Процедура, + ХодВыполненияОбработчиков.ВыполненоОбработчиков, ХодВыполненияОбработчиков.ВсегоОбработчиков); + ЗаписатьИнформацию(Сообщение); + КонецЕсли; + + Если ВФоне Тогда + Прогресс = ХодВыполненияОбработчиков.ВыполненоОбработчиков / ХодВыполненияОбработчиков.ВсегоОбработчиков * 100; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=" + Прогресс); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Описание обновлений + +// Вывести описания изменений в указанной версии +// +// Параметры +// НомерВерсии - Строка - номер версии, для которого выводится описание из макета +// табличного документа МакетОписаниеОбновлений в табличный документ +// ДокументОписаниеОбновлений. +// +Процедура ВывестиОписаниеИзменений(Знач НомерВерсии, ДокументОписаниеОбновлений, МакетОписаниеОбновлений) + + Номер = СтрЗаменить(НомерВерсии, ".", "_"); + + Если МакетОписаниеОбновлений.Области.Найти("Шапка" + Номер) = Неопределено Тогда + Возврат; + КонецЕсли; + + ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Шапка" + Номер)); + ДокументОписаниеОбновлений.НачатьГруппуСтрок("Версия" + Номер); + ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Версия" + Номер)); + ДокументОписаниеОбновлений.ЗакончитьГруппуСтрок(); + ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Отступ")); + +КонецПроцедуры + +// Возвращает Истина, если у пользователя не отключен показ описания изменений +// системы после обновления и есть непоказанные изменения. +// +Функция ПоказатьОписаниеИзмененийСистемы() + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении <> Неопределено И СведенияОбОбновлении.Свойство("ВыводитьОписаниеОбновлений") + И СведенияОбОбновлении.ВыводитьОписаниеОбновлений = Ложь Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + // Анонимным пользователям новое в версии не показываем + Возврат Ложь; + КонецЕсли; + + ВывестиОписаниеИзмененийДляАдминистратора = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора",,, ИмяПользователя()); + Если ВывестиОписаниеИзмененийДляАдминистратора = Истина Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", ИмяПользователя()); + Возврат Истина; + КонецЕсли; + + Если Не РольДоступна(Метаданные.Роли.ПросмотрОписанияИзмененийПрограммы) + И Не РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда + Возврат Ложь; + КонецЕсли; + + ПоследняяВерсия = ПоследняяВерсияОтображенияИзмененийСистемы(); + Если ПоследняяВерсия = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Разделы = РазделыОписанияИзменений(); + + Если Разделы = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПолучитьВерсииБольшеЗаданной(Разделы, ПоследняяВерсия).Количество() > 0; + +КонецФункции + +Функция ПоследняяВерсияОтображенияИзмененийСистемы(Знач ИмяПользователя = Неопределено) + + Если ИмяПользователя = Неопределено Тогда + ИмяПользователя = ИмяПользователя(); + КонецЕсли; + + ПоследняяВерсия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "ПоследняяВерсияОтображенияИзмененийСистемы", , , ИмяПользователя); + + Возврат ПоследняяВерсия; + +КонецФункции + +// Получает список версий из общего макета ОписаниеИзмененийСистемы и сохраняет его +// в константе РазделыОписанияИзмененийСистемы. +// +Процедура ОбновитьРазделыОписанияИзменений() + + Разделы = Новый СписокЗначений; + + МакетОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); + Если МакетОписаниеОбновлений <> Неопределено Тогда + ПредикатВерсии = "Версия"; + ПредикатШапки = "Шапка"; + Макет = ПолучитьОбщийМакет(МакетОписаниеОбновлений); + + Для каждого Область Из Макет.Области Цикл + Если Найти(Область.Имя, ПредикатВерсии) = 0 Тогда + Продолжить; + КонецЕсли; + + ВерсияВФорматеОписания = Сред(Область.Имя, СтрДлина(ПредикатВерсии) + 1); + + Если Макет.Области.Найти(ПредикатШапки + ВерсияВФорматеОписания) = Неопределено Тогда + Продолжить; + КонецЕсли; + + РазрядыВерсииСтроками = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияВФорматеОписания, "_"); + Если РазрядыВерсииСтроками.Количество() <> 4 Тогда + Продолжить; + КонецЕсли; + + ВесВерсии = ВесВерсииИзМассиваСтрок(РазрядыВерсииСтроками); + + Версия = "" + + Число(РазрядыВерсииСтроками[0]) + "." + + Число(РазрядыВерсииСтроками[1]) + "." + + Число(РазрядыВерсииСтроками[2]) + "." + + Число(РазрядыВерсииСтроками[3]); + + Разделы.Добавить(ВесВерсии, Версия); + КонецЦикла; + + Разделы.СортироватьПоЗначению(); + КонецЕсли; + + Константы.РазделыОписанияИзмененийСистемы.Установить(Новый ХранилищеЗначения(Разделы)); + +КонецПроцедуры + +Процедура ОпределитьВыводОписанияОбновлений(ВыводитьОписаниеОбновлений) + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ОбновитьРазделыОписанияИзменений(); + КонецЕсли; + + Если ВыводитьОписаниеОбновлений И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", Истина, , ИмяПользователя()); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СведенияОбОбновленииИБ = СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновленииИБ.ВыводитьОписаниеОбновлений = ВыводитьОписаниеОбновлений; + + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновленииИБ); + КонецЕсли; + +КонецПроцедуры + +// Возвращает список разделов описания изменений системы. +// +// Возвращаемое значение: +// СписокЗначение - Значение - вес версии (число), +// Представление - строка версии +// +Функция РазделыОписанияИзменений() + + Возврат Константы.РазделыОписанияИзмененийСистемы.Получить().Получить(); + +КонецФункции + +Функция ВесВерсииИзМассиваСтрок(РазрядыВерсииСтроками) + + Возврат 0 + + Число(РазрядыВерсииСтроками[0]) * 1000000000 + + Число(РазрядыВерсииСтроками[1]) * 1000000 + + Число(РазрядыВерсииСтроками[2]) * 1000 + + Число(РазрядыВерсииСтроками[3]); + +КонецФункции + +Функция ПолучитьВерсииБольшеЗаданной(Разделы, Версия) + + Результат = Новый Массив; + + Если Разделы = Неопределено Тогда + ОбновитьРазделыОписанияИзменений(); + Разделы = РазделыОписанияИзменений(); + КонецЕсли; + + ВесВерсии = ВесВерсии(Версия); + Для каждого ЭлементСписка Из Разделы Цикл + Если ЭлементСписка.Значение <= ВесВерсии Тогда + Продолжить; + КонецЕсли; + + Результат.Добавить(ЭлементСписка.Представление); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции отложенного обновления + +// Только для внутреннего использования. +// +Функция ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления) + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении <> Неопределено + И Не СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Истина + И СведенияОбОбновлении.ДеревоОбработчиков <> Неопределено Тогда + + НеобходимоСохранитьНевыполненныеОбработчики = Ложь; + Для Каждого Библиотека Из ИтерацииОбновления Цикл + // Сбрасываем количество попыток у обработчиков со статусом "Ошибка". + НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус, ИмяБиблиотеки", "Ошибка", Библиотека.Подсистема), Истина); + Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл + Если ЭлементДерева.НомерВерсии <> "*" + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, ЭлементДерева.НомерВерсии) >= 0 Тогда + НеобходимоСохранитьНевыполненныеОбработчики = Истина; + КонецЕсли; + ЭлементДерева.ЧислоПопыток = 0; + КонецЦикла; + + // Поиск невыполненных обработчиков, которые необходимо сохранить для повторного запуска.. + НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус, ИмяБиблиотеки", "НеВыполнено", Библиотека.Подсистема), Истина); + Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл + Если ЭлементДерева.НомерВерсии <> "*" + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, ЭлементДерева.НомерВерсии) >= 0 Тогда + НеобходимоСохранитьНевыполненныеОбработчики = Истина; + КонецЕсли; + КонецЦикла; + + Если НеобходимоСохранитьНевыполненныеОбработчики Тогда + НеобходимоСохранитьНевыполненныеОбработчики = Ложь; + Иначе + СтрокаБиблиотека = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Библиотека.Подсистема, "ИмяБиблиотеки"); + Если СтрокаБиблиотека <> Неопределено Тогда + СведенияОбОбновлении.ДеревоОбработчиков.Строки.Удалить(СтрокаБиблиотека); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + // Удаление успешно выполненных обработчиков. + НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); + Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл + СтрокаВерсии = ЭлементДерева.Родитель.Строки; + СтрокаВерсии.Удалить(ЭлементДерева); + КонецЦикла; + + Возврат СведенияОбОбновлении.ДеревоОбработчиков; + + КонецЕсли; + + Возврат НовыеСведенияОбОбработчикахОбновления(); + +КонецФункции + +// Только для внутреннего использования. +// +Процедура ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков) + + Для Каждого СтрокаДереваБиблиотека Из ДеревоОбработчиков.Строки Цикл + + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + + Если СтрокаДереваВерсия.Строки.Количество() = 0 Тогда + СтрокаДереваВерсия.Статус = "Завершено"; + Иначе + СтрокаДереваВерсия.Статус = ""; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +// +Процедура ОтключитьОтложенноеОбновление() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПриВключенииОтложенногоОбновления(Ложь); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Использование = Ложь; + РегламентноеЗадание.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +// +Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ВыполнитьНеудачные = Ложь) + + ОбработчикиВыполнялись = Ложь; + ЕстьНеудачные = Ложь; + ЕстьПропущенныеОбработчики = Ложь; + ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + + Для Каждого ДеревоОбработчиковБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + + Если ДеревоОбработчиковБиблиотека.Статус = "Завершено" Тогда + Продолжить; + КонецЕсли; + + Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл + + Если ДеревоОбработчиковВерсия.Статус = "Завершено" Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбработчикОбновления Из ДеревоОбработчиковВерсия.Строки Цикл + + Если ОбработчикОбновления.Статус = "Выполнено" Тогда + Продолжить; + КонецЕсли; + + Если ОбработчикОбновления.ЧислоПопыток > 0 И Не ВыполнитьНеудачные Тогда + ЕстьНеудачные = Истина; + Продолжить; + КонецЕсли; + + Если ОбработчикОбновления.ЧислоПопыток >= 3 Тогда + ЕстьПропущенныеОбработчики = Истина; + Продолжить; + КонецЕсли; + + ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); + ОбработчикиВыполнялись = Истина; + ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; + Попытка + СообщениеОЗапущенномОбработчике = НСтр("ru = 'Выполняется процедура обновления ""%1"".'"); + СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОЗапущенномОбработчике, ИмяОбработчика); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); + + Параметры = Неопределено; + Если СведенияОбОбновлении.Свойство("ПараметрыОбработчикаОбновления", Параметры) Тогда + Если ТипЗнч(Параметры) = Тип("Структура") Тогда + Параметры.Вставить("ОбработкаЗавершена", Истина); + Иначе + Параметры = Новый Структура("ОбработкаЗавершена", Истина); + КонецЕсли; + Иначе + Параметры = Новый Структура("ОбработкаЗавершена", Истина); + КонецЕсли; + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(Параметры); + + Если ЗаписыватьВЖурнал Тогда + ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); + КонецЕсли; + + ОбработчикОбновления.Статус = "Выполняется"; + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяОбработчика, ПараметрыОбработчика); + + // Обработчик обновления передал параметры, которые нужно сохранить. + Если Параметры.Количество() > 1 И Не Параметры.ОбработкаЗавершена Тогда + СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления", Параметры); + КонецЕсли; + + Если Параметры.ОбработкаЗавершена Тогда + ОбработчикОбновления.Статус = "Выполнено"; + СведенияОбОбновлении.Удалить("ПараметрыОбработчикаОбновления"); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + + Если ОбработчикОбновления.Статус = "Выполняется" Тогда + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + + Исключение + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + ОбработчикОбновления.Статус = "Ошибка"; + СведенияОбОбновлении.Удалить("ПараметрыОбработчикаОбновления"); + ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОбработчикОбновления.ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + Прервать; + КонецЦикла; + + Если Не ОбработчикиВыполнялись И ЕстьНеудачные И Не ВыполнитьНеудачные Тогда + Возврат ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, Истина); + КонецЕсли; + + Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда + Прервать; + Иначе + + Если ЕстьПропущенныеОбработчики Тогда + ДеревоОбработчиковВерсия.Статус = "ЕстьПропущенныеОбработчики"; + Иначе + ДеревоОбработчиковВерсия.Статус = "Завершено"; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда + Прервать; + Иначе + + Если ЕстьПропущенныеОбработчики Тогда + ДеревоОбработчиковБиблиотека.Статус = "ЕстьПропущенныеОбработчики"; + Прервать; + КонецЕсли; + + ДеревоОбработчиковБиблиотека.Статус = "Завершено"; + КонецЕсли; + + КонецЦикла; + + Если Не ОбработчикиВыполнялись Тогда + + СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Не ЕстьПропущенныеОбработчики; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + КонецЕсли; + Возврат ОбработчикиВыполнялись; + +КонецФункции + +// Только для внутреннего использования +// +Функция НовыеСведенияОбОбновлении(СтарыеСведения = Неопределено) + + СведенияОбОбновлении = Новый Структура; + СведенияОбОбновлении.Вставить("ВремяНачалаОбновления"); + СведенияОбОбновлении.Вставить("ВремяОкончанияОбновления"); + СведенияОбОбновлении.Вставить("ПродолжительностьОбновления"); + СведенияОбОбновлении.Вставить("ВремяНачалаОтложенногоОбновления"); + СведенияОбОбновлении.Вставить("ВремяОкончаниеОтложенногоОбновления"); + СведенияОбОбновлении.Вставить("НомерСеанса"); + СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления"); + СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); + СведенияОбОбновлении.Вставить("ДеревоОбработчиков"); + СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений"); + + Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(СведенияОбОбновлении, СтарыеСведения); + КонецЕсли; + + Возврат СведенияОбОбновлении; + +КонецФункции + +// Только для внутреннего использования +// +Функция НовыеСведенияОбОбработчикахОбновления() + + ДеревоОбработчиков = Новый ДеревоЗначений; + ДеревоОбработчиков.Колонки.Добавить("ИмяБиблиотеки"); + ДеревоОбработчиков.Колонки.Добавить("НомерВерсии"); + ДеревоОбработчиков.Колонки.Добавить("ВерсияРегистрации"); + ДеревоОбработчиков.Колонки.Добавить("ИмяОбработчика"); + ДеревоОбработчиков.Колонки.Добавить("Статус"); + ДеревоОбработчиков.Колонки.Добавить("ЧислоПопыток"); + ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); + ДеревоОбработчиков.Колонки.Добавить("Комментарий"); + + Возврат ДеревоОбработчиков; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/ОбновлениеИнформационнойБазыСлужебный.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/ОбновлениеИнформационнойБазыСлужебный.mdo new file mode 100644 index 000000000..d9a95b9b9 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/ОбновлениеИнформационнойБазыСлужебный.mdo @@ -0,0 +1,12 @@ + + + ОбновлениеИнформационнойБазыСлужебный + + ru + Обновление информационной базы служебный + + Всегда на сервере + true + true + true + diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 8fc130106..68641308b 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -3,15 +3,14 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Формирует и сохраняет в ИБ план обновления областей данных. // // Параметры: -// ИдентификаторБиблиотеки – Строка – имя конфигурации или идентификатор библиотеки, -// ВсеОбработчики – Соответствие – список всех обработчиков обновления, -// ОбязательныеРазделенныеОбработчики – Соответствие – список обязательных +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки, +// ВсеОбработчики - Соответствие - список всех обработчиков обновления, +// ОбязательныеРазделенныеОбработчики - Соответствие - список обязательных // обработчиков обновления с ОбщиеДанные = Ложь, // ИсходнаяВерсияИБ - Строка - исходная версия информационной базы, // ВерсияМетаданныхИБ - Строка - версия конфигурации (из метаданных). @@ -20,10 +19,10 @@ ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ОбработчикиОбновления = ВсеОбработчики.СкопироватьКолонки(); - Для каждого СтрокаОбработчика Из ВсеОбработчики Цикл + Для Каждого СтрокаОбработчика Из ВсеОбработчики Цикл // При формировании плана обновлении области, по умолчанию не добавляем обязательные (*) обработчики Если СтрокаОбработчика.Версия = "*" Тогда Продолжить; @@ -31,14 +30,14 @@ ЗаполнитьЗначенияСвойств(ОбработчикиОбновления.Добавить(), СтрокаОбработчика); КонецЦикла; - Для каждого ОбязательныйОбработчик Из ОбязательныеРазделенныеОбработчики Цикл + Для Каждого ОбязательныйОбработчик Из ОбязательныеРазделенныеОбработчики Цикл СтрокаОбработчика = ОбработчикиОбновления.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаОбработчика, ОбязательныйОбработчик); СтрокаОбработчика.Версия = "*"; КонецЦикла; - ПланОбновленияОбластиДанных = ОбновлениеИнформационнойБазы.ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ИсходнаяВерсияИБ, - ВерсияМетаданныхИБ, Истина); + ПланОбновленияОбластиДанных = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиОбновленияВИнтервале( + ОбработчикиОбновления, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ, Истина); ОписаниеПлана = Новый Структура; ОписаниеПлана.Вставить("ВерсияС", ИсходнаяВерсияИБ); @@ -225,8 +224,27 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Проверяет, выполнена ли общая часть обновления информационной базы. +// +Процедура ПередОбновлениемИнформационнойБазы() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ВерсияОбщихДанных = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); + Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияОбщихДанных) Тогда + Сообщение = НСтр("ru = 'Не выполнена общая часть обновления информационной базы. + |Обратитесь к администратору.'"); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Сообщение); + ВызватьИсключение Сообщение; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -332,14 +350,40 @@ Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыБлокировки = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); Если НЕ ПараметрыБлокировки.Установлена Тогда Возврат; КонецЕсли; ПараметрыБлокировки.Установлена = Ложь; СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки); + Иначе + + СнятьМонопольныйРежим = Ложь; + Если Не МонопольныйРежим() Тогда + + Попытка + УстановитьМонопольныйРежим(Истина); + СнятьМонопольныйРежим = Истина; + Исключение + // Обработка исключения не требуется. + // Ожидаемое исключение - ошибка установки монопольного режима из-за + // наличия других сеансов (например, при динамическом обновлении конфигурации). + // В этом случае планирование обновления областей будет выполняться с учетом + // возможной конкуренции при доступе к таблицам объектов метаданных, разделенных + // в режиме "Независимо и совместно" (что будет менее эффективно, нежели в + // выполнение в монопольном режиме). + КонецПопытки; + + КонецЕсли; + ЗапланироватьОбновлениеОбластейДанных(Истина); + + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -375,15 +419,13 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - КонецПроцедуры // Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. @@ -391,10 +433,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -469,7 +511,7 @@ УстановитьПривилегированныйРежим(Истина); - ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы(); КонецПроцедуры @@ -506,8 +548,8 @@ Возврат; КонецЕсли; - ВерсияОбщихДанных = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя, Истина); - Если ОбновлениеИнформационнойБазы.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + ВерсияОбщихДанных = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); + Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда // Не выполнено обновление общих данных смысла планировать // обновление областей нет Возврат; @@ -635,9 +677,7 @@ ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); Если БлокироватьОбласти Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); - СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь, Выборка.ОбластьДанных); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -668,18 +708,17 @@ Возврат; КонецЕсли; - // Если выполняется в регламентном задании, то переходим безусловно в привилегированный режим. - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, + // т.к. необходимые действия выполняются в частном порядке. ЗапланироватьОбновлениеОбластейДанных(Истина); КонецПроцедуры -// Возвращает ключ записи для регистров сведений ВерсииПодсистем и ВерсииПодсистемОбластейДанных +// Возвращает ключ записи для регистра сведений ВерсииПодсистемОбластейДанных. // -// Возвращаемое значение: РегистрСведенийКлючЗаписи. +// Возвращаемое значение: +// РегистрСведенийКлючЗаписи. // Функция КлючЗаписиВерсийПодсистем() Экспорт @@ -695,6 +734,53 @@ КонецФункции +// Блокирует запись в регистре сведений ВерсииПодсистемОбластейДанных, которая соответствует текущей области данных, +// и возвращает ключ этой записи. +// +// Возвращаемое значение: +// РегистрСведенийКлючЗаписи. +// +Функция ЗаблокироватьВерсииОбластиДанных() Экспорт + + КлючЗаписи = Неопределено; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + КлючЗаписи = КлючЗаписиВерсийПодсистем(); + + КонецЕсли; + + Если КлючЗаписи <> Неопределено Тогда + Попытка + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + Исключение + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + ". " + + НСтр("ru = 'Обновление области данных'", Метаданные.ОсновнойЯзык.КодЯзыка), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); + КонецПопытки; + КонецЕсли; + Возврат КлючЗаписи; + +КонецФункции + +// Разблокирует запись в регистре сведений ВерсииПодсистемОбластейДанных. +// +// Параметры: +// КлючЗаписи - РегистрСведенийКлючЗаписи +// +Процедура РазблокироватьВерсииОбластиДанных(КлючЗаписи) Экспорт + + Если КлючЗаписи <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; + +КонецПроцедуры + // Только для внутреннего использования. Процедура ПриОпределенииВерсииИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных, СтандартнаяОбработка, ВерсияИБ) Экспорт @@ -840,3 +926,5 @@ КонецПопытки; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl index 0cc7b551a..f212b0b63 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl @@ -3,14 +3,26 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Проверить необходимость обновления информационной базы при смене версии конфигурации. // Функция НеобходимоОбновлениеИнформационнойБазы() Экспорт - Возврат ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); + Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление( + Метаданные.Версия, ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя)) Тогда + Возврат Истина; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Запустить = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ЗапуститьОбновлениеИнформационнойБазы"); + УстановитьПривилегированныйРежим(Ложь); + + Если Запустить <> Неопределено И ОбновлениеИнформационнойБазыСлужебный.ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции @@ -27,7 +39,7 @@ МинимальнаяВерсияОбластейДанных = Неопределено; КонецЕсли; - ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя); + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя); Если МинимальнаяВерсияОбластейДанных = Неопределено Тогда МинимальнаяВерсияИБ = ВерсияИБ; @@ -42,3 +54,5 @@ Возврат МинимальнаяВерсияИБ; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl index 92824eaea..382a63045 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Процедуры используемые при обмене данными @@ -77,5 +76,4 @@ КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 1ba588f05..79c164960 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -65,8 +64,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Проверить, что запуск программы выполнен от имени внешнего пользователя // и выбросить исключение в этом случае. @@ -127,7 +127,7 @@ // Вызывается при завершении обновления конфигурации через COM-соединение. // // Параметры -// РезультатОбновления – Булево – Результат обновления. +// РезультатОбновления - Булево - Результат обновления. // Процедура ЗавершитьОбновление(Знач РезультатОбновления, Знач ЭлектроннаяПочта, Знач ИмяАдминистратораОбновления) Экспорт @@ -155,14 +155,18 @@ КонецПопытки; КонецЕсли; - ПослеЗавершенияОбновления(); + Если РезультатОбновления Тогда + + ПослеЗавершенияОбновления(); + + КонецЕсли; КонецПроцедуры // Получить короткое имя (идентификатор) конфигурации. // // Возвращаемое значение: -// Строка – короткое имя конфигурации. +// Строка - короткое имя конфигурации. Функция КороткоеИмяКонфигурации() Значение = ОбновлениеКонфигурацииПереопределяемый.КороткоеИмяКонфигурации() + "/"; @@ -197,7 +201,7 @@ // информация о доступных обновлениях. // // Возвращаемое значение: -// Строка – адрес веб-сервера. +// Строка - адрес веб-сервера. // // Пример реализации: // @@ -230,11 +234,11 @@ Функция КаталогОбновлений() - Значение = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Метаданные.АдресКаталогаОбновлений); // Значение по умолчанию + Значение = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Метаданные.АдресКаталогаОбновлений); // Значение по умолчанию ЗначениеПереопределяемогоМодуля = ОбновлениеКонфигурацииПереопределяемый.КаталогОбновлений(); Если НЕ ПустаяСтрока(ЗначениеПереопределяемогоМодуля) Тогда // Переопределяемое значение - Значение = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ЗначениеПереопределяемогоМодуля); + Значение = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(ЗначениеПереопределяемогоМодуля); КонецЕсли; СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -430,7 +434,7 @@ ПараметрыПисьма.Вставить("Тело", Текст); ПараметрыПисьма.Вставить("Кому", АдресНазначения); - РаботаСПочтовымиСообщениями.ОтправитьСообщение(РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); КонецПроцедуры @@ -481,6 +485,10 @@ Обработчик.Версия = "1.1.1.8"; Обработчик.Процедура = "ОбновлениеКонфигурации.ОбновлениеРасписанияПроверкиНаличияОбновления"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.10"; + Обработчик.Процедура = "ОбновлениеКонфигурации.ОчиститьПараметрыАдминистрирования"; + КонецПроцедуры // Процедура-обработчик обновления. @@ -517,12 +525,51 @@ КонецПроцедуры +// Очищает параметры администрирования из сохраненных настроек +// +Процедура ОчиститьПараметрыАдминистрирования() Экспорт + + Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ОбновлениеКонфигурации", "НастройкиОбновленияКонфигурации"); + + Если ТипЗнч(Настройки) = Тип("Структура") ИЛИ ТипЗнч(Настройки) = Тип("Соответствие") Тогда + + СписокСвойствДляУдаления = Новый Массив; + СписокСвойствДляУдаления.Добавить("КластерТребуетАутентификации"); + СписокСвойствДляУдаления.Добавить("ИмяАдминистратораКластера"); + СписокСвойствДляУдаления.Добавить("ПарольАдминистратораКластера"); + СписокСвойствДляУдаления.Добавить("НестандартныеПортыСервера"); + СписокСвойствДляУдаления.Добавить("ПортАгентаСервера"); + СписокСвойствДляУдаления.Добавить("ПортКластераСерверов"); + + Для Каждого УдаляемоеСвойство Из СписокСвойствДляУдаления Цикл + + Если Настройки.Свойство(УдаляемоеСвойство) Тогда + Настройки.Удалить(УдаляемоеСвойство); + КонецЕсли; + + КонецЦикла; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ОбновлениеКонфигурации", + "НастройкиОбновленияКонфигурации", + Настройки); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем // Вызывается не через событие, т.к. нужно сделать вызов самым последним. +// Процедура ПослеОбновленияИнформационнойБазы() Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); Статус = Неопределено; @@ -546,6 +593,8 @@ // Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). Процедура ПослеЗавершенияОбновления() Экспорт - ОбновлениеИнформационнойБазы.ПослеЗавершенияОбновления(); + ОбновлениеИнформационнойБазыСлужебный.ПослеЗавершенияОбновления(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl index 279c9bceb..8f6d1daaf 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Получает настройки помощника обновления из хранилища общих настроек. // @@ -25,3 +24,5 @@ ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 4cd592763..a2cc64dfa 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверяет наличие обновления конфигурации при запуске программы. // @@ -216,8 +215,9 @@ Возврат ПарКомпл; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему @@ -235,8 +235,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает общие параметры обновления. // @@ -300,7 +301,7 @@ // информация о доступных обновлениях. // // Возвращаемое значение: -// Строка – адрес веб-страницы. +// Строка - адрес веб-страницы. // Функция АдресРесурсовДляПроверкиНаличияОбновления(ПроверитьОбновленияДляНовойРедакции = Ложь) Экспорт @@ -310,7 +311,7 @@ Если ПроверитьОбновленияДляНовойРедакции Тогда КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, ТекущаяРедакцияПлатформы(), СледующаяРедакцияПлатформы()); КонецЕсли; - Результат = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НастройкиОбновления.АдресРесурсаДляПроверкиНаличияОбновления) + + Результат = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(НастройкиОбновления.АдресРесурсаДляПроверкиНаличияОбновления) + КороткоеИмяКонфигурации + "/"; Возврат Результат; @@ -340,7 +341,7 @@ // пользовательскому разделу на сайте поставщика конфигурации. // // Возвращаемое значение: -// Строка – адрес веб-страницы. +// Строка - адрес веб-страницы. Функция АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту() Экспорт Значение = "http://users.v8.1c.ru/Rules.aspx"; // Значение по умолчанию @@ -356,7 +357,7 @@ // Получить адрес каталога файлов обновления на сервере обновлений. // // Возвращаемое значение: -// Строка – адрес каталога на веб-сервере. +// Строка - адрес каталога на веб-сервере. // Функция АдресКаталогаШаблоновНаСервереОбновлений() Экспорт @@ -381,7 +382,7 @@ // Получить адрес сервиса проверки легальности получения обновления. // // Возвращаемое значение: -// Строка – адрес сервиса. +// Строка - адрес сервиса. // Функция АдресСервисаПроверкиЛегальности() Экспорт @@ -392,7 +393,7 @@ // Получить адрес сервера обновлений. // // Возвращаемое значение: -// Строка – адрес веб-сервера. +// Строка - адрес веб-сервера. // Функция АдресСервераОбновлений() Экспорт @@ -418,7 +419,7 @@ // конфигурации. // // Возвращаемое значение: -// Строка – имя файла. +// Строка - имя файла. // Функция ИмяФайлаПроверкиНаличияОбновления() Экспорт @@ -444,7 +445,7 @@ // ВыдаватьСообщения: Булево, признак вывода пользователю сообщений об ошибках Процедура ПроверитьНаличиеОбновленияЧерезИнтернет(ВыдаватьСообщения = Ложь, ДоступноОбновлениеДляНовойРедакции = Ложь) Экспорт - Состояние("Проверка наличия обновления в Интернете.."); + Состояние("ru = 'Проверка наличия обновления в Интернете'"); Параметры = ПолучитьДоступноеОбновлениеКонфигурации(); Если Параметры.ИсточникОбновления <> -1 Тогда ВремяПолученияОбновления = Параметры.ВремяПолученияОбновления; @@ -616,7 +617,7 @@ ПараметрыОбновления = ПолучитьПараметрыОбновления(); ВременныйФайл = ПараметрыОбновления.КаталогФайловОбновления + ПараметрыОбновления.ИмяФайлаАдресовРелизовИТС; Если НЕ СкопироватьФайл( - ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + + ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + ПараметрыОбновления.ИмяФайлаАдресовРелизовИТС, ВременныйФайл, ВыдаватьСообщения) Тогда Возврат Неопределено; КонецЕсли; @@ -640,10 +641,10 @@ // Возвратить каталог файла - часть пути без имени файла. // // Параметры -// ПутьКФайлу – Строка – путь к файлу. +// ПутьКФайлу - Строка - путь к файлу. // // Возвращаемое значение: -// Строка – каталог файла +// Строка - каталог файла Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) Экспорт ПозицияСимвола = ПолучитьНомерПоследнегоСимвола(ПутьКФайлу, "\"); @@ -663,7 +664,7 @@ КороткоеИмяКонфигурации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КороткоеИмяКонфигурации; КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, "/", "\"); - КороткоеИмяКонфигурации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КороткоеИмяКонфигурации); + КороткоеИмяКонфигурации = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(КороткоеИмяКонфигурации); ВозвращаемаяСтруктура = Новый Структура("ПутьКФайламОбновленияНаДискеИТС, ПутьКСтатьеПеречнюРелизов", "", ""); Попытка ЧтениеXML = Новый ЧтениеXML; @@ -686,8 +687,8 @@ КонецЕсли; ЧтениеXML.Прочитать(); - ЗначениеПутиКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + - ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки( + ЗначениеПутиКаталога = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + + ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки( СокрЛП(ЧтениеXML.Значение))) + КороткоеИмяКонфигурации; Если НЕ ПустаяСтрока(ЗначениеПутиКаталога) И СуществуетФайлПроверкиНаличияОбновления(ЗначениеПутиКаталога) Тогда @@ -734,7 +735,7 @@ App = Новый COMОбъект("Shell.Application"); Folder = App.Namespace(28); Результат = Folder.Self.Path; - Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); + Возврат ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); КонецФункции //Функция, открывает интерактивно адрес в сети Интернет @@ -991,8 +992,8 @@ СтруктураОтвета = Новый Структура; - СтруктураОтвета.Вставить("ЗначениеРезультата", ЗначениеРезультата); - СтруктураОтвета.Вставить("ТекстОшибки", ТекстОшибки); + СтруктураОтвета.Вставить("ЗначениеРезультата", Булево(ЗначениеРезультата)); + СтруктураОтвета.Вставить("ТекстОшибки", Строка(ТекстОшибки)); Если ЗаписьВЖурналРегистрации Тогда @@ -1029,7 +1030,7 @@ Функция ОписаниеСервисаПроверкиЛегальности() АдресWSDL = АдресСервисаПроверкиЛегальности(); - ПараметрыСоединения = ПолучениеФайловИзИнтернетаКлиентСервер.СтруктураURI(АдресWSDL); + ПараметрыСоединения = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресWSDL); Результат = Новый Структура("АдресWSDL", АдресWSDL); @@ -1049,9 +1050,7 @@ Попытка - ПараметрыКонструктора = Новый Массив; - ПараметрыКонструктора.Добавить(ПараметрыСоединения.ПутьНаСервере); - HTTPЗапрос = Новый(Тип("HTTPЗапрос"), ПараметрыКонструктора); + HTTPЗапрос = Новый HTTPЗапрос(ПараметрыСоединения.ПутьНаСервере); Ответ = HTTP.Получить(HTTPЗапрос); ТекстWSDL = Ответ.ПолучитьТелоКакСтроку(); @@ -1082,7 +1081,7 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, НСтр("ru = 'Отсутствует элемент описания типов данных ().'")); + |Отсутствует элемент описания типов данных ().'"), АдресWSDL); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1092,7 +1091,7 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, НСтр("ru = 'Отсутствует элемент описания типов данных ()'")); + |Отсутствует элемент описания типов данных ()'"), АдресWSDL); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1135,7 +1134,7 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, НСтр("ru = 'Отсутствует URI пространства имен в WSDL-описании.'")); + |Отсутствует URI пространства имен в WSDL-описании.'"), АдресWSDL); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1148,7 +1147,7 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, НСтр("ru = 'Отсутствует описание веб-сервисов в WSDL-описании ().'")); + |Отсутствует описание веб-сервисов в WSDL-описании ().'"), АдресWSDL); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1163,9 +1162,9 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, НСтр("ru = 'Отсутствует описание портов в WSDL-описании ().'")); + |Отсутствует описание портов в WSDL-описании ().'"), АдресWSDL); ВызватьИсключение ТекстИсключения; - + КонецЕсли; УзелПорта = УзлыПортов[0]; @@ -1173,10 +1172,10 @@ Если НЕ ЗначениеЗаполнено(ИмяПорта) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось определить имя порта сервиса (%1).'"), ИмяСервиса); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). - |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, ТекстОшибки); + ТекстИсключения = СтрЗаменить(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). + |Ошибка чтения WSDL-описания веб-сервиса интернет-поддержки пользователей: + |Не удалось определить имя порта сервиса (%2)."), АдресWSDL, ИмяСервиса); + ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1189,10 +1188,10 @@ Если НЕ ЗначениеЗаполнено(АдресПорта) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось определить URL заданного порта сервиса (%1).'"), ИмяПорта); ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании описания веб-сервиса (%1). - |Ошибка чтения WSDL-описания веб-сервиса проверки легальности скачивания обновления: - |%2'"), АдресWSDL, ТекстОшибки); + |Ошибка чтения WSDL-описания веб-сервиса интернет-поддержки пользователей: + |Не удалось определить URL заданного порта сервиса (%2).'"), АдресWSDL, ИмяПорта); + ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1453,9 +1452,7 @@ // Функция ОтправитьЗапросSOAP(ТекстКонверта, ОписаниеСервисаПроверкиЛегальности) - ПараметрыКонструктора = Новый Массив; - ПараметрыКонструктора.Добавить(ОписаниеСервисаПроверкиЛегальности.ПутьПорта); - HTTPЗапрос = Новый(Тип("HTTPЗапрос"), ПараметрыКонструктора); + HTTPЗапрос = Новый HTTPЗапрос(ОписаниеСервисаПроверкиЛегальности.ПутьПорта); HTTPЗапрос.Заголовки["Content-Type"] = "text/xml;charset=UTF-8"; HTTPЗапрос.УстановитьТелоИзСтроки(ТекстКонверта); @@ -1622,4 +1619,6 @@ КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl index 45db9837a..c170ea272 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl @@ -3,11 +3,11 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура проверки обновления конфигурации по расписанию. Процедура ОбработатьПроверкуОбновленияПоРасписанию() Экспорт ОбновлениеКонфигурацииКлиент.ПроверитьОбновлениеПоРасписанию(); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl index f5c02b422..ff8195c77 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события перехода по страница помощника обновления. // @@ -38,12 +37,12 @@ // повторить попытку обновления. // // Параметры -// ВыдаватьСообщения – Булево – определяет, может ли функция выводить +// ВыдаватьСообщения - Булево - определяет, может ли функция выводить // сообщения/диалоги или от нее требуется // вернуть только результат проверки. // // Возвращаемое значение: -// Булево – признак готовности ИБ к проведению обновления. +// Булево - признак готовности ИБ к проведению обновления. // // Пример реализации: // @@ -56,20 +55,11 @@ Возврат Истина; // результат по умолчанию КонецФункции -// Определить, поставляются ли для данной конфигурации обновления на ИТС. -// -// Возвращаемое значение: -// Булево - признак того, что обновления поставляются на диске ИТС. -// -Функция ИспользоватьОбновлениеСДискаИТС() Экспорт - Возврат Ложь; // значение по умолчанию -КонецФункции - // Получить адрес веб-страницы с информацией о том, как получить доступ к // пользовательскому разделу на сайте поставщика конфигурации. // // Возвращаемое значение: -// Строка – адрес веб-страницы. +// Строка - адрес веб-страницы. // // Пример реализации: // Возврат "http://users.v8.1c.ru/Rules.aspx"; // для типовых конфигураций @@ -106,4 +96,6 @@ Возврат Истина; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl index e0159ab70..5ee09cfb6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает структуру настроек обновления конфигурации и обновляет их. // @@ -12,7 +11,7 @@ // НастройкиОбновления - структура - старые настройки обновления, которые необходимо обновить // // Возвращаемое значение: -// Структура – структура настроек обновления. +// Структура - структура настроек обновления. // Функция ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновления) Экспорт @@ -33,7 +32,7 @@ // Заполняет структуру настроек обновления конфигурации и возвращает их. // // Возвращаемое значение: -// Структура – структура настроек обновления. +// Структура - структура настроек обновления. // Функция НовыеНастройкиОбновленияКонфигурации() Экспорт @@ -104,3 +103,40 @@ Возврат Дата(Год(Дата), Месяц(Дата), День(Дата) + ЧислоДней, Час(Дата), Минута(Дата), Секунда(Дата)); КонецФункции + +// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. +// В случае, когда параметр "Платформа" не указан, разделитель выбирается, исходя из уже имеющихся +// разделителей в параметре "ПутьКаталога". +// +// Параметры: +// ПутьКаталога - Строка - путь к каталогу; +// Платформа - ТипПлатформы - тип платформы, в рамках которой осуществляется работа (влияет на выбор разделителя). +// +// Возвращаемое значение: +// Строка - путь к каталогу с конечным символом-разделителем. +// +// Примеры использования: +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\" +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\" +// Результат = ДобавитьКонечныйРазделительПути("ftp://Мой каталог"); // возвращает "ftp://Мой каталог/" +// +Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога) Экспорт + + Если ПустаяСтрока(ПутьКаталога) Тогда + Возврат ПутьКаталога; + КонецЕсли; + + ДобавляемыйСимвол = "\"; + Если Найти(ПутьКаталога, "/") > 0 Тогда + ДобавляемыйСимвол = "/"; + КонецЕсли; + + Если Прав(ПутьКаталога, 1) <> ДобавляемыйСимвол Тогда + Возврат ПутьКаталога + ДобавляемыйСимвол; + Иначе + Возврат ПутьКаталога; + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl index 3cfcd0d8d..d38bc5ded 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl @@ -3,13 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получить короткое имя (идентификатор) конфигурации. // // Возвращаемое значение: -// Строка – короткое имя конфигурации. +// Строка - короткое имя конфигурации. Функция КороткоеИмяКонфигурации() Экспорт @@ -22,7 +21,7 @@ // информация о доступных обновлениях ("открытая" часть веб-сайта). // // Возвращаемое значение: -// Строка – адрес веб-сервера. +// Строка - адрес веб-сервера. // // Примеры реализации: // Возврат "localhost"; // локальный веб-сервер для тестирования @@ -64,3 +63,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 98b569b06..d2a581ffe 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -17,8 +17,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе @@ -30,8 +29,10 @@ // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. // +// Функция не предназначена для получения значений реквизитов пустых ссылок. +// // Параметры: -// Ссылка - Ссылка на объект - элемент справочника, документ, ... +// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. // // Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате // требований к свойствам структуры. @@ -45,7 +46,8 @@ // // Возвращаемое значение: // Структура - содержит имена (ключи) и значения затребованных реквизитов. -// Если строка затребованных реквизитов пуста, то возвращается пустая структура +// Если строка затребованных реквизитов пуста, то возвращается пустая структура. +// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено. // Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты) Экспорт @@ -109,6 +111,8 @@ // Если доступа к реквизиту нет, возникнет исключение прав доступа. // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. +// +// Функция не предназначена для получения значений реквизитов пустых ссылок. // // Параметры: // Ссылка - ссылка на объект, - элемент справочника, документ, ... @@ -124,12 +128,14 @@ КонецФункции -// Возвращает структуру, содержащую значения реквизитов, прочитанные из информационной базы +// Возвращает значения реквизитов, прочитанные из информационной базы // для нескольких объектов. // // Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. +// +// Функция не предназначена для получения значений реквизитов пустых ссылок. // // Параметры: // МассивСсылок - массив ссылок на объекты одного типа @@ -140,10 +146,9 @@ // Например, "Код, Наименование, Родитель". // // Возвращаемое значение: -// Соответствие, где ключ - ссылка на объект, а Значение - структура, которая -// содержит список свойств, как список имен в строке -// ИменаРеквизитов, со значениям реквизитов, прочитанными -// из информационной базы. +// Соответствие - где ключ - ссылка на объект, а Значение - структура, которая +// содержит список свойств, как список имен в строке +// ИменаРеквизитов, со значениям реквизитов, прочитанными из информационной базы. // Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов) Экспорт @@ -179,6 +184,8 @@ // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. // +// Функция не предназначена для получения значений реквизитов пустых ссылок. +// // Параметры: // МассивСсылок - массив ссылок на объекты одного типа // ВАЖНО! значения массива должны быть ссылками на @@ -186,7 +193,7 @@ // ИмяРеквизита - Строка, например, "Код". // // Возвращаемое значение: -// Соответствие, где ключ - ссылка на объект, Значение - значение прочитанного реквизита +// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита. // Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита) Экспорт @@ -265,8 +272,8 @@ // // Возвращаемое значение: // Массив - массив структур с полями: -// Ссылка - документ, который не удалось провести; -// ОписаниеОшибки - текст описания ошибки при проведении. +// Ссылка - документ, который не удалось провести; +// ОписаниеОшибки - текст описания ошибки при проведении. // Функция ПровестиДокументы(Документы) Экспорт @@ -282,9 +289,6 @@ ВыполненоУспешно = Истина; Исключение ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проведение документов при печати'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, ДокументОбъект.Метаданные(), ДокументСсылка, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Иначе ПредставлениеОшибки = НСтр("ru = 'Поля документа не заполнены.'"); @@ -376,6 +380,7 @@ КонецФункции // Производит замену ссылок по всей конфигурации. После замены неиспользуемые ссылки опционально удаляются. +// Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке. // // Параметры: // @@ -384,7 +389,7 @@ // // Параметры - Структура - Параметры замены. Может включать поля: // -// СпособУдаления - Строка, маркер способа удаления. Может принимать значения: +// * СпособУдаления - Строка, маркер способа удаления. Может принимать значения: // "Непосредственно" - Если после замены ссылка нигде не используется, // то она будет удалена непосредственно // "Пометка" - Если после замены ссылка не используется, то @@ -392,36 +397,30 @@ // Любые другие значения отменяют необходимость удаления. // Значение по умолчанию - пустая строка. // -// ВключатьБизнесЛогику - Булево, флаг необходимость включения бизнес логики при записи объектов +// * ВключатьБизнесЛогику - Булево, флаг необходимость включения бизнес логики при записи объектов // Значение по умолчанию - Истина // -// ЗаменаПарыВТранзакции - Булево - при значении Истина транзакция охватывает все производимые замены для одной пары ссылок. +// * ЗаменаПарыВТранзакции - Булево - при значении Истина транзакция охватывает все производимые замены для одной пары ссылок. // Ложь - каждая замена ссылки в одном объекте выполняется в отдельной транзакции. // Значение по умолчанию - Истина // -// ПривилегированнаяЗапись - Булево - При значении Истина запись происходит в привилегированном режиме, иначе - с текущими правами +// * ПривилегированнаяЗапись - Булево - При значении Истина запись происходит в привилегированном режиме, иначе - с текущими правами // Значение по умолчанию - Ложь // // АдресРезультата - Строка - Необязательный адрес во временном хранилище, куда будет помещен копия результата замены // // Возвращаемое значение - ТаблицаЗначений - описание неуспешных замен (ошибок) с колонками: // -// Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли -// -// ОбъектОшибки - Произвольный - Объект - причина ошибки -// -// ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки -// -// ТипОшибки - Строка - Маркер типа ошибки. Возможны варианты: +// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли +// * ОбъектОшибки - Произвольный - Объект - причина ошибки +// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки +// * ТипОшибки - Строка - Маркер типа ошибки. Возможны варианты: // "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы // "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем // "ОшибкаЗаписи" - не смогли записать объект // "НеизвестныеДанные" - при обработке были найдены данные, которые // не планировались к анализу, замена не реализована -// -// ТекстОшибки - Строка - Подробное описание ошибки -// -// Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке +// * ТекстОшибки - Строка - Подробное описание ошибки // Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено, Знач АдресРезультата = "") Экспорт @@ -463,7 +462,6 @@ КонецЕсли; КонецЕсли; - // правильно ПривилегированнаяЗапись Если Параметры.Свойство("ПривилегированнаяЗапись", ЗначениеПараметра) Тогда Если ЗначениеПараметра = Истина Тогда ПараметрыЗамены.ПривилегированнаяЗапись = Истина; @@ -509,7 +507,6 @@ ТаблицаПоиска.Индексы.Добавить("Данные, КлючЗамены"); // Вспомогательные данные - ТаблицаПоиска.Колонки.Добавить("ВерсияДанных", ТипСтрока); ТаблицаПоиска.Колонки.Добавить("ЦелеваяСсылка"); Конфигурация = Новый Структура; @@ -531,7 +528,10 @@ Иначе // Найдены неизвестные типы замены, не будем работать с этой ссылкой, возможно нарушение связности Для Каждого Ошибка Из РезультатРазметки.ОшибкиРазметки Цикл - ДобавитьРезультатЗамены(РезультатЗамены, ТекущаяСсылка, "НеизвестныеДанные", Ошибка.Объект, Ошибка.Текст); + ПредставлениеОбъектаОшибки = Строка(Ошибка.Объект); + ДобавитьРезультатЗамены(РезультатЗамены, ТекущаяСсылка, + ОписаниеОшибкиЗамены("НеизвестныеДанные", Ошибка.Объект, ПредставлениеОбъектаОшибки, Ошибка.Текст) + ); КонецЦикла; КонецЕсли; @@ -553,7 +553,8 @@ Возврат РезультатЗамены; КонецФункции -// Получает все места использования ссылок +// Получает все места использования ссылок. +// Если какая-либо ссылка нигде не используется, то строк для нее в результирующей таблице не будет. // // Параметры: // НаборСсылок - Массив - Ссылки, для которых ищем места использования @@ -561,16 +562,14 @@ // // Возвращаемое значение: // ТаблицаЗначений - Состоит из колонок: -// Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется -// Данные - Произвольный - Данные, содержащие анализируемую ссылку -// Метаданные - ОбъектМетаданных - Метаданные найденных данных -// ПредставлениеДанных - Строка - Представление данных, содержащих анализируемую ссылку -// ТипСсылки - Тип - Тип анализируемой ссылки -// ВспомогательныеДанные - Булево - Истина, если данные используются анализируемой ссылкой как вспомогательными +// * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется +// * Данные - Произвольный - Данные, содержащие анализируемую ссылку +// * Метаданные - ОбъектМетаданных - Метаданные найденных данных +// * ПредставлениеДанных - Строка - Представление данных, содержащих анализируемую ссылку +// * ТипСсылки - Тип - Тип анализируемой ссылки +// * ВспомогательныеДанные - Булево - Истина, если данные используются анализируемой ссылкой как вспомогательными // данными (ведущее измерение и т.п.) // -// Если какая-либо ссылка нигде не используется, то строк для нее в результирующей таблице не будет. -// Функция МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "") Экспорт МестаИспользования = Новый ТаблицаЗначений; @@ -589,8 +588,10 @@ ТипКлючиЗаписей = ОписаниеТипаКлючиЗаписей(); ТипВсеСсылки = ОписаниеТипаВсеСсылки(); - МетаКонстанты = Метаданные.Константы; - МетаДокументы = Метаданные.Документы; + + МетаПоследовательности = Метаданные.Последовательности; + МетаКонстанты = Метаданные.Константы; + МетаДокументы = Метаданные.Документы; ВспомогательныеМетаданные = ПолучитьОбщийСписокИсключенийПоискаСсылок(); @@ -605,7 +606,7 @@ ПутьВспомогательныхДанных = ВспомогательныеМетаданные[Мета]; Если ПутьВспомогательныхДанных = Неопределено Тогда - ЭтоВспомогательныеДанные = Ложь; + ЭтоВспомогательныеДанные = (Ссылка = Данные); ИначеЕсли ПутьВспомогательныхДанных = "*" Тогда ЭтоВспомогательныеДанные = Истина; @@ -630,10 +631,19 @@ ИначеЕсли МетаКонстанты.Содержит(Мета) Тогда Представление = Мета.Представление() + " (" + НСтр("ru = 'константа'") + ")"; + ИначеЕсли МетаПоследовательности.Содержит(Мета) Тогда + Представление = Мета.Представление() + " (" + НСтр("ru = 'последовательность'") + ")"; + + ИначеЕсли ТипДанных = Неопределено Тогда + Представление = Строка(Данные); + ИначеЕсли ТипВсеСсылки.СодержитТип(ТипДанных) Тогда - МетаПредставление = Мета.ПредставлениеОбъекта; - Если ПустаяСтрока(МетаПредставление) Тогда + МетаПредставлениеОбъекта = Новый Структура("ПредставлениеОбъекта"); + ЗаполнитьЗначенияСвойств(МетаПредставлениеОбъекта, Мета); + Если ПустаяСтрока(МетаПредставлениеОбъекта.ПредставлениеОбъекта) Тогда МетаПредставление = Мета.Представление(); + Иначе + МетаПредставление = МетаПредставлениеОбъекта.ПредставлениеОбъекта; КонецЕсли; Представление = Строка(Данные); Если Не ПустаяСтрока(МетаПредставление) Тогда @@ -682,7 +692,82 @@ Возврат МестаИспользования; КонецФункции -// Возвращает описание типа, включающего в себя все возможные ссылочные типы конфигурации +// Поиск дублей для указанного значения. +// +// Параметры: +// ОбластьПоиска - Строка - Имя таблицы данных (полное имя метаданных) области поиска. +// Например "Справочник.Номенклатура". Поддерживается поиск в справочниках, +// планах видов характеристик, видах расчетов, планах счетов. +// +// Элемент - Произвольный - объект с данными элемента, для которого производится поиск дублей +// +// ДополнительныеПараметры - Произвольный - Параметр для передачи в обработчики событий менеджера +// +// Возвращаемое значение: +// ТаблицаЗначений - содержит строки с описаниями дублей. +// +Функция НайтиДублиЭлемента(Знач ОбластьПоиска, Знач ЭталонныйОбъект, Знач ДополнительныеПараметры) Экспорт + + ПараметрыПоискаДублей = Новый Структура; + ПараметрыПоискаДублей.Вставить("КомпоновщикПредварительногоОтбора"); + ПараметрыПоискаДублей.Вставить("ОбластьПоискаДублей", ОбластьПоиска); + ПараметрыПоискаДублей.Вставить("УчитыватьПрикладныеПравила", Истина); + + // Из параметров + ПараметрыПоискаДублей.Вставить("ПравилаПоиска", Новый ТаблицаЗначений); + ПараметрыПоискаДублей.ПравилаПоиска.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка")); + ПараметрыПоискаДублей.ПравилаПоиска.Колонки.Добавить("Правило", Новый ОписаниеТипов("Строка")); + + // См. Обработка.ПоискИУдалениеДублей + ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; + МетаОбласть = Метаданные.НайтиПоПолномуИмени(ОбластьПоиска); + ДоступныеРеквизитыОтбора = ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.СтандартныеРеквизиты); + ДоступныеРеквизитыОтбора = ?(ПустаяСтрока(ДоступныеРеквизитыОтбора), ",", ДоступныеРеквизитыОтбора) + + ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.Реквизиты); + + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Запрос = "ВЫБРАТЬ " + Сред(ДоступныеРеквизитыОтбора, 2) + " ИЗ " + ОбластьПоиска; + НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; + + ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки) ); + + // Вызов прикладного кода + ОбработкаПоиска = Обработки.ПоискИУдалениеДублей.Создать(); + + МенеджерОбластиПоиска = ОбработкаПоиска.МенеджерОбластиПоискаДублей(ОбластьПоиска); + ИспользоватьПрикладныеПравила = ОбработкаПоиска.ЕстьПрикладныеПравилаОбластиПоискаДублей(МенеджерОбластиПоиска); + Если ИспользоватьПрикладныеПравила Тогда + ПрикладныеПараметры = Новый Структура; + ПрикладныеПараметры.Вставить("ПравилаПоиска", ПараметрыПоискаДублей.ПравилаПоиска); + ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора); + ПрикладныеПараметры.Вставить("ОграниченияСравнения", Новый Массив); + ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1500); + + МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); + + ПараметрыПоискаДублей.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонецЕсли; + + ГруппыДублей = ОбработкаПоиска.ГруппыДублей(ПараметрыПоискаДублей, ЭталонныйОбъект); + Результат = ГруппыДублей.ТаблицаДублей; + + // Там ровно одна группа, возвращаем нужные элементы + Для Каждого Строка Из Результат.НайтиСтроки(Новый Структура("Родитель", Неопределено)) Цикл + Результат.Удалить(Строка); + КонецЦикла; + ПустаяСсылка = МенеджерОбластиПоиска.ПустаяСсылка(); + Для Каждого Строка Из Результат.НайтиСтроки(Новый Структура("Ссылка", ПустаяСсылка)) Цикл + Результат.Удалить(Строка); + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает описание типа, включающего в себя все возможные ссылочные типы конфигурации. // Функция ОписаниеТипаВсеСсылки() Экспорт @@ -705,13 +790,13 @@ //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с прикладными типами и коллекциями значений -// Получает имя значения перечисления как объекта метаданных +// Получает имя значения перечисления как объекта метаданных. // // Параметры: // Значение - значение перечисления для которого необходимо получить имя перечисления // // Возвращаемое значение: -// Строка - имя значения перечисления как объекта метаданных +// Строка - имя значения перечисления как объекта метаданных. // Функция ИмяЗначенияПеречисления(Значение) Экспорт @@ -727,8 +812,8 @@ // Если элемент в массиве-приемнике уже существует, то добавления нового элемента не происходит. // // Параметры: -// МассивПриемник – Массив – массив, который заполняется уникальными значениями -// МассивИсточник – Массив – массив, из которого подбираются элементы в массив-приемник. +// МассивПриемник - Массив - массив, который заполняется уникальными значениями. +// МассивИсточник - Массив - массив, из которого подбираются элементы в массив-приемник. // Процедура ЗаполнитьМассивУникальнымиЗначениями(МассивПриемник, МассивИсточник) Экспорт @@ -780,8 +865,11 @@ // Не рекомендуется использовать для преобразования таблиц значений // с большим количеством строк. // -// Параметры: ТаблицаЗначений -// Возвращаемое значение: Массив +// Параметры: +// ТаблицаЗначений - ТаблицаЗначений +// +// Возвращаемое значение: +// Массив // Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт @@ -827,11 +915,11 @@ КонецФункции -// Создает структуру аналогичную менеджеру записи регистра сведений +// Создает структуру аналогичную менеджеру записи регистра сведений. // // Параметры: // МенеджерЗаписи - РегистрСведенийМенеджерЗаписи, -// МетаданныеРегистра - метаданные регистра сведений +// МетаданныеРегистра - метаданные регистра сведений. // Функция СтруктураПоМенеджеруЗаписи(МенеджерЗаписи, МетаданныеРегистра) Экспорт @@ -916,9 +1004,9 @@ // ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст()); // // Возвращаемое значение: -// Структура с полями -// ИмяТаблицы - Строка -// Данные - ТаблицаЗначений. +// Структура - с полями +// * ИмяТаблицы - Строка +// * Данные - ТаблицаЗначений. // Функция ПрочитатьXMLВТаблицу(Знач XML) Экспорт @@ -931,9 +1019,9 @@ // Прочитаем первый узел и проверим его Если Не Чтение.Прочитать() Тогда - ВызватьИсключение("Пустой XML"); + ВызватьИсключение(НСтр("ru = 'Пустой XML'")); ИначеЕсли Чтение.Имя <> "Items" Тогда - ВызватьИсключение("Ошибка в структуре XML"); + ВызватьИсключение(НСтр("ru = 'Ошибка в структуре XML'")); КонецЕсли; // Получим описание таблицы и создадим ее @@ -954,7 +1042,7 @@ ИначеЕсли Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда Продолжить; ИначеЕсли Чтение.Имя <> "Item" Тогда - ВызватьИсключение("Ошибка в структуре XML"); + ВызватьИсключение(НСтр("ru = 'Ошибка в структуре XML'")); КонецЕсли; новСтр = ТаблицаЗначений.Добавить(); @@ -972,7 +1060,7 @@ Возврат Результат; -КонецФункции // ПрочитатьXMLВТаблицу() +КонецФункции // Функция выполняет сравнение двух коллекций строк, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. @@ -996,6 +1084,9 @@ // идентичными только если одинаковые строки размещены // в коллекциях на одинаковых местах // +// Возвращаемое значение: +// Булево +// Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт // Типы коллекций, для которых доступен состав колонок, @@ -1302,7 +1393,7 @@ КонецФункции -// Фиксирует Данные типов Структура, Соответствие, Массив с учетом вложенности. +// Фиксирует данные типов Структура, Соответствие, Массив с учетом вложенности. // // Параметры: // Данные - Структура, Соответствие, Массив, значения которых являются примитивными типами, @@ -1385,11 +1476,12 @@ // Создает копию объекта XDTO. // // Параметры: -// Фабрика - ФабрикаXDTO - фабрика, которой создан исходный объект -// Объект - ОбъектXDTO - объект, копию которого требуется создать +// Фабрика - ФабрикаXDTO - фабрика, которой создан исходный объект. +// Объект - ОбъектXDTO - объект, копию которого требуется создать. // // Возвращаемое значение: // ОбъектXDTO - копия исходного объекта XDTO +// Функция СкопироватьXDTO(Знач Фабрика, Знач Объект) Экспорт Запись = Новый ЗаписьXML; @@ -1412,7 +1504,7 @@ // XML представление // // Возвращаемое значение: -// Строка - XML представление типа XDTO +// Строка - XML представление типа XDTO. // Функция ПредставлениеТипаXDTO(ТипXDTO) Экспорт @@ -1455,34 +1547,54 @@ СистемнаяИнфо.ВерсияПриложения, "."); Возврат "v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector"; -КонецФункции +КонецФункции -// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель на это соединение -// -// Параметры: -// Параметры - Структура - содержит параметры для установки внешнего соединения с информационной базой. -// Структура должна содержать следующие ключи (см. функция ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// Возвращает CLSID COM-класса для работы с 1С:Предприятием 8 через COM-соединение. // -// ВариантРаботыИнформационнойБазы - (Число) Вариант работы информационной базы: 0 – файловый; 1 – клиент-серверный -// КаталогИнформационнойБазы - (Строка) Каталог информационной базы для файлового режима работы -// ИмяСервера1СПредприятия - (Строка) Имя сервера1С:Предприятия -// ИмяИнформационнойБазыНаСервере1СПредприятия - (Строка) Имя информационной базы на сервере1С:Предприятия -// АутентификацияОперационнойСистемы - (Булево) Признак аутентификации операционной системы при создании внешнего подключения к информационной базе -// ИмяПользователя - (Строка) Имя пользователя информационной базы -// ПарольПользователя - (Строка) Пароль пользователя информационной базы -// -// СтрокаСообщенияОбОшибке (необязательный) – Строка – если в процессе установки внешнего соединения возникает ошибка, -// то подробное описание ошибки помещается в этот параметр +// Параметры: +// ИмяCOMСоединителя - Строка - имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. // // Возвращаемое значение: -// Тип: COM-объект, Неопределенно. -// в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; -// в случае ошибки возвращается Неопределенно. +// Строка - строковое представление CLSID. +// +Функция ИдентификаторCOMСоединителя(Знач ИмяCOMСоединителя) Экспорт + + Если ИмяCOMСоединителя = "v83.COMConnector" Тогда + + Возврат "181E893D-73A4-4722-B61D-D604B3D67D47"; + + КонецЕсли; + + ТекстИсключения = Нстр("ru = 'На задан CLSID для класса %1'"); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ИмяCOMСоединителя); + ВызватьИсключение ТекстИсключения; + +КонецФункции + +// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель на это соединение. +// +// Параметры: +// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. +// Свойства см. в функции ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// +// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - клиент-серверный; +// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании внешнего подключения к информационной базе; +// * ИмяПользователя - Строка - Имя пользователя информационной базы; +// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// +// СтрокаСообщенияОбОшибке - Строка - если в процессе установки внешнего соединения возникает ошибка, +// то подробное описание ошибки помещается в этот параметр. +// +// Возвращаемое значение: +// COMОбъект, Неопределенно - +// в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; +// в случае ошибки возвращается Неопределенно. // Функция УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт - Результат = УстановитьВнешнееСоединениеСБазой(Параметры); - ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; @@ -1492,22 +1604,23 @@ // Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель на это соединение // // Параметры: -// Параметры - Структура - содержит параметры для установки внешнего соединения с информационной базой. -// Структура должна содержать следующие ключи (см. функция ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. +// Свойства см. в функции ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): // -// ВариантРаботыИнформационнойБазы - (Число) Вариант работы информационной базы: 0 – файловый; 1 – клиент-серверный -// КаталогИнформационнойБазы - (Строка) Каталог информационной базы для файлового режима работы -// ИмяСервера1СПредприятия - (Строка) Имя сервера1С:Предприятия -// ИмяИнформационнойБазыНаСервере1СПредприятия - (Строка) Имя информационной базы на сервере1С:Предприятия -// АутентификацияОперационнойСистемы - (Булево) Признак аутентификации операционной системы при создании внешнего подключения к информационной базе -// ИмяПользователя - (Строка) Имя пользователя информационной базы -// ПарольПользователя - (Строка) Пароль пользователя информационной базы +// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - клиент-серверный; +// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании внешнего подключения к информационной базе; +// * ИмяПользователя - Строка - Имя пользователя информационной базы; +// * ПарольПользователя - Строка - Пароль пользователя информационной базы. // -// Возвращаемое значение - структура: -// Соединение - (COM-объект) указатель на COM-объект соединения или Неопределено в случае ошибки -// КраткоеОписаниеОшибки - (Строка) краткое описание ошибки -// ПодробноеОписаниеОшибки - (Строка) подробное описание ошибки -// ОшибкаПодключенияКомпоненты - (Булево) флаг ошибки подключения COM +// Возвращаемое значение: +// Структура - +// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в случае ошибки; +// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; +// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; +// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. // Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт @@ -1605,172 +1718,8 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции -// Выполнить экспортную процедуру по имени. -// -// Параметры -// ИмяЭкспортнойПроцедуры – Строка – имя экспортной процедуры в формате -// <имя объекта>.<имя процедуры>, где <имя объекта> - это -// общий модуль или модуль менеджера объекта. -// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры> -// в порядке расположения элементов массива. -// ОбластьДанных - Число - задает область данных, в которой необходимо выполнить процедуру. -// -// Пример: -// ВыполнитьБезопасно("МойОбщийМодуль.МояПроцедура"); -// -Процедура ВыполнитьБезопасно(ИмяЭкспортнойПроцедуры, Параметры = Неопределено, ОбластьДанных = Неопределено) Экспорт - - // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); - Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - КонецЕсли; - - ИмяОбъекта = ЧастиИмени[0]; - Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): - |Не найден общий модуль ""%2"".'"), - ИмяЭкспортнойПроцедуры, - ИмяОбъекта); - КонецЕсли; - - Если ЧастиИмени.Количество() = 3 Тогда - ДопустимыеИменаТипов = Новый Массив; - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаКонстанты())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыСведений())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыНакопления())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыБухгалтерии())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыРасчета())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаСправочники())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаДокументы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаОтчеты())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаОбработки())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаБизнесПроцессы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЖурналыДокументов())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЗадачи())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыСчетов())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыОбмена())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовХарактеристик())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовРасчета())); - ИмяТипа = ВРег(ЧастиИмени[0]); - Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): - |Не найдена коллекция объектов метаданных ""%2"", - |или для этой коллекции не поддерживается безопасное выполнение.'"), - ИмяЭкспортнойПроцедуры, - ИмяОбъекта); - КонецЕсли; - КонецЕсли; - - ИмяМетода = ЧастиИмени[ЧастиИмени.ВГраница()]; - ВременнаяСтруктура = Новый Структура; - Попытка - // Проверка на то, что ИмяМетода является допустимым идентификатором. - // Например: МояПроцедура - ВременнаяСтруктура.Вставить(ИмяМетода); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): - |Имя метода ""%2"" не соответствует требованиям образования имен переменных.'"), - ИмяЭкспортнойПроцедуры, - ИмяМетода); - КонецПопытки; - - ПараметрыСтрока = ""; - Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда - Для Индекс = 0 По Параметры.ВГраница() Цикл - ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; - КонецЦикла; - ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); - КонецЕсли; - - ВыполненаУстановкаРазделенияСеанса = Ложь; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - Если ОбластьДанных = Неопределено Тогда - ОбластьДанных = ЗначениеРазделителяСеанса(); - Иначе - Если ОбластьДанных <> ЗначениеРазделителяСеанса() Тогда - ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ОбластьДанных <> Неопределено - И (НЕ ИспользованиеРазделителяСеанса() ИЛИ ОбластьДанных <> ЗначениеРазделителяСеанса()) Тогда - УстановитьРазделениеСеанса(Истина, ОбластьДанных); - ВыполненаУстановкаРазделенияСеанса = Истина; - КонецЕсли; - КонецЕсли; - - Выполнить ИмяЭкспортнойПроцедуры + "(" + ПараметрыСтрока + ")"; - - Если ВыполненаУстановкаРазделенияСеанса Тогда - УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - -КонецПроцедуры - -// Проверяет имя экспортной процедуры на валидность для использования -// в инструкции Выполнить встроенного языка. При некорректном имени -// вызывается исключение. -// -Функция ПроверитьИмяЭкспортнойПроцедуры(Знач ИмяЭкспортнойПроцедуры, ТекстСообщения) Экспорт - - // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); - Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - - ИмяОбъекта = ЧастиИмени[0]; - Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - - Если ЧастиИмени.Количество() = 3 Тогда - ДопустимыеИменаТипов = Новый Массив; - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаКонстанты())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыСведений())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыНакопления())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыБухгалтерии())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыРасчета())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаСправочники())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаДокументы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаБизнесПроцессы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЗадачи())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыСчетов())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыОбмена())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовХарактеристик())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовРасчета())); - ИмяТипа = ВРег(ЧастиИмени[0]); - Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Функция ИнформационнаяБазаФайловая определяет режим эксплуатации -// информационной базы файловый (Истина) или Серверный (Ложь). -// При проверке используется СтрокаСоединенияИнформационнойБазы, которую -// можно указать явно. +// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь). +// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно. // // Параметры: // СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если @@ -1819,7 +1768,7 @@ // Возвращает описание предмета в виде текстовой строки. // // Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // // Возвращаемое значение: // Строка @@ -1884,10 +1833,10 @@ // для которых в описании указано, что они сериализуются. // // Параметры: -// Значение – Произвольный. Значение, которое необходимо сериализовать в XML-строку. +// Значение - Произвольный. Значение, которое необходимо сериализовать в XML-строку. // // Возвращаемое значение: -// XML-строка представления значения в сериализованном виде. +// Строка - XML-строка представления значения в сериализованном виде. // Функция ЗначениеВСтрокуXML(Значение) Экспорт @@ -1903,7 +1852,7 @@ // для которых в описании указано, что они сериализуются. // // Параметры: -// СтрокаXML – строка представления значения в сериализованном виде. +// СтрокаXML - строка представления значения в сериализованном виде. // // Возвращаемое значение: // Значение, полученное из переданной XML-строки. @@ -1916,13 +1865,60 @@ Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); КонецФункции -// Формирует из исходной строки СтрокаПоиска строку для поиска данных в запросе +// Возвращает XML-представление XDTO-объекта. // // Параметры: -// СтрокаПоиска - Строка - исходная строка, содержащая запрещенные символы +// ОбъектXDTO - ОбъектXDTO - объект, для которого требуется сформировать XML-представление. +// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XML-представление. +// Если параметр не указан - будет использоваться глобальная фабрика XDTO. +// +// Возвращаемое значение: +// Строка - XML-представление XDTO-объекта. +// +Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт + + Если Фабрика = Неопределено Тогда + Фабрика = ФабрикаXDTO; + КонецЕсли; + + Запись = Новый ЗаписьXML(); + Запись.УстановитьСтроку(); + Фабрика.ЗаписатьXML(Запись, ОбъектXDTO, , , , НазначениеТипаXML.Явное); + + Возврат Запись.Закрыть(); + +КонецФункции + +// Формирует XDTO-объект по XML-представлению. +// +// Параметры: +// СтрокаXML - Строка - XML-представление XDTO-объекта, +// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XDTO-объект. +// Если параметр не указан - будет использоваться глобальная фабрика XDTO. +// +// Возвращаемое значение: +// ОбъектXDTO. +// +Функция ОбъектXDTOИзСтрокиXML(Знач СтрокаXML, Знач Фабрика = Неопределено) Экспорт + + Если Фабрика = Неопределено Тогда + Фабрика = ФабрикаXDTO; + КонецЕсли; + + Чтение = Новый ЧтениеXML(); + Чтение.УстановитьСтроку(СтрокаXML); + + Возврат Фабрика.ПрочитатьXML(Чтение); + +КонецФункции + +// Формирует из исходной строки СтрокаПоиска строку для поиска данных в запросе. +// +// Параметры: +// СтрокаПоиска - Строка - исходная строка, содержащая запрещенные символы. // // Возвращаемое значение: -// Строка - строка подготовленная для поиска данных в запросе +// Строка - строка подготовленная для поиска данных в запросе. // Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт @@ -1951,16 +1947,14 @@ // Возвращаемое значение: // WSПрокси // -Функция WSПрокси( - Знач АдресWSDL, - Знач URIПространстваИмен, - Знач ИмяСервиса, - Знач ИмяТочкиПодключения = "", - Знач ИмяПользователя, - Знач Пароль, - Знач Таймаут = Неопределено, - Знач ДелатьКонтрольныйВызов = Ложь - ) Экспорт +Функция WSПрокси(Знач АдресWSDL, + Знач URIПространстваИмен, + Знач ИмяСервиса, + Знач ИмяТочкиПодключения = "", + Знач ИмяПользователя, + Знач Пароль, + Знач Таймаут = Неопределено, + Знач ДелатьКонтрольныйВызов = Ложь) Экспорт Если ДелатьКонтрольныйВызов И Таймаут <> Неопределено И Таймаут > 20 Тогда @@ -1995,41 +1989,24 @@ КонецФункции // Определяет доступность объекта метаданных по функциональным опциям. -// Вызывающие функции кэшированы в целях оптимизации. // // Параметры: -// ОбъектМетаданных (ОбъектМетаданных) +// ОбъектМетаданных - ОбъектМетаданных - проверяемый объект метаданных. // // Возвращаемое значение: -// (Булево) Истина если объект доступен. +// Булево - Истина, если объект доступен. // Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Экспорт - Содержится = Ложь; - Доступен = Ложь; - - Параметры = Новый Структура; - Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Если ФункциональнаяОпция.Состав.Содержит(ОбъектМетаданных) Тогда - Содержится = Истина; - Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); - Если Значение = Истина Тогда - Доступен = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат НЕ Содержится ИЛИ Доступен; -КонецФункции // ОбъектМетаданныхДоступенПоФункциональнымОпциям + Возврат ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям()[ОбъектМетаданных] <> Ложь; +КонецФункции // Устанавливает или снимает пометку удаления для всех объектов, которые ссылаются на заданный "объект-владелец". // -// Параметры: -// Владелец – ПланОбменаСсылка, СправочникСсылка, ДокументСсылка и пр. -// Ссылка на объект, который является "владельцем" по отношению к помечаемым на удаление объектам. +// Параметры: +// Владелец - ПланОбменаСсылка, СправочникСсылка, ДокументСсылка - ссылка на объект, который является "владельцем" +// по отношению к помечаемым на удаление объектам. // -// ПометкаУдаления – Булево. Признак установки/снятия пометки на удаление у всех "подчиненных" объектов. -// Истина - пометка будет установлена; Ложь - пометка будет снята. +// ПометкаУдаления - Булево - признак установки/снятия пометки на удаление у всех "подчиненных" объектов. // Процедура УстановитьПометкуУдаленияПодчиненнымОбъектам(Знач Владелец, Знач ПометкаУдаления) Экспорт @@ -2063,10 +2040,10 @@ // При вызове в транзакции выдает ошибку. // // Параметры: -// Запрос - Запрос - запрос который требуется выполнить +// Запрос - Запрос - запрос который требуется выполнить. // // Возвращаемое значение: -// РезультатЗапроса - результат выполнения запроса +// РезультатЗапроса - результат выполнения запроса. // Функция ВыполнитьЗапросВнеТранзакции(Знач Запрос) Экспорт @@ -2096,17 +2073,33 @@ КонецФункции // Возвращает общие параметры базовой функциональности. +// +// Возвращаемое значение: +// Структура - структура со свойствами: +// * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. +// Ранее определялись в ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. +// * МинимальноНеобходимаяВерсияПлатформы - Строка - полный номер версии платформы для запуска программы. Например, "8.3.4.365". +// Ранее определялись в ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы. +// * РаботаВПрограммеЗапрещена - Булево - Начальное значение Ложь. +// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - по умолчанию Истина. Если установить Ложь, то +// подтверждение при завершении работы программы не будет запрашиваться, +// если явно не разрешить в персональных настройках программы. +// * ОтключитьСправочникИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочника +// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. +// Для частичного встраивании отдельных функций библиотеки в конфигурации без постановки на поддержку. +// Функция ОбщиеПараметрыБазовойФункциональности() Экспорт ОбщиеПараметры = Новый Структура; ОбщиеПараметры.Вставить("ИмяФормыПерсональныхНастроек", ""); - ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", "8.3.3.715"); + ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", "8.3.4.365"); ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Истина); // Блокировать запуск, если версия ниже минимальной. ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); ОбщиеПараметры.Вставить("ОтключитьСправочникИдентификаторыОбъектовМетаданных", Ложь); ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры); + // Для обратной совместимости. ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек(ОбщиеПараметры.ИмяФормыПерсональныхНастроек); ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ОбщиеПараметры); @@ -2117,8 +2110,13 @@ // Определяет, что эта информационная база является подчиненным узлом // распределенной информационной базы (РИБ). // +// Возвращаемое значение: +// Булево +// Функция ЭтоПодчиненныйУзелРИБ() Экспорт + УстановитьПривилегированныйРежим(Истина); + Возврат ПланыОбмена.ГлавныйУзел() <> Неопределено; КонецФункции @@ -2126,6 +2124,9 @@ // Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. // В главном узле всегда - Ложь. // +// Возвращаемое значение: +// Булево +// Функция ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ() Экспорт Возврат ЭтоПодчиненныйУзелРИБ() И КонфигурацияИзменена(); @@ -2135,7 +2136,7 @@ // Возвращает Истина, если текущий сеанс выполняется на сервере, работающим под управлением ОС Linux. // // Возвращаемое значение: -// (Булево) Истина, если сервер работает под управлением ОС Linux. +// Булево - Истина, если сервер работает под управлением ОС Linux. // Функция ЭтоLinuxСервер() Экспорт @@ -2144,7 +2145,24 @@ КонецФункции -// Выполняет проверки перед запуском переданной формы. +// Предназначена для вставки в начало обработчика ПриСозданииНаСервере управляемых форм, которые размещаются на рабочем столе. +// +// Предотвращает открытие формы в ряде особых случаев: +// - если рабочий стол открывается до завершения обновления данных ИБ +// (исключается возможность заведомо ошибочного обращения к еще необновленным данным); +// - если в разделенную ИБ выполняется вход в сеансе с неустановленным значением разделителя ОбластьДанныхОсновныеДанные +// (исключается возможность заведомо ошибочного обращения к разделенным данным из неразделенного сеанса); +// +// Не следует использовать в формах, которые используются перед началом работы системы, +// а также в формах, предназначенных для работы в неразделенном сеансе. +// +// Параметры: +// Форма - УправляемаяФорма - ссылка на форму, которая создается. +// Отказ - Булево - параметр переданный в обработчик формы ПриСозданииНаСервере. +// СтандартнаяОбработка - Булево - параметр переданный в обработчик формы ПриСозданииНаСервере. +// +// Возвращаемое значение: +// Булево - если Ложь, значит установлен отказ создания формы. // Функция ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт @@ -2171,12 +2189,38 @@ КонецФункции +// Выполняет действия перед продолжением выполнения обработчика регламентного задания. +// +// Например, проверяет возможность выполнения обработчика регламентного задания. +// Если администратор не заблокировал выполнение регламентных заданий до +// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. +// +Процедура ПриНачалеВыполненияРегламентногоЗадания() Экспорт + + Если СтандартныеПодсистемыСервер.НеобходимоОбновлениеПараметровРаботыПрограммы() Тогда + ВызватьИсключение + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ПланыОбмена.ГлавныйУзел() = Неопределено + И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда + + ВызватьИсключение + НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом.'"); + КонецЕсли; + +КонецПроцедуры + // Возвращает редакцию конфигурации. // Редакцией принято называть две первые группы цифр полной версии конфигурации. // Например, у версии "1.2.3.4" редакция "1.2". // // Возвращаемое значение: // Строка - номер редакции конфигурации. +// Функция РедакцияКонфигурации() Экспорт Результат = ""; @@ -2203,14 +2247,13 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с формами +// Процедуры и функции для работы с формами. -// Процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений» +// Процедура предназначена для заполнения реквизита формы типа ДанныеФормыДерево. // // Параметры: -// КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений»; -// реквизит заполняется значениями из второго параметра процедуры. -// ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения. +// КоллекцияЭлементовДерева - ДанныеФормыДерево - реквизит, который нужно заполнить. +// ДеревоЗначений - ДеревоЗначений - данные для заполнения. // Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт @@ -2234,13 +2277,13 @@ // от наличия текста в комментарии. // // Параметры -// Комментарий - Строка - текст комментария +// Комментарий - Строка - текст комментария. // // Возвращаемое значение: // Картинка - Картинка, которая должна отображаться на странице с комментарием. // Функция ПолучитьКартинкуКомментария(Комментарий) Экспорт - + Если НЕ ПустаяСтрока(Комментарий) Тогда Картинка = БиблиотекаКартинок.Комментарий; Иначе @@ -2257,10 +2300,10 @@ // Получает дерево метаданных конфигурации с заданным отбором по объектам метаданных. // // Параметры: -// Отбор – Структура – содержит значения элементов отбора. -// Если параметр задан, то будет получено дерево метаданных в соответствии с заданным отбором. -// Ключ (Строка) – имя свойства элемента метаданных; -// Значение (Массив) – множество значений для отбора. +// Отбор - Структура - содержит значения элементов отбора. +// Если параметр задан, то будет получено дерево метаданных в соответствии с заданным отбором: +// Ключ - Строка - имя свойства элемента метаданных; +// Значение - Массив - множество значений для отбора. // // Пример инициализации переменной "Отбор": // @@ -2272,7 +2315,7 @@ // Отбор.Вставить("ПолноеИмя", Массив); // // Возвращаемое значение: -// Тип: ДеревоЗначений - дерево описания метаданных конфигурации +// ДеревоЗначений - дерево описания метаданных конфигурации. // Функция ПолучитьДеревоМетаданныхКонфигурации(Отбор = Неопределено) Экспорт @@ -2284,18 +2327,18 @@ КоллекцииОбъектовМетаданных.Колонки.Добавить("Картинка"); КоллекцииОбъектовМетаданных.Колонки.Добавить("КартинкаОбъекта"); - НоваяСтрокаКоллекцииОбъектовМетаданных("Константы", "Константы", БиблиотекаКартинок.Константа, БиблиотекаКартинок.Константа, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("Справочники", "Справочники", БиблиотекаКартинок.Справочник, БиблиотекаКартинок.Справочник, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("Документы", "Документы", БиблиотекаКартинок.Документ, БиблиотекаКартинок.ДокументОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовХарактеристик", "Планы видов характеристик", БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыСчетов", "Планы счетов", БиблиотекаКартинок.ПланСчетов, БиблиотекаКартинок.ПланСчетовОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовРасчета", "Планы видов характеристик", БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыСведений", "Регистры сведений", БиблиотекаКартинок.РегистрСведений, БиблиотекаКартинок.РегистрСведений, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыНакопления", "Регистры накопления", БиблиотекаКартинок.РегистрНакопления, БиблиотекаКартинок.РегистрНакопления, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыБухгалтерии", "Регистры бухгалтерии", БиблиотекаКартинок.РегистрБухгалтерии, БиблиотекаКартинок.РегистрБухгалтерии, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыРасчета", "Регистры расчета", БиблиотекаКартинок.РегистрРасчета, БиблиотекаКартинок.РегистрРасчета, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("БизнесПроцессы", "Бизнес-процессы", БиблиотекаКартинок.БизнесПроцесс, БиблиотекаКартинок.БизнесПроцессОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("Задачи", "Задачи", БиблиотекаКартинок.Задача, БиблиотекаКартинок.ЗадачаОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("Константы", НСтр("ru = 'Константы'"), БиблиотекаКартинок.Константа, БиблиотекаКартинок.Константа, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("Справочники", НСтр("ru = 'Справочники'"), БиблиотекаКартинок.Справочник, БиблиотекаКартинок.Справочник, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("Документы", НСтр("ru = 'Документы'"), БиблиотекаКартинок.Документ, БиблиотекаКартинок.ДокументОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыСчетов", НСтр("ru = 'Планы счетов'"), БиблиотекаКартинок.ПланСчетов, БиблиотекаКартинок.ПланСчетовОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовРасчета", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыСведений", НСтр("ru = 'Регистры сведений'"), БиблиотекаКартинок.РегистрСведений, БиблиотекаКартинок.РегистрСведений, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыНакопления", НСтр("ru = 'Регистры накопления'"), БиблиотекаКартинок.РегистрНакопления, БиблиотекаКартинок.РегистрНакопления, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'"), БиблиотекаКартинок.РегистрБухгалтерии, БиблиотекаКартинок.РегистрБухгалтерии, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыРасчета", НСтр("ru = 'Регистры расчета'"), БиблиотекаКартинок.РегистрРасчета, БиблиотекаКартинок.РегистрРасчета, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("БизнесПроцессы", НСтр("ru = 'Бизнес-процессы'"), БиблиотекаКартинок.БизнесПроцесс, БиблиотекаКартинок.БизнесПроцессОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("Задачи", НСтр("ru = 'Задачи'"), БиблиотекаКартинок.Задача, БиблиотекаКартинок.ЗадачаОбъект, КоллекцииОбъектовМетаданных); // возвращаемое значение функции ДеревоМетаданных = Новый ДеревоЗначений; @@ -2364,7 +2407,7 @@ // Получить представление физического места размещения информационной базы для отображения администратору. // // Возвращаемое значение: -// Строка - представление информационной базы +// Строка - представление информационной базы. // // Пример возвращаемого результата: // - для ИБ в файлом режиме: \\FileServer\1c_ib\ @@ -2411,11 +2454,11 @@ // Возвращает строку реквизитов объекта метаданных с заданным типом // // Параметры: -// Ссылка – ЛюбаяСсылка – ссылка на элемент базы данных, для которого требуется получить результат функции -// Тип – Тип – тип значения реквизита +// Ссылка - ЛюбаяСсылка - ссылка на элемент базы данных, для которого требуется получить результат функции; +// Тип - Тип - тип значения реквизита. // -// Возвращаемое значение: -// Тип: Строка – строка реквизитов объекта метаданных конфигурации, разделенные символом "," +// Возвращаемое значение: +// Строка - строка реквизитов объекта метаданных конфигурации, разделенные символом ",". // Функция ИменаРеквизитовПоТипу(Ссылка, Тип) Экспорт @@ -2431,13 +2474,13 @@ Возврат Результат; КонецФункции -// Возвращает имя базового типа по переданному значению объекта метаданных +// Возвращает имя базового типа по переданному значению объекта метаданных. // // Параметры: -// ОбъектМетаданных - объект метаданных, по которому необходимо определить базовый тип +// ОбъектМетаданных - объект метаданных, по которому необходимо определить базовый тип. // // Возвращаемое значение: -// Строка - имя базового типа по переданному значению объекта метаданных +// Строка - имя базового типа по переданному значению объекта метаданных. // Функция ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) Экспорт @@ -2500,16 +2543,14 @@ КонецФункции -// Возвращает менеджер объекта по полному имени объекта метаданных -// -// Не обрабатываются точки маршрутов бизнес-процессов +// Возвращает менеджер объекта по полному имени объекта метаданных. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// ПолноеИмя - Строка, полное имя объекта метаданных, -// например, "Справочник.Организации" +// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Справочник.Организации". // // Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ... +// СправочникМенеджер, ДокументМенеджер. // Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт Перем КлассОМ, ИмяОМ, Менеджер; @@ -2604,16 +2645,14 @@ КонецФункции - -// Возвращает менеджер объекта по ссылке на объект -// -// Не обрабатываются точки маршрутов бизнес-процессов +// Возвращает менеджер объекта по ссылке на объект. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить. // // Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ... +// СправочникМенеджер, ДокументМенеджер. // Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт @@ -2652,14 +2691,13 @@ КонецФункции -// Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки +// Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки. // // Параметры: -// ЛюбаяСсылка - значение любой ссылки информационной базы данных +// ЛюбаяСсылка - значение любой ссылки информационной базы данных. // // Возвращаемое значение: -// Истина - ссылка физически существует; -// Ложь - ссылка физически не существует +// Булево. // Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт @@ -2684,16 +2722,14 @@ КонецФункции -// Функция ВидОбъектаПоСсылке возвращает имя вида объектов метаданных -// по ссылке на объект. -// -// Не обрабатываются точки маршрутов бизнес-процессов. +// Возвращает имя вида объектов метаданных по ссылке на объект. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// Ссылка - ЛюбаяСсылка - объект, вид которого требуется получить. // // Возвращаемое значение: -// Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... +// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". // Функция ВидОбъектаПоСсылке(Ссылка) Экспорт @@ -2701,15 +2737,14 @@ КонецФункции -// Функция возвращает имя вида объектов метаданных по типу объекта. -// -// Не обрабатываются точки маршрутов бизнес-процессов. +// Возвращает имя вида объектов метаданных по типу объекта. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Тип - Тип прикладного объекта, определенный в конфигурации +// Тип - Тип - Тип прикладного объекта, определенный в конфигурации . // // Возвращаемое значение: -// Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... +// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". // Функция ВидОбъектаПоТипу(Тип) Экспорт @@ -2749,15 +2784,15 @@ КонецФункции // Возвращает полное имя объекта метаданных по переданному значению ссылки -// Например, +// Примеры: // "Справочник.Номенклатура"; -// "Документ.ПриходнаяНакладная" +// "Документ.ПриходнаяНакладная". // // Параметры: -// Ссылка - ЛюбаяСсылка - значение ссылки, для которого необходимо получить имя таблицы ИБ +// Ссылка - ЛюбаяСсылка - объект, для которого необходимо получить имя таблицы ИБ. // // Возвращаемое значение: -// Строка - полное имя объекта метаданных для указанного значения ссылки +// Строка - полное имя объекта метаданных для указанного объекта. // Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт @@ -2768,66 +2803,27 @@ // Проверить, что значение имеет ссылочный тип данных. // // Параметры: -// Значение - ссылка на объект, - элемент справочника, документ, ... +// Значение - Произвольный - проверяемое значение. // // Возвращаемое значение: -// Булево - Истина, если тип значения ссылочный. +// Булево - Истина, если тип значения ссылочный. // Функция ЗначениеСсылочногоТипа(Значение) Экспорт - Если Значение = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если Задачи.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Если ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; + Возврат ЭтоСсылка(ТипЗнч(Значение)); КонецФункции -// Проверка того, что тип имеет ссылочный тип данных +// Проверка того, что переданный тип является ссылочным типом данных. +// Для типа "Неопределено" возвращается Ложь. +// +// Возвращаемое значение: +// Булево. // Функция ЭтоСсылка(Тип) Экспорт - Возврат Справочники.ТипВсеСсылки().СодержитТип(Тип) + Возврат Тип <> Тип("Неопределено") + И (Справочники.ТипВсеСсылки().СодержитТип(Тип) ИЛИ Документы.ТипВсеСсылки().СодержитТип(Тип) ИЛИ Перечисления.ТипВсеСсылки().СодержитТип(Тип) ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) @@ -2836,14 +2832,14 @@ ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) ИЛИ БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(Тип) ИЛИ Задачи.ТипВсеСсылки().СодержитТип(Тип) - ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип); + ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип)); КонецФункции -// Проверяет является ли объект группой элементов. +// Проверяет, является ли объект группой элементов. // // Параметры: -// Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. +// Объект - ЛюбаяСсылка, Объект - проверяемый объект. // // Возвращаемое значение: // Булево. @@ -2893,6 +2889,7 @@ // - Подсистемы (требуется программировать переименование) // - Роли (требуется программировать переименование) // - ПланыОбмена +// - Константы // - Справочники // - Документы // - ЖурналыДокументов @@ -2912,14 +2909,12 @@ // модуля менеджера справочника ИдентификаторыОбъектовМетаданных. // // Параметры: -// ОписаниеОбъектаМетаданных - ОбъектМетаданных -// - Тип, который можно успешно использовать -// в функции Метаданные.НайтиПоТипу() -// - Строка - полное имя объекта метаданных, -// которое можно успешно использовать -// в функции Метаданные.НайтиПоПолномуИмени() +// ОписаниеОбъектаМетаданных - ОбъектМетаданных - объект метаданных конфигурации; +// - Тип - тип, который можно успешно использовать в функции Метаданные.НайтиПоТипу(); +// - Строка - полное имя объекта метаданных, которое можно успешно использовать +// в функции Метаданные.НайтиПоПолномуИмени(). // Возвращаемое значение: -// СправочникСсылка.ИдентификаторыОбъектовМетаданных +// СправочникСсылка.ИдентификаторыОбъектовМетаданных. // Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт @@ -3038,13 +3033,13 @@ КонецФункции -// Возвращает объект метаданных, по переданному идентификатору +// Возвращает объект метаданных по переданному идентификатору. // // Параметры: -// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных. // // Возвращаемое значение: -// ОбъектМетаданных +// ОбъектМетаданных. // Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт @@ -3152,16 +3147,16 @@ КонецФункции -// Только для использования в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- -// ТаблицуПереименованияОбъектовМетаданных() для описания переименований объектов метаданных. +// Для использования в процедуре ЗаполнитьТаблицуПереименованияОбъектовМетаданных +// общего модуля ОбщегоНазначенияПереопределяемый для описания переименований объектов метаданных. // // Параметры: -// Итог - передается в процедуру подсистемой БазоваяФункциональность. -// ВерсияИБ - Строка - версия при переходе на которую нужно выполнить переименование. -// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать. -// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать. -// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ, -// для основной конфигурации не требуется. +// Итог - Структура - передается в процедуру подсистемой БазоваяФункциональность. +// ВерсияИБ - Строка - версия при переходе на которую нужно выполнить переименование. +// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать. +// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать. +// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ. +// Для основной конфигурации не требуется. // Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт @@ -3171,16 +3166,14 @@ НовоеИмяКоллекции = ВРег(ИмяКоллекции(НовоеПолноеИмя)); ЗаголовокОшибки = - НСтр("ru = 'Ошибка в процедуре ПриДобавленииПереименованийОбъектовМетаданных - |общего модуля ОбщегоНазначенияПереопределяемый.'"); + НСтр("ru = 'Ошибка в процедуре ПриДобавленииПереименованийОбъектовМетаданных общего модуля ОбщегоНазначенияПереопределяемый.'"); Если СтароеИмяКоллекции <> НовоеИмяКоллекции Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'Не совпадают имена типов старого объекта метаданных: - |""%1"" - |и нового объекта метаданных: - |""%2"".'"), + + НСтр("ru = 'Не совпадают имена типов переименованного объекта метаданных. + |Прежний тип: ""%1"", + |новый тип: ""%2"".'"), СтароеПолноеИмя, НовоеПолноеИмя); КонецЕсли; @@ -3197,10 +3190,10 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'Объект метаданных ""%1"" и остальные - |объекты метаданных этого типа обновляются автоматически. + + НСтр("ru = 'Для типа объекта метаданных ""%1"" не требуется описывать переименование, + |так как сведения об объектах метаданных этого типа обновляются автоматически. | - |Переименование требуется только для следующих типов: + |Описывать переименования требуется только для следующих типов: |%2.'"), СтароеПолноеИмя, НовоеПолноеИмя, @@ -3222,7 +3215,7 @@ ВерсияБиблиотеки = Итог.ВерсииБиблиотек[ИдентификаторБиблиотеки]; Если ВерсияБиблиотеки = Неопределено Тогда - ВерсияБиблиотеки = ОбновлениеИнформационнойБазы.ВерсияИБ(ИдентификаторБиблиотеки); + ВерсияБиблиотеки = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); Итог.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); КонецЕсли; @@ -3231,35 +3224,7 @@ Возврат; КонецЕсли; - Попытка - Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияБиблиотеки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если Библиотека Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'При сравнении указанной версии ""%1"" - |с текущей версией ""%2"" - |указанной библиотеки ""%3"" - |произошла ошибка: - |""%4"".'"), - ВерсияИБ, - ВерсияБиблиотеки, - ИдентификаторБиблиотеки, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'При сравнении указанной версии ""%1"" - |с текущей версией конфигурации ""%2"" - |произошла ошибка: - |""%3"".'"), - ВерсияИБ, - ВерсияБиблиотеки, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецЕсли; - КонецПопытки; - + Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияБиблиотеки); Если Результат > 0 Тогда ЧастиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияИБ, "."); @@ -3280,6 +3245,9 @@ // Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта" // Для остальных типов приводит тип к строке, например "Число". // +// Возвращаемое значение: +// Строка +// Функция СтроковоеПредставлениеТипа(Тип) Экспорт Представление = ""; @@ -3333,8 +3301,12 @@ // Проверить, что описание типа состоит из единственного типа значения и // совпадает с нужным типом. // +// Параметры: +// ОписаниеТипа - ОписаниеТипов +// ТипЗначения - Тип +// // Возвращаемое значение: -// Булево - Совпадает или нет +// Булево - Истина, если совпадает. // Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт @@ -3347,16 +3319,16 @@ КонецФункции -// Проверяет наличие табличной части у справочника +// Проверяет наличие табличной части у справочника. // -//Параметры +// Параметры: // ИмяСправочника - Строка - имя справочника, для которого осуществляется проверка. // ИмяТабличнойЧасти - Строка - имя табличной части, наличие которой проверяется. // -//Возвращаемое значение: -// Булево - Истина, если табличная часть есть, ложь в обратном случае +// Возвращаемое значение: +// Булево - Истина, если табличная часть есть. // -//Пример: +// Пример: // Если НЕ ОбщегоНазначения.НаличиеТабличнойЧастиУСправочника(ИмяСправочника,"КонтактнаяИнформация") Тогда // Возврат; // КонецЕсли; @@ -3369,23 +3341,21 @@ // Формирует расширенное представление объекта. // Расширенное представление объекта складывается из представления объекта, кода и наименования. -// Если для объекта не удалось получить расширенное представление, -// то возвращается стандартное представление объекта, формируемое платформой. +// Если для объекта не удалось получить расширенное представление, то возвращается стандартное +// представление объекта, формируемое платформой. // // Пример возвращаемого значения функции: // "Контрагент 0А-0001234, ООО Телекоммуникационные системы" // -// Параметры: -// Объект. Тип: СправочникСсылка, -// ПланСчетовСсылка, -// ПланОбменаСсылка, -// ПланВидовХарактеристикСсылка, -// ПланВидовРасчетаСсылка. -// Объект, для которого требуется получить расширенное представление. +// Параметры: +// Объект - СправочникСсылка, +// ПланСчетовСсылка, +// ПланОбменаСсылка, +// ПланВидовХарактеристикСсылка, +// ПланВидовРасчетаСсылка - Объект, для которого требуется получить расширенное представление. // -// Возвращаемое значение: -// Тип. Строка. -// Расширенное представление объекта. +// Возвращаемое значение: +// Строка - расширенное представление объекта. // Функция РасширенноеПредставлениеОбъекта(Объект) Экспорт @@ -3430,14 +3400,14 @@ Возврат Результат; КонецФункции -// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов +// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. // // Параметры: -// СтандартныеРеквизиты – ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; -// ИмяРеквизита – Строка – реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; +// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; +// ИмяРеквизита - Строка - реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; // -// Возвращаемое значение: -// Тип: Булево. Истина - реквизит входит в подмножество стандартных реквизитов; Ложь – нет. +// Возвращаемое значение: +// Булево - Истина, если реквизит входит в подмножество стандартных реквизитов. // Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт @@ -3450,17 +3420,17 @@ КонецФункции -// Получает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданного -// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора) +// Получает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданного. +// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора). // // Параметры: -// ОбъектМетаданных - Объект метаданных конфигурации, для которого необходимо получить значение свойств реквизитов. +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо получить значение свойств реквизитов. // Например: Метаданные.Документ.РеализацияТоваровИУслуг -// Свойства - Строка - свойства реквизитов, перечисленных через запятую, значение которых необходимо получить. +// Свойства - Строка - свойства реквизитов, перечисленные через запятую, значение которых необходимо получить. // Например: "Имя, Тип, Синоним, Подсказка" // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений с описанием требуемых свойств всех реквизитов объекта метаданного +// ТаблицаЗначений - описание требуемых свойств всех реквизитов объекта метаданных. // Функция ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт @@ -3488,16 +3458,14 @@ КонецФункции -// Возвращает состояние использования элемента состава общего реквизита +// Возвращает состояние использования элемента состава общего реквизита. // // Параметры: -// ЭлементСостава - ОбъектМетаданных - элемент состава общего реквизита использование -// которого требуется проверить -// МетаданныеОбщегоРеквизита - ОбъектМетаданных - метаданные общего реквизита, -// которому принадлежит ЭлементСостава +// ЭлементСостава - ОбъектМетаданных - элемент состава общего реквизита, использование которого требуется проверить. +// МетаданныеОбщегоРеквизита - ОбъектМетаданных - объект метаданных общего реквизита, которому принадлежит ЭлементСостава. // // Возвращаемое значение: -// Булево - Истина, если элемент состава используется, иначе Ложь +// Булево - Истина, если элемент состава используется, иначе Ложь. // Функция ЭлементСоставаОбщегоРеквизитаИспользуется(Знач ЭлементСостава, Знач МетаданныеОбщегоРеквизита) Экспорт @@ -3514,11 +3482,11 @@ // Возвращает признак того, что объект метаданных используется в общих реквизитах-разделителях. // // Параметры: -// ОбъектМетаданных - Строка; ОбъектМетаданных - Если объект метаданных задан строкой, происходит обращение к модулю повторного использования. -// Разделитель - имя общего реквизита-разделителя, на разделение которыми проверяется объект метаданных. +// ОбъектМетаданных - Строка, ОбъектМетаданных - Если объект метаданных задан строкой, происходит обращение к модулю повторного использования. +// Разделитель - Строка - имя общего реквизита-разделителя, на разделение которыми проверяется объект метаданных. // // Возвращаемое значение: -// Булево - Истина, если объект метаданных используется хотя бы в одном общем разделителе. +// Булево - Истина, если объект метаданных используется хотя бы в одном общем разделителе. // Функция ЭтоРазделенныйОбъектМетаданных(Знач ОбъектМетаданных, Знач Разделитель) Экспорт @@ -3554,13 +3522,13 @@ // Ссылочные типы данных -// Определяет принадлежность объекта метаданных к общему типу "Документ" +// Определяет принадлежность объекта метаданных к общему типу "Документ". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоДокумент(ОбъектМетаданных) Экспорт @@ -3568,13 +3536,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Справочник" +// Определяет принадлежность объекта метаданных к общему типу "Справочник". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоСправочник(ОбъектМетаданных) Экспорт @@ -3585,10 +3553,10 @@ // Определяет принадлежность объекта метаданных к общему типу "Перечисление" // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПеречисление(ОбъектМетаданных) Экспорт @@ -3596,13 +3564,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "План обмена" +// Определяет принадлежность объекта метаданных к общему типу "План обмена". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПланОбмена(ОбъектМетаданных) Экспорт @@ -3610,13 +3578,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "План видов характеристик" +// Определяет принадлежность объекта метаданных к общему типу "План видов характеристик". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПланВидовХарактеристик(ОбъектМетаданных) Экспорт @@ -3624,13 +3592,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Бизнес-процесс" +// Определяет принадлежность объекта метаданных к общему типу "Бизнес-процесс". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоБизнесПроцесс(ОбъектМетаданных) Экспорт @@ -3638,13 +3606,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Задача" +// Определяет принадлежность объекта метаданных к общему типу "Задача". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоЗадача(ОбъектМетаданных) Экспорт @@ -3652,13 +3620,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "План счетов" +// Определяет принадлежность объекта метаданных к общему типу "План счетов". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПланСчетов(ОбъектМетаданных) Экспорт @@ -3666,13 +3634,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "План видов расчета" +// Определяет принадлежность объекта метаданных к общему типу "План видов расчета". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПланВидовРасчета(ОбъектМетаданных) Экспорт @@ -3682,13 +3650,13 @@ // Регистры -// Определяет принадлежность объекта метаданных к общему типу "Регистр сведений" +// Определяет принадлежность объекта метаданных к общему типу "Регистр сведений". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегистрСведений(ОбъектМетаданных) Экспорт @@ -3696,13 +3664,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Регистр накопления" +// Определяет принадлежность объекта метаданных к общему типу "Регистр накопления". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегистрНакопления(ОбъектМетаданных) Экспорт @@ -3710,13 +3678,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Регистр бухгалтерии" +// Определяет принадлежность объекта метаданных к общему типу "Регистр бухгалтерии". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегистрБухгалтерии(ОбъектМетаданных) Экспорт @@ -3724,13 +3692,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Регистр расчета" +// Определяет принадлежность объекта метаданных к общему типу "Регистр расчета". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегистрРасчета(ОбъектМетаданных) Экспорт @@ -3740,13 +3708,13 @@ // Константы -// Определяет принадлежность объекта метаданных к общему типу "Константа" +// Определяет принадлежность объекта метаданных к общему типу "Константа". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоКонстанта(ОбъектМетаданных) Экспорт @@ -3756,13 +3724,13 @@ // Журналы документов -// Определяет принадлежность объекта метаданных к общему типу "Журнал документов" +// Определяет принадлежность объекта метаданных к общему типу "Журнал документов". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоЖурналДокументов(ОбъектМетаданных) Экспорт @@ -3772,13 +3740,13 @@ // Последовательности -// Определяет принадлежность объекта метаданных к общему типу "Последовательности" +// Определяет принадлежность объекта метаданных к общему типу "Последовательности". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПоследовательность(ОбъектМетаданных) Экспорт @@ -3788,13 +3756,13 @@ // РегламентныеЗадания -// Определяет принадлежность объекта метаданных к общему типу "Регламентные задания" +// Определяет принадлежность объекта метаданных к общему типу "Регламентные задания". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегламентноеЗадание(ОбъектМетаданных) Экспорт @@ -3804,13 +3772,13 @@ // Общие -// Определяет принадлежность объекта метаданных к типу регистр +// Определяет принадлежность объекта метаданных к типу регистр. // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоРегистр(ОбъектМетаданных) Экспорт @@ -3824,10 +3792,10 @@ // Определяет принадлежность объекта метаданных к ссылочному типу // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоОбъектСсылочногоТипа(ОбъектМетаданных) Экспорт @@ -3852,9 +3820,10 @@ //////////////////////////////////////////////////////////////////////////////// // Имена типов. -// Возвращает значение для идентификации общего типа "Регистры сведений" +// Возвращает значение для идентификации общего типа "Регистры сведений". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаРегистрыСведений() Экспорт @@ -3862,9 +3831,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры накопления" +// Возвращает значение для идентификации общего типа "Регистры накопления". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаРегистрыНакопления() Экспорт @@ -3872,9 +3842,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры бухгалтерии" +// Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаРегистрыБухгалтерии() Экспорт @@ -3882,9 +3853,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры расчета" +// Возвращает значение для идентификации общего типа "Регистры расчета". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаРегистрыРасчета() Экспорт @@ -3892,9 +3864,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Документы" +// Возвращает значение для идентификации общего типа "Документы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаДокументы() Экспорт @@ -3902,9 +3875,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Справочники" +// Возвращает значение для идентификации общего типа "Справочники". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаСправочники() Экспорт @@ -3912,9 +3886,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Перечисления" +// Возвращает значение для идентификации общего типа "Перечисления". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПеречисления() Экспорт @@ -3922,9 +3897,10 @@ КонецФункции -// Функция-свойство: возвращает значение для идентификации общего типа "Отчеты" +// Возвращает значение для идентификации общего типа "Отчеты". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаОтчеты() Экспорт @@ -3932,9 +3908,10 @@ КонецФункции -// Функция-свойство: возвращает значение для идентификации общего типа "Обработки" +// Возвращает значение для идентификации общего типа "Обработки". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаОбработки() Экспорт @@ -3942,9 +3919,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "ПланыОбмена" +// Возвращает значение для идентификации общего типа "ПланыОбмена". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПланыОбмена() Экспорт @@ -3952,9 +3930,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы видов характеристик" +// Возвращает значение для идентификации общего типа "Планы видов характеристик". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПланыВидовХарактеристик() Экспорт @@ -3962,9 +3941,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Бизнес-процессы" +// Возвращает значение для идентификации общего типа "Бизнес-процессы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаБизнесПроцессы() Экспорт @@ -3972,9 +3952,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Задачи" +// Возвращает значение для идентификации общего типа "Задачи". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаЗадачи() Экспорт @@ -3982,9 +3963,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы счетов" +// Возвращает значение для идентификации общего типа "Планы счетов". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПланыСчетов() Экспорт @@ -3992,9 +3974,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы видов расчета" +// Возвращает значение для идентификации общего типа "Планы видов расчета". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПланыВидовРасчета() Экспорт @@ -4002,9 +3985,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Константы" +// Возвращает значение для идентификации общего типа "Константы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаКонстанты() Экспорт @@ -4012,9 +3996,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Журналы документов" +// Возвращает значение для идентификации общего типа "Журналы документов". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаЖурналыДокументов() Экспорт @@ -4022,9 +4007,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Последовательности" +// Возвращает значение для идентификации общего типа "Последовательности". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаПоследовательности() Экспорт @@ -4032,9 +4018,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "РегламентныеЗадания" +// Возвращает значение для идентификации общего типа "РегламентныеЗадания". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // Функция ИмяТипаРегламентныеЗадания() Экспорт @@ -4358,12 +4345,12 @@ // Проверяет, умещаются ли переданные табличные документы на страницу при печати. // // Параметры -// ТабДокумент – Табличный документ -// ВыводимыеОбласти – Массив из проверяемых таблиц или табличный документ -// РезультатПриОшибке - Какой возвращать результат при возникновении ошибки +// ТабДокумент - ТабличныйДокумент - табличный документ. +// ВыводимыеОбласти - Массив, ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. +// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. // // Возвращаемое значение: -// Булево – умещаются или нет переданные документы +// Булево - умещаются или нет переданные документы. // Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт @@ -4387,10 +4374,10 @@ // В других случаях (например, в локальном режиме работы) устанавливает монопольный режим. // // Параметры: -// ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других -// пользовательских сеансов со значением разделителя равным текущему. -// В случае обнаружения других сеансов будет выдано исключение. -// Параметр используется только при работе в модели сервиса. +// ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других +// пользовательских сеансов со значением разделителя равным текущему. +// В случае обнаружения других сеансов будет выдано исключение. +// Параметр используется только при работе в модели сервиса. // Процедура ЗаблокироватьИБ(Знач ПроверитьОтсутствиеДругихСеансов = Истина) Экспорт @@ -4442,8 +4429,8 @@ // Устанавливает разделение сеанса. // // Параметры: -// Использование - Булево - Использование разделителя ОбластьДанных в сеансе -// ОбластьДанных - Число - Значение разделителя ОбластьДанных +// Использование - Булево - Использование разделителя ОбластьДанных в сеансе +// ОбластьДанных - Число - Значение разделителя ОбластьДанных // Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт @@ -4455,8 +4442,7 @@ // В случае если значение не установлено выдается ошибка. // // Возвращаемое значение: -// Тип значения разделителя. -// Значение разделителя текущей области данных. +// Тип значения разделителя - значение разделителя текущей области данных. // Функция ЗначениеРазделителяСеанса() Экспорт @@ -4473,7 +4459,7 @@ // Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. // // Возвращаемое значение: -// Булево - Истина разделение используется, иначе нет. +// Булево - Истина, если разделение используется. // Функция ИспользованиеРазделителяСеанса() Экспорт @@ -4483,11 +4469,10 @@ КонецФункции -// Процедура инициализации разделенной информационной базы +// Процедура инициализации разделенной информационной базы. // // Параметры: -// ВключитьРазделение - Булево - признак включения разделения в -// информационной базе +// ВключитьРазделение - Булево - признак включения разделения в информационной базе. // Процедура УстановитьПараметрыРазделенияИнформационнойБазы(Знач ВключитьРазделение = Ложь) Экспорт @@ -4553,8 +4538,7 @@ // // // Возвращаемое значение: -// ФиксированныйМассив - Массив строк: -// - Каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". +// ФиксированныйМассив - массив строк, каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". // // Пример использования: // ПараметрыПодключения = Новый Структура; @@ -4601,12 +4585,11 @@ // Возвращает массив номеров версий, поддерживаемых интерфейсом системы, подключенной через внешнее соединение. // // Параметры: -// ВнешнееСоединение - объект COM-соединение, которое используется для работы с корреспондентом. -// ИмяИнтерфейса - Строка. +// ВнешнееСоединение - объект COM-соединение, которое используется для работы с корреспондентом. +// ИмяИнтерфейса - Строка. // // Возвращаемое значение: -// ФиксированныйМассив - Массив строк: -// Каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". +// ФиксированныйМассив - массив строк, каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". // // Пример использования: // Параметры = ... @@ -4721,7 +4704,7 @@ Функция ОбщийМодуль(Имя) Экспорт Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда - Модуль = Вычислить(Имя); + Модуль = РаботаВБезопасномРежиме.ВычислитьВБезопасномРежиме(Имя); ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда Возврат СерверныйМодульМенеджера(Имя); Иначе @@ -4737,8 +4720,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Получение обработчиков серверных событий. @@ -4747,10 +4731,10 @@ // // Возвращаемое значение: // Структура - -// ИмяСобытия - Строка, представление события. +// * ИмяСобытия - Строка - представление события. // Пример: "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления". // -// Обязательное - Булево, если Истина, то для данного события обязательно объявление обработчиков. +// * Обязательное - Булево, если Истина, то для данного события обязательно объявление обработчиков. // Функция НовоеСобытие() Экспорт @@ -4765,73 +4749,39 @@ // "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления". // // Возвращаемое значение: -// ФиксированныйМассив со значениями типа -// ФиксированнаяСтруктура со свойствами: -// Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. -// Модуль - ОбщийМодуль - серверный общий модуль. +// ФиксированныйМассив - со значениями типа ФиксированнаяСтруктура со свойствами: +// * Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. +// * Модуль - ОбщийМодуль - серверный общий модуль. // Функция ОбработчикиСобытия(Событие) Экспорт - Массив = Новый Массив; - - Обработчики = СтандартныеПодсистемыПовтИсп.ОбработчикиСерверногоСобытия(Событие, Ложь); - Для каждого Обработчик Из Обработчики Цикл - - Модуль = ОбщийМодуль(Обработчик.Модуль); - - Элемент = Новый Структура; - Элемент.Вставить("Модуль", Модуль); - Элемент.Вставить("Версия", Обработчик.Версия); - Элемент.Вставить("Подсистема", Обработчик.Подсистема); - - Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Массив); + Возврат СтандартныеПодсистемыПовтИсп.ОбработчикиСерверногоСобытия(Событие, Ложь); КонецФункции // Возвращает обработчики указанного серверного служебного события. // // Параметры: -// Событие - Строка, например, +// Событие - Строка - например, // "СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов". // // Возвращаемое значение: -// ФиксированныйМассив со значениями типа -// ФиксированнаяСтруктура со свойствами: -// Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. -// Модуль - ОбщийМодуль - серверный общий модуль. +// ФиксированныйМассив со значениями типа ФиксированнаяСтруктура со свойствами: +// * Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. +// * Модуль - ОбщийМодуль - серверный общий модуль. // Функция ОбработчикиСлужебногоСобытия(Событие) Экспорт - Массив = Новый Массив; - - Обработчики = СтандартныеПодсистемыПовтИсп.ОбработчикиСерверногоСобытия(Событие, Истина); - Для каждого Обработчик Из Обработчики Цикл - - Модуль = ОбщийМодуль(Обработчик.Модуль); - - Элемент = Новый Структура; - Элемент.Вставить("Модуль", Модуль); - Элемент.Вставить("ИмяМодуля", Обработчик.Модуль); - Элемент.Вставить("Версия", Обработчик.Версия); - Элемент.Вставить("Подсистема", Обработчик.Подсистема); - - Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Массив); + Возврат СтандартныеПодсистемыПовтИсп.ОбработчикиСерверногоСобытия(Событие, Истина); КонецФункции -// Обновляет данные в кэше версий +// Обновляет данные в кэше версий. // // Параметры: -// Идентификатор - Строка - идентификатор записи кэша -// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - -// тип обновляемых данных -// ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш +// Идентификатор - Строка - идентификатор записи кэша. +// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - тип обновляемых данных. +// ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш. // Процедура ОбновитьДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения) Экспорт @@ -4929,9 +4879,8 @@ // Подготавливает данные для кэша программных интерфейсов. // // Параметры: -// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - -// тип обновляемых данных -// ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш +// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - тип обновляемых данных. +// ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш. // Функция ПодготовитьДанныеКэшаВерсий(Знач ТипДанных, Знач ПараметрыПолучения) Экспорт @@ -4949,11 +4898,10 @@ КонецФункции -// Возвращает факт устаревания записи кэша версий +// Возвращает факт устаревания записи кэша версий. // // Параметры: -// Запись - РегистрСведенийМенеджерЗаписи.КэшПрограммныхИнтерфейсов - запись -// факт устаревания которой требуется проверить +// Запись - РегистрСведенийМенеджерЗаписи.КэшПрограммныхИнтерфейсов - запись, факт устаревания которой требуется проверить. // // Возвращаемое значение: // Булево - признак устаревания записи @@ -4968,11 +4916,11 @@ КонецФункции -// Формирует идентификатор записи кэша версий из адреса сервера и имени ресурса +// Формирует идентификатор записи кэша версий из адреса сервера и имени ресурса. // // Параметры: // Адрес - Строка - адрес сервера -// Имя - Имя - имя ресурса +// Имя - Строка - имя ресурса // // Возвращаемое значение: // Строка - идентификатор записи кэша версий @@ -4985,17 +4933,20 @@ // Функция возвращает объект WSОпределения созданный с переданными параметрами. // -// Параметры: -// АдресWSDL - Строка - месторасположение wsdl -// ИмяПользователя - Строка - имя пользователя для входа на сервер -// Пароль - Строка - пароль пользователя -// Таймаут - Число - таймаут на получение wsdl -// // Примечание: при получении определения используется кэш, обновление которого осуществляется // при смене версии конфигурации. Если для целей отладки требуется обновить // значения в кэше, раньше этого времени, следует удалить из регистра сведений // КэшПрограммныхИнтерфейсов соответствующие записи. // +// Параметры: +// АдресWSDL - Строка - месторасположение wsdl +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// Таймаут - Число - таймаут на получение wsdl +// +// Возвращаемое значение: +// WSОпределения +// Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль, Знач Таймаут = 10) Экспорт Если Не ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда @@ -5033,13 +4984,13 @@ // Функция возвращает объект WSПрокси созданный с переданными параметрами. // // Параметры: -// АдресWSDL - Строка - месторасположение wsdl +// АдресWSDL - Строка - месторасположение wsdl // URIПространстваИмен - Строка - URI пространства имен web-сервиса -// ИмяСервиса - Строка - имя сервиса +// ИмяСервиса - Строка - имя сервиса // ИмяТочкиПодключения - Строка - если не задано, образуется как <ИмяСервиса>Soap -// ИмяПользователя - Строка - имя пользователя для входа на сервер -// Пароль - Строка - пароль пользователя -// Таймаут - Число - таймаут на операции выполняемые через полученное прокси +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// Таймаут - Число - таймаут на операции выполняемые через полученное прокси // // Возвращаемое значение: // WSПрокси @@ -5056,7 +5007,7 @@ ИнтернетПрокси = Неопределено; Если ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернетаКлиентСервер") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщийМодуль("ПолучениеФайловИзИнтернета"); + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(АдресWSDL); КонецЕсли; @@ -5103,6 +5054,62 @@ КонецФункции +// Устарела. Следует использовать РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(). +// +Процедура ВыполнитьБезопасно(ИмяЭкспортнойПроцедуры, Параметры = Неопределено, ОбластьДанных = Неопределено) Экспорт + + ВыполненаУстановкаРазделенияСеанса = Ложь; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ЗначениеРазделителяСеанса(); + Иначе + Если ОбластьДанных <> ЗначениеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ОбластьДанных <> Неопределено + И (НЕ ИспользованиеРазделителяСеанса() ИЛИ ОбластьДанных <> ЗначениеРазделителяСеанса()) Тогда + УстановитьРазделениеСеанса(Истина, ОбластьДанных); + ВыполненаУстановкаРазделенияСеанса = Истина; + КонецЕсли; + КонецЕсли; + + Попытка + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, Параметры); + + Если ВыполненаУстановкаРазделенияСеанса Тогда + УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + Исключение + + Если ВыполненаУстановкаРазделенияСеанса Тогда + УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Устарела. Следует использовать РаботаВБезопасномРежиме.ПроверитьИмяМетодаКонфигурации(). +// +Функция ПроверитьИмяЭкспортнойПроцедуры(Знач ИмяЭкспортнойПроцедуры, ТекстСообщения) Экспорт + + Попытка + РаботаВБезопасномРежиме.ПроверитьИмяМетодаКонфигурации(ИмяЭкспортнойПроцедуры); + Возврат Истина; + Исключение + ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -5390,7 +5397,7 @@ |либо для него не поддерживается получение модуля менеджера.'"), Имя); КонецЕсли; - Модуль = Вычислить(Имя); + Модуль = РаботаВБезопасномРежиме.ВычислитьВБезопасномРежиме(Имя); Возврат Модуль; КонецФункции @@ -5530,7 +5537,6 @@ ТипДанных = ТипЗнч(МестоИспользования.Данные); Если ТипВсеСсылки.СодержитТип(ТипДанных) Тогда МестоИспользования.КлючЗамены = "Объект"; - МестоИспользования.ВерсияДанных = МестоИспользования.Данные.ВерсияДанных; МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; ИначеЕсли ТипКлючЗаписей.СодержитТип(ТипДанных) Тогда @@ -5558,6 +5564,8 @@ Данные = МестоИспользования.Данные; Мета = МестоИспользования.Метаданные; + ПредставлениеДанных = Строка(Данные); + // Будем производить сразу все замены для этих данных Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "Константа"); ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); @@ -5575,7 +5583,7 @@ Исключение // Добавляем запись в результат о неудачной попытке блокировке Ошибка = НСтр("ru = 'Не удалось заблокировать константу %1'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); + Ошибка = СтрЗаменить(Ошибка, "%1", ПредставлениеДанных); СостояниеОперации = "ОшибкаБлокировки"; КонецПопытки; @@ -5586,25 +5594,15 @@ Менеджер = Константы[Мета.Имя].СоздатьМенеджерЗначения(); Менеджер.Прочитать(); - ЗаменаНеПроизведена = Истина; + ЗаменаПроизведена = Истина; Для Каждого Строка Из ОбрабатываемыеСтроки Цикл Если Менеджер.Значение = Строка.Ссылка Тогда Менеджер.Значение = Строка.ЦелеваяСсылка; - ЗаменаНеПроизведена = Ложь; - Прервать; + ЗаменаПроизведена = Истина; КонецЕсли; КонецЦикла; - Если ЗаменаНеПроизведена Тогда - // Добавляем запись в результат о том, что объект был изменен - Ошибка = НСтр("ru = 'Объект %1 был изменен другим пользователем'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); - Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ДанныеИзменены", Данные, Ошибка); - КонецЦикла; - - СостояниеОперации = "ДанныеИзменены"; - Иначе + Если ЗаменаПроизведена Тогда // Пытаемся сохранить Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Ложь); @@ -5625,11 +5623,13 @@ КонецЕсли; Ошибка = НСтр("ru = 'Не удалось записать %1 по причине: %2'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); + Ошибка = СтрЗаменить(Ошибка, "%1", ПредставлениеДанных); Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ОшибкаЗаписи", Данные, Ошибка); + ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка) + ); КонецЦикла; СостояниеОперации = "ОшибкаЗаписи"; @@ -5663,6 +5663,8 @@ Данные = МестоИспользования.Данные; Мета = МестоИспользования.Метаданные; + ПредставлениеДанных = Строка(Данные); + // Будем производить сразу все замены для этих данных Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "Объект"); ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); @@ -5721,7 +5723,9 @@ |%1'"); Ошибка = СтрЗаменить(Ошибка, "%1", ОписаниеСпискаБлокировки(Блокировка)); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ОшибкаБлокировки", Данные, Ошибка); + ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаБлокировки", Данные, ПредставлениеДанных, Ошибка) + ); КонецЦикла; СостояниеОперации = "ОшибкаБлокировки"; @@ -5729,27 +5733,6 @@ КонецЕсли; // Необходимость блокировки - Если СостояниеОперации = "" Тогда - // Если объект был изменен, то считаем, что замена выполнена успешна - - Попытка - ТекущаяВерсия = Данные.ВерсияДанных; - Исключение - ТекущаяВерсия = МестоИспользования.ВерсияДанных; - КонецПопытки; - - Если ТекущаяВерсия <> МестоИспользования.ВерсияДанных Тогда - // Добавляем запись в результат о том, что объект был изменен - Ошибка = НСтр("ru = 'Объект %1 был изменен другим пользователем'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); - Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ДанныеИзменены", Данные, Ошибка); - КонецЦикла; - - СостояниеОперации = "ДанныеИзменены"; - КонецЕсли; - КонецЕсли; - Если СостояниеОперации = "" Тогда ОбъектыЗаписи = ИзмененныеОбъектыПриЗаменеВОбъекте(Данные, ОбрабатываемыеСтроки, ОписаниеДвижений, ОписаниеПоследовательностей); @@ -5759,9 +5742,26 @@ КонецЕсли; Попытка - Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл - ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); - КонецЦикла; + Если ПараметрыЗаписи.НеПроверять Тогда + // Запись без контроля бизнес-логики + Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл + ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); + КонецЦикла; + + Иначе + // Первая запись без контроля- чтобы устранить циклические ссылки + ПараметрыЗаписи.НеПроверять = Истина; + Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл + ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); + КонецЦикла; + + // Вторая запись c контролем + ПараметрыЗаписи.НеПроверять = Ложь; + Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл + ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); + КонецЦикла; + КонецЕсли; + Исключение // Сохраняем причину Информация = ИнформацияОбОшибке(); @@ -5775,11 +5775,13 @@ // Добавляем запись в результат о ошибке записи Ошибка = НСтр("ru = 'Не удалось записать %1 по причине: %2'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); + Ошибка = СтрЗаменить(Ошибка, "%1", ПредставлениеДанных); Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ОшибкаЗаписи", Данные, Ошибка); + ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка) + ); КонецЦикла; СостояниеОперации = "ОшибкаЗаписи"; @@ -5813,6 +5815,8 @@ Данные = МестоИспользования.Данные; Мета = МестоИспользования.Метаданные; + ПредставлениеДанных = Строка(Данные); + // Будем производить сразу все замены для этих данных Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "КлючЗаписи"); ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); @@ -5851,8 +5855,8 @@ Блокировка.Заблокировать(); Исключение // Добавляем запись в результат о неудачной попытке блокировке - Ошибка = НСтр("ru = 'Не удалось заблокировать константу %1'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); + Ошибка = НСтр("ru = 'Не удалось заблокировать набор %1'"); + Ошибка = СтрЗаменить(Ошибка, "%1", ПредставлениеДанных); СостояниеОперации = "ОшибкаБлокировки"; КонецПопытки; @@ -5884,11 +5888,13 @@ // Добавляем запись в результат о ошибке записи Ошибка = НСтр("ru = 'Не удалось записать %1 по причине: %2'"); - Ошибка = СтрЗаменить(Ошибка, "%1", Строка(Данные)); + Ошибка = СтрЗаменить(Ошибка, "%1", ПредставлениеДанных); Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, "ОшибкаЗаписи", Данные, Ошибка); + ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка) + ); КонецЦикла; СостояниеОперации = "ОшибкаЗаписи"; @@ -5951,7 +5957,6 @@ ПарыЗамен.Вставить(МестоИспользования.Ссылка, МестоИспользования.ЦелеваяСсылка); КонецЦикла; - // Реквизиты Для Каждого КлючЗначение Из Описание.Реквизиты Цикл Имя = КлючЗначение.Ключ; @@ -6011,39 +6016,49 @@ КонецФункции Процедура УдалитьСсылкиПометкой(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) + + УдалитьСсылкиНемонопольно(РезультатУдаления, СписокСсылок, ПараметрыЗаписи, ВнутренняяТранзакция, Ложь); + +КонецПроцедуры + +Процедура УдалитьСсылкиНепосредственно(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) + + УдалитьСсылкиНемонопольно(РезультатУдаления, СписокСсылок, ПараметрыЗаписи, ВнутренняяТранзакция, Истина); + +КонецПроцедуры + +Процедура УдалитьСсылкиНемонопольно(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция, Знач УдалятьНепосредственно) + УстановитьПривилегированныйРежим(Истина); Удаляемые = Новый Массив; Если ВнутренняяТранзакция Тогда НачатьТранзакцию(); - - Для Каждого Ссылка Из СписокСсылок Цикл - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить(Ссылка.Метаданные().ПолноеИмя()).УстановитьЗначение("Ссылка", Ссылка); - - Попытка - Блокировка.Заблокировать(); - Удаляемые.Добавить(Ссылка); - Исключение - ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, "ОшибкаБлокировки", Ссылка, - НСтр("ru = 'Ошибка удаления ссылки, она используется другим пользователем'")); - Продолжить; - КонецПопытки - - КонецЦикла; - - Иначе - Для Каждого Ссылка Из СписокСсылок Цикл - Удаляемые.Добавить(Ссылка); - КонецЦикла; - КонецЕсли; - + + Для Каждого Ссылка Из СписокСсылок Цикл + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить(Ссылка.Метаданные().ПолноеИмя()).УстановитьЗначение("Ссылка", Ссылка); + + ПредставлениеСсылки = Строка(Ссылка); + + Попытка + Блокировка.Заблокировать(); + Удаляемые.Добавить(Ссылка); + Исключение + ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, + ОписаниеОшибкиЗамены("ОшибкаБлокировки", Ссылка, ПредставлениеСсылки, НСтр("ru = 'Ошибка блокирования ссылки для удаления'")) + ); + КонецПопытки + КонецЦикла; + ТаблицаПоиска = МестаИспользования(Удаляемые); Фильтр = Новый Структура("Ссылка"); Для Каждого Ссылка Из Удаляемые Цикл + ПредставлениеСсылки = Строка(Ссылка); + Фильтр.Ссылка = Ссылка; МестаИспользования = ТаблицаПоиска.НайтиСтроки(Фильтр); @@ -6055,27 +6070,39 @@ Индекс = Индекс - 1; КонецЦикла; - Если МестаИспользования.Количество()=0 Тогда - Объект = Ссылка.ПолучитьОбъект(); - - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Попытка - УстановитьПометкуУдаления(Объект, ПараметрыЗаписи); - Исключение - ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, "ОшибкаЗаписи", Ссылка, - НСтр("ru = 'Ошибка пометки удаления'")); - КонецПопытки; - - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - Иначе + Если МестаИспользования.Количество() > 0 Тогда + // Был изменен, нельзя удалять ДобавитьРезультатыЗаменыИзмененныхОбъектов(РезультатУдаления, МестаИспользования); + Продолжить; КонецЕсли; + Объект = Ссылка.ПолучитьОбъект(); + Если Объект = Неопределено Тогда + // Уже удален + Продолжить; + КонецЕсли; + + Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Попытка + Если УдалятьНепосредственно Тогда + ОбработатьОбъектСПерехватомСообщений(Объект, "НепосредственноеУдаление", Неопределено, ПараметрыЗаписи); + Иначе + ОбработатьОбъектСПерехватомСообщений(Объект, "ПометкаУдаления", Неопределено, ПараметрыЗаписи); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, + ОписаниеОшибкиЗамены("ОшибкаУдаления", Ссылка, ПредставлениеСсылки, + НСтр("ru = 'Ошибка удаления'") + Символы.ПС + СокрЛП( КраткоеПредставлениеОшибки(ИнформацияОбОшибке))) + ); + КонецПопытки; + + Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; КонецЦикла; Если ВнутренняяТранзакция Тогда @@ -6083,41 +6110,6 @@ КонецЕсли; КонецПроцедуры -Процедура УдалитьСсылкиНепосредственно(РезультатУдаления, СписокСсылок, ПараметрыЗаписи, ВнутренняяТранзакция) - МестаИспользования = Неопределено; - - СостояниеТранзакции = ""; - Если ВнутренняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; - - Если ПараметрыЗаписи.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - Попытка - УдалитьОбъекты(СписокСсылок, Истина, МестаИспользования); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(РезультатУдаления, МестаИспользования); - Исключение - СостояниеТранзакции = "ОшибкаУдаления"; - - ДобавитьРезультатЗамены(РезультатУдаления, Неопределено, СостояниеТранзакции, Неопределено, - НСтр("ru = 'Ошибка безвозвратного удаления объектов'")); - КонецПопытки; - - Если ПараметрыЗаписи.ПривилегированнаяЗапись Тогда - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - Если ВнутренняяТранзакция Тогда - Если СостояниеТранзакции = "" Тогда - ЗафиксироватьТранзакцию(); - Иначе - ОтменитьТранзакцию(); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - Процедура ДобавитьРезультатыЗаменыИзмененныхОбъектов(ИтоговаяТаблица, ТаблицаПовторногоПоиска) ТипКлючЗаписи = ОписаниеТипаКлючиЗаписей(); @@ -6133,11 +6125,15 @@ Данные = Строка.Данные; Ссылка = Строка.Ссылка; + ПредставлениеДанных = Строка(Данные); + Фильтр.ОбъектОшибки = Данные; Фильтр.Ссылка = Ссылка; Если ИтоговаяТаблица.НайтиСтроки(Фильтр).Количество() = 0 Тогда - ДобавитьРезультатЗамены(ИтоговаяТаблица, Ссылка, "ДанныеИзменены", Данные, - НСтр("ru = 'Данные были добавлены или изменены другим пользователем'")); + ДобавитьРезультатЗамены(ИтоговаяТаблица, Ссылка, + ОписаниеОшибкиЗамены("ДанныеИзменены", Данные, ПредставлениеДанных, + НСтр("ru = 'Данные были добавлены или изменены другим пользователем'")) + ); КонецЕсли; КонецЦикла; @@ -6191,7 +6187,6 @@ ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); ИначеЕсли МетаПериод = Периодичность.Секунда Тогда - ДанныеИзмерения = Новый Структура; ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); ДанныеИзмерения.Представление = НСтр("ru='Период'"); ДанныеИзмерения.Формат = "Л=ru_RU; ДЛФ=DT; ДП='Дата не задана'"; @@ -6269,7 +6264,6 @@ КонецФункции Функция ОписаниеПоследовательностей(Знач Мета) - // можно закэшировать по Мета ОписаниеПоследовательностей = Новый Массив; Если Не Метаданные.Документы.Содержит(Мета) Тогда @@ -6285,16 +6279,16 @@ // Список полей и измерений Описание = СпискиПолейПоТипу(ИмяТаблицы, Последовательность.Измерения, "Регистратор"); - Если Описание.СписокПолей.Количество() = 0 Тогда - // Незачем обрабатывать - Продолжить; + Если Описание.СписокПолей.Количество() > 0 Тогда + + Описание.Вставить("НаборЗаписей", Последовательности[Последовательность.Имя].СоздатьНаборЗаписей()); + Описание.Вставить("ПространствоБлокировки", ИмяТаблицы + ".Записи"); + Описание.Вставить("Измерения", Новый Структура); + + ОписаниеПоследовательностей.Добавить(Описание); КонецЕсли; - ОписаниеПоследовательностей.Вставить("НаборЗаписей", Последовательности[Последовательность.Имя].СоздатьНаборЗаписей()); - ОписаниеПоследовательностей.Вставить("ПространствоБлокировки", ИмяТаблицы + ".Записи"); - ОписаниеПоследовательностей.Вставить("Измерения", Новый Структура); - - КонецЦикла; // Последовательность + КонецЦикла; Возврат ОписаниеПоследовательностей; КонецФункции @@ -6473,16 +6467,29 @@ Возврат Описание; КонецФункции -Процедура ДобавитьРезультатЗамены(Таблица, Знач Ссылка, Знач ТипОшибки = "", Знач ОбъектОшибки = Неопределено, Знач ТекстОшибки = "") +Процедура ДобавитьРезультатЗамены(Таблица, Знач Ссылка, Знач ОписаниеОшибки) Строка = Таблица.Добавить(); - Строка.Ссылка = Ссылка; - Строка.ТипОшибки = ТипОшибки; - Строка.ОбъектОшибки = ОбъектОшибки; - Строка.ТекстОшибки = ТекстОшибки; - Строка.ПредставлениеОбъектаОшибки = Строка(ОбъектОшибки); + Строка.Ссылка = Ссылка; + + Строка.ПредставлениеОбъектаОшибки = ОписаниеОшибки.ПредставлениеОбъектаОшибки; + Строка.ОбъектОшибки = ОписаниеОшибки.ОбъектОшибки; + Строка.ТекстОшибки = ОписаниеОшибки.ТекстОшибки; + Строка.ОбъектОшибки = ОписаниеОшибки.ОбъектОшибки; + КонецПроцедуры +Функция ОписаниеОшибкиЗамены(Знач ТипОшибки, Знач ОбъектОшибки, Знач ПредставлениеОбъектаОшибки, Знач ТекстОшибки) + Результат = Новый Структура; + + Результат.Вставить("ТипОшибки", ТипОшибки); + Результат.Вставить("ОбъектОшибки", ОбъектОшибки); + Результат.Вставить("ПредставлениеОбъектаОшибки", ПредставлениеОбъектаОшибки); + Результат.Вставить("ТекстОшибки", ТекстОшибки); + + Возврат Результат; +КонецФункции + Процедура ЗаменитьВКоллекцииСтрок(Коллекция, Знач СписокПолей, Знач ПарыЗамен) РабочаяКоллекция = Коллекция.Выгрузить(); Модифицировано = Ложь; @@ -6505,76 +6512,80 @@ КонецЕсли; КонецПроцедуры -Функция ПолучитьТекущиеСообщенияПользователя() - Результат = Новый Массив; - - Сообщения = ПолучитьСообщенияПользователю(Истина); - Для Каждого Сообщение Из Сообщения Цикл - Результат.Добавить(Сообщение); - КонецЦикла; - - Возврат Результат; -КонецФункции - Процедура СообщитьОтложенныеСообщения(Знач Сообщения) + Для Каждого Сообщение Из Сообщения Цикл Сообщение.Сообщить(); КонецЦикла; + КонецПроцедуры -Процедура ЗаписатьОбъектСПерехватомСообщений(Знач Объект, Знач РежимЗаписи = Неопределено) +Процедура ОбработатьОбъектСПерехватомСообщений(Знач Объект, Знач Действие, Знач РежимЗаписи, Знач ПараметрыЗаписи) // Текущие сообщения до исключения запоминаем - ПредыдущиеСообщения = ПолучитьТекущиеСообщенияПользователя(); + ПредыдущиеСообщения = ПолучитьСообщенияПользователю(Истина); + СообщатьПовторно = ТекущийРежимЗапуска() <> Неопределено; Попытка - Если РежимЗаписи = Неопределено Тогда - Объект.Записать(); - Иначе - Объект.Записать(РежимЗаписи); + + Если Действие = "Запись" Тогда + УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); + Если РежимЗаписи = Неопределено Тогда + Объект.Записать(); + Иначе + Объект.Записать(РежимЗаписи); + КонецЕсли; + + ИначеЕсли Действие = "ПометкаУдаления" Тогда + УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); + Объект.УстановитьПометкуУдаления(Истина, Ложь); + + ИначеЕсли Действие = "НепосредственноеУдаление" Тогда + УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); + Объект.Удалить(); + КонецЕсли; Исключение Информация = ИнформацияОбОшибке(); - // Перехватываем все сообщенное при ошибке и преобразуем их в одно исключение + // Перехватываем все сообщенное при ошибке и добавляем их в одно исключение ТекстИсключения = ""; - Для Каждого Сообщение Из ПолучитьТекущиеСообщенияПользователя() Цикл + Для Каждого Сообщение Из ПолучитьСообщенияПользователю(Ложь) Цикл ТекстИсключения = ТекстИсключения + Символы.ПС + Сообщение.Текст; КонецЦикла; - СообщитьОтложенныеСообщения(ПредыдущиеСообщения); + // Сообщаем предыдущие + Если СообщатьПовторно Тогда + СообщитьОтложенныеСообщения(ПредыдущиеСообщения); + КонецЕсли; + // И прекращаем работы Если ПустаяСтрока(ТекстИсключения) Тогда ВызватьИсключение; КонецЕсли; - ВызватьИсключение СокрЛП(КраткоеПредставлениеОшибки(Информация) + Символы.ПС + ТекстИсключения); + ВызватьИсключение СокрЛП(КраткоеПредставлениеОшибки(Информация) + Символы.ПС + СокрЛП(ТекстИсключения)); КонецПопытки; - СообщитьОтложенныеСообщения(ПредыдущиеСообщения); -КонецПроцедуры + Если СообщатьПовторно Тогда + СообщитьОтложенныеСообщения(ПредыдущиеСообщения); + КонецЕсли; +КонецПроцедуры + Процедура ЗаписатьОбъект(Знач Объект, Знач ПараметрыЗаписи) - УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); + МетаданныеОбъекта = Объект.Метаданные(); - ЭтоДокумент = Ложь; - ТипОбъекта = ТипЗнч(Объект); - - Для Каждого Тип Из Документы.ТипВсеСсылки().Типы() Цикл - ИмяТипа = XMLТип(Тип).ИмяТипа; - ТипДокументОбъект = Тип("ДокументОбъект." + Сред(ИмяТипа, 1 + Найти(ИмяТипа, ".")) ); - Если ТипОбъекта = ТипДокументОбъект Тогда - // Это документ - ЗаписатьОбъектСПерехватомСообщений(Объект, РежимЗаписиДокумента.Запись); - Возврат; - КонецЕсли; - КонецЦикла; + Если ЭтоДокумент(МетаданныеОбъекта) Тогда + ОбработатьОбъектСПерехватомСообщений(Объект, "Запись", РежимЗаписиДокумента.Запись, ПараметрыЗаписи); + Возврат; + КонецЕсли; // Проверка на возможные циклические ссылки ТестРеквизитов= Новый Структура("Иерархический, ВидыСубконто, Владельцы", Ложь, Неопределено, Новый Массив); - ЗаполнитьЗначенияСвойств(ТестРеквизитов, Объект.Метаданные()); + ЗаполнитьЗначенияСвойств(ТестРеквизитов, МетаданныеОбъекта); // По родителю Если ТестРеквизитов.Иерархический Или ТестРеквизитов.ВидыСубконто <> Неопределено Тогда @@ -6600,31 +6611,20 @@ КонецЦикла; // Просто запись - ЗаписатьОбъектСПерехватомСообщений(Объект); -КонецПроцедуры - -Процедура УстановитьПометкуУдаления(Объект, Знач ПараметрыЗаписи) - - УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); - - Объект.УстановитьПометкуУдаления(Истина, Ложь); - + ОбработатьОбъектСПерехватомСообщений(Объект, "Запись", Неопределено, ПараметрыЗаписи); КонецПроцедуры Процедура УстановитьПараметрыЗаписи(Объект, Знач ПараметрыЗаписи) - Если ПараметрыЗаписи.НеПроверять Тогда - - ТестРеквизита = Новый Структура("ОбменДанными"); - ЗаполнитьЗначенияСвойств(ТестРеквизита, Объект); - Если ТипЗнч(ТестРеквизита.ОбменДанными) = Тип("ПараметрыОбменаДанными") Тогда - Объект.ОбменДанными.Загрузка = Истина; - Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов", Истина); + ТестРеквизита = Новый Структура("ОбменДанными"); + ЗаполнитьЗначенияСвойств(ТестРеквизита, Объект); + Если ТипЗнч(ТестРеквизита.ОбменДанными) = Тип("ПараметрыОбменаДанными") Тогда + Объект.ОбменДанными.Загрузка = ПараметрыЗаписи.НеПроверять; + Объект.ОбменДанными.Получатели.АвтоЗаполнение = Не ПараметрыЗаписи.НеПроверять; КонецЕсли; + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов", ПараметрыЗаписи.НеПроверять); + КонецПроцедуры Функция СобытиеЖурналаРегистрацииЗаменыСсылок() @@ -6707,7 +6707,9 @@ НСтр("ru = 'Не удалось заблокировать все места использования %1'"), Ссылка ); - ДобавитьРезультатЗамены(РезультатЗамены, Ссылка, "ОшибкаБлокировки", Неопределено, Ошибка); + ДобавитьРезультатЗамены(РезультатЗамены, Ссылка, + ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка) + ); СостояниеОперации = "ОшибкаБлокировки"; КонецПопытки; @@ -6910,3 +6912,20 @@ ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры +// См. Обработка.ПоискИУдалениеДублей +// +Функция ДоступныеИменаМетаРеквизитовОтбора(Знач МетаКоллекция) + Результат = ""; + ТипХранилища = Тип("ХранилищеЗначения"); + + Для Каждого МетаРеквизит Из МетаКоллекция Цикл + ЭтоХранилище = МетаРеквизит.Тип.СодержитТип(ТипХранилища); + Если Не ЭтоХранилище Тогда + Результат = Результат + "," + МетаРеквизит.Имя; + КонецЕсли + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 5c7c91c89..4f40556cb 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -2,8 +2,7 @@ // Подсистема "Базовая функциональность". //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе @@ -260,8 +259,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Функции для работы с цветами стиля в клиентском коде @@ -293,3 +293,5 @@ Возврат ШрифтыСтиля[ИмяШрифтаСтиля]; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl index 2b6f7b696..997baf4f9 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Задает вопрос о продолжении действия, влекущего к потере изменений. // @@ -21,3 +20,5 @@ ОбщегоНазначенияКлиент.ПодтвердитьЗакрытиеПроизвольнойФормы(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 9986471fa..8601597c1 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -9,8 +9,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Функции работы со списками в формах @@ -71,8 +70,19 @@ Возврат ТекущаяДата() + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПоправкаКВремениСеанса; КонецФункции +// Возвращает универсальную дату сеанса, получаемую из текущей даты сеанса. +// +// Функция возвращает время, близкое к результату функции УниверсальноеВремя() в серверном контексте. +// Погрешность обусловлена временем выполнения серверного вызова. +// Предназначена для использования вместо функции УниверсальноеВремя(). +// +Функция ДатаУниверсальная() Экспорт + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ДатаСеанса = ТекущаяДата() + ПараметрыРаботыКлиента.ПоправкаКВремениСеанса; + Возврат ДатаСеанса + ПараметрыРаботыКлиента.ПоправкаКУниверсальномуВремени; +КонецФункции + // Предлагает пользователю установить расширение работы с файлами в веб-клиенте. -// При этом инициализирует параметр сеанса ПредлагатьУстановкуРасширенияРаботыСФайлами. // // Предназначена для использования в начале участков кода, в которых ведется работа с файлами. // Например: @@ -81,8 +91,8 @@ // ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); // ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); // -// Процедура ПечатьДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт -// Если ПодключитьРасширениеРаботыСФайлами() Тогда +// Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт +// Если РасширениеПодключено Тогда // // код печати документа, рассчитывающий на то, что расширение подключено // //... // Иначе @@ -93,13 +103,14 @@ // Параметры: // ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, // которая будет вызвана после закрытия формы со следующими параметрами: -// Результат - Булево. Истина - подключено. -// ДополнительныеПараметры - Произвольный. +// РасширениеПодключено - Булево - Истина, если расширение было подключено. +// ДополнительныеПараметры - Произвольный - параметры, заданные в ОписаниеОповещенияОЗакрытии. // ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. -// ВозможноПродолжениеБезУстановки - Булево. Если Истина, будет показана кнопка ПродолжитьБезУстановки, -// если Ложь, будет показана кнопка Отмена. +// ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, +// если Ложь, будет показана кнопка Отмена. // -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", ВозможноПродолжениеБезУстановки = Истина) Экспорт +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", + ВозможноПродолжениеБезУстановки = Истина) Экспорт Оповещение = Новый ОписаниеОповещения("ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, ОписаниеОповещенияОЗакрытии); #Если Не ВебКлиент Тогда @@ -227,10 +238,6 @@ ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецЕсли; -#Иначе - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Нстр("ru = 'Операция недоступна. Необходимо запустить программу в тонком клиенте на компьютере с ОС Windows.'")); - #КонецЕсли КонецПроцедуры @@ -510,7 +517,7 @@ КонецЕсли; Если ПервоеОбращениеЗаСеанс Тогда - ПараметрыФормы = Новый Структура("Сообщение", ТекстПредложения); + ПараметрыФормы = Новый Структура("Сообщение,ВозможноПродолжениеБезУстановки", ТекстПредложения, Истина); КодВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", ПараметрыФормы); Если КодВозврата = Неопределено Тогда КодВозврата = Истина; @@ -598,6 +605,7 @@ КонецПроцедуры +// Устарела. // Позволяет выбрать время из выпадающего списка. // // Параметры: @@ -706,8 +714,9 @@ // Конец ИспользованиеМодальности -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Получение обработчиков клиентских событий. @@ -726,22 +735,7 @@ // Функция ОбработчикиСобытия(Событие) Экспорт - Массив = Новый Массив; - - Обработчики = СтандартныеПодсистемыКлиентПовтИсп.ОбработчикиКлиентскогоСобытия(Событие, Ложь); - Для каждого Обработчик Из Обработчики Цикл - - Модуль = ОбщийМодуль(Обработчик.Модуль); - - Элемент = Новый Структура; - Элемент.Вставить("Модуль", Модуль); - Элемент.Вставить("Версия", Обработчик.Версия); - Элемент.Вставить("Подсистема", Обработчик.Подсистема); - - Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Массив); + Возврат СтандартныеПодсистемыКлиентПовтИсп.ОбработчикиКлиентскогоСобытия(Событие, Ложь); КонецФункции @@ -759,28 +753,13 @@ // Функция ОбработчикиСлужебногоСобытия(Событие) Экспорт - Массив = Новый Массив; - - Обработчики = СтандартныеПодсистемыКлиентПовтИсп.ОбработчикиКлиентскогоСобытия(Событие, Истина); - Для каждого Обработчик Из Обработчики Цикл - - Модуль = ОбщийМодуль(Обработчик.Модуль); - - Элемент = Новый Структура; - Элемент.Вставить("Модуль", Модуль); - Элемент.Вставить("ИмяМодуля", Обработчик.Модуль); - Элемент.Вставить("Версия", Обработчик.Версия); - Элемент.Вставить("Подсистема", Обработчик.Подсистема); - - Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Массив); + Возврат СтандартныеПодсистемыКлиентПовтИсп.ОбработчикиКлиентскогоСобытия(Событие, Истина); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение(Действие, ОповещениеОЗакрытии) Экспорт @@ -912,3 +891,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index 77df5fd97..358b978c5 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -4,11 +4,9 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Выполняется перед интерактивном началом работы пользователя с областью данных или в локальном режиме. +// Выполняется перед интерактивным началом работы пользователя с областью данных или в локальном режиме. // // Соответствует обработчику ПередНачаломРаботыСистемы. // @@ -31,15 +29,17 @@ // // Пример открытия окна, блокирующего вход в программу: // -// Если ОткрытьОкноПриЗапуске Тогда -// Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения("ОткрытьОкно", ЭтотОбъект); -// КонецЕсли; +// Если ОткрытьОкноПриЗапуске Тогда +// Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения("ОткрытьОкно", ЭтотОбъект); +// КонецЕсли; // // Процедура ОткрытьОкно(Параметры, ДополнительныеПараметры) Экспорт // // Показываем окно, по закрытию которого вызывается обработчик оповещения ОткрытьОкноЗавершение // Оповещение = Новый ОписаниеОповещения("ОткрытьОкноЗавершение", ЭтотОбъект, Параметры); -// ОткрытьФорму(... -// +// Форма = ОткрытьФорму(... ,,, ... Оповещение); +// Если Не Форма.Открыта() Тогда // Если ПриСозданииНаСервере Отказ установлен Истина. +// ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); +// КонецЕсли; // КонецПроцедуры // // Процедура ОткрытьОкноЗавершение(Результат, Параметры) Экспорт @@ -50,8 +50,6 @@ // Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт - - КонецПроцедуры // Выполняется при интерактивном начале работы пользователя с областью данных или в локальном режиме. @@ -87,11 +85,11 @@ // Параметры // ЗначениеПараметраЗапуска - Строка - первое значение параметра запуска, // до первого символа ";" -// ПараметрыЗапуска – Строка – параметр запуска, переданный в конфигурацию +// ПараметрыЗапуска - Строка - параметр запуска, переданный в конфигурацию // с помощью ключа командной строки /C. // // Возвращаемое значение: -// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. +// Булево - Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. // Функция ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Экспорт @@ -129,8 +127,6 @@ // Процедура ПередЗавершениемРаботыСистемы(Параметры) Экспорт - - КонецПроцедуры // Переопределяет заголовок приложения. @@ -143,3 +139,5 @@ КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index 72a210026..61e3b67ee 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает Истина, если это веб клиент в Mac OS. Функция ЭтоВебКлиентПодMacOS() Экспорт @@ -29,8 +28,9 @@ Возврат СистемнаяИнфо.ТипПлатформы; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Функция получает цвет стиля по имени элемента стиля // @@ -59,3 +59,5 @@ Возврат ОбщегоНазначенияВызовСервера.ШрифтСтиля(ИмяШрифтаСтиля); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 5614a9415..754762f9b 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -10,8 +10,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует и выводит сообщение, которое может быть связано с элементом // управления формы. @@ -70,7 +69,7 @@ ЭтоОбъект = Ложь; -#Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда +#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; @@ -275,6 +274,34 @@ КонецПроцедуры +// Дополняет коллекцию СтруктураПриемник значениями из коллекции СтруктураИсточник. +// +// Параметры: +// СтруктураПриемник - Структура - Коллекция, в которую будут добавляться новые значения. +// СтруктураИсточник - Структура - Коллекция, из которой будут считываться пары Ключ и Значение для заполнения. +// СЗаменой - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника. +// - Истина - Заменять значения приемника. +// - Ложь - Не заменять значения приемника (пропускать). +// - Неопределено - Значение по умолчанию. Бросать исключение. +// +Процедура ДополнитьСтруктуру(СтруктураПриемник, СтруктураИсточник, СЗаменой = Неопределено) Экспорт + + ИскатьКлюч = (СЗаменой = Ложь Или СЗаменой = Неопределено); + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + Если ИскатьКлюч И СтруктураПриемник.Свойство(КлючИЗначение.Ключ) Тогда + Если СЗаменой = Ложь Тогда + Продолжить; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пересечение структур источника и приемника по ключу ""%1"".'"), + КлючИЗначение.Ключ); + КонецЕсли + КонецЕсли; + СтруктураПриемник.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + +КонецПроцедуры + // Снимает один элемент условного оформления, если это список значений. // // Параметры: @@ -335,7 +362,7 @@ // // Параметры: // Массив - массив, из которого необходимо удалить значения; -// Тип – тип значений, которые подлежат удалению из массива. +// Тип - тип значений, которые подлежат удалению из массива. // Процедура УдалитьВсеВхожденияТипаИзМассива(Массив, Тип) Экспорт @@ -424,7 +451,7 @@ // МассивВычитания - массив элементов, который будет вычитаться. // // Возвращаемое значение: -// Массив – результат вычитания двух массивов. +// Массив - результат вычитания двух массивов. // Функция СократитьМассив(Массив, МассивВычитания) Экспорт @@ -535,7 +562,7 @@ // Создает копию значения типа Структура. // // Параметры: -// СтруктураИсточник – Структура – копируемая структура. +// СтруктураИсточник - Структура - копируемая структура. // // Возвращаемое значение: // Структура - копия исходной структуры. @@ -555,7 +582,7 @@ // Создает копию значения типа Соответствие. // // Параметры: -// СоответствиеИсточник – Соответствие - соответствие, копию которого необходимо получить. +// СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить. // // Возвращаемое значение: // Соответствие - копия исходного соответствия. @@ -575,7 +602,7 @@ // Создает копию значения типа Массив. // // Параметры: -// МассивИсточник – Массив - массив, копию которого необходимо получить. +// МассивИсточник - Массив - массив, копию которого необходимо получить. // // Возвращаемое значение: // Массив - копия исходного массива. @@ -595,7 +622,7 @@ // Создает копию значения типа СписокЗначений. // // Параметры: -// СписокИсточник – СписокЗначений - список значений, копию которого необходимо получить. +// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить. // // Возвращаемое значение: // СписокЗначений - копия исходного списка значений. @@ -656,9 +683,9 @@ // Процедура управляет состояние поля табличного документа // //Параметры: -// ПолеТабличногоДокумента – ПолеФормы – поле формы с видом ПолеТабличногоДокумента, +// ПолеТабличногоДокумента - ПолеФормы - поле формы с видом ПолеТабличногоДокумента, // для которого необходимо установить состояние. -// Состояние – Строка – задает вид состояния. +// Состояние - Строка - задает вид состояния. // Процедура УстановитьСостояниеПоляТабличногоДокумента(ПолеТабличногоДокумента, Состояние = "НеИспользовать") Экспорт @@ -693,7 +720,7 @@ // // Параметры: // Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС, -// где СС – номер сборки, который будет удален +// где СС - номер сборки, который будет удален // // Возвращаемое значение: // Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ @@ -717,11 +744,11 @@ // Сравнить две строки версий. // // Параметры -// СтрокаВерсии1 – Строка – номер версии в формате РР.{П|ПП}.ЗЗ.СС -// СтрокаВерсии2 – Строка – второй сравниваемый номер версии +// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС +// СтрокаВерсии2 - Строка - второй сравниваемый номер версии // // Возвращаемое значение: -// Число – больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. // Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт @@ -730,12 +757,12 @@ Версия1 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка1, "."); Если Версия1.Количество() <> 4 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии1); + НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1); КонецЕсли; Версия2 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка2, "."); Если Версия2.Количество() <> 4 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии2); + НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2); КонецЕсли; Результат = 0; @@ -848,56 +875,40 @@ КонецПроцедуры // Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. -// В случае, когда параметр "Платформа" не указан, разделитель выбирается, исходя из уже имеющихся -// разделителей в параметре "ПутьКаталога". // // Параметры: -// ПутьКаталога - Строка - путь к каталогу; -// Платформа - ТипПлатформы - тип платформы, в рамках которой осуществляется работа (влияет на выбор разделителя). +// ПутьКаталога - Строка - путь к каталогу. // // Возвращаемое значение: -// Строка - путь к каталогу с конечным символом-разделителем. +// Строка - путь к каталогу с конечным символом-разделителем. // // Примеры использования: // Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\" // Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\" -// Результат = ДобавитьКонечныйРазделительПути("ftp://Мой каталог"); // возвращает "ftp://Мой каталог/" -// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%", ТипПлатформы.Windows_x86_64); // возвращает "%APPDATA%\" +// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\" // -Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Платформа = Неопределено) Экспорт - +Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Удалить_Платформа = Неопределено) Экспорт Если ПустаяСтрока(ПутьКаталога) Тогда Возврат ПутьКаталога; КонецЕсли; - ДобавляемыйСимвол = "\"; - Если Платформа = Неопределено Тогда - Если Найти(ПутьКаталога, "/") > 0 Тогда - ДобавляемыйСимвол = "/"; - КонецЕсли; - Иначе - Если Платформа = ТипПлатформы.Linux_x86 Или Платформа = ТипПлатформы.Linux_x86_64 Тогда - ДобавляемыйСимвол = "/"; - КонецЕсли; - КонецЕсли; + ДобавляемыйСимвол = ПолучитьРазделительПути(); - Если Прав(ПутьКаталога, 1) <> ДобавляемыйСимвол Тогда - Возврат ПутьКаталога + ДобавляемыйСимвол; - Иначе + Если Прав(ПутьКаталога, 1) = ДобавляемыйСимвол Тогда Возврат ПутьКаталога; + Иначе + Возврат ПутьКаталога + ДобавляемыйСимвол; КонецЕсли; - КонецФункции - // Составляет полное имя файла из имени каталога и имени файла. // // Параметры -// ИмяКаталога – Строка, содержащая путь к каталогу файла на диске. -// ИмяФайла – Строка, содержащая имя файла, без имени каталога. +// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске. +// ИмяФайла - Строка, содержащая имя файла, без имени каталога. // // Возвращаемое значение: -// Строка – полное имя файла с учетом каталога. +// Строка - полное имя файла с учетом каталога. // Функция ПолучитьПолноеИмяФайла(Знач ИмяКаталога, Знач ИмяФайла) Экспорт @@ -921,11 +932,11 @@ // Раскладывает полное имя файла на составляющие. // // Параметры -// ПолноеИмяФайла – Строка, содержащая полный путь к файлу. -// ЭтоПапка – Булево, признак того, что требуется разложить полное имя папки, а не файла. +// ПолноеИмяФайла - Строка, содержащая полный путь к файлу. +// ЭтоПапка - Булево, признак того, что требуется разложить полное имя папки, а не файла. // // Возвращаемое значение: -// Структура – имя файла, разложенное на составные части(аналогично свойствам объекта Файл): +// Структура - имя файла, разложенное на составные части(аналогично свойствам объекта Файл): // ПолноеИмя - Содержит полный путь к файлу, т.е. полностью соответствует входному параметру ПолноеИмяФайла. // Путь - Содержит путь к каталогу, в котором лежит файл. // Имя - Содержит имя файла с расширением, без пути к файлу. @@ -997,6 +1008,83 @@ КонецФункции +// Разбирает строку URI на составные части и возвращает в виде структуры. +// На основе RFC 3986. +// +// Параметры: +// СтрокаURI - Строка - ссылка на ресурс в формате: <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь> +// +// Возвращаемое значение: +// Структура - составные части URI согласно формату: +// * Схема - Строка +// * Логин - Строка +// * Пароль - Строка +// * ИмяСервера - Строка - часть <хост>:<порт> входного параметра +// * Хост - Строка +// * Порт - Строка +// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> входного параметра +// +Функция СтруктураURI(Знач СтрокаURI) Экспорт + + СтрокаURI = СокрЛП(СтрокаURI); + + // схема + Схема = ""; + Позиция = Найти(СтрокаURI, "://"); + Если Позиция > 0 Тогда + Схема = НРег(Лев(СтрокаURI, Позиция - 1)); + СтрокаURI = Сред(СтрокаURI, Позиция + 3); + КонецЕсли; + + // строка соединения и путь на сервере + СтрокаСоединения = СтрокаURI; + ПутьНаСервере = ""; + Позиция = Найти(СтрокаСоединения, "/"); + Если Позиция > 0 Тогда + ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); + СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); + КонецЕсли; + + // информация пользователя и имя сервера + СтрокаАвторизации = ""; + ИмяСервера = СтрокаСоединения; + Позиция = Найти(СтрокаСоединения, "@"); + Если Позиция > 0 Тогда + СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); + ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); + КонецЕсли; + + // логин и пароль + Логин = СтрокаАвторизации; + Пароль = ""; + Позиция = Найти(СтрокаАвторизации, ":"); + Если Позиция > 0 Тогда + Логин = Лев(СтрокаАвторизации, Позиция - 1); + Пароль = Сред(СтрокаАвторизации, Позиция + 1); + КонецЕсли; + + // хост и порт + Хост = ИмяСервера; + Порт = ""; + Позиция = Найти(ИмяСервера, ":"); + Если Позиция > 0 Тогда + Хост = Лев(ИмяСервера, Позиция - 1); + Порт = Сред(ИмяСервера, Позиция + 1); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Схема", Схема); + Результат.Вставить("Логин", Логин); + Результат.Вставить("Пароль", Пароль); + Результат.Вставить("ИмяСервера", ИмяСервера); + Результат.Вставить("Хост", Хост); + Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); + Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + + Возврат Результат; + +КонецФункции + // Функция раскладывает Строку в массив строк, используя "./\" как разделитель. Функция РазложитьСтрокуПоТочкамИСлэшам(Знач Строка) Экспорт @@ -1027,10 +1115,10 @@ // Выделяет из имени файла его расширение (набор символов после последней точки). // // Параметры: -// ИмяФайла – Строка, содержащая имя файла, неважно с именем каталога или без. +// ИмяФайла - Строка, содержащая имя файла, неважно с именем каталога или без. // // Возвращаемое значение: -// Строка – расширение файла. +// Строка - расширение файла. // Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт @@ -1984,11 +2072,12 @@ Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); КонецЕсли; - #Если Клиент Тогда - Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); - #Иначе - Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); - #КонецЕсли +#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ ТолстыйКлиентУправляемоеПриложение Тогда + Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); +#Иначе + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); +#КонецЕсли + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -2037,8 +2126,8 @@ // Параметры: // Нет. // -// Возвращаемое значение: -// Тип: Строка. Полное имя каталога, в котором расположена файловая информационная база. +// Возвращаемое значение: +// Строка - Полное имя каталога, в котором расположена файловая информационная база. // Функция КаталогФайловойИнформационнойБазы() Экспорт @@ -2087,11 +2176,11 @@ // Заменяет недопустимые символы в XML-строке на заданные символы // // Параметры: -// Текст – Строка – строка, в которой требуется выполнить замену недопустимых символов. -// СимволЗамены – Строка – строка, на которую требуется выполнить замену недопустимого символа в XML-строке +// Текст - Строка - строка, в которой требуется выполнить замену недопустимых символов. +// СимволЗамены - Строка - строка, на которую требуется выполнить замену недопустимого символа в XML-строке // // Возвращаемое значение: -// Строка - cтрока, полученная заменой недопустимых символов в XML-строке. +// Строка - строка, полученная заменой недопустимых символов в XML-строке. // Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт @@ -2122,10 +2211,10 @@ // Удаляет недопустимые символы в XML-строке. // // Параметры: -// Текст – Строка – строка, в которой требуется удалить недопустимые символы. +// Текст - Строка - строка, в которой требуется удалить недопустимые символы. // -// Возвращаемое значение: -// Тип: Строка. Строка, полученная при удалении недопустимых символов в XML-строке. +// Возвращаемое значение: +// Строка - Строка, полученная при удалении недопустимых символов в XML-строке. // Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт @@ -2150,10 +2239,10 @@ // Возвращает код основного языка конфигурации, например "ru". Функция КодОсновногоЯзыка() Экспорт - #Если Клиент Тогда - Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().КодОсновногоЯзыка; - #Иначе + #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + #Иначе + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().КодОсновногоЯзыка; #КонецЕсли КонецФункции @@ -2570,3 +2659,5 @@ Возврат Истина; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 2a3b39dbe..1512b44ed 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // @@ -65,7 +64,7 @@ // Устанавливает текстовое описание предмета // // Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // Представление - Строка - сюда необходимо поместить текстовое описание. Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт @@ -139,23 +138,21 @@ КонецПроцедуры -// Позволяет настроить общие параметры базовой функциональности. +// Позволяет настроить общие параметры подсистемы. // // Параметры: -// ОбщиеПараметры - Структура - Набор параметров базовой функциональности: -// Ранее определялись в ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек(): -// * ИмяФормыПерсональныхНастроек - Строка - Имя формы для редактирования персональных настроек. -// Ранее определялись в ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(): -// * МинимальноНеобходимаяВерсияПлатформы - Строка - Номер версии платформы для запуска программы. -// * РаботаВПрограммеЗапрещена - Булево - Начальное значение Ложь. -// Не имеют аналогов в переопределяемых модулях: -// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - Определяет значение по умолчанию для флажка -// "Больше не задавать этот вопрос" диалога "Завершить работу с программой?". -// Значение по умолчанию Истина. -// Если установить Ложь, то пользователь не увидит диалог, пока явно не включит его отображение через свои настройки. +// ОбщиеПараметры - Структура - структура со свойствами: +// * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. +// Ранее определялись в ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. +// * МинимальноНеобходимаяВерсияПлатформы - Строка - полный номер версии платформы для запуска программы. Например, "8.3.4.365". +// Ранее определялись в ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы. +// * РаботаВПрограммеЗапрещена - Булево - Начальное значение Ложь. +// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - по умолчанию Истина. Если установить Ложь, то +// подтверждение при завершении работы программы не будет запрашиваться, +// если явно не разрешить в персональных настройках программы. // * ОтключитьСправочникИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочника -// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. -// Востребовано при частичном встраивании БСП в конфигурации на платформе 8.1. +// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. +// Для частичного встраивании отдельных функций библиотеки в конфигурации без постановки на поддержку. // Процедура ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры) Экспорт @@ -199,7 +196,22 @@ // Процедура ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий) Экспорт - +КонецПроцедуры + +// Параметры функциональных опций, действие которых распространяется на командный интерфейс и рабочий стол. +// Например, если значения функциональной опции хранятся в ресурсах регистра сведений, +// то параметры функциональных опций могут определять условия отборов по измерениям регистра, +// которые будут применяться при чтении значения этой функциональной опции. +// +// Параметры: +// ОпцииИнтерфейса - Структура - Значения параметров функциональных опций, установленных для командного интерфейса. +// Ключ элемента структуры определяет имя параметра, а значение элемента - текущее значение параметра. +// +// См. также: +// Методы глобального контекста ПолучитьФункциональнуюОпциюИнтерфейса(), +// УстановитьПараметрыФункциональныхОпцийИнтерфейса() и ПолучитьПараметрыФункциональныхОпцийИнтерфейса(). +// +Процедура ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса) Экспорт КонецПроцедуры @@ -209,8 +221,6 @@ // Устарела. Будет удалена в следующей редакции. См. ПриОпределенииОбщихПараметровБазовойФункциональности. Процедура ИмяФормыПерсональныхНастроек(ИмяФормы) Экспорт - - КонецПроцедуры // Устарела. Будет удалена в следующей редакции. См. ПриОпределенииОбщихПараметровБазовойФункциональности. @@ -222,3 +232,5 @@ Процедура ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 2d0d50af0..13831a783 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // @@ -228,8 +227,9 @@ Возврат РежимРаботы; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Возвращает список полных имен всех объектов метаданных, использующихся в общем реквизите-разделителе, // имя которого передано в качестве значения параметра Разделитель, и значения свойств объекта метаданных, @@ -379,8 +379,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Функция получает данные кеша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. // @@ -570,3 +571,50 @@ ИмяТочкиПодключения, ИмяПользователя, Пароль, Таймаут); КонецФункции + +// Параметры, применяемых к элементам командного интерфейса, связанных с параметрическими функциональными опциями. +Функция ОпцииИнтерфейса() Экспорт + + ОпцииИнтерфейса = Новый Структура; + Попытка + ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ИмяСобытия = НСтр("ru = 'Настройка интерфейса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При получении опций интерфейса произошла ошибка: + |%1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + КонецПопытки; + + Возврат ОпцииИнтерфейса; +КонецФункции + +// Доступность объектов метаданных по функциональным опциям. +Функция ДоступностьОбъектовПоОпциям() Экспорт + Параметры = ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса(); + Если ТипЗнч(Параметры) = Тип("ФиксированнаяСтруктура") Тогда + Параметры = Новый Структура(Параметры); + КонецЕсли; + + ДоступностьОбъектов = Новый Соответствие; + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + Значение = -1; + Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл + Если Значение = -1 Тогда + Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); + КонецЕсли; + Если Значение = Истина Тогда + ДоступностьОбъектов.Вставить(Элемент.Объект, Истина); + Иначе + Если ДоступностьОбъектов[Элемент.Объект] = Неопределено Тогда + ДоступностьОбъектов.Вставить(Элемент.Объект, Ложь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Возврат ДоступностьОбъектов; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl index ce5fc687c..cf257f627 100644 --- a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -84,21 +83,7 @@ // Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт - Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Возврат; - КонецЕсли; - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - - Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("Организации") Тогда - - Описание = Описание + - " - |Справочник.Организации.Чтение.Организации - |Справочник.Организации.Изменение.Организации - |"; - - КонецЕсли; КонецПроцедуры @@ -181,3 +166,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 4061bc68b..762eb3149 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Отправляет SMS через настроенного поставщика услуги, возвращает идентификатор сообщения. // @@ -120,8 +119,50 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "ОтправкаSMS"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезБилайн.Разрешения())); + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОтправкаSMSЧерезМТС.Разрешения())); + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ДополнительныеРазрешения())); + +КонецПроцедуры + +Функция ДополнительныеРазрешения() + Разрешения = Новый Массив; + ОтправкаSMSПереопределяемый.ПриПолученииРазрешений(Разрешения); + + Возврат Разрешения; +КонецФункции Функция НастройкиОтправкиSMS() Результат = Новый Структура; @@ -131,3 +172,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl index 6f65e3cf4..91e3d79f2 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl @@ -3,13 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Отправляет SMS через настроенного поставщика услуги, возвращает идентификатор сообщения. // // Параметры: -// ПараметрыОтправки - Структура: +// ПараметрыОтправки - Структура - // Провайдер - ПеречислениеСсылка.ПровайдерыSMS - поставщик услуги по отправке SMS. // НомераПолучателей - Массив - массив строк номеров получателей в формате +7ХХХХХХХХХХ; // Текст - Строка - текст сообщения, максимальная длина у операторов может быть разной; @@ -45,7 +44,7 @@ // Проверяет правильность сохраненных настроек отправки SMS. // // Параметры: -// НастройкиОтправкиSMS - Структура: +// НастройкиОтправкиSMS - Структура - // Провайдер - ПеречислениеСсылка.ПровайдерыSMS; // Логин - Строка; // Пароль - Строка; @@ -53,4 +52,15 @@ // Процедура ПриПроверкеНастроекОтправкиSMS(НастройкиОтправкиSMS, Отказ) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +// Дополняет список разрешений для отправки SMS. +// +// Параметры: +// Разрешения - Массив - массив объектов, возвращаемых одной из функций РаботаВБезопасномРежиме.Разрешение*(). +// +Процедура ПриПолученииРазрешений(Разрешения) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 3623d39ae..970c6f7d6 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Отправляет SMS через веб-сервис МТС, возвращает идентификатор сообщения. // @@ -230,3 +229,24 @@ КонецЦикла; Возврат Результат; КонецФункции + +// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() Экспорт + + Протокол = "HTTP"; + Адрес = "beeline.amega-inform.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Отправка SMS через Билайн.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); + + Возврат Разрешения; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 7b411b465..e509f91d7 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Отправляет SMS через веб-сервис МТС, возвращает идентификатор сообщения. // @@ -99,17 +98,40 @@ КонецФункции Функция ПодключитьВебСервис() - - Возврат WSСсылки.ОтправкаSMSЧерезМТС.СоздатьWSПрокси("http://mcommunicator.ru/M2M", + Возврат ОбщегоНазначения.WSПрокси( + "http://www.mcommunicator.ru/m2m/m2m_api.asmx?WSDL", + "http://mcommunicator.ru/M2M", "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_API", "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_APISoap12", - ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), - 60); - + "", + "", + 60, + Ложь); КонецФункции Функция ВычислитьХешСтрокиПоАлгоритмуMD5(Знач Строка) ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХешированиеДанных.Добавить(Строка); Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); -КонецФункции \ No newline at end of file +КонецФункции + +// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() Экспорт + Протокол = "HTTP"; + Адрес = "http://mcommunicator.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Отправка SMS через МТС.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) + ); + + Возврат Разрешения; +Конецфункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl index 176d7d2c9..779679a9d 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Функция определяет необходимость выполнения замеров. // @@ -17,3 +16,44 @@ Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить(); КонецФункции + +// Функция возвращает ссылку на ключевую операцию по имени. +// Если ключевая операция с таким названием отсутствует в справочнике, +// то создает новый элемент. +// +// Параметры: +// ИмяКлючевойОперации - Строка - название ключевой операции +// +// Возвращаемое значение: +// СправочникСсылка.КлючевыеОперации +// +Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Имя = &Имя + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + + Запрос.УстановитьПараметр("Имя", ИмяКлючевойОперации); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(ИмяКлючевойОперации); + Иначе + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + КлючеваяОперацияСсылка = Выборка.Ссылка; + КонецЕсли; + + Возврат КлючеваяОперацияСсылка; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl index e7b0da662..fc97b3f74 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl @@ -3,9 +3,7 @@ // ключевых операций и их дальнейшем экспортом. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - +#Область ПрограммныйИнтерфейс // Процедура записи массива замеров // @@ -27,9 +25,9 @@ Продолжить; КонецЕсли; ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперацияСсылка, - Длительность, - ДатаДанные.Ключ, + КлючеваяОперацияСсылка, + Длительность, + ДатаДанные.Ключ, Данные["ДатаОкончания"]); КонецЦикла; КонецЦикла; @@ -51,6 +49,9 @@ // КаталогиЭкспорта - Структура со значением типа Массив. // Процедура ЭкспортОценкиПроизводительности(КаталогиЭкспорта) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + // Если система отключена, то выгрузку данных делать не будем. Если Не ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда Возврат; @@ -87,29 +88,89 @@ Возврат ТекущаяДата(); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -Функция УстановитьАвтоматическоеОбновлениеКлючевыхОперацийВРИБ() Экспорт - Справочники.КлючевыеОперации.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически); +// Функция создает новый элемент справочника "Ключевые операции". +// +// Параметры: +// ИмяКлючевойОперации - Строка - название ключевой операции +// +// Возвращаемое значение: +// СправочникСсылка.КлючевыеОперации +// +Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации) Экспорт + + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.УстановитьЗначение("Имя", ИмяКлючевойОперации); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Имя = &Имя + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + + Запрос.УстановитьПараметр("Имя", ИмяКлючевойОперации); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Наименование = РазложитьСтрокуПоСловам(ИмяКлючевойОперации); + + НовыйЭлемент = Справочники.КлючевыеОперации.СоздатьЭлемент(); + НовыйЭлемент.Имя = ИмяКлючевойОперации; + НовыйЭлемент.Наименование = Наименование; + НовыйЭлемент.Записать(); + КлючеваяОперацияСсылка = НовыйЭлемент.Ссылка; + Иначе + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + КлючеваяОперацияСсылка = Выборка.Ссылка; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение + КонецПопытки; + + Возврат КлючеваяОперацияСсылка; + КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + /////////////////////////////////////////////////////////////////////////////// // Запись результатов замеров времени выполнения ключевых операций // Процедура записи единичного замера // // Параметры: -// КлючеваяОперацияСсылка - СправочникСсылка.КлючевыеОперации +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции // Длительность - Число // ДатаНачалаКлючевойОперации - Дата Процедура ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперацияСсылка, + КлючеваяОперация, Длительность, ДатаНачалаКлючевойОперации, ДатаОкончанияКлючевойОперации = Неопределено ) Экспорт - + + Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда + КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); + Иначе + КлючеваяОперацияСсылка = КлючеваяОперация; + КонецЕсли; + Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); Запись.КлючеваяОперация = КлючеваяОперацияСсылка; Запись.ДатаНачалаЗамера = УниверсальноеВремя(ДатаНачалаКлючевойОперации); @@ -121,7 +182,7 @@ Если ДатаОкончанияКлючевойОперации <> Неопределено Тогда Запись.ДатаОкончания = УниверсальноеВремя(ДатаОкончанияКлючевойОперации); КонецЕсли; - Запись.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + Запись.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); Запись.ДатаЗаписиЛокальная = ТекущаяДатаСеанса(); Запись.Записать(); @@ -183,6 +244,8 @@ // Процедура СформироватьЗапросРасчетаAPDEX(Запрос) + ОбщаяПроизводительностьСистемы = ОценкаПроизводительностиСлужебный.ПолучитьЭлементОбщаяПроизводительностьСистемы(); + ПолучениеЗамеров = "ВЫБРАТЬ | &КлючеваяОперация%НомерКлючевойОперации% КАК КлючеваяОперация, @@ -228,7 +291,6 @@ | ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ПустаяСсылка), | 0"; - ТекстЗапроса = "ВЫБРАТЬ | КлючевыеОперации.Ссылка КАК КлючеваяОперация, @@ -239,7 +301,7 @@ | Справочник.КлючевыеОперации КАК КлючевыеОперации |ГДЕ | КлючевыеОперации.ПометкаУдаления = ЛОЖЬ - | И КлючевыеОперации.Ссылка <> ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы)"; + | И КлючевыеОперации.Ссылка <> &ОбщаяПроизводительностьСистемы"; ТекстЗапроса = ТекстЗапроса + ИндексироватьПо + РазделительВременныхТаблиц; @@ -250,9 +312,10 @@ |ИЗ | Справочник.КлючевыеОперации КАК КлючевыеОперации |ГДЕ - | КлючевыеОперации.Ссылка <> ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы) - | И КлючевыеОперации.ПометкаУдаления = ЛОЖЬ"; + | КлючевыеОперации.ПометкаУдаления = ЛОЖЬ + | И КлючевыеОперации.Ссылка <> &ОбщаяПроизводительностьСистемы"; + ЗапросНаКлючевыеОперации.УстановитьПараметр("ОбщаяПроизводительностьСистемы", ОбщаяПроизводительностьСистемы); Выборка = ЗапросНаКлючевыеОперации.Выполнить().Выбрать(); НетКлючевыхОпераций = Истина; @@ -281,7 +344,17 @@ "ВЫБРАТЬ | ВТ_КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, | ВЫБОР - | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 + | КОГДА + | // Время выполнения по этой ключевой операции равно нулю (нет операций с временем выполнения больше нуля) + | НЕ 1 В ( + | ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + | ИЗ + | ВТ_Замеры КАК ЗамерыВнутр + | ГДЕ + | ЗамерыВнутр.КлючеваяОперация = ВТ_КлючевыеОперации.КлючеваяОперация + | И ЗамерыВнутр.ВремяВыполнения > 0 + | ) | ТОГДА -1 | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя @@ -328,7 +401,17 @@ | |ИМЕЮЩИЕ | ВЫБОР - | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 + | КОГДА + | // Время выполнения по этой ключевой операции равно нулю (нет операций с временем выполнения больше нуля) + | НЕ 1 В ( + | ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + | ИЗ + | ВТ_Замеры КАК ЗамерыВнутр + | ГДЕ + | ЗамерыВнутр.КлючеваяОперация = ВТ_КлючевыеОперации.КлючеваяОперация + | И ЗамерыВнутр.ВремяВыполнения > 0 + | ) | ТОГДА -1 | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя @@ -342,6 +425,7 @@ | КОНЕЦ) / 2) / СУММА(1) КАК ЧИСЛО(6, 3)) | КОНЕЦ >= 0"; + Запрос.УстановитьПараметр("ОбщаяПроизводительностьСистемы", ОбщаяПроизводительностьСистемы); Запрос.Текст = ТекстЗапроса; КонецПроцедуры @@ -378,7 +462,7 @@ КлючеваяОперация.name = КлючеваяОперацияСтрока; КлючеваяОперация.currentApdexValue = ВыборкаАпдекс.ТекущийAPDEX; - КлючеваяОперация.minimalApdexValue = ВыборкаАпдекс.МинимальныйAPDEX; + КлючеваяОперация.minimalApdexValue = ?(ВыборкаАпдекс.МинимальныйAPDEX = NULL, 0, ВыборкаАпдекс.МинимальныйAPDEX); КлючеваяОперация.priority = ВыборкаАпдекс.КлючеваяОперация.Приоритет; КлючеваяОперация.targetValue = ВыборкаАпдекс.КлючеваяОперация.ЦелевоеВремя; @@ -387,43 +471,42 @@ Замеры = МассивыЗамеров.Получить(КлючеваяОперацияСтрока); Если Замеры <> Неопределено Тогда Для Каждого Замер Из Замеры Цикл - ЗамерXML = ФабрикаXDTO.Создать(ТипИзмерение); + ЗамерXML = ФабрикаXDTO.Создать(ТипИзмерение); ЗамерXML.value = Замер.ВремяВыполнения; Если ТипЗнч(Замер.ДатаНачалаЗамера) = Тип("Число") Тогда ДатаЗамера = Дата("00010101") + Замер.ДатаНачалаЗамера / 1000; Иначе ДатаЗамера = Замер.ДатаНачалаЗамера; - КонецЕсли; + КонецЕсли; ЗамерXML.tUTC = ДатаЗамера; ЗамерXML.userName = Замер.Пользователь; ЗамерXML.tSaveUTC = Замер.ДатаЗаписи; ЗамерXML.sessionNumber = Замер.НомерСеанса; КлючеваяОперация.measurement.Добавить(ЗамерXML); - КонецЦикла; + КонецЦикла; КонецЕсли; ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КлючеваяОперация); - КонецЦикла; + КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); - Для Каждого КлючВыполнятьКаталог Из КаталогиЭкспорта Цикл + Для Каждого КлючВыполнятьКаталог Из КаталогиЭкспорта Цикл ВыполнятьКаталог = КлючВыполнятьКаталог.Значение; Выполнять = ВыполнятьКаталог[0]; Если НЕ Выполнять Тогда Продолжить; КонецЕсли; - КаталогЭкспорта = ВыполнятьКаталог[1]; + КаталогЭкспорта = ВыполнятьКаталог[1]; Ключ = КлючВыполнятьКаталог.Ключ; Если Ключ = ОценкаПроизводительностиКлиентСервер.ЛокальныйКаталогЭкспортаКлючЗадания() Тогда СоздатьКаталог(КаталогЭкспорта); КонецЕсли; - - КопироватьФайл(ИмяВременногоФайла, ПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаФормированияФайла, ".xml")); + КопироватьФайл(ИмяВременногоФайла, ПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаФормированияФайла, ".xml")); КонецЦикла; - УдалитьФайлы(ИмяВременногоФайла); + УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры // Генерирует имя файла для экспорта @@ -463,3 +546,58 @@ КонецФункции +// Разбивает строку из нескольких объединенных слов в строку с отдельными словами. +// Признаком начала нового слова считается символ в верхнем регистре. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// +// Возвращаемое значение: +// Строка - строка, разделенная по словам. +// +// Примеры: +// РазложитьСтрокуПоСловам("ОдинДваТри") - возвратит строку "Один два три"; +// +Функция РазложитьСтрокуПоСловам(Знач Строка) + + МассивСлов = Новый Массив; + + ПозицииСлов = Новый Массив; + Для ПозицияСимвола = 1 По СтрДлина(Строка) Цикл + ТекСимвол = Сред(Строка, ПозицияСимвола, 1); + Если ТекСимвол = ВРег(ТекСимвол) + И (СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(ТекСимвол) + Или СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(ТекСимвол)) Тогда + ПозицииСлов.Добавить(ПозицияСимвола); + КонецЕсли; + КонецЦикла; + + Если ПозицииСлов.Количество() > 0 Тогда + ПредыдущаяПозиция = 0; + Для Каждого Позиция Из ПозицииСлов Цикл + Если ПредыдущаяПозиция > 0 Тогда + Подстрока = Сред(Строка, ПредыдущаяПозиция, Позиция - ПредыдущаяПозиция); + Если Не ПустаяСтрока(Подстрока) Тогда + МассивСлов.Добавить(СокрЛП(Подстрока)); + КонецЕсли; + КонецЕсли; + ПредыдущаяПозиция = Позиция; + КонецЦикла; + + Подстрока = Сред(Строка, Позиция); + Если Не ПустаяСтрока(Подстрока) Тогда + МассивСлов.Добавить(СокрЛП(Подстрока)); + КонецЕсли; + КонецЕсли; + + Для Индекс = 1 По МассивСлов.ВГраница() Цикл + МассивСлов[Индекс] = НРег(МассивСлов[Индекс]); + КонецЦикла; + + Результат = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивСлов, " "); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index 392e1cdde..84660e868 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -3,15 +3,14 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Метод завершающий замер времени на клиенте // Процедура ЗакончитьЗамерВремениАвтоНеГлобальный() Экспорт ЗакончитьЗамерВремени(); - + КонецПроцедуры // Произвести запись накопленных замеров времени выполнения ключевых операций на сервере @@ -20,19 +19,20 @@ // ПередЗавершением - Булево - Истина, если метод вызывается перед закрытием приложения // Процедура ЗаписатьРезультатыАвтоНеГлобальный(ПередЗавершением = Ложь) Экспорт + Если НЕ ОценкаПроизводительностиЗамерВремени = Неопределено Тогда - Если ОценкаПроизводительностиЗамерВремени["Замеры"].Количество() = 0 Тогда + Если ОценкаПроизводительностиЗамерВремени["Замеры"].Количество() = 0 Тогда НовыйПериодЗаписи = ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"]; - Иначе + Иначе Замеры = ОценкаПроизводительностиЗамерВремени["Замеры"]; - НовыйПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевыхОпераций(Замеры); + НовыйПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевыхОпераций(Замеры); ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"] = НовыйПериодЗаписи; - Если ПередЗавершением Тогда + Если ПередЗавершением Тогда Возврат; КонецЕсли; - + Для Каждого КлючеваяОперацияДатаДанные Из Замеры Цикл Буфер = КлючеваяОперацияДатаДанные.Значение; НаУдаление = Новый Массив; @@ -42,35 +42,40 @@ Длительность = Данные.Получить("Длительность"); // Это означает, что операция уже закончилась, удалять ее из буфера нужно. Если Длительность <> Неопределено Тогда - НаУдаление.Добавить(Дата); + НаУдаление.Добавить(Дата); КонецЕсли; КонецЦикла; Для Каждого Дата Из НаУдаление Цикл ОценкаПроизводительностиЗамерВремени["Замеры"][КлючеваяОперацияДатаДанные.Ключ].Удалить(Дата); - КонецЦикла; - КонецЦикла; + КонецЦикла; + КонецЦикла; КонецЕсли; ПодключитьОбработчикОжидания("ЗаписатьРезультатыАвто", НовыйПериодЗаписи, Истина); - + КонецЕсли; -КонецПроцедуры +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура завершает замер времени на клиенте // Параметры: // АвтоЗамер - Булево, закончен ли замер по обработчику // ожидания или же нет. Процедура ЗакончитьЗамерВремени(АвтоЗамер = Истина) - + + ДатаОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(Ложь); ВремяОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(); - + Если АвтоЗамер И ТипЗнч(ВремяОкончания) = Тип("Число") Тогда - ВремяОкончания = ВремяОкончания - 0.100; - КонецЕсли; - ДатаОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(Ложь); + ВремяОкончания = ВремяОкончания - 0.100; + КонецЕсли; + + СмещениеДатыКлиента = ОценкаПроизводительностиЗамерВремени["СмещениеДатыКлиента"]; + ДатаОкончания = ДатаОкончания + СмещениеДатыКлиента; + Замеры = ОценкаПроизводительностиЗамерВремени["Замеры"]; Для Каждого КлючеваяОперацияБуферы Из Замеры Цикл Для Каждого ДатаДанные Из КлючеваяОперацияБуферы.Значение Цикл @@ -78,14 +83,14 @@ ВремяНачала = Буфер["ВремяНачала"]; Длительность = Буфер.Получить("Длительность"); Если Длительность = Неопределено Тогда - Буфер.Вставить("Длительность", ВремяОкончания - ВремяНачала); + Буфер.Вставить("Длительность", ВремяОкончания - ВремяНачала); Буфер.Вставить("ВремяОкончания", ВремяОкончания); Буфер.Вставить("ДатаОкончания", ДатаОкончания); КонецЕсли; - КонецЦикла; - КонецЦикла; + КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -98,3 +103,5 @@ ЗаписатьРезультатыАвтоНеГлобальный(Истина); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl index 134687176..f62f75f44 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl @@ -3,10 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - +#Область СлужебныеПроцедурыИФункции // Процедура заканчивает замер времени выполнения ключевой операции // Вызывается из обработчика ожидания @@ -22,4 +19,6 @@ ОценкаПроизводительностиКлиент.ЗаписатьРезультатыАвтоНеГлобальный(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 9a3858954..96de26296 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -3,13 +3,13 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Активизирует замер времени выполнения ключевой операции. // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции // При вызове с сервера аргумент игнорируется. // // Возвращаемое значение: @@ -22,7 +22,7 @@ ДатаНачала = ЗначениеТаймера(Ложь); ВремяНачала = ЗначениеТаймера(); #Если Клиент Тогда - Если КлючеваяОперация = Неопределено Тогда + Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); КонецЕсли; Если ОценкаПроизводительностиЗамерВремени = Неопределено Тогда @@ -67,21 +67,26 @@ // Процедура завершает замер времени на сервере и записывает результат на сервере // Параметры: -// КлючеваяОперацияСсылка - СправочникСсылка.КлючевыеОперации +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции // ВремяНачала - Число или Дата -Процедура ЗакончитьЗамерВремени(КлючеваяОперацияСсылка, ВремяНачала) Экспорт - ВремяОкончания = ЗначениеТаймера(); - Длительность = (ВремяОкончания - ВремяНачала); - Если ТипЗнч(ВремяОкончания) = Тип("Число") Тогда - ДатаНачала = ЗначениеТаймера(Ложь) - (Длительность / 1000); - Иначе +Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала) Экспорт + + ДатаОкончания = ЗначениеТаймера(Ложь); + ВремяОкончания = ЗначениеТаймера(); + Если ТипЗнч(ВремяНачала) = Тип("Число") Тогда + Длительность = (ВремяОкончания - ВремяНачала); + ДатаНачала = ДатаОкончания - Длительность; + Иначе + Длительность = (ДатаОкончания - ВремяНачала); ДатаНачала = ВремяНачала; - КонецЕсли; + КонецЕсли; ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперацияСсылка, - Длительность, + КлючеваяОперация, + Длительность, ДатаНачала, - ЗначениеТаймера(Ложь)); + ДатаОкончания); + КонецПроцедуры // Функция вызывается при старте замера времени и его завершении. @@ -113,12 +118,16 @@ // Ключ параметра регламентного задания, соответствующий локальному каталогу экспорта Функция ЛокальныйКаталогЭкспортаКлючЗадания() Экспорт - Возврат "ЛокальныйКаталогЭкспорта"; + + Возврат "ЛокальныйКаталогЭкспорта"; + КонецФункции // Ключ параметра регламентного задания, соответствующий ftp каталогу экспорта Функция FTPКаталогЭкспортаКлючЗадания() Экспорт - Возврат "FTPКаталогЭкспорта"; + + Возврат "FTPКаталогЭкспорта"; + КонецФункции #Если Сервер Тогда @@ -134,7 +143,7 @@ ЗаписьЖурналаРегистрации(ИмяСобытия, Уровень, , - "Оценка производительности", + НСтр("ru = 'Оценка производительности'"), ТекстСообщения); КонецПроцедуры @@ -146,8 +155,9 @@ // Строка - имя дополнительного свойства // Функция НеПроверятьПриоритет() Экспорт - Возврат "НеПровеятьПриоритет"; + + Возврат "НеПровеятьПриоритет"; + КонецФункции - - +#КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index b16fbe8ea..0ea0ca669 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -18,11 +17,16 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( "ОценкаПроизводительностиСлужебный"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "ОценкаПроизводительностиСлужебный"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -35,3 +39,227 @@ КонецПроцедуры +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + КаталогиЭкспорта = КаталогиЭкспортаОценкиПроизводительности(); + Если КаталогиЭкспорта = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(КаталогиЭкспорта.FTPКаталогЭкспорта); + КаталогиЭкспорта.Вставить("FTPКаталогЭкспорта", СтруктураURI.ИмяСервера); + Если ЗначениеЗаполнено(СтруктураURI.Порт) Тогда + КаталогиЭкспорта.Вставить("FTPКаталогЭкспортаПорт", СтруктураURI.Порт); + КонецЕсли; + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + РазрешенияНаРесурсыСервера(КаталогиЭкспорта), + ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВыполнятьЗамерыПроизводительности"))); + +КонецПроцедуры + +// Только для внутреннего использования. +Функция ЗапросНаИспользованиеВнешнихРесурсов(Каталоги) Экспорт + + Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + РазрешенияНаРесурсыСервера(Каталоги), + ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВыполнятьЗамерыПроизводительности")); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Находит и возвращает регламентное задание экспорта замеров времени +// +// Возвращаемое значение: +// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание +// +Функция РегламентноеЗаданиеЭкспортаОценкиПроизводительности() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания( + Новый Структура("Метаданные", "ЭкспортОценкиПроизводительности")); + Если Задания.Количество() = 0 Тогда + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание( + Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности); + Задание.Записать(); + Возврат Задание; + Иначе + Возврат Задания[0]; + КонецЕсли; + +КонецФункции + +// Возвращает каталоги экспорта файлов с результатами замеров +// +// Параметры: +// Нет +// +// Возвращаемое значение: +// Структура +// "ВыполнятьЭкспортНаFTP" - Булево - Признак выполнения экспорта на FTP +// "FTPКаталогЭкспорта" - Строка - FTP-каталог экспорта +// "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - Признак выполнения экспорта в локальный каталог +// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта +// +Функция КаталогиЭкспортаОценкиПроизводительности() Экспорт + + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); + Каталоги = Новый Структура; + Если Задание.Параметры.Количество() > 0 Тогда + Каталоги = Задание.Параметры[0]; + КонецЕсли; + + Если ТипЗнч(Каталоги) <> Тип("Структура") ИЛИ Каталоги.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("ВыполнятьЭкспортНаFTP"); + ВозвращаемоеЗначение.Вставить("FTPКаталогЭкспорта"); + ВозвращаемоеЗначение.Вставить("ВыполнятьЭкспортВЛокальныйКаталог"); + ВозвращаемоеЗначение.Вставить("ЛокальныйКаталогЭкспорта"); + + КлючЗаданияВЭлементы = Новый Структура; + FTPЭлементы = Новый Массив; + FTPЭлементы.Добавить("ВыполнятьЭкспортНаFTP"); + FTPЭлементы.Добавить("FTPКаталогЭкспорта"); + + ЛокальныйЭлементы = Новый Массив; + ЛокальныйЭлементы.Добавить("ВыполнятьЭкспортВЛокальныйКаталог"); + ЛокальныйЭлементы.Добавить("ЛокальныйКаталогЭкспорта"); + + КлючЗаданияВЭлементы.Вставить(ОценкаПроизводительностиКлиентСервер.FTPКаталогЭкспортаКлючЗадания(), FTPЭлементы); + КлючЗаданияВЭлементы.Вставить(ОценкаПроизводительностиКлиентСервер.ЛокальныйКаталогЭкспортаКлючЗадания(), ЛокальныйЭлементы); + ВыполнятьЭкспорт = Ложь; + Для Каждого ИмяКлючаЭлементы Из КлючЗаданияВЭлементы Цикл + ИмяКлюча = ИмяКлючаЭлементы.Ключ; + ЭлементыНаРедактирование = ИмяКлючаЭлементы.Значение; + НомерЭлемента = 0; + Для Каждого ЭлементИмя Из ЭлементыНаРедактирование Цикл + Значение = Каталоги[ИмяКлюча][НомерЭлемента]; + ВозвращаемоеЗначение[ЭлементИмя] = Значение; + Если НомерЭлемента = 0 Тогда + ВыполнятьЭкспорт = ВыполнятьЭкспорт ИЛИ Значение; + КонецЕсли; + НомерЭлемента = НомерЭлемента + 1; + КонецЦикла; + КонецЦикла; + + Возврат ВозвращаемоеЗначение; + +КонецФункции + +// Возвращает ссылку на элемент "Общая производительность", +// Если существует предопределенный элемент "ОбщаяПроизводительностьСистемы", то возвращается этот элемент +// В противном случае возвращается пустая ссылка +// +// Параметры: +// Нет +// Возвращаемое значение: +// СправочникСсылка.КлючевыеОперации +// +Функция ПолучитьЭлементОбщаяПроизводительностьСистемы() Экспорт + + ПредопределенныеКО = СтандартныеПодсистемыСервер.ИменаПредопределенныхДанных("Справочник.КлючевыеОперации"); + ЕстьПредопределенныйЭлемент = ?(ПредопределенныеКО.Найти("ОбщаяПроизводительностьСистемы") <> Неопределено, Истина, Ложь); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка, + | 2 КАК Приоритет + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Имя = ""ОбщаяПроизводительностьСистемы"" + | И НЕ КлючевыеОперации.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ПустаяСсылка), + | 3 + | + |УПОРЯДОЧИТЬ ПО + | Приоритет"; + + Если ЕстьПредопределенныйЭлемент Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка, + | 1 КАК Приоритет + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.ИмяПредопределенныхДанных = ""ОбщаяПроизводительностьСистемы"" + | И НЕ КлючевыеОперации.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + |" + ТекстЗапроса; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("КлючевыеОперации", ПредопределенныеКО); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Ссылка; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +// Формирует массив разрешений для экспорта данных замеров +// +// Параметры - КаталогиЭкспорта - Структура +// +// Возвращаемое значение: +// Массив +Функция РазрешенияНаРесурсыСервера(Каталоги) + + Разрешения = Новый Массив; + + Если Каталоги <> Неопределено Тогда + Если Каталоги.Свойство("ВыполнятьЭкспортВЛокальныйКаталог") И Каталоги.ВыполнятьЭкспортВЛокальныйКаталог = Истина Тогда + Если Каталоги.Свойство("ЛокальныйКаталогЭкспорта") И ЗначениеЗаполнено(Каталоги.ЛокальныйКаталогЭкспорта) Тогда + Элемент = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + Каталоги.ЛокальныйКаталогЭкспорта, + Истина, + Истина, + НСтр("ru = 'Сетевой каталог для экспорта результатов замеров производительности.'")); + Разрешения.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + + Если Каталоги.Свойство("ВыполнятьЭкспортНаFTP") И Каталоги.ВыполнятьЭкспортНаFTP = Истина Тогда + Если Каталоги.Свойство("FTPКаталогЭкспорта") И ЗначениеЗаполнено(Каталоги.FTPКаталогЭкспорта) Тогда + Элемент = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + "FTP", + Каталоги.FTPКаталогЭкспорта, + ?(Каталоги.Свойство("FTPКаталогЭкспортаПорт"), Каталоги.FTPКаталогЭкспортаПорт, Неопределено), + НСтр("ru = 'FTP-ресурс для экспорта результатов замеров производительности.'")); + Разрешения.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Разрешения; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index f3b575436..e34ba313f 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Основные процедуры и функции. @@ -14,40 +13,40 @@ // параметров. Подробнее об этом написано в описании конкретных методов. // // Описание параметров: -// ОбластьДанных – Число – значение разделителя области данных задания. +// ОбластьДанных - Число - значение разделителя области данных задания. // -1 для неразделенных заданий. При установленном разделении сеанса всегда // используется значение сеанса. -// Идентификатор – СправочникСсылка.ОчередьЗаданий, -// СправочникСсылка.ОчередьЗаданийОбластейДанных – идентификатор задания. -// Использование – Булево – признак использования задания. -// ЗапланированныйМоментЗапуска – Дата (ДатаВремя) –дата запланированного запуска +// Идентификатор - СправочникСсылка.ОчередьЗаданий, +// СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания. +// Использование - Булево - признак использования задания. +// ЗапланированныйМоментЗапуска - Дата (ДатаВремя) -дата запланированного запуска // задания (в часовом поясе области данных). -// СостояниеЗадания – ПеречислениеСсылка.СостоянияЗаданий – состояние задания очереди -// ЭксклюзивноеВыполнение – Булево – При установленном флаге задание будет выполнено +// СостояниеЗадания - ПеречислениеСсылка.СостоянияЗаданий - состояние задания очереди +// ЭксклюзивноеВыполнение - Булево - При установленном флаге задание будет выполнено // даже при установленной блокировке начала сеансов в области данных. Так же если в // области есть задания с таким флагом сначала будут выполнены они. -// Шаблон – СправочникСсылка.ШаблоныЗаданийОчереди – шаблон задания, используется только +// Шаблон - СправочникСсылка.ШаблоныЗаданийОчереди - шаблон задания, используется только // для разделенных заданий очереди. -// ИмяМетода – Строка – Имя метода (или псевдоним) обработчика задания. Не используется +// ИмяМетода - Строка - Имя метода (или псевдоним) обработчика задания. Не используется // для заданий созданных по шаблону. // Могут использоваться только методы для которых зарегистрированы псевдонимы через событие // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков -// Параметры – Массив – Параметры для передачи в обработчик задания. -// Ключ – Строка – ключ задания. В пределах одной области данных не допускается +// Параметры - Массив - Параметры для передачи в обработчик задания. +// Ключ - Строка - ключ задания. В пределах одной области данных не допускается // дублирование заданий с одинаковым ключом и именем метода. -// ИнтервалПовтораПриАварийномЗавершении – Число – Время ожидания в секундах перед +// ИнтервалПовтораПриАварийномЗавершении - Число - Время ожидания в секундах перед // повторным запуском задания в случае его аварийного завершения. Отсчитывается от // времени окончания неудачной попытки выполнения задания. Имеет смысл указывать только // совместно с параметром КоличествоПовторовПриАварийномЗавершении. -// Расписание – РасписаниеРегламентногоЗадания – Расписание по которому следует +// Расписание - РасписаниеРегламентногоЗадания - Расписание по которому следует // выполнять задание. Если не указано - задание будет выполнено только один раз. -// КоличествоПовторовПриАварийномЗавершении – Число – Количество попыток повторного +// КоличествоПовторовПриАварийномЗавершении - Число - Количество попыток повторного // выполнения задания в случае его аварийного завершения. // Получает задания очереди по заданному отбору. // Возможно получение неконсистентных данных. // Параметры: -// Отбор – Структура, Массив – значения по которым, требуется отбирать задания. +// Отбор - Структура, Массив - значения по которым, требуется отбирать задания. // Возможные ключи структуры: // ОбластьДанных // ИмяМетода @@ -57,16 +56,16 @@ // Шаблон // Использование // Так же может быть передан массив структур - описаний отбора со следующими ключами: -// ВидСравнения – ВидСравнения – допустимыми значениями являются только +// ВидСравнения - ВидСравнения - допустимыми значениями являются только // ВидСравнения.Равно // ВидСравнения.НеРавно // ВидСравнения.ВСписке // ВидСравнения.НеВСписке -// Значение – Значение отбора, для видов сравнения ВСписке и НеВСписке – массив значений. -// Для видов сравнения Равно / НеРавно – сами значения. +// Значение - Значение отбора, для видов сравнения ВСписке и НеВСписке - массив значений. +// Для видов сравнения Равно / НеРавно - сами значения. // Все условия отбора объединяются по И. // Возвращаемое значение: -// ТаблицаЗначений – таблица найденных заданий. Колонки соответствуют параметрам заданий. +// ТаблицаЗначений - таблица найденных заданий. Колонки соответствуют параметрам заданий. // Функция ПолучитьЗадания(Знач Отбор) Экспорт @@ -112,7 +111,6 @@ ПолучатьНеразделенные); КонецЕсли; - КонецЦикла; Иначе @@ -663,8 +661,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Проверяет переданную структуру параметров на соответствие требованиям // подсистемы: @@ -879,3 +878,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index a0b2d836d..e1f26b3f4 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Формирует список шаблонов заданий очереди. // @@ -15,8 +14,6 @@ // Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - - КонецПроцедуры // Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий @@ -30,8 +27,6 @@ // Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - - КонецПроцедуры // Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении @@ -68,15 +63,11 @@ // Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - КонецПроцедуры // Устарело. Рекомендуется использовать ПриПолученииСпискаШаблонов(). // Процедура ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий) Экспорт - - КонецПроцедуры @@ -84,6 +75,6 @@ // Процедура ПолучитьРазрешенныеМетодыОчередиЗаданий(Знач РазрешенныеМетоды) Экспорт - - КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index a49c2755d..b1bce73ed 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Рассчитывает следующий момент запуска задания. // @@ -170,8 +169,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -184,9 +184,8 @@ Возврат; КонецЕсли; - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, + // т.к. необходимые действия выполняются в частном порядке. // Выбираем события в состояниях Выполняется, Завершено, НеЗапланировано, ОшибкаВыполнения Запрос = Новый Запрос; @@ -305,9 +304,8 @@ // Процедура ОбработатьОчередьЗаданий(КлючФоновогоЗадания) Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, + // т.к. необходимые действия выполняются в частном порядке. НайденноеФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Ключ", КлючФоновогоЗадания)); Если НайденноеФоновоеЗадание.Количество() = 1 Тогда @@ -473,10 +471,9 @@ Если ЗначениеЗаполнено(Выборка.Шаблон) И Выборка.СсылкаШаблона = Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди с идентификатором %1'", - Метаданные.ОсновнойЯзык.КодЯзыка); + ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди с идентификатором %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Выборка.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Выполнение'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Выполнение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , @@ -551,9 +548,322 @@ КонецПроцедуры +// Служебная процедура, которая вызывается для выполнения обработчика ошибок задания в случае, +// когда процесс, исполняющий задание не смог завершить выполнение самостоятельно +// +// Параметры: +// Задание - СправочникСсылка - ссылка на задание, обработчик ошибки которого необходимо выполнить +// ИнформацияОбОшибкеВыполненияЗадания - ИнформацияОбОшибке - информация об ошибке, с которой завершилось задание +// +Процедура ОбработатьОшибку(Знач Задание, Знач ИнформацияОбОшибкеВыполненияЗадания = Неопределено) Экспорт + + Попытка + + ЗаблокироватьДанныеДляРедактирования(Задание); + + ПараметрыОбработчикаОшибок = ПолучитьПараметрыОбработчикаОшибок(Задание, ИнформацияОбОшибкеВыполненияЗадания); + Если ПараметрыОбработчикаОшибок.ОбработчикСуществует Тогда + ВыполнитьМетодКонфигурации(ПараметрыОбработчикаОшибок.ИмяМетода, ПараметрыОбработчикаОшибок.ПараметрыВызоваОбработчика); + КонецЕсли; + + Исключение + + ШаблонКомментария = НСтр("ru = 'Ошибка при выполнении обработчика ошибок + |Псевдоним метода: %1 + |Метод обработчика ошибок: %2 + |По причине: + |%3'"); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКомментария, + ПараметрыОбработчикаОшибок.ИмяМетодаЗадания, + ПараметрыОбработчикаОшибок.ИмяМетода, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Очередь регламентных заданий.Ошибка обработчика ошибок'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстКомментария); + + КонецПопытки; + + Задание = ПараметрыОбработчикаОшибок.Задание.ПолучитьОбъект(); + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.ОшибкаВыполнения; + ОбщегоНазначения.ЗаписатьВспомогательныеДанные(Задание); + РазблокироватьДанныеДляРедактирования(Задание.Ссылка); + +КонецПроцедуры + +// Служебная процедура, которая снимает задания обработчика ошибок и свои собственные. Необходима для случая, когда задание +// исполнение "ОбработатьОшибку" не смогло завершиться +// +// Параметры: +// ПараметрыВызова - Массив - Массив параметров, который был передан заданию, ошибку выполнения которого мы обрабатываем +// используется только для определения задания, ошибку выполнения которого мы обрабатываем +// ИнформацияОбОшибке - ОписаниеОшибки - Не используется, необходимо только потому, что этот параметр должен присутствовать +// в обработчике ошибок +// СчетчикРекурсии - Число - Используется для подсчета количества созданных заданий снятия заданий +// +Процедура СнятьЗаданияОбработкиОшибок(Знач ПараметрыВызова, Знач ИнформацияОбОшибке = Неопределено, Знач СчетчикРекурсии = 1) Экспорт + + НачатьТранзакцию(); + Попытка + + ЗаданиеСсылка = ПараметрыВызова.Параметры[0]; + + Если Не ОбщегоНазначения.СсылкаСуществует(ЗаданиеСсылка) Тогда + + ОтменитьТранзакцию(); + Возврат; + + КонецЕсли; + + Задание = ЗаданиеСсылка.ПолучитьОбъект(); + + ЗаблокироватьДанныеДляРедактирования(ЗаданиеСсылка); + + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.ОшибкаВыполнения; + ОбщегоНазначения.ЗаписатьВспомогательныеДанные(Задание); + + ПараметрыОбработчикаОшибок = ПолучитьПараметрыОбработчикаОшибок(Задание); + Если ПараметрыОбработчикаОшибок.ИмяМетода = "ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок" Тогда + + СнятьЗаданияОбработкиОшибок(ПараметрыОбработчикаОшибок.ПараметрыВызоваОбработчика[0], ИнформацияОбОшибке, СчетчикРекурсии + 1); + + Иначе + + ШаблонКомментария = НСтр("ru = 'Был выполнен обработчик снятие заданий. + |Псевдоним метода: %1 + |Уровень рекурсии: %2'"); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКомментария, + ПараметрыОбработчикаОшибок.ИмяМетодаЗадания, + СчетчикРекурсии); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Очередь регламентных заданий.Снятие заданий обработки ошибок'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + , + ТекстКомментария); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + КонецПопытки; + + РазблокироватьДанныеДляРедактирования(ЗаданиеСсылка); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции +// Метод предназначен для вызова методов обработчиков задания и ошибок +// +// Параметры: +// ИмяМетода - Строка - Имя вызываемого метода +// Параметры - Массив - Значение параметров, передаваемых методу, в порядке +// их следования в вызываемом методе +// +Процедура ВыполнитьМетодКонфигурации(ИмяМетода, Параметры = Неопределено) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + РазделительУстановлен = Истина; + ЗначениеРазделителя = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + Иначе + РазделительУстановлен = Ложь; + КонецЕсли; + + Если ТранзакцияАктивна() Тогда + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед стартом выполнения обработчика %1 есть активные транзакции!'"), + ИмяМетода); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстСообщенияОбОшибке); + + ВызватьИсключение ТекстСообщенияОбОшибке; + + КонецЕсли; + + Попытка + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяМетода, Параметры); + + Если ТранзакцияАктивна() Тогда + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + ШаблонСообщения = НСтр("ru = 'По завершении выполнения обработчика %1 не была закрыта транзакция'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяМетода); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстСообщения); + + КонецЕсли; + + Если Не(РазделительУстановлен) И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По завершении выполнения обработчика %1 не было выключено разделение сеанса!'"), + ИмяМетода); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстСообщенияОбОшибке); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + ИначеЕсли РазделительУстановлен И ЗначениеРазделителя <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По завершении выполнения обработчика %1 было изменено значение разделителя сеанса!'"), + ИмяМетода); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстСообщенияОбОшибке); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина,ЗначениеРазделителя); + + КонецЕсли; + + + Исключение + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + Если Не(РазделительУстановлен) И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + ИначеЕсли РазделительУстановлен И ЗначениеРазделителя <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина,ЗначениеРазделителя); + КонецЕсли; + + ТекстОшибки = ИнформацияОбОшибке().Описание; + + ВызватьИсключение ТекстОшибки; + + КонецПопытки; + +КонецПроцедуры + +// Формирует и возвращает информацию об ошибке по тексту ее описания +Функция КонструкторИнформацииОбОшибке(ТекстОшибки) + + Попытка + + ВызватьИсключение ТекстОшибки; + + Исключение + Информация = ИнформацияОбОшибке(); + КонецПопытки; + + Возврат Информация; + +КонецФункции + +// Получает по ссылке на задание параметры для запуска обработчика ошибок +// +// Параметры: +// Задание - СправочникСсылка.ОчередьЗаданий или СправочникСсылка.ОчередьЗаданийОбластейДанных - +// Ссылка на задание, по которой необходимо получить параметры обработчика ошибок +// +// Возвращаемое значение: +// Структура - Параметры для запуска обработчика ошибок +// ИмяМетода - Строка, имя метода обработчика ошибок, который должен быть запущен +// ИмяМетодаЗадания - Строка, имя метода задания, который должен был выполниться, +// ПараметрыВызоваОбработчика - массив с параметрами, которые будут переданы процедуре обработки ошибок +// ОбработчикСуществует - Булево, обработчик ошибок для данного задания существует +// Задание - СправочникСсылка.ОчередьЗаданий или СправочникСсылка.ОчередьЗаданийОбластейДанных - +// Ссылка на задание, которое было передано как входящий параметр +// +Функция ПолучитьПараметрыОбработчикаОшибок(Знач Задание,Знач ИнформацияОбОшибкеВыполненияЗадания = Неопределено) + + Результат = Новый Структура("ИмяМетода,ИмяМетодаЗадания,ПараметрыВызоваОбработчика,ОбработчикСуществует,Задание"); + Результат.Задание = Задание.Ссылка; + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные().ПолноеИмя(), + ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) + И ЗначениеЗаполнено(Задание.Шаблон) Тогда + + Результат.ИмяМетодаЗадания = Задание.Шаблон.ИмяМетода; + + Иначе + + Результат.ИмяМетодаЗадания = Задание.ИмяМетода; + + КонецЕсли; + + ИмяМетодаОбработчикаОшибки = + ОчередьЗаданийСлужебныйПовтИсп.СоответствиеОбработчиковОшибокПсевдонимам().Получить(ВРег(Результат.ИмяМетодаЗадания)); + Результат.ИмяМетода = ИмяМетодаОбработчикаОшибки; + Результат.ОбработчикСуществует = ЗначениеЗаполнено(Результат.ИмяМетода); + Если Результат.ОбработчикСуществует Тогда + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Параметры", Задание.Параметры.Получить()); + ПараметрыЗадания.Вставить("НомерПопытки", Задание.НомерПопытки); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", Задание.КоличествоПовторовПриАварийномЗавершении); + ПараметрыЗадания.Вставить("ДатаНачалаПоследнегоЗапуска", Задание.ДатаНачалаПоследнегоЗапуска); + + Если ИнформацияОбОшибкеВыполненияЗадания = Неопределено Тогда + + ИсполняющееФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.ИсполняющееФоновоеЗадание); + + Если ИсполняющееФоновоеЗадание <> Неопределено И ИсполняющееФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + + ИнформацияОбОшибкеВыполненияЗадания = ИсполняющееФоновоеЗадание.ИнформацияОбОшибке; + + КонецЕсли; + + КонецЕсли; + + Если ИнформацияОбОшибкеВыполненияЗадания = Неопределено Тогда + + ИнформацияОбОшибкеВыполненияЗадания = КонструкторИнформацииОбОшибке(НСтр("ru = 'Задание завершилось с неизвестной ошибкой, возможно вызванной падением рабочего процесса.'")); + + КонецЕсли; + + ПараметрыВызоваОбработчика = Новый Массив; + ПараметрыВызоваОбработчика.Добавить(ПараметрыЗадания); + ПараметрыВызоваОбработчика.Добавить(ИнформацияОбОшибкеВыполненияЗадания); + + Результат.ПараметрыВызоваОбработчика = ПараметрыВызоваОбработчика; + Иначе + Результат.ПараметрыВызоваОбработчика = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + + // Формирует и возвращает таблицу имен регламентных заданий с признаком использования. // // Возвращаемое значение: @@ -665,7 +975,7 @@ ВызватьИсключение(ТекстСообщения); КонецЕсли; - ОбщегоНазначения.ВыполнитьБезопасно(ИмяМетода, Параметры); + ВыполнитьМетодКонфигурации(ИмяМетода,Параметры); КонецПроцедуры @@ -1014,23 +1324,15 @@ Задание = Выборка.Идентификатор.ПолучитьОбъект(); - // Если состояние задания Выполняется, но данные не заблокированы для редактирования - значит оно уже не выполняется - Если Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется Тогда - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Идентификатор, - НСтр("ru = 'Исполняющее задание было принудительно завершено'")); - КонецЕсли; - Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) И Выборка.Шаблон = Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди %1'", - Метаданные.ОсновнойЯзык.КодЯзыка); + ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Планирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , @@ -1046,8 +1348,7 @@ КонецЕсли; - Если (Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется - Или Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.ОшибкаВыполнения) + Если Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.ОшибкаВыполнения И Задание.НомерПопытки < Выборка.КоличествоПовторовПриАварийномЗавершении Тогда // Попытка повторного запуска Если ЗначениеЗаполнено(Задание.ДатаЗавершенияПоследнегоЗапуска) Тогда @@ -1062,6 +1363,35 @@ Задание.ИсполняющееФоновоеЗадание = Неопределено; Задание.Записать(); + ИначеЕсли Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется Тогда // Задание не было выполнено, запланируем обработчик ошибки + + ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Идентификатор, + НСтр("ru = 'Исполняющее задание было принудительно завершено'")); + + // Запланируем разовое задание для выполнения обработчика ошибок + ПараметрыОбработчика = ПолучитьПараметрыОбработчикаОшибок(Задание); + Если ПараметрыОбработчика.ОбработчикСуществует Тогда + + НовоеЗадание = Справочники[Задание.Метаданные().Имя].СоздатьЭлемент(); + НовоеЗадание.ЗапланированныйМоментЗапуска = ТекущаяУниверсальнаяДата(); + НовоеЗадание.Использование = Истина; + НовоеЗадание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + ПараметрыВызова = Новый Массив; + ПараметрыВызова.Добавить(Задание.Ссылка); + НовоеЗадание.Параметры = Новый ХранилищеЗначения(ПараметрыВызова); + НовоеЗадание.ИмяМетода = "ОчередьЗаданийСлужебный.ОбработатьОшибку"; + Если ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(Задание.Метаданные(),"ОбластьДанныхВспомогательныеДанные") Тогда + НовоеЗадание.ОбластьДанныхВспомогательныеДанные = Задание.ОбластьДанныхВспомогательныеДанные; + КонецЕсли; + ОбщегоНазначения.ЗаписатьВспомогательныеДанные(НовоеЗадание); + + // Останавливаем выполнение задания пока не будет выполнен обработчик ошибок + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.ОбработкаОшибкиПриАварийномЗавершении; + Задание.Записать(); + + КонецЕсли; + Иначе Расписание = Выборка.Расписание.Получить(); Если Расписание <> Неопределено Тогда @@ -1085,10 +1415,9 @@ ) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания - ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'", - Метаданные.ОсновнойЯзык.КодЯзыка); + ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Планирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , @@ -1191,60 +1520,18 @@ ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); Если ЗначениеЗаполнено(Шаблон) Тогда - ОбщегоНазначения.ВыполнитьБезопасно(ИмяМетода); + ВыполнитьМетодКонфигурации(ИмяМетода); Иначе ВыполнитьОбработчикЗадания(Шаблон, ИмяМетода, Задание.Параметры.Получить()); КонецЕсли; ВыполненоУспешно = Истина; - Если ТранзакцияАктивна() Тогда - - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - - ШаблонСообщения = НСтр("ru = 'По завершении выполнения обработчика %1 не была закрыта транзакция'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.ИмяМетода); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - ИсполняющееФоновоеЗадание, - ТекстСообщения); - - КонецЕсли; - - Если ОбластьДанных = -1 И ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По завершении выполнения обработчика %1 не было выключено разделение сеанса!'"), - Задание.ИмяМетода); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстСообщенияОбОшибке); - - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - - КонецЕсли; - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено успешно'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); Исключение - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - Если ОбластьДанных = -1 И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1261,53 +1548,10 @@ КонецПопытки; Если НЕ ВыполненоУспешно Тогда + // Вызов обработчиков ошибок - ОбработчикОшибок = - ОчередьЗаданийСлужебныйПовтИсп.СоответствиеОбработчиковОшибокПсевдонимам().Получить(ВРег(ИмяМетода)); - - Если ОбработчикОшибок <> Неопределено Тогда - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Параметры", Задание.Параметры.Получить()); - ПараметрыЗадания.Вставить("НомерПопытки", Задание.НомерПопытки); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", Задание.КоличествоПовторовПриАварийномЗавершении); - ПараметрыЗадания.Вставить("ДатаНачалаПоследнегоЗапуска", Задание.ДатаНачалаПоследнегоЗапуска); - - ПараметрыОбработчикаОшибок = Новый Массив; - ПараметрыОбработчикаОшибок.Добавить(ПараметрыЗадания); - ПараметрыОбработчикаОшибок.Добавить(ИнформацияОбОшибкеВыполненияЗадания); - - Попытка - ОбщегоНазначения.ВыполнитьБезопасно(ОбработчикОшибок, ПараметрыОбработчикаОшибок); - Исключение - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - Если ОбластьДанных = -1 И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - - ШаблонКомментария = НСтр("ru = 'Ошибка при выполнении обработчика ошибок - |Псевдоним метода: %1 - |Метод обработчика ошибок: %2 - |По причине: - |%3'"); - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонКомментария, - ИмяМетода, - ОбработчикОшибок, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Очередь регламентных заданий.Ошибка обработчика ошибок'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстКомментария); - КонецПопытки; - КонецЕсли; + ОбработатьОшибку(Ссылка, ИнформацияОбОшибкеВыполненияЗадания); + КонецЕсли; НачатьТранзакцию(); @@ -1466,4 +1710,6 @@ КонецПопытки; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl index 026e65c32..789967506 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает соответствие имен методов их псевдонимам (в верхнем регистре) // для вызова из очереди заданий @@ -33,6 +32,10 @@ Обработчик.Модуль.ПриОпределенииПсевдонимовОбработчиков(МетодыКонфигурации); КонецЦикла; + // Определяем методы служебных процедур для обработки ошибок заданий + МетодыКонфигурации.Вставить("ОчередьЗаданийСлужебный.ОбработатьОшибку"); + МетодыКонфигурации.Вставить("ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок"); + ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков(МетодыКонфигурации); Для каждого КлючИЗначение Из МетодыКонфигурации Цикл @@ -55,6 +58,11 @@ Функция СоответствиеОбработчиковОшибокПсевдонимам() Экспорт ОбработчикиОшибок = Новый Соответствие; + + // Заполнение встроенных обработчиков ошибок + ОбработчикиОшибок.Вставить("ОчередьЗаданийСлужебный.ОбработатьОшибку","ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок"); + ОбработчикиОшибок.Вставить("ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок","ОчередьЗаданийСлужебный.СнятьЗаданияОбработкиОшибок"); + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииОбработчиковОшибок"); @@ -285,4 +293,6 @@ Возврат МассивСправочников; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl index 63e8da2dd..71c053df3 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Вызывается при заполнении массива справочников, которые могут использоваться для // хранения заданий очереди заданий. @@ -456,8 +455,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Заполняет справочник ШаблоныЗаданийОчереди списком регламентных заданий, использующихся // в качестве шаблонов для заданий очереди, а также принудительно снимает признак Использование @@ -648,3 +648,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl index 2637fef1f..127020c57 100644 --- a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Устанавливает новый префикс информационной базы и изменяет коды и номера объектов // в соответствии с новым префиксом и форматом кода/номера. @@ -12,16 +11,15 @@ // Место создания объекта определяется по префиксу его номера или кода. // // Параметры: -// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. -// -// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. -// -// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. -// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, -// например, при переходе из локального режима работы в модель сервиса. -// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. -// -// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество объектов, для которых был изменен номер или код. +// НовыйПрефиксИБ - Строка - Новый префикс информационной базы, который требуется установить. +// НачалоПериодаПерепрефиксации - Дата - Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. +// ПредыдущийПрефиксИБ - Строка - Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, +// если произошла утеря значения префикса ИБ, например, +// при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный +// формат, отличный от формата БСП. +// ОбъектовОбработано - Число - В этот параметр возвращается количество объектов, для которых был изменен номер или код. // Процедура УстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ( Знач НовыйПрефиксИБ, @@ -40,16 +38,15 @@ // Место создания объекта определяется по префиксу его номера или кода. // // Параметры: -// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. -// -// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. -// -// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. -// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, -// например, при переходе из локального режима работы в модель сервиса. -// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. -// -// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество объектов, для которых был изменен номер или код. +// НовыйПрефиксИБ - Строка - Новый префикс информационной базы, который требуется установить. +// НачалоПериодаПерепрефиксации - Дата - Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. +// ПредыдущийПрефиксИБ - Строка - Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, +// если произошла утеря значения префикса ИБ, например, +// при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный +// формат, отличный от формата БСП. +// ОбъектовОбработано - Число - В этот параметр возвращается количество объектов, для которых был изменен номер или код. // Процедура УстановитьПрефиксИБИПерепрефиксоватьВсеОбъекты( Знач НовыйПрефиксИБ, @@ -68,16 +65,15 @@ // Место создания объекта определяется по префиксу его номера или кода. // // Параметры: -// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. -// -// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет выполнен анализ данных. -// -// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. -// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, -// например, при переходе из локального режима работы в модель сервиса. -// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. -// -// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество созданных объектов. +// НовыйПрефиксИБ - Строка - Новый префикс информационной базы, который требуется установить. +// НачалоПериодаПерепрефиксации - Дата - Дата, начиная с которой будет выполнен анализ данных. +// ПредыдущийПрефиксИБ - Строка - Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, +// если произошла утеря значения префикса ИБ, например, +// при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный +// формат, отличный от формата БСП. +// ОбъектовОбработано - Число - В этот параметр возвращается количество созданных объектов. // Процедура УстановитьПрефиксИБИСоздатьОбъекты( Знач НовыйПрефиксИБ, @@ -95,17 +91,16 @@ // Обработке подлежат только объекты, созданные в текущей информационной базе. // Место создания объекта определяется по префиксу его номера или кода. // -// Параметры: -// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. -// -// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет выполнен анализ данных. -// -// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. -// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, -// например, при переходе из локального режима работы в модель сервиса. -// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. -// -// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество измененных объектов. +// Параметры: +// НовыйПрефиксИБ - Строка - Новый префикс информационной базы, который требуется установить. +// НачалоПериодаПерепрефиксации - Дата - Дата, начиная с которой будет выполнен анализ данных. +// ПредыдущийПрефиксИБ - Строка - Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, +// если произошла утеря значения префикса ИБ, например, +// при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный +// формат, отличный от формата БСП. +// ОбъектовОбработано - Число - В этот параметр возвращается количество измененных объектов. // Процедура УстановитьПрефиксИБИПерепрефиксоватьПоследниеОбъекты( Знач НовыйПрефиксИБ, @@ -118,8 +113,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ( Знач НовыйПрефикс, @@ -1516,7 +1512,7 @@ // Возвращает префикс организации // // Параметры: -// Организация. Тип: СправочникСсылка.Организации – организация для которой надо получить префикс. +// Организация - СправочникСсылка.Организации - организация для которой надо получить префикс. // ПрефиксОрганизации - Строка - прификс организации. // Процедура ПриОпределенииПрефиксаОрганизации(Знач Организация, ПрефиксОрганизации) Экспорт @@ -1540,3 +1536,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl index 8ec7cbcdf..79731f21e 100644 --- a/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Определяет список модулей библиотек и конфигурации, которые // предоставляют основные сведения о себе: имя, версия, список обработчиков обновления @@ -25,3 +24,5 @@ КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index c6961483b..b624b931e 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обновляет индекс полнотекстового поиска. Процедура ОбновлениеИндексаППД() Экспорт @@ -35,8 +34,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -81,20 +81,37 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Обработчик регламентного задания +Процедура ОбновлениеИндексаППДПоРасписанию() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + ОбновлениеИндексаППД(); + +КонецПроцедуры + +// Обработчик регламентного задания +Процедура СлияниеИндексаППДПоРасписанию() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + СлияниеИндексаППД(); + +КонецПроцедуры // Общая процедура для обновления и слияния индекса ППД. Процедура ОбновитьИндекс(ПредставлениеПроцедуры, РазрешитьСлияние = Ложь, Порциями = Ложь) - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - Если НЕ ОперацииРазрешены() Тогда Возврат; КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ЗаписьЖурнала(Неопределено, НСтр("ru = 'Запуск процедуры ""%1"".'"), , ПредставлениеПроцедуры); Попытка @@ -107,7 +124,7 @@ КонецПроцедуры // Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. -Функция ОперацииРазрешены() +Функция ОперацииРазрешены() Экспорт Возврат ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; @@ -159,9 +176,10 @@ // Запись в журнал регистрации ЗаписьЖурналаРегистрации( - НСтр("ru = 'Полнотекстовое индексирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурнала, , , ТекстДляЖурнала); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 73e652369..a4ac7c8fc 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -3,172 +3,85 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс -// Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временный файл. +// Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его по указанному пути на сервере. // // Параметры: -// URL - Строка - url файла в формате -// [Протокол://]<Сервер>/<Путь к файлу на сервере> -// ПараметрыПолучения - Структура со свойствами -// ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла -// Пользователь - Строка - пользователь от имени которого установлено соединение -// Пароль - Строка - пароль пользователя от которого установлено соединение -// Порт - Число - порт сервера с которым установлено соединение -// Таймаут - Число - таймаут на получение файла, в секундах -// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, -// что соединение должно производиться через https -// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, -// что соединение должно пассивным (или активным) +// URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере> +// ПараметрыПолучения - Структура со свойствами: +// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла +// * Пользователь - Строка - пользователь от имени которого установлено соединение +// * Пароль - Строка - пароль пользователя от которого установлено соединение +// * Порт - Число - порт сервера с которым установлено соединение +// * Таймаут - Число - таймаут на получение файла, в секундах +// * ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, что соединение должно производиться через https +// * ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, что соединение должно пассивным (или активным) +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос +// ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла // // Возвращаемое значение: -// Структура - свойства: -// Статус - Булево - ключ присутствует в структуре всегда, значения -// Истина - вызов функции успешно завершен -// Ложь - вызов функции завершен неудачно -// Путь - Строка - путь к файлу на сервере, ключ используется только -// если статус Истина -// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// Структура - Структура со свойствами: +// * Статус - Булево - результат получения файла +// * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина +// * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет // -Функция СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено) Экспорт +Функция СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт - // Объявление переменных перед первым использованием в качестве - // параметра метода Свойство, при анализе параметров получения файлов - // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, - ЗащищенноеСоединение, ПассивноеСоединение; + НастройкиПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.СтруктураПараметровПолученияФайла(); - // Инициализируем параметры скачивания файла - Если ПараметрыПолучения = Неопределено Тогда - ПараметрыПолучения = Новый Структура; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ПутьДляСохранения", ПутьДляСохранения) Тогда - ПутьДляСохранения = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пользователь", Пользователь) Тогда - Пользователь = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пароль", Пароль) Тогда - Пароль = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Порт", Порт) Тогда - Порт = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Таймаут", Таймаут) Тогда - Таймаут = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение) Тогда - ЗащищенноеСоединение = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение) Тогда - ПассивноеСоединение = Неопределено; + Если ПараметрыПолучения <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(НастройкиПолучения, ПараметрыПолучения); + КонецЕсли; НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Сервер"); - НастройкаСохранения.Вставить("Путь", ПутьДляСохранения); + НастройкаСохранения.Вставить("Путь", НастройкиПолучения.ПутьДляСохранения); - Результат = ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла( - URL, - Пользователь, - Пароль, - Порт, - Таймаут, - ЗащищенноеСоединение, - ПассивноеСоединение, - НастройкаСохранения); - - Возврат Результат; + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, + НастройкиПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции -// Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временное хранилище. +// Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его во временное хранилище.. // // Параметры: -// URL - Строка - url файла в формате: -// [Протокол://]<Сервер>/<Путь к файлу на сервере> -// ПараметрыПолучения - Структура со свойствами -// Пользователь - Строка - пользователь от имени которого установлено соединение -// Пароль - Строка - пароль пользователя от которого установлено соединение -// Порт - Число - порт сервера с которым установлено соединение -// Таймаут - Число - таймаут на получение файла, в секундах -// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, -// что соединение должно производиться через https -// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, -// что соединение должно пассивным (или активным) +// URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере> +// ПараметрыПолучения - Структура со свойствами: +// * Пользователь - Строка - пользователь от имени которого установлено соединение +// * Пароль - Строка - пароль пользователя от которого установлено соединение +// * Порт - Число - порт сервера с которым установлено соединение +// * Таймаут - Число - таймаут на получение файла, в секундах +// * ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, что соединение должно производиться через https +// * ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, что соединение должно пассивным (или активным) +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос +// ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла // // Возвращаемое значение: -// Структура - свойства: -// Статус - Булево - ключ присутствует в структуре всегда, значения -// Истина - вызов функции успешно завершен -// Ложь - вызов функции завершен неудачно -// Путь - Строка - адрес временного хранилища с двоичными данными файла, -// ключ используется только если статус Истина -// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// Структура - Структура со свойствами: +// * Статус - Булево - результат получения файла +// * Путь - Строка - адрес временного хранилища с двоичными данными файла, ключ используется только если статус Истина +// * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет // -Функция СкачатьФайлВоВременноеХранилище(Знач URL, ПараметрыПолучения = Неопределено) Экспорт +Функция СкачатьФайлВоВременноеХранилище(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт - // Объявление переменных перед первым использованием в качестве - // параметра метода Свойство, при анализе параметров получения файлов - // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, - ЗащищенноеСоединение, ПассивноеСоединение; - - // Получаем параметры получения файла - Если ПараметрыПолучения = Неопределено Тогда - ПараметрыПолучения = Новый Структура; - КонецЕсли; + НастройкиПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.СтруктураПараметровПолученияФайла(); - Если Не ПараметрыПолучения.Свойство("ПутьДляСохранения", ПутьДляСохранения) Тогда - ПутьДляСохранения = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пользователь", Пользователь) Тогда - Пользователь = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пароль", Пароль) Тогда - Пароль = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Порт", Порт) Тогда - Порт = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Таймаут", Таймаут) Тогда - Таймаут = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение) Тогда - ЗащищенноеСоединение = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение) Тогда - ПассивноеСоединение = Неопределено; + Если ПараметрыПолучения <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(НастройкиПолучения, ПараметрыПолучения); + КонецЕсли; НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "ВременноеХранилище"); - Результат = ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла( - URL, - Пользователь, - Пароль, - Порт, - Таймаут, - ЗащищенноеСоединение, - ПассивноеСоединение, - НастройкаСохранения); - - Возврат Результат; + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, + НастройкиПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -233,3 +146,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index 8ce43381e..01ce26dab 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -3,77 +3,45 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс -// Общая интерфейсная функция для получения файла из Интернет по протоколу http(s) -// либо ftp и сохранения его во временное хранилище. +// Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его по указанному пути на клиенте. // // Параметры: -// URL* - строка - url файла в формате: -// [Протокол://]<Сервер>/<Путь к файлу на сервере> -// ПараметрыПолучения* - структура с ключами: -// ПутьДляСохранения - строка - путь на клиенте (включая имя файла), сохранения -// Пользователь - строка - пользователь от имени которого установлено соединение -// Пароль - строка - пароль пользователя от которого установлено соединение -// Порт - число - порт сервера с которым установлено соединение -// Таймаут - Число - таймаут на получение файла, в секундах -// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, -// что соединение должно производиться через https -// ПассивноеСоединение - - Булево - для случая ftp загрузки флаг указывает, -// что соединение должно пассивным (или активным) -// ЗаписыватьОшибку - Булево - Признак необходимости записывать сообщение в журнал регистрации -// при возникновении ошибки при скачивании файла. Например, если -// файл отсутствует по заданному пути. -// -// помеченные знаком '*' являются обязательными +// URL - Строка - url файла в формате [Протокол://]<Сервер>/<Путь к файлу на сервере> +// ПараметрыПолучения - Структура со свойствами: +// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла +// * Пользователь - Строка - пользователь от имени которого установлено соединение +// * Пароль - Строка - пароль пользователя от которого установлено соединение +// * Порт - Число - порт сервера с которым установлено соединение +// * Таймаут - Число - таймаут на получение файла, в секундах +// * ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, что соединение должно производиться через https +// * ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, что соединение должно пассивным (или активным) +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос +// ЗаписыватьОшибку - Булево - Признак необходимости записи ошибки в журнал регистрации при получении файла // // Возвращаемое значение: -// структура -// Статус - Булево - ключ присутствует в структуре всегда, значения -// Истина - вызов функции успешно завершен -// Ложь - вызов функции завершен неудачно -// Путь - Строка - путь к файлу на клиенте, ключ используется только -// если статус Истина -// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// Структура - Структура со свойствами: +// * Статус - Булево - результат получения файла +// * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина +// * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет // Функция СкачатьФайлНаКлиенте(Знач URL, Знач ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт - // Объявление переменных перед первым использованием в качестве - // параметра метода Свойство, при анализе параметров получения файлов - // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, ЗащищенноеСоединение, ПассивноеСоединение; + НастройкиПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.СтруктураПараметровПолученияФайла(); - // Получаем параметры получения файла - - Если ПараметрыПолучения = Неопределено Тогда - ПараметрыПолучения = Новый Структура; + Если ПараметрыПолучения <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(НастройкиПолучения, ПараметрыПолучения); + КонецЕсли; - ПараметрыПолучения.Свойство("ПутьДляСохранения", ПутьДляСохранения); - ПараметрыПолучения.Свойство("Пользователь", Пользователь); - ПараметрыПолучения.Свойство("Пароль", Пароль); - ПараметрыПолучения.Свойство("Порт", Порт); - ПараметрыПолучения.Свойство("Таймаут", Таймаут); - ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение); - ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение); - НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Клиент"); - НастройкаСохранения.Вставить("Путь", ПутьДляСохранения); + НастройкаСохранения.Вставить("Путь", НастройкиПолучения.ПутьДляСохранения); - Результат = ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла( - URL, - Пользователь, - Пароль, - Порт, - Таймаут, - ЗащищенноеСоединение, - ПассивноеСоединение, - НастройкаСохранения, - ЗаписыватьОшибку); - - Возврат Результат; + Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL, НастройкиПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -83,4 +51,6 @@ ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index f04ea8dd9..6071176f6 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает объект ИнтернетПрокси для доступа в Интернет. // @@ -44,7 +43,7 @@ // Функция РазделитьURL(Знач URL) Экспорт - СтруктураURL = СтруктураURI(URL); + СтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Результат = Новый Структура; Результат.Вставить("Протокол", ?(ПустаяСтрока(СтруктураURL.Схема), "http", СтруктураURL.Схема)); @@ -56,92 +55,16 @@ КонецФункции // Разбирает строку URI на составные части и возвращает в виде структуры. -// На основе RFC 3986. -// -// Параметры: -// СтрокаURI - Строка - ссылка на ресурс в формате: -// -// <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь> -// \______________/ \___________/ -// | | -// авторизация имя сервера -// \____________________________/ \________________________/ -// | | -// строка соединения путь на сервере -// -// Возвращаемое значение: -// Структура: -// Схема - Строка; -// Логин - Строка; -// Пароль - Строка; -// ИмяСервера - Строка; -// Хост - Строка; -// Порт - Строка; -// ПутьНаСервере - Строка; // Функция СтруктураURI(Знач СтрокаURI) Экспорт - СтрокаURI = СокрЛП(СтрокаURI); - - // схема - Схема = ""; - Позиция = Найти(СтрокаURI, "://"); - Если Позиция > 0 Тогда - Схема = НРег(Лев(СтрокаURI, Позиция - 1)); - СтрокаURI = Сред(СтрокаURI, Позиция + 3); - КонецЕсли; - - // строка соединения и путь на сервере - СтрокаСоединения = СтрокаURI; - ПутьНаСервере = ""; - Позиция = Найти(СтрокаСоединения, "/"); - Если Позиция > 0 Тогда - ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); - СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); - КонецЕсли; - - // информация пользователя и имя сервера - СтрокаАвторизации = ""; - ИмяСервера = СтрокаСоединения; - Позиция = Найти(СтрокаСоединения, "@"); - Если Позиция > 0 Тогда - СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); - ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); - КонецЕсли; - - // логин и пароль - Логин = СтрокаАвторизации; - Пароль = ""; - Позиция = Найти(СтрокаАвторизации, ":"); - Если Позиция > 0 Тогда - Логин = Лев(СтрокаАвторизации, Позиция - 1); - Пароль = Сред(СтрокаАвторизации, Позиция + 1); - КонецЕсли; - - // хост и порт - Хост = ИмяСервера; - Порт = ""; - Позиция = Найти(ИмяСервера, ":"); - Если Позиция > 0 Тогда - Хост = Лев(ИмяСервера, Позиция - 1); - Порт = Сред(ИмяСервера, Позиция + 1); - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Схема", Схема); - Результат.Вставить("Логин", Логин); - Результат.Вставить("Пароль", Пароль); - Результат.Вставить("ИмяСервера", ИмяСервера); - Результат.Вставить("Хост", Хост); - Результат.Вставить("Порт", Порт); - Результат.Вставить("ПутьНаСервере", ПутьНаСервере); - - Возврат Результат; + Возврат ОбщегоНазначенияКлиентСервер.СтруктураURI(СтрокаURI); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -150,11 +73,17 @@ // // Параметры: // URL - строка - url файла в формате: -// [Протокол://]<Сервер>/<Путь к файлу на сервере> -// Пользователь - строка - пользователь от имени которого установлено соединение -// Пароль - строка - пароль пользователя от которого установлено соединение -// Порт - число - порт сервера с которым установлено соединение -// ЗащищенноеПассивноеСоединение +// НастройкиПолучения - Структура со свойствами +// ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла +// Пользователь - Строка - пользователь от имени которого установлено соединение +// Пароль - Строка - пароль пользователя от которого установлено соединение +// Порт - Число - порт сервера с которым установлено соединение +// Таймаут - Число - таймаут на получение файла, в секундах +// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, +// что соединение должно производиться через https +// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, +// что соединение должно пассивным (или активным) +// Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос // // НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла // ключи: @@ -173,22 +102,21 @@ // либо адрес во временном хранилище // в случае неуспеха сообщение об ошибке // -Функция ПодготовитьПолучениеФайла(Знач URL, Знач Пользователь = Неопределено, Знач Пароль = Неопределено, - Знач Порт = Неопределено, Знач Таймаут, Знач ЗащищенноеСоединение = Ложь, Знач ПассивноеСоединение = Ложь, - Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт +Функция ПодготовитьПолучениеФайла(Знач URL, Знач НастройкиПолучения, Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт НастройкаСоединения = Новый Соответствие; - НастройкаСоединения.Вставить("Пользователь", Пользователь); - НастройкаСоединения.Вставить("Пароль", Пароль); - НастройкаСоединения.Вставить("Порт", Порт); - НастройкаСоединения.Вставить("Таймаут", Таймаут); + НастройкаСоединения.Вставить("Пользователь", НастройкиПолучения.Пользователь); + НастройкаСоединения.Вставить("Пароль", НастройкиПолучения.Пароль); + НастройкаСоединения.Вставить("Порт", НастройкиПолучения.Порт); + НастройкаСоединения.Вставить("Таймаут", НастройкиПолучения.Таймаут); + НастройкаСоединения.Вставить("Заголовки", НастройкиПолучения.Заголовки); Протокол = РазделитьURL(URL).Протокол; Если Протокол = "ftp" Тогда - НастройкаСоединения.Вставить("ПассивноеСоединение", ПассивноеСоединение); + НастройкаСоединения.Вставить("ПассивноеСоединение", НастройкиПолучения.ПассивноеСоединение); Иначе - НастройкаСоединения.Вставить("ЗащищенноеСоединение", ЗащищенноеСоединение); + НастройкаСоединения.Вставить("ЗащищенноеСоединение", НастройкиПолучения.ЗащищенноеСоединение); КонецЕсли; #Если Клиент Тогда @@ -197,8 +125,24 @@ НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); #КонецЕсли - Результат = ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкаСоединения, НастройкаПроксиСервера, ЗаписыватьОшибку); - Возврат Результат; + Возврат ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкаСоединения, + НастройкаПроксиСервера, ЗаписыватьОшибку); + +КонецФункции + +Функция СтруктураПараметровПолученияФайла() Экспорт + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПутьДляСохранения", Неопределено); + ПараметрыПолучения.Вставить("Пользователь", Неопределено); + ПараметрыПолучения.Вставить("Пароль", Неопределено); + ПараметрыПолучения.Вставить("Порт", Неопределено); + ПараметрыПолучения.Вставить("Таймаут", Неопределено); + ПараметрыПолучения.Вставить("ЗащищенноеСоединение", Неопределено); + ПараметрыПолучения.Вставить("ПассивноеСоединение", Неопределено); + ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие()); + + Возврат ПараметрыПолучения; КонецФункции @@ -265,13 +209,14 @@ ПарольПользователя = НастройкаСоединения.Получить("Пароль"); Порт = НастройкаСоединения.Получить("Порт"); Таймаут = НастройкаСоединения.Получить("Таймаут"); + Заголовки = НастройкаСоединения.Получить("Заголовки"); Если Протокол = "https" Тогда ЗащищенноеСоединение = Истина; КонецЕсли; Если Порт = Неопределено Тогда - ПолнаяСтруктураURL = СтруктураURI(URL); + ПолнаяСтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Если НЕ ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда ИмяСервера = ПолнаяСтруктураURL.Хост; @@ -279,9 +224,10 @@ КонецЕсли; КонецЕсли; - Прокси = ?(Прокси <> Неопределено, СформироватьИнтернетПрокси(НастройкиПрокси, Протокол), Неопределено); + Прокси = ?(НастройкиПрокси <> Неопределено, СформироватьИнтернетПрокси(НастройкиПрокси, Протокол), Неопределено); + ИспользуетсяFTPПротокол = (Протокол = "ftp"); - Если Протокол = "ftp" Тогда + Если ИспользуетсяFTPПротокол Тогда Попытка Соединение = Новый FTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, Прокси, ПассивноеСоединение, Таймаут); Исключение @@ -325,7 +271,21 @@ КонецЕсли; Попытка - Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения); + + Если ИспользуетсяFTPПротокол Тогда + Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения); + ЗаголовкиОтвета = Неопределено; + Иначе + HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); + HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); + HTTPОтвет = Соединение.Получить(HTTPЗапрос, ПутьДляСохранения); + Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда + ФайлОтвета = Новый ЧтениеТекста(ПутьДляСохранения, КодировкаТекста.UTF8); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ФайлОтвета.Прочитать(5 * 1024)); + КонецЕсли; + ЗаголовкиОтвета = HTTPОтвет.Заголовки; + КонецЕсли; + Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении файла с сервера %1:'") + Символы.ПС + "%2"; @@ -343,10 +303,10 @@ Если НастройкаСохранения["МестоХранения"] = "ВременноеХранилище" Тогда КлючУникальности = Новый УникальныйИдентификатор; Адрес = ПоместитьВоВременноеХранилище (Новый ДвоичныеДанные(ПутьДляСохранения), КлючУникальности); - Возврат СформироватьРезультат(Истина, Адрес); + Возврат СформироватьРезультат(Истина, Адрес, ЗаголовкиОтвета); ИначеЕсли НастройкаСохранения["МестоХранения"] = "Клиент" ИЛИ НастройкаСохранения["МестоХранения"] = "Сервер" Тогда - Возврат СформироватьРезультат(Истина, ПутьДляСохранения); + Возврат СформироватьРезультат(Истина, ПутьДляСохранения, ЗаголовкиОтвета); Иначе Возврат Неопределено; КонецЕсли; @@ -429,18 +389,22 @@ // поле успех - булево // поле путь - строка // -Функция СформироватьРезультат(Знач Статус, Знач СообщениеПуть) +Функция СформироватьРезультат(Знач Статус, Знач СообщениеПуть, ЗаголовкиОтвета = Неопределено) - Результат = Новый Структура("Статус"); + Результат = Новый Структура("Статус", Статус); - Результат.Статус = Статус; - Если Статус Тогда Результат.Вставить("Путь", СообщениеПуть); Иначе Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); КонецЕсли; + Если ЗаголовкиОтвета <> Неопределено Тогда + + Результат.Вставить("Заголовки", ЗаголовкиОтвета); + + КонецЕсли; + Возврат Результат; КонецФункции @@ -464,9 +428,10 @@ КонецПроцедуры -Функция СобытиеЖурналаРегистрации() +Функция СобытиеЖурналаРегистрации() Экспорт Возврат НСтр("ru = 'Получение файлов из Интернета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index 55bda1fc6..0ee2bb526 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -20,6 +19,9 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( "ПолучениеФайловИзИнтернетаСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииИспользованияПрофилейБезопасности"].Добавить( + "ПолучениеФайловИзИнтернетаСлужебный"); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -51,8 +53,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Вызывается при включении использования для информационной базы профилей безопасности. +// +Процедура ПриВключенииИспользованияПрофилейБезопасности() Экспорт + + // Сброс настроек прокси-сервера на системные. + СохранитьНастройкиПроксиНаСервере1СПредприятие(Неопределено); + + ЗаписьЖурналаРегистрации(ПолучениеФайловИзИнтернетаКлиентСервер.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, Метаданные.Константы.НастройкаПроксиСервера,, + НСтр("ru = 'При включении профилей безопасности настройки прокси-сервера сброшены на системные.'")); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Сохраняет параметры настройки прокси сервера на стороне сервера 1С:Предприятие // @@ -122,3 +138,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index e4aa4ce40..5f692ec34 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Основные процедуры и функции. @@ -74,7 +73,7 @@ Возврат Ложь; КонецЕсли; Если ПроверитьРольАдминистратораСистемы - И НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы()) Тогда + И НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы(Истина)) Тогда Возврат Ложь; КонецЕсли; Возврат Истина; @@ -89,8 +88,8 @@ Возврат Истина; КонецЕсли; - Если НЕ ЗначениеЗаполнено(ПользовательИБ.Имя) И Метаданные.ОсновнаяРоль = Неопределено Тогда - // Когда основная роль не указана, тогда у неуказанного пользователя + Если НЕ ЗначениеЗаполнено(ПользовательИБ.Имя) И Метаданные.ОсновныеРоли.Количество() = 0 Тогда + // Когда основные роли не указаны, тогда у неуказанного пользователя // есть все права (как в привилегированном режиме). Возврат Истина; КонецЕсли; @@ -111,7 +110,7 @@ Возврат Ложь; КонецЕсли; Если ПроверитьРольАдминистратораСистемы - И НЕ РольДоступна(РольАдминистратораСистемы()) Тогда + И НЕ РольДоступна(РольАдминистратораСистемы(Истина)) Тогда Возврат Ложь; КонецЕсли; Возврат Истина; @@ -154,6 +153,10 @@ Свойства = СвойстваПроверяемогоПользователяИБ(Пользователь); ПользовательИБ = Свойства.ПользовательИБ; + Если ПользовательИБ = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + МассивИменРолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРолей); Для каждого ИмяРоли Из МассивИменРолей Цикл @@ -172,6 +175,54 @@ КонецФункции +// Проверяет наличие хотя бы одного вида аутентификации у пользователя ИБ. +// +// Параметры: +// ОписаниеПользователяИБ - УникальныйИдентификатор - пользователя ИБ, +// - Структура - содержит 3 свойства аутентификации, +// - ПользовательИнформационнойБазы, +// - СправочникСсылка.Пользователи, +// - СправочникСсылка.ВнешниеПользователи. +// +// Возвращаемое значение: +// Булево. Истина - если хотя бы одно свойство аутентификации равно Истина. +// +Функция ВходВПрограммуРазрешен(ОписаниеПользователяИБ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УникальныйИдентификатор = Неопределено; + + Если ТипЗнч(ОписаниеПользователяИБ) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(ОписаниеПользователяИБ) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + УникальныйИдентификатор = ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ОписаниеПользователяИБ, "ИдентификаторПользователяИБ"); + + Если ТипЗнч(ОписаниеПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипЗнч(ОписаниеПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + УникальныйИдентификатор = ОписаниеПользователяИБ; + КонецЕсли; + + Если УникальныйИдентификатор <> Неопределено Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(УникальныйИдентификатор); + + Если ПользовательИБ = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Иначе + ПользовательИБ = ОписаниеПользователяИБ; + КонецЕсли; + + Возврат ПользовательИБ.АутентификацияСтандартная + ИЛИ ПользовательИБ.АутентификацияОС + ИЛИ ПользовательИБ.АутентификацияOpenID; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые в работе элементов управляемых форм @@ -201,7 +252,6 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Текст", Текст + "%"); Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка, @@ -215,11 +265,7 @@ "ВЫБРАТЬ | Пользователи.Ссылка, | Пользователи.Наименование, - | ВЫБОР - | КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - | ТОГДА 4 - | ИНАЧЕ 1 - | КОНЕЦ КАК НомерКартинки + | 1 КАК НомерКартинки |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ @@ -253,11 +299,7 @@ "ВЫБРАТЬ | ВнешниеПользователи.Ссылка, | ВнешниеПользователи.Наименование, - | ВЫБОР - | КОГДА ВнешниеПользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - | ТОГДА 10 - | ИНАЧЕ 7 - | КОНЕЦ КАК НомерКартинки + | 7 КАК НомерКартинки |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ @@ -374,11 +416,7 @@ | ТОГДА ВЫБОР | КОГДА ВЫРАЗИТЬ(Пользователи.Пользователь КАК Справочник.Пользователи).ПометкаУдаления | ТОГДА 0 - | ИНАЧЕ ВЫБОР - | КОГДА ВЫРАЗИТЬ(Пользователи.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - | ТОГДА 4 - | ИНАЧЕ 1 - | КОНЕЦ + | ИНАЧЕ 1 | КОНЕЦ | КОГДА ТИПЗНАЧЕНИЯ(Пользователи.Пользователь) = ТИП(Справочник.ГруппыПользователей) | ТОГДА ВЫБОР @@ -390,11 +428,7 @@ | ТОГДА ВЫБОР | КОГДА ВЫРАЗИТЬ(Пользователи.Пользователь КАК Справочник.ВнешниеПользователи).ПометкаУдаления | ТОГДА 6 - | ИНАЧЕ ВЫБОР - | КОГДА ВЫРАЗИТЬ(Пользователи.Пользователь КАК Справочник.ВнешниеПользователи).ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - | ТОГДА 10 - | ИНАЧЕ 7 - | КОНЕЦ + | ИНАЧЕ 7 | КОНЕЦ | КОГДА ТИПЗНАЧЕНИЯ(Пользователи.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) | ТОГДА ВЫБОР @@ -407,7 +441,6 @@ |ИЗ | Пользователи КАК Пользователи", "ИмяПоляПользователь", ИмяПоляПользователь)); Запрос.УстановитьПараметр("Пользователи", ТаблицаПользователей); - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); НомераКартинок = Запрос.Выполнить().Выгрузить(); Для каждого Строка Из МассивСтрок Цикл @@ -431,21 +464,21 @@ // Процедуры и функции, используемые при обновлении информационной базы // Используется при обновлении и начальном заполнении информационной базы. -// 1) Создает первого администратора и связывает его с новым или существующим +// 1) Создает первого администратора и сопоставляет его с новым или существующим // пользователем в справочнике Пользователи. -// 2) Связывает администратора, указанного в параметре ПользовательИБ с новым или +// 2) Сопоставляет администратора, указанного в параметре ПользовательИБ с новым или // существующим пользователем в справочнике Пользователи. // // Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы - используется, когда нужно связать +// ПользовательИБ - ПользовательИнформационнойБазы - используется, когда нужно сопоставить // существующего администратора с новым или существующим пользователем // в справочнике Пользователи. // // Возвращаемое значение: -// Неопределено - пользователь, связанный с пользователем ИБ с административными -// правами уже существует. -// СправочникСсылка.Пользователи - пользователь, который был связан с первым администратором или -// администратором, указанным в параметре ПользовательИБ. +// Неопределено - пользователь в справочнике, с которым сопоставлен пользователь ИБ +// с административными правами, уже существует. +// СправочникСсылка.Пользователи - пользователь в справочнике, с которым был сопоставлен первый администратор или +// администратор, указанный в параметре ПользовательИБ. // Функция СоздатьАдминистратора(ПользовательИБ = Неопределено) Экспорт @@ -501,7 +534,8 @@ Пользователь = Справочники.Пользователи.НайтиПоРеквизиту( "ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - // Если администратор связан с внешним пользователем - это ошибка, требуется очистить связь. + // Если администратор сопоставлен с внешним пользователем - это ошибка, + // требуется очистить сопоставление. Если НЕ ЗначениеЗаполнено(Пользователь) Тогда ВнешнийПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту( @@ -593,8 +627,8 @@ КонецФункции -// Проверяет связан ли пользовательИБ с элементом справочника Пользователи или -// элементом справочника ВнешниеПользователи. +// Проверяет сопоставлен ли пользовательИБ с элементом справочника Пользователи или +// с элементом справочника ВнешниеПользователи. // // Параметры: // ПользовательИБ - Строка - имя пользователя ИБ. @@ -647,7 +681,7 @@ // ЗапрещеноИзменятьПароль - Булево. // // АутентификацияОС - Булево. -// ПользовательОС - Строка. +// ПользовательОС - Строка (не учитывается в учебной платформе). // // ОсновнойИнтерфейс - Неопределено, // Строка (имя интерфейса из коллекции @@ -741,7 +775,7 @@ Если ПользовательИБ = Неопределено Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователь информационной базы ""%1""' не найден."), Идентификатор); + НСтр("ru = 'Пользователь информационной базы ""%1"" не найден.'"), Идентификатор); Возврат Ложь; КонецЕсли; @@ -896,11 +930,6 @@ ОписаниеОшибки = "", ПользовательИБ = Неопределено) Экспорт - Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПередЗаписьюПользователяИБ"); - Для Каждого Обработчик Из Обработчики Цикл - Обработчик.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор); - КонецЦикла; - ПользовательИБ = Неопределено; Свойства = Неопределено; @@ -908,7 +937,14 @@ Возврат Ложь; Иначе Попытка + + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПередЗаписьюПользователяИБ"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор); + КонецЦикла; + ПользовательИБ.Удалить(); + Исключение ОписаниеОшибки = ОписаниеОшибкиПриЗаписиПользователяИБ( НСтр("ru = 'При удалении пользователя информационной базы @@ -984,6 +1020,11 @@ СтруктураИсключаемыхСвойств = Новый Структура; КонецЕсли; + Если ПользователиСлужебный.ЭтоУчебнаяПлатформа() Тогда + СтруктураИсключаемыхСвойств.Вставить("АутентификацияОС"); + СтруктураИсключаемыхСвойств.Вставить("ПользовательОС"); + КонецЕсли; + ПарольУстановлен = Ложь; Для каждого КлючИЗначение Из ВсеСвойства Цикл @@ -1174,22 +1215,22 @@ КонецПроцедуры -// Возвращает пользователя справочника Пользователи, соответствующего -// пользователю ИБ с указанным именем. +// Возвращает пользователя из справочника Пользователи, с которым сопоставлен +// пользователь ИБ с указанным именем. // Для поиска требуются административные права. Если административных прав нет, // допустимо искать только пользователя для текущего пользователя ИБ. // // Параметры: -// ИмяПользователя - Строка - имя пользователя информационной базы +// ИмяДляВхода - Строка - имя пользователя информационной базы, используемое для входа. // // Возвращаемое значение: // СправочникСсылка.Пользователи - если пользователь найден. // Справочники.Пользователи.ПустаяСсылка() - если пользователь ИБ найден. // Неопределено - если пользователь ИБ не найден. // -Функция НайтиПоИмени(Знач ИмяПользователяИБ) Экспорт +Функция НайтиПоИмени(Знач ИмяДляВхода) Экспорт - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяДляВхода); Если ПользовательИБ = Неопределено Тогда Возврат Неопределено; @@ -1205,17 +1246,22 @@ // Возвращает роль, предоставляющую права администрирования системы. // +// Параметры: +// ДляПроверки - Булево - вернуть роль для проверки, а не для установки. +// Для базовых версий роль для установки АдминистраторСистемы, +// а роль для проверки может быть ПолныеПрава с правом Администрирование. +// // Возвращаемое значение: // ОбъектМетаданных: Роль. // -Функция РольАдминистратораСистемы() Экспорт +Функция РольАдминистратораСистемы(ДляПроверки = Ложь) Экспорт РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы; - УстановитьПривилегированныйРежим(Истина); - Если ПравоДоступа("Администрирование", Метаданные, Метаданные.Роли.ПолныеПрава) - ИЛИ СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - + Если ДляПроверки + И ПравоДоступа("Администрирование", Метаданные, Метаданные.Роли.ПолныеПрава) + И СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + РольАдминистратораСистемы = Метаданные.Роли.ПолныеПрава; КонецЕсли; @@ -1357,9 +1403,9 @@ КонецЕсли; Если ТекущийПользовательИБ = Неопределено Тогда - ИмяПользователяИБ = НСтр("ru = '<не найден>'"); + ИмяДляВхода = НСтр("ru = '<не найден>'"); Иначе - ИмяПользователяИБ = ТекущийПользовательИБ.Имя; + ИмяДляВхода = ТекущийПользовательИБ.Имя; КонецЕсли; ОписаниеОшибки = ОписаниеОшибки @@ -1369,7 +1415,7 @@ |соответствует более одного элемента в справочнике Пользователи:'"), НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором ""%2"" |соответствует более одного элемента в справочнике Пользователи:'") ), - ИмяПользователяИБ, + ИмяДляВхода, ТекущийНеоднозначныйИдентификатор); КонецЕсли; КонецЕсли; @@ -1420,7 +1466,7 @@ // ШаблонОшибки - Шаблон, содержащий параметр "%1" для представления пользователя ИБ и // параметр %2 для описания ошибки. // -// ИмяПользователяИБ - ПользовательИнформационнойБазы. +// ИмяДляВхода - имя пользователя информационной базы, используемое для входа. // // ИдентификаторПользователяИБ - Неопределено, УникальныйИдентификатор. // @@ -1433,12 +1479,11 @@ // Строка - описание ошибки для просмотра пользователю. // Функция ОписаниеОшибкиПриЗаписиПользователяИБ(ШаблонОшибки, - ИмяПользователяИБ, + ИмяДляВхода, ИдентификаторПользователяИБ, ИнформацияОбОшибке = Неопределено, ЗаписатьВЖурнал = Истина) - Если ЗаписатьВЖурнал Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка записи пользователя ИБ'", @@ -1448,7 +1493,7 @@ , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонОшибки, - """" + ИмяПользователяИБ + """ (" + """" + ИмяДляВхода + """ (" + ?(ЗначениеЗаполнено(ИдентификаторПользователяИБ), НСтр("ru = 'Новый'"), Строка(ИдентификаторПользователяИБ)) @@ -1460,7 +1505,7 @@ Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонОшибки, - """" + ИмяПользователяИБ + """", + """" + ИмяДляВхода + """", ?(ИнформацияОбОшибке = Неопределено, "", КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); @@ -1497,3 +1542,5 @@ Возврат Свойства; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl index ca703e47b..c24829adc 100644 --- a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает текущего пользователя или текущего внешнего пользователя, // в зависимости от того, кто выполнил вход в сеанс. @@ -82,4 +81,6 @@ Возврат ТипЗнч(АвторизованныйПользователь()) = Тип("СправочникСсылка.ВнешниеПользователи"); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index a36ddab2c..ab3eff688 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Переопределяет стандартный способ установки ролей пользователям ИБ. // @@ -14,8 +13,6 @@ // Процедура ИзменитьЗапретРедактированияРолей(Запрет) Экспорт - - КонецПроцедуры // Переопределяет поведение формы пользователя и формы внешнего пользователя, @@ -31,15 +28,13 @@ // ДействияВФорме - Структура (со свойствами типа Строка): // Роли = "", "Просмотр", "Редактирование" // КонтактнаяИнформация = "", "Просмотр", "Редактирование" -// СвойстваПользователяИБ = "", "ПросмотрВсех", "РедактированиеВсех", РедактированиеСвоих" +// СвойстваПользователяИБ = "", "Просмотр", "Редактирование" // СвойстваЭлемента = "", "Просмотр", "Редактирование" // // Для групп внешних пользователей КонтактнаяИнформация и СвойстваПользователяИБ не существуют. // Процедура ИзменитьДействияВФорме(Знач Ссылка, Знач ДействияВФорме) Экспорт - - КонецПроцедуры // Доопределяет действия при записи пользователя информационной базы. @@ -51,8 +46,6 @@ // Процедура ПриЗаписиПользователяИнформационнойБазы(Знач СтарыеСвойства, Знач НовыеСвойства) Экспорт - - КонецПроцедуры // Доопределяет действия после удаления пользователя информационной базы. @@ -63,8 +56,6 @@ // Процедура ПослеУдаленияПользователяИнформационнойБазы(Знач СтарыеСвойства) Экспорт - - КонецПроцедуры // Переопределяет настройки интерфейса, устанавливаемые для новых пользователей @@ -75,6 +66,57 @@ // Процедура ПриУстановкеНачальныхНастроек(НастройкиКлиента, НастройкиИнтерфейса) Экспорт +КонецПроцедуры + +// Дополняет список настроек переданного пользователя на вкладке "Прочее" обработки НастройкиПользователей. +// +// Параметры: +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, у которого нужно получить настройки. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// у которого нужно получить настройки. +// Настройки - Структура - прочие пользовательские настройки. +// * Ключ - Строка - строковый идентификатор настройки, используемый в дальнейшем +// для копирования и очистки этой настройки. +// * Значение - Структура - информация о настройке. +// ** НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек. +// ** КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве настроек. +// ** СписокНастроек - СписокЗначений - список полученных настроек. +// +Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + КонецПроцедуры + +// Сохраняет настройки переданному пользователю. +// +// Параметры: +// Настройки - СписокЗначений - список значений сохраняемых настроек +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно скопировать настройку. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// которому нужно скопировать настройку. +// +Процедура ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + + +КонецПроцедуры + +// Очищает настройки переданному пользователю. +// +// Параметры: +// Настройки - СписокЗначений - список значений очищаемых настроек +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно очистить настройку. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// которому нужно очистить настройку. +// +Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index d23e414db..3daaa963e 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Объявление служебных событий, к которым можно подключать обработчики БСП. @@ -124,19 +123,17 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "ПользователиСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( "ПользователиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ПользователиСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "ПользователиСлужебный"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( - "ПользователиСлужебный"); - КонецЕсли; СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( "ПользователиСлужебный"); @@ -165,8 +162,15 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "ПользователиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( - "ПользователиСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( + "ПользователиСлужебный"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "ПользователиСлужебный"); + КонецЕсли; КонецПроцедуры @@ -313,8 +317,7 @@ ОписаниеПользователяИБ = Новый Структура; ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить( - "УникальныйИдентификатор", ИдентификаторПользователяИБ); + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ИдентификаторПользователяИБ); НовыйПользователь.ДополнительныеСвойства.Вставить( "ОписаниеПользователяИБ", ОписаниеПользователяИБ); @@ -403,12 +406,6 @@ "ДополнительныеПараметрыКоманднойСтроки", ДополнительныеПараметрыКоманднойСтроки); КонецЕсли; - - // Проверка возможности продолжения. - ТекстОшибки = ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина); - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - Возврат ТекстОшибки; - КонецЕсли; КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -462,7 +459,7 @@ Если ТребуетсяСоздатьАдминистратора Тогда Если РольДоступна(Метаданные.Роли.ПолныеПрава) - И (РольДоступна(Пользователи.РольАдминистратораСистемы()) + И (РольДоступна(Пользователи.РольАдминистратораСистемы(Истина)) ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() ) Тогда Пользователь = Пользователи.СоздатьАдминистратора(ТекущийПользовательИБ); @@ -498,53 +495,6 @@ КонецФункции -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.2"; - Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьИдентификаторыПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.15"; - Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.2"; - Обработчик.Процедура = "Пользователи.ПриНаличииГруппПользователейУстановитьИспользование"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.1.10"; - Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьФлажокСлужебный"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.8"; - Обработчик.Процедура = "ПользователиСлужебный.ПреобразоватьИменаРолейВИдентификаторы"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.8"; - Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.16"; - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "ПользователиСлужебный.ОбновитьПредопределенныеВидыКонтактнойИнформацииПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.4.19"; - Обработчик.Процедура = "ПользователиСлужебный.ПеренестиГруппыВнешнихПользователейВКорень"; - -КонецПроцедуры - // Определяет, что используется нестандартный способ установки ролей пользователям ИБ. Функция ЗапретРедактированияРолей() Экспорт @@ -680,12 +630,83 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Проверят, что выполнение происходит на учебной платформе, +// на которой, например, недоступно получение свойства ПользовательОС. +// +Функция ЭтоУчебнаяПлатформа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Попытка + ПользовательОС = ТекущийПользователь.ПользовательОС; + Исключение + ТекущийПользователь = Неопределено; + КонецПопытки; + + Возврат ТекущийПользователь = Неопределено; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.2"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьИдентификаторыПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.15"; + Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.5"; + Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.2"; + Обработчик.Процедура = "Пользователи.ПриНаличииГруппПользователейУстановитьИспользование"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.8"; + Обработчик.Процедура = "ПользователиСлужебный.ПреобразоватьИменаРолейВИдентификаторы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.8"; + Обработчик.Процедура = "РегистрыСведений.СоставыГруппПользователей.ОбновитьДанныеРегистра"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.3.16"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ПользователиСлужебный.ОбновитьПредопределенныеВидыКонтактнойИнформацииПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.19"; + Обработчик.Процедура = "ПользователиСлужебный.ПеренестиГруппыВнешнихПользователейВКорень"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.3"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьСвойстваАутентификацииПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.42"; + Обработчик.Процедура = "ПользователиСлужебный.ДобавитьПолноправнымПользователямРольАдминистраторСистемы"; + +КонецПроцедуры + // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт @@ -695,6 +716,23 @@ КонецПроцедуры +// Доопределяет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура, в которую можно вставить параметры работы клиента при запуске. +// Ключ - имя параметра, +// Значение - значение параметра. +// +// Пример использования: +// Параметры.Вставить(<ИмяПараметра>, <Код получения значения параметра>); +// +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + +КонецПроцедуры + // Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // @@ -755,8 +793,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: -// Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. -// Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, +// Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. +// Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -771,8 +809,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: -// Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. -// Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, +// Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. +// Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -783,6 +821,58 @@ КонецПроцедуры +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); + + КонецЕсли; + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. +// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые должны входить в состав плана обмена +// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. +// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла +// и не мигрируют в процессе обмена. +// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации. +// +Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт + + Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); + +КонецПроцедуры + +// Обработчики событий подсистемы Управление доступом. + // Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. // Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректные сведения. // @@ -833,70 +923,100 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); - - КонецЕсли; - -КонецПроцедуры +// Обработчики событий подсистемы ВариантыОтчетов. -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() // -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); - -КонецПроцедуры - -// Доопределяет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура, в которую можно вставить параметры работы клиента при запуске. -// Ключ - имя параметра, -// Значение - значение параметра. -// -// Пример использования: -// Параметры.Вставить(<ИмяПараметра>, <Код получения значения параметра>); -// -Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - - Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + Отчеты.СведенияОПользователях.НастроитьВариантыОтчета(Настройки); КонецПроцедуры @@ -927,76 +1047,6 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с пользователями -// Проверяет возможность запуска с пустым списком пользователей для клиентских соединений. -// -// Для фоновых заданий, внешних соединений, вызовов веб-сервисов запуск с -// пустым списком пользователей всегда возможен - для пустого пользователя ИБ -// всегда используется пользователь <Не указан> справочника Пользователи. -// -// В случае, когда основная роль пустого пользователя не обеспечивает -// требуемых прав в обработчике фонового задания или веб-сервиса, -// привилегированный режим устанавливается прямо в обработчике. -// Для внешних соединений можно использовать запуск в привилегированном -// режиме (параметр командной строки "/UsePrivilegedMode"). -// -Функция ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(ВернутьТекстОшибки = Ложь) Экспорт - - Если ПривилегированныйРежим() Тогда - // Выполнен запуск в привилегированном режиме - // (параметр командной строки "/UsePrivilegedMode"). - // - // В этом режиме пользователь имеет все права, - // первого администратора не требуется создавать. - Возврат ""; - КонецЕсли; - - ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - - Если ЗначениеЗаполнено(ТекущийПользовательИБ.Имя) Тогда - // Список пользователей ИБ не пустой. - Возврат ""; - КонецЕсли; - - ОсновнаяРоль = Метаданные.ОсновнаяРоль; - - Если ОсновнаяРоль = Неопределено Тогда - // Основная роль не назначена, поэтому пустой пользователь - // имеет права, соответствующие привилегированному режиму. - Возврат ""; - КонецЕсли; - - Если ПравоДоступа("Администрирование", Метаданные, ОсновнаяРоль) Тогда - // Когда основная роль имеет право Администрирование предполагается, - // что она содержит все права необходимые для администрирования. - Возврат ""; - КонецЕсли; - - Если НЕ ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ) Тогда - // Список пользователей не пустой. - // - // Когда основная роль не содержит право Администрирование, - // а пустой текущий пользователь содержит право Администрирование, - // то оно было добавлено принудительно, что возможно только при пустом - // списке пользователей информационной базы. - Возврат ""; - КонецЕсли; - - ТекстОшибки = - НСтр("ru = 'Запуск с пустым списком пользователей информационной базы невозможен. - |Необходимо добавить администратора системы с двумя ролями - |""Администратор системы"", ""Полные права"" и повторить запуск программы от его имени. - | - |Для перехода к списку пользователей информационной базы необходимо открыть - |Конфигуратор и воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); - - Если НЕ ВернутьТекстОшибки Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - Возврат ТекстОшибки; - -КонецФункции - // Возвращает сохраняемое значение пароля для указанного пароля. // // Параметры: @@ -1056,41 +1106,99 @@ // Возвращает текущий уровень доступа на изменение свойств пользователя ИБ. // // Параметры: -// ДляВнешнегоПользователя - Булево. +// ОписаниеОбъекта - СправочникОбъект.Пользователи +// - СправочникОбъект.ВнешниеПользователи +// - ДанныеФормыСтруктура - созданная из объектов указанных выше. +// +// ПараметрыОбработки - Неопределено - получить данные из описания объекта, +// иначе взять уже готовые данные из параметров обработки. // // Возвращаемое значение: -// Строка. Возможные значения: -// "ПолныйДоступ" - любое изменение свойств пользователя. -// "УправлениеСписком" - управление списком пользователей, без возможности -// изменения прав. -// "ИзменениеТекущего" - изменение свойств текущего пользователя "Имя", -// "Пароль" и "Язык". -// "НетДоступа" - права на изменение пользователей отсутствуют. +// Структура - содержит свойства: +// - АдминистраторСистемы - Булево - любые действия с любым пользователем и его пользователем ИБ. +// - ПолныеПрава - Булево - то же, АдминистраторСистемы, исключая администраторов системы. +// - УправлениеСписком - добавление новых пользователей и изменение существующих: +// - для пользователей, которым еще не разрешался вход в программу (новых), +// можно настроить любые свойства, кроме включения входа в программу, +// - для пользователей, которым уже разрешался вход в программу, +// можно настроить любые свойства, кроме включения входа в программу +// и настройки аутентификации (см. ниже). +// - НастройкиДляВхода - Булево - изменение свойств пользователя ИБ: Имя, ПользовательОС и +// свойств элемента справочника АутентификацияOpenID, АутентификацияСтандартная, +// АутентификацияОС и Роли (если нет запрета редактирования при внедрении). +// - ИзменениеТекущего - изменение свойств текущего пользователя Пароль и Язык. +// - НетДоступа - нет ни одного из указанных выше уровней доступа. // -Функция УровеньДоступаКСвойствамПользователяИБ(ДляВнешнегоПользователя) Экспорт +Функция УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта, ПараметрыОбработки = Неопределено) Экспорт - Если Пользователи.ЭтоПолноправныйПользователь() Тогда + УровеньДоступа = Новый Структура; + + // Администратор системы (системные данные). + УровеньДоступа.Вставить("АдминистраторСистемы", Пользователи.ЭтоПолноправныйПользователь(, Истина)); + + // Полноправный пользователь (основных данные). + УровеньДоступа.Вставить("ПолныеПрава", Пользователи.ЭтоПолноправныйПользователь()); + + Если ТипЗнч(ОписаниеОбъекта.Ссылка) = Тип("СправочникСсылка.Пользователи") Тогда + // Ответственный за список пользователей. + УровеньДоступа.Вставить("УправлениеСписком", + ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) + И (УровеньДоступа.ПолныеПрава + Или Не Пользователи.ЭтоПолноправныйПользователь(ОписаниеОбъекта.Ссылка))); + // Пользователь текущего пользователя ИБ. + УровеньДоступа.Вставить("ИзменениеТекущего", + УровеньДоступа.ПолныеПрава + Или ПравоДоступа("Изменение", Метаданные.Справочники.Пользователи) + И ОписаниеОбъекта.Ссылка = Пользователи.АвторизованныйПользователь()); - Возврат "ПолныйДоступ"; - - ИначеЕсли ДляВнешнегоПользователя Тогда - - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеВнешнихПользователей) Тогда - Возврат "УправлениеСписком"; - - ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоВнешнегоПользователя) Тогда - Возврат "ИзменениеТекущего"; - КонецЕсли; - Иначе - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеПользователей) Тогда - Возврат "УправлениеСписком"; - - ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоПользователя) Тогда - Возврат "ИзменениеТекущего"; - КонецЕсли; + ИначеЕсли ТипЗнч(ОписаниеОбъекта.Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + // Ответственный за список внешних пользователей. + УровеньДоступа.Вставить("УправлениеСписком", + ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи) + И (УровеньДоступа.ПолныеПрава + Или Не Пользователи.ЭтоПолноправныйПользователь(ОписаниеОбъекта.Ссылка))); + // Внешний пользователь текущего пользователя ИБ. + УровеньДоступа.Вставить("ИзменениеТекущего", + УровеньДоступа.ПолныеПрава + Или ПравоДоступа("Изменение", Метаданные.Справочники.ВнешниеПользователи) + И ОписаниеОбъекта.Ссылка = Пользователи.АвторизованныйПользователь()); КонецЕсли; - Возврат "НетДоступа"; + Если ПараметрыОбработки = Неопределено Тогда + УстановитьПривилегированныйРежим(Истина); + Если ЗначениеЗаполнено(ОписаниеОбъекта.ИдентификаторПользователяИБ) Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеОбъекта.ИдентификаторПользователяИБ); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + ПользовательБезНастроекДляВходаИлиПодготовлен = + ПользовательИБ = Неопределено + Или ОписаниеОбъекта.Подготовлен + И Не Пользователи.ВходВПрограммуРазрешен(ПользовательИБ); + УстановитьПривилегированныйРежим(Ложь); + Иначе + ПользовательБезНастроекДляВходаИлиПодготовлен = + Не ПараметрыОбработки.СтарыйПользовательИБСуществует + Или ПараметрыОбработки.СтарыйПользователь.Подготовлен + И Не Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеСтарогоПользователяИБ); + КонецЕсли; + + // Полноправный пользователь (основных данные). + УровеньДоступа.Вставить("НастройкиДляВхода", + УровеньДоступа.АдминистраторСистемы + Или УровеньДоступа.ПолныеПрава + Или УровеньДоступа.УправлениеСписком + И ПользовательБезНастроекДляВходаИлиПодготовлен); + + УровеньДоступа.Вставить("НетДоступа", + НЕ УровеньДоступа.АдминистраторСистемы + И НЕ УровеньДоступа.ПолныеПрава + И НЕ УровеньДоступа.УправлениеСписком + И НЕ УровеньДоступа.ИзменениеТекущего + И НЕ УровеньДоступа.НастройкиДляВхода); + + Возврат УровеньДоступа; КонецФункции @@ -1099,24 +1207,12 @@ ПараметрыОбработки, УдалениеПользователяИзСправочника = Ложь) Экспорт - // Внешние пользователи не поддерживаются в модели сервиса. - Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") - И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ВызватьИсключение - НСтр("ru = 'Внешние пользователи не поддерживаются в модели сервиса.'"); - КонецЕсли; - + ПараметрыОбработки = Новый Структура; ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; - ПараметрыОбработки = Новый Структура; - Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") Тогда - ПараметрыОбработки.Вставить("Служебный", ПользовательОбъект.Служебный); - Иначе - ПараметрыОбработки.Вставить("Служебный", Ложь); - КонецЕсли; - ПараметрыОбработки.Вставить("ЗаписьАдминистратора", Ложь); ПараметрыОбработки.Вставить("УдалениеПользователяИзСправочника", УдалениеПользователяИзСправочника); + ПараметрыОбработки.Вставить("ТекстСообщенияНедостаточноПрав", + НСтр("ru = 'Недостаточно прав для изменения пользователя информационной базы.'")); Если ДополнительныеСвойства.Свойство("ЗначениеКопирования") И ЗначениеЗаполнено(ДополнительныеСвойства.ЗначениеКопирования) @@ -1125,90 +1221,60 @@ ПараметрыОбработки.Вставить("ЗначениеКопирования", ДополнительныеСвойства.ЗначениеКопирования); КонецЕсли; - Если ДополнительныеСвойства.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда - - // Проверка прав. - Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - ВызватьИсключение НСтр("ru = 'Обновление пользователя по сообщению - |канала удаленного администрирования - |доступно только неразделенным пользователям.'"); - КонецЕсли; - - ПараметрыОбработки.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); - - ИначеЕсли НЕ ПараметрыОбработки.Служебный Тогда - ОбновитьОписаниеWebСервисаМенеджераСервиса(); + // Реквизиты справочника, которые устанавливаются автоматически (проверка неизменности). + АвтоРеквизиты = Новый Структура; + АвтоРеквизиты.Вставить("ИдентификаторПользователяИБ"); + АвтоРеквизиты.Вставить("СвойстваПользователяИБ"); + ПараметрыОбработки.Вставить("АвтоРеквизиты", АвтоРеквизиты); + + // Реквизиты справочника, которые не допускается изменять в подписках на события (проверка начальных значений). + БлокируемыеРеквизиты = Новый Структура; + БлокируемыеРеквизиты.Вставить("Служебный", Ложь); // Значение для внешнего пользователя. + БлокируемыеРеквизиты.Вставить("ПометкаУдаления"); + БлокируемыеРеквизиты.Вставить("Недействителен"); + БлокируемыеРеквизиты.Вставить("Подготовлен"); + ПараметрыОбработки.Вставить("БлокируемыеРеквизиты", БлокируемыеРеквизиты); + + ЗапомнитьСвойстваПользователя(ПользовательОбъект, ПараметрыОбработки); + + УровеньДоступа = УровеньДоступаКСвойствамПользователя(ПользовательОбъект, ПараметрыОбработки); + ПараметрыОбработки.Вставить("УровеньДоступа", УровеньДоступа); + + // ПередНачаломОбработкиПользователяИБ - поддержка модели сервиса. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ПередНачаломОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); КонецЕсли; - СтарыеСвойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ПользовательОбъект.Ссылка, - "ИдентификаторПользователяИБ, - |ИдентификаторПользователяСервиса"); - - Если НЕ ЗначениеЗаполнено(СтарыеСвойства.ИдентификаторПользователяИБ) Тогда - СтарыеСвойства.ИдентификаторПользователяИБ = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Если ПараметрыОбработки.СтарыйПользователь.Подготовлен <> ПользовательОбъект.Подготовлен + И Не УровеньДоступа.ПолныеПрава Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; - Если НЕ ЗначениеЗаполнено(СтарыеСвойства.ИдентификаторПользователяСервиса) Тогда - СтарыеСвойства.ИдентификаторПользователяСервиса = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - КонецЕсли; - - // Идентификаторы для дальнейшего использования при обработке пользователя. - ПараметрыОбработки.Вставить("СтарыйИдентификаторПользователяИБ", - СтарыеСвойства.ИдентификаторПользователяИБ); - ПараметрыОбработки.Вставить("СтарыйИдентификаторПользователяСервиса", - СтарыеСвойства.ИдентификаторПользователяСервиса); - - // Новые значения полей для контроля при записи элемента справочника Пользователи. - ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяИБ", - СтарыеСвойства.ИдентификаторПользователяИБ); + // Поддержка интерактивной пометки удаления и группового изменения реквизитов ПометкаУдаления, Недействителен. + Если ПараметрыОбработки.СтарыйПользовательИБСуществует + И Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеСтарогоПользователяИБ) + И Не ДополнительныеСвойства.Свойство("ОписаниеПользователяИБ") + И ( ПараметрыОбработки.СтарыйПользователь.ПометкаУдаления = Ложь + И ПользовательОбъект.ПометкаУдаления = Истина + Или ПараметрыОбработки.СтарыйПользователь.Недействителен = Ложь + И ПользовательОбъект.Недействителен = Истина) Тогда - Если ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда - - ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяСервиса", - ПользовательОбъект.ИдентификаторПользователяСервиса); - Иначе - ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяСервиса", - СтарыеСвойства.ИдентификаторПользователяСервиса); - КонецЕсли; - - Если ЗначениеЗаполнено(ПараметрыОбработки.НовыйИдентификаторПользователяСервиса) - И ПараметрыОбработки.НовыйИдентификаторПользователяСервиса <> - ПараметрыОбработки.СтарыйИдентификаторПользователяСервиса Тогда - - Если ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяСервиса) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя изменять уже установленный идентификатор - |пользователя сервиса в элементе справочника.'"), - ПользовательОбъект.Наименование); - - КонецЕсли; - - НайденныйПользователь = Неопределено; - - Если ПользовательПоИдентификаторуСуществует( - ПараметрыОбработки.НовыйИдентификаторПользователяСервиса, - ПользовательОбъект.Ссылка, - НайденныйПользователь, - Истина) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя устанавливать идентификатор - |пользователя сервиса ""%2"" - |в этот элемент справочника, т.к. он - |уже используется в элементе ""%3"".'"), - ПользовательОбъект.Наименование, - ПараметрыОбработки.НовыйИдентификаторПользователяСервиса, - НайденныйПользователь); - КонецЕсли; + ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", Новый Структура); + ДополнительныеСвойства.ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ДополнительныеСвойства.ОписаниеПользователяИБ.Вставить("ВходВПрограммуРазрешен", Ложь); КонецЕсли; Если НЕ ДополнительныеСвойства.Свойство("ОписаниеПользователяИБ") Тогда + Если УровеньДоступа.УправлениеСписком + И Не ПараметрыОбработки.СтарыйПользовательИБСуществует + И ЗначениеЗаполнено(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда + // Очистка идентификатора пользователя ИБ. + ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; + ПараметрыОбработки.АвтоРеквизиты.ИдентификаторПользователяИБ = + ПользовательОбъект.ИдентификаторПользователяИБ; + КонецЕсли; Возврат; КонецЕсли; ОписаниеПользователяИБ = ДополнительныеСвойства.ОписаниеПользователяИБ; @@ -1237,58 +1303,47 @@ Обработчик.Модуль.ПриНачалеОбработкиПользователяИБ(ПараметрыОбработки, ОписаниеПользователяИБ); КонецЦикла; - Если НЕ ПараметрыОбработки.Свойство("Действие") Тогда + Если Не ПараметрыОбработки.Свойство("Действие") Тогда Возврат; КонецЕсли; - Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - УровеньДоступа = УровеньДоступаКСвойствамПользователяИБ(Истина); - Иначе - УровеньДоступа = УровеньДоступаКСвойствамПользователяИБ(Ложь); + Если УровеньДоступа.НетДоступа Тогда + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; - ТекстСообщения = НСтр("ru = 'Недостаточно прав для изменения пользователя информационной базы.'"); - Если УровеньДоступа = "НетДоступа" Тогда - ВызватьИсключение ТекстСообщения; + Если ОписаниеПользователяИБ.Действие = "Удалить" Тогда + + Если ПараметрыОбработки.СтарыйПользовательИБСуществует И Не УровеньДоступа.АдминистраторСистемы + Или Не ПараметрыОбработки.СтарыйПользовательИБСуществует И Не УровеньДоступа.ПолныеПрава Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; + + ИначеЕсли Не УровеньДоступа.УправлениеСписком Тогда // Действие = "Записать" + + Если Не УровеньДоступа.ИзменениеТекущего + Или Не ПараметрыОбработки.СтарыйПользовательИБТекущий Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ОписаниеСтарогоПользователяИБ = Неопределено; - Если Пользователи.ПрочитатьПользователяИБ( - ПараметрыОбработки.СтарыйИдентификаторПользователяИБ, - ОписаниеСтарогоПользователяИБ) Тогда - - ПараметрыОбработки.Вставить("СтарыйПользовательИБСуществует", Истина); - Иначе - ПараметрыОбработки.Вставить("СтарыйПользовательИБСуществует", Ложь); - КонецЕсли; - ПараметрыОбработки.Вставить( - "ОписаниеСтарогоПользователяИБ", ОписаниеСтарогоПользователяИБ); - - Если УровеньДоступа <> "ПолныйДоступ" - И УровеньДоступа <> "УправлениеСписком" - И ( НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует - И ОписаниеПользователяИБ.Действие = "Записать" - ИЛИ ПараметрыОбработки.СтарыйПользовательИБСуществует - И ОписаниеПользователяИБ.Действие = "Удалить" ) Тогда - - ВызватьИсключение ТекстСообщения; - КонецЕсли; - Если ОписаниеПользователяИБ.Действие = "Записать" И ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") - И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) Тогда + И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) + И ОписаниеПользователяИБ.УникальныйИдентификатор + <> ПараметрыОбработки.СтарыйПользователь.ИдентификаторПользователяИБ Тогда ПараметрыОбработки.Вставить("УстановкаПользователяИБ"); Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя связать пользователя ИБ с пользователем - |справочника для которого уже задан пользователь ИБ.'"), + |Нельзя сопоставить пользователя ИБ с пользователем в справочнике, + |с которым уже сопоставлен другой пользователем ИБ.'"), ПользовательОбъект.Наименование); - КонецЕсли; НайденныйПользователь = Неопределено; @@ -1300,36 +1355,68 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя связать с этим пользователем справочника - |пользователя ИБ уже связанного с другим пользователем - |справочника ""%2"".'"), + |Нельзя сопоставить пользователя ИБ с этим пользователем в справочнике, + |так как он уже сопоставлен с другим пользователем в справочнике + |""%2"".'"), НайденныйПользователь, ПользовательОбъект.Наименование); КонецЕсли; + + Если Не УровеньДоступа.ПолныеПрава Тогда + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; КонецЕсли; Если ОписаниеПользователяИБ.Действие = "Записать" Тогда - // Проверка попытки изменения недоступных свойств. - Если УровеньДоступа = "УправлениеСписком" Тогда - Если ОписаниеПользователяИБ.Свойство("Роли") Тогда - ВызватьИсключение ТекстСообщения; + // Проверка прав на изменение пользователей с широким доступом. + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + + Если Не ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.Роли.Найти("АдминистраторСистемы") = Неопределено + И Не УровеньДоступа.АдминистраторСистемы + ИЛИ Не ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.Роли.Найти("ПолныеПрава") = Неопределено + И Не УровеньДоступа.ПолныеПрава Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; - - ИначеЕсли УровеньДоступа = "ИзменениеТекущего" Тогда - + КонецЕсли; + + // Проверка попытки изменения недоступных свойств. + ДопустимыеСвойства = Новый Структура; + ДопустимыеСвойства.Вставить("УникальныйИдентификатор"); // Проверено выше. + + Если УровеньДоступа.ИзменениеТекущего Тогда + ДопустимыеСвойства.Вставить("Пароль"); + ДопустимыеСвойства.Вставить("Язык"); + КонецЕсли; + + Если УровеньДоступа.УправлениеСписком Тогда + ДопустимыеСвойства.Вставить("ПолноеИмя"); + ДопустимыеСвойства.Вставить("ПоказыватьВСпискеВыбора"); + ДопустимыеСвойства.Вставить("ЗапрещеноИзменятьПароль"); + ДопустимыеСвойства.Вставить("Язык"); + ДопустимыеСвойства.Вставить("РежимЗапуска"); + КонецЕсли; + + Если УровеньДоступа.НастройкиДляВхода Тогда + ДопустимыеСвойства.Вставить("Имя"); + ДопустимыеСвойства.Вставить("АутентификацияСтандартная"); + ДопустимыеСвойства.Вставить("Пароль"); + ДопустимыеСвойства.Вставить("АутентификацияОС"); + ДопустимыеСвойства.Вставить("ПользовательОС"); + ДопустимыеСвойства.Вставить("АутентификацияOpenID"); + ДопустимыеСвойства.Вставить("Роли"); + КонецЕсли; + + Если Не УровеньДоступа.ПолныеПрава Тогда ВсеСвойства = Пользователи.НовоеОписаниеПользователяИБ(); - ДопустимыеСвойства = Новый Массив; - ДопустимыеСвойства.Добавить("Пароль"); - ДопустимыеСвойства.Добавить("Язык"); - Для каждого КлючИЗначение Из ОписаниеПользователяИБ Цикл Если ВсеСвойства.Свойство(КлючИЗначение.Ключ) - И ДопустимыеСвойства.Найти(КлючИЗначение.Ключ) = Неопределено Тогда + И Не ДопустимыеСвойства.Свойство(КлючИЗначение.Ключ) Тогда - ВызватьИсключение ТекстСообщения; + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; КонецЦикла; КонецЕсли; @@ -1340,7 +1427,7 @@ КонецЕсли; // Обновление значения реквизита контролируемого при записи. - ПараметрыОбработки.НовыйИдентификаторПользователяИБ = + ПараметрыОбработки.АвтоРеквизиты.ИдентификаторПользователяИБ = ПользовательОбъект.ИдентификаторПользователяИБ; ОписаниеНовогоПользователяИБ = Неопределено; @@ -1349,24 +1436,27 @@ ОписаниеНовогоПользователяИБ) Тогда ПараметрыОбработки.Вставить("НовыйПользовательИБСуществует", Истина); + ПараметрыОбработки.Вставить("ОписаниеНовогоПользователяИБ", ОписаниеНовогоПользователяИБ); + + // Проверка прав на изменение пользователей с широким доступом. + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + + Если Не ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Роли.Найти("АдминистраторСистемы") = Неопределено + И Не УровеньДоступа.АдминистраторСистемы + ИЛИ Не ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Роли.Найти("ПолныеПрава") = Неопределено + И Не УровеньДоступа.ПолныеПрава Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; + КонецЕсли; Иначе ПараметрыОбработки.Вставить("НовыйПользовательИБСуществует", Ложь); КонецЕсли; - ПараметрыОбработки.Вставить( - "ОписаниеНовогоПользователяИБ", ОписаниеНовогоПользователяИБ); - ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Ложь); - - Если ПараметрыОбработки.НовыйПользовательИБСуществует - И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если НЕ ЗначениеЗаполнено(ПараметрыОбработки.НовыйИдентификаторПользователяСервиса) Тогда - ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Истина); - ПользовательОбъект.ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор; - // Обновление значения реквизита контролируемого при записи. - ПараметрыОбработки.НовыйИдентификаторПользователяСервиса = - ПользовательОбъект.ИдентификаторПользователяСервиса; - КонецЕсли; + // ПослеНачалаОбработкиПользователяИБ - поддержка модели сервиса. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ПослеНачалаОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); КонецЕсли; КонецПроцедуры @@ -1374,61 +1464,19 @@ // Вызывается ПриЗаписи Пользователя или Внешнего пользователя. Процедура ЗавершитьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт - Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") - И ПараметрыОбработки.Служебный <> ПользовательОбъект.Служебный Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Реквизит Служебный не допускается изменять в подписках на события.'"), - ПользовательОбъект.Ссылка); - КонецЕсли; + ПроверитьИзмененияРеквизитовПользователя(ПользовательОбъект, ПараметрыОбработки); - Если ПараметрыОбработки.НовыйИдентификаторПользователяИБ - <> ПользовательОбъект.ИдентификаторПользователяИБ Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Реквизит ИдентификаторПользователяИБ не допускается изменять. - |Обновление реквизита выполняется автоматически.'"), - ПользовательОбъект.Ссылка); - КонецЕсли; - - Если ПараметрыОбработки.НовыйИдентификаторПользователяСервиса - <> ПользовательОбъект.ИдентификаторПользователяСервиса Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Реквизит ИдентификаторПользователяСервиса не допускается изменять. - |Обновление реквизита выполняется автоматически.'"), - ПользовательОбъект.Ссылка); + // ПередЗавершениемОбработкиПользователяИБ - поддержка модели сервиса. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ПередЗавершениемОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); КонецЕсли; Если НЕ ПараметрыОбработки.Свойство("Действие") Тогда Возврат; КонецЕсли; - ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") - И НЕ ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") - И ОписаниеПользователяИБ.Свойство("РезультатДействия") - И НЕ ПараметрыОбработки.Служебный Тогда - - Если ОписаниеПользователяИБ.РезультатДействия = "УдаленПользовательИБ" Тогда - - УстановитьПривилегированныйРежим(Истина); - АннулироватьДоступПользователяСервиса(ПользовательОбъект); - УстановитьПривилегированныйРежим(Ложь); - - Иначе // ДобавленПользовательИБ или ИзмененПользовательИБ - ОбновитьПользователяСервиса( - ПользовательОбъект, - ПараметрыОбработки.СоздатьПользователяСервиса); - КонецЕсли; - КонецЕсли; - - Если ПараметрыОбработки.ЗаписьАдминистратора Тогда + Если ПараметрыОбработки.Свойство("ЗаписьАдминистратора") Тогда ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"); @@ -1439,9 +1487,16 @@ УстановитьПривилегированныйРежим(Ложь); КонецЕсли; - Если ПараметрыОбработки.Свойство("УстановкаПользователяИБ") - И НЕ ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда - + ОбновлятьРоли = Истина; + + // ПриЗавершенииОбработкиПользователяИБ - поддержка модели сервиса. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ПриЗавершенииОбработкиПользователяИБ( + ПользовательОбъект, ПараметрыОбработки, ОбновлятьРоли); + КонецЕсли; + + Если ПараметрыОбработки.Свойство("УстановкаПользователяИБ") И ОбновлятьРоли Тогда ПарольПользователяСервиса = Неопределено; Если ПользовательОбъект.ДополнительныеСвойства.Свойство("ПарольПользователяСервиса") Тогда ПарольПользователяСервиса = ПользовательОбъект.ДополнительныеСвойства.ПарольПользователяСервиса; @@ -1454,101 +1509,62 @@ КонецПроцедуры -Процедура ЗаписатьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) +// Вызывается при обработке свойства СвойстваПользователяИБ пользователя в справочнике. +// +// Параметры: +// ОписаниеПользователя - СправочникОбъект.Пользователи, СправочникОбъект.ВнешниеПользователи, +// ДанныеФормыСтруктура, содержит свойство СвойстваПользователяИБ. +// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - +// из объекта которой нужно прочитать свойство СвойстваПользователяИБ. +// ВходВПрограммуРазрешен - Булево - если указано Ложь, а сохранено Истина, тогда свойства +// аутентификации безусловно Ложь, т.к. были сняты в конфигураторе. +// +// Возвращаемое значение: +// Структура. +// +Функция ХранимыеСвойстваПользователяИБ(ОписаниеПользователя, ВходВПрограммуРазрешен = Ложь) Экспорт - ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; - ОписаниеПользователяИБ = ДополнительныеСвойства.ОписаниеПользователяИБ; + Свойства = Новый Структура; + Свойства.Вставить("ВходВПрограммуРазрешен", Ложь); + Свойства.Вставить("АутентификацияСтандартная", Ложь); + Свойства.Вставить("АутентификацияOpenID", Ложь); + Свойства.Вставить("АутентификацияОС", Ложь); - Если ОписаниеПользователяИБ.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СоздатьНовогоПользователяИБ = Ложь; - - Если ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") - И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) Тогда + Если ТипЗнч(ОписаниеПользователя) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(ОписаниеПользователя) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; - - ИначеЕсли ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) Тогда - ИдентификаторПользователяИБ = ПараметрыОбработки.СтарыйИдентификаторПользователяИБ; - СоздатьНовогоПользователяИБ = НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует; + ХранилищеСвойств = ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ОписаниеПользователя, "СвойстваПользователяИБ"); Иначе - ИдентификаторПользователяИБ = Неопределено; - СоздатьНовогоПользователяИБ = Истина; + ХранилищеСвойств = ОписаниеПользователя.СвойстваПользователяИБ; КонецЕсли; - ОписаниеПользователяИБ.Вставить("ПолноеИмя", ПользовательОбъект.Наименование); - - // Попытка записи пользователя ИБ. - ОписаниеОшибки = ""; - ПользовательИБ = Неопределено; - Если НЕ Пользователи.ЗаписатьПользователяИБ( - ИдентификаторПользователяИБ, - ОписаниеПользователяИБ, - СоздатьНовогоПользователяИБ, - ОписаниеОшибки, - ПользовательИБ) Тогда - - ВызватьИсключение ОписаниеОшибки; + Если ТипЗнч(ХранилищеСвойств) <> Тип("ХранилищеЗначения") Тогда + Возврат Свойства; КонецЕсли; - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - ПараметрыОбработки.Вставить("ЗаписьАдминистратора", Истина); + СохраненныеСвойства = ХранилищеСвойств.Получить(); + + Если ТипЗнч(СохраненныеСвойства) <> Тип("Структура") Тогда + Возврат Свойства; КонецЕсли; - Если СоздатьНовогоПользователяИБ Тогда - ОписаниеПользователяИБ.Вставить("РезультатДействия", "ДобавленПользовательИБ"); - ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; - ПараметрыОбработки.Вставить("УстановкаПользователяИБ"); - Иначе - ОписаниеПользователяИБ.Вставить("РезультатДействия", "ИзмененПользовательИБ"); - КонецЕсли; - - ПользовательОбъект.ИдентификаторПользователяИБ = ИдентификаторПользователяИБ; - - ОписаниеПользователяИБ.Вставить( - "УникальныйИдентификатор", - ИдентификаторПользователяИБ); - -КонецПроцедуры - -Функция УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) - - ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; - - // Очистка идентификатора пользователя ИБ. - ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; - - Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда - - УстановитьПривилегированныйРежим(Истина); - - ОписаниеОшибки = ""; - ПользовательИБ = Неопределено; - Если Пользователи.УдалитьПользователяИБ( - ПараметрыОбработки.СтарыйИдентификаторПользователяИБ, - ОписаниеОшибки, - ПользовательИБ) Тогда + Для каждого КлючИЗначение Из Свойства Цикл + Если СохраненныеСвойства.Свойство(КлючИЗначение.Ключ) + И ТипЗнч(СохраненныеСвойства[КлючИЗначение.Ключ]) = Тип("Булево") Тогда - // Установка идентификатора удаляемого пользователя ИБ, как результата действия Удалить. - ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", - ПараметрыОбработки.СтарыйИдентификаторПользователяИБ); - - ОписаниеПользователяИБ.Вставить("РезультатДействия", "УдаленПользовательИБ"); - Иначе - ВызватьИсключение ОписаниеОшибки; + Свойства[КлючИЗначение.Ключ] = СохраненныеСвойства[КлючИЗначение.Ключ]; КонецЕсли; - - ИначеЕсли ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) Тогда - - ОписаниеПользователяИБ.Вставить( - "РезультатДействия", "ОчищенаСвязьСНесуществующимПользователемИБ"); - Иначе - ОписаниеПользователяИБ.Вставить( - "РезультатДействия", "НеТребуетсяУдалениеПользовательИБ"); + КонецЦикла; + + Если Свойства.ВходВПрограммуРазрешен И Не ВходВПрограммуРазрешен Тогда + Свойства.Вставить("АутентификацияСтандартная", Ложь); + Свойства.Вставить("АутентификацияOpenID", Ложь); + Свойства.Вставить("АутентификацияОС", Ложь); КонецЕсли; + Возврат Свойства; + КонецФункции // Нельзя вызвать из фоновых заданий с пустым пользователем. @@ -1602,7 +1618,7 @@ // Проверка перед записью внешнего пользователя. Текст = НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. |Внешний пользователь не может быть полноправным. - |Сначала создайте обычного пользователя-администратора.'"); + |Сначала создайте администратора в справочнике Пользователи.'"); Возврат Истина; КонецЕсли; КонецЕсли; @@ -1765,7 +1781,9 @@ ПользовательПоИдентификаторуСуществует( ПользовательИБ.УникальныйИдентификатор, , НайденныйПользователь); - Если НайденныйПользователь = Неопределено Тогда + Если НайденныйПользователь = Неопределено + ИЛИ НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ТекстОшибки = НСтр("ru = 'Имя (для входа) уже занято.'"); Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1797,7 +1815,9 @@ Если ОписаниеПользователяИБ.Свойство("ПользовательОС") Тогда - Если НЕ ПустаяСтрока(ОписаниеПользователяИБ.ПользовательОС) Тогда + Если Не ПустаяСтрока(ОписаниеПользователяИБ.ПользовательОС) + И Не ЭтоУчебнаяПлатформа() Тогда + УстановитьПривилегированныйРежим(Истина); Попытка ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); @@ -1836,7 +1856,7 @@ ПроверитьПраваПользователя(ПользовательИБ, "ПриЗаписи"); - ОбновлениеИнформационнойБазы.УстановитьФлагОтображенияОписанийДляНовогоПользователя(ПользовательИБ.Имя); + ОбновлениеИнформационнойБазыСлужебный.УстановитьФлагОтображенияОписанийДляНовогоПользователя(ПользовательИБ.Имя); ПользовательИБ.Записать(); @@ -1872,8 +1892,8 @@ // Определяет наличие элемента в справочнике Пользователи // или справочнике ВнешниеПользователи по уникальному идентификатору // пользователя информационной. -// Функция используется для проверки наличия связи пользователяИБ только -// с одним элементом справочников Пользователи, ВнешниеПользователи. +// Функция используется для проверки наличия сопоставления пользователяИБ только +// с одним элементом справочников Пользователи и ВнешниеПользователи. // // Параметры: // УникальныйИдентификатор - идентификатор пользователя ИБ. @@ -3185,14 +3205,14 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда Возврат; КонецЕсли; - + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - + МодульУправлениеКонтактнойИнформацией.ОбновитьВидКонтактнойИнформации( Справочники["ВидыКонтактнойИнформации"].EmailПользователя, Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты, НСтр("ru='Адрес электронной почты пользователя'"), Истина, Ложь, Ложь, 1, Истина); - + МодульУправлениеКонтактнойИнформацией.ОбновитьВидКонтактнойИнформации( Справочники["ВидыКонтактнойИнформации"].ТелефонПользователя, Перечисления["ТипыКонтактнойИнформации"].Телефон, @@ -3222,6 +3242,92 @@ КонецПроцедуры +// Вызывается при переходе на новую версию конфигурации 2.2.2.3 +Процедура ЗаполнитьСвойстваАутентификацииПользователей() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойИдентификаторПользователяИБ", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ, + | Пользователи.СвойстваПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка, + | ВнешниеПользователи.ИдентификаторПользователяИБ, + | ВнешниеПользователи.СвойстваПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Выборка.ИдентификаторПользователяИБ); + + Если ПользовательИБ = Неопределено + Или Не Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + + Продолжить; + КонецЕсли; + + ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ХранимыеСвойства = ХранимыеСвойстваПользователяИБ(ПользовательОбъект); + ХранимыеСвойства.ВходВПрограммуРазрешен = Истина; + ХранимыеСвойства.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; + ХранимыеСвойства.АутентификацияOpenID = ПользовательИБ.АутентификацияOpenID; + ХранимыеСвойства.АутентификацияОС = ПользовательИБ.АутентификацияОС; + + Новые = Новый ХранилищеЗначения(ХранимыеСвойства); + Если Не ОбщегоНазначения.ДанныеСовпадают(ПользовательОбъект.СвойстваПользователяИБ, Новые) Тогда + ПользовательОбъект.СвойстваПользователяИБ = Новые; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПользовательОбъект); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Вызывается при переходе на новую версию конфигурации 2.2.2.42 +Процедура ДобавитьПолноправнымПользователямРольАдминистраторСистемы() Экспорт + + Если Не ПравоДоступа("Администрирование", Метаданные, Метаданные.Роли.ПолныеПрава) Тогда + Возврат; + КонецЕсли; + + Если Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ВсеПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Для каждого ПользовательИБ Из ВсеПользователиИБ Цикл + Если Не ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + Продолжить; + КонецЕсли; + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.АдминистраторСистемы) Тогда + Продолжить; + КонецЕсли; + + ПользовательИБ.Роли.Добавить(Метаданные.Роли.АдминистраторСистемы); + ПользовательИБ.Записать(); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -3259,8 +3365,7 @@ // метода ПрекратитьРаботуСистемы. // Процедура ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы( - Перезапустить, - ДополнительныеПараметрыКоманднойСтроки) Экспорт + Перезапустить, ДополнительныеПараметрыКоманднойСтроки) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда МодульАвтономнаяРаботаСлужебный = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРаботаСлужебный"); @@ -3405,42 +3510,6 @@ // Для поддержки работы в модели сервиса. -// Обработчик, вызываемый перед записью пользователя. -Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.ОбновитьОписаниеWebСервисаМенеджераСервиса(); - КонецЕсли; - -КонецПроцедуры - -// Обработчик, вызываемый при записи пользователя. -Процедура ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса); - КонецЕсли; - -КонецПроцедуры - -// Снимает у пользователя права доступа в приложение, в записях -// менеджера сервиса. -// -// Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - пользователь, -// для которого требуется аннулировать доступ. -// -Процедура АннулироватьДоступПользователяСервиса(ПользовательОбъект) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.АннулироватьДоступПользователяСервиса(ПользовательОбъект); - КонецЕсли; - -КонецПроцедуры - // Возвращает флаг доступности действий изменения пользователей. // // Возвращаемое значение: @@ -3504,54 +3573,80 @@ // Прочие пользовательские настройки. -// Получает список прочих пользовательских настроек у переданного пользователя справочника +// Дополняет список настроек переданного пользователя на вкладке "Прочее" обработки НастройкиПользователей. // // Параметры: -// ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, у которого нужно получить настройки. -// Настройки - Структура - прочие пользовательские настройки. -// * НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек обработки. -// * КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве обработки. -// * СписокНастроек - СписокЗначений - список полученных настроек +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, у которого нужно получить настройки. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// у которого нужно получить настройки. +// Настройки - Структура - прочие пользовательские настройки. +// * Ключ - Строка - строковый идентификатор настройки, используемый в дальнейшем +// для копирования и очистки этой настройки. +// * Значение - Структура - информация о настройке. +// ** НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек. +// ** КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве настроек. +// ** СписокНастроек - СписокЗначений - список полученных настроек. // -Процедура ПриПолученииПрочихПользовательскихНастроек(ПользовательСсылка, Настройки) Экспорт +Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройки) Экспорт + // Добавление настроек дополнительных отчетов и обработок. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + Настройки = Неопределено; МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПолучитьНастройкиДополнительныхОтчетовИОбработок(ПользовательСсылка, Настройки); + МодульДополнительныеОтчетыИОбработки.ПолучитьНастройкиДополнительныхОтчетовИОбработок(СведенияОПользователе.ПользовательСсылка, Настройки); + + Если Настройки <> Неопределено Тогда + ПрочиеНастройки.Вставить("НастройкаБыстрогоДоступа", Настройки); + КонецЕсли; КонецЕсли; + ПользователиПереопределяемый.ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройки); + КонецПроцедуры -// Сохраняет прочие пользовательские настройки переданным пользователям справочника +// Сохраняет настройки переданному пользователю. // // Параметры: -// Настройки - СписокЗначений - список ключей сохраняемых настроек -// ПользователиПолучатели - Массив - элемент массива - СправочникСсылка.Пользователи - пользователи, -// которым нужно скопировать настройки +// Настройки - СписокЗначений - список значений сохраняемых настроек +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно скопировать настройку. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// которому нужно скопировать настройку. // -Процедура ПриСохраненииПрочихПользовательскихНастроек(Настройки, ПользователиПолучатели) Экспорт +Процедура ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользователиПолучатели); + Если Настройки.ИдентификаторНастройки = "НастройкаБыстрогоДоступа" Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ДобавитьКомандыВСписокБыстрогоДоступа(Настройки.ЗначениеНастройки, СведенияОПользователе.ПользовательСсылка); + КонецЕсли; КонецЕсли; + ПользователиПереопределяемый.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); + КонецПроцедуры -// Очищает прочие пользовательские настройки переданному пользователю справочника +// Очищает настройки переданному пользователю. // // Параметры: -// Настройки - СписокЗначений - список ключей очищаемых настроек -// ОчищаемыйПользователь - СправочникСсылка.Пользователи - пользователь, у -// которого нужно очистить настройки +// Настройки - СписокЗначений - список значений очищаемых настроек +// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. +// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно очистить настройку. +// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, +// которому нужно очистить настройку. // -Процедура ПриУдаленииПрочихПользовательскихНастроек(Настройки, ОчищаемыйПользователь) Экспорт +Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.УдалитьКомандыИзСпискаБыстрогоДоступа(Настройки, ОчищаемыйПользователь); + Если Настройки.ИдентификаторНастройки = "НастройкаБыстрогоДоступа" Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.УдалитьКомандыИзСпискаБыстрогоДоступа(Настройки.ЗначениеНастройки, СведенияОПользователе.ПользовательСсылка); + КонецЕсли; КонецЕсли; + ПользователиПереопределяемый.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -4315,19 +4410,37 @@ ПользовательИсточникСсылка = Пользователи.НайтиПоИмени(ИмяПользователяИсточник); ПользовательПриемникСсылка = Пользователи.НайтиПоИмени(ИмяПользователяПриемник); - ПользователиПолучатели = Новый Массив; - ПользователиПолучатели.Добавить(ПользовательПриемникСсылка); + СведенияОПользователеИсточнике = Новый Структура; + СведенияОПользователеИсточнике.Вставить("ПользовательСсылка", ПользовательИсточникСсылка); + СведенияОПользователеИсточнике.Вставить("ИмяПользователяИнформационнойБазы", ИмяПользователяИсточник); - Настройки = Неопределено; - ПриПолученииПрочихПользовательскихНастроек(ПользовательИсточникСсылка, Настройки); - Если Настройки <> Неопределено Тогда + СведенияОПользователеПриемнике = Новый Структура; + СведенияОПользователеПриемнике.Вставить("ПользовательСсылка", ПользовательПриемникСсылка); + СведенияОПользователеПриемнике.Вставить("ИмяПользователяИнформационнойБазы", ИмяПользователяПриемник); + + // Получение прочих настроек. + ПрочиеНастройкиПользователей = Новый Структура; + ПриПолученииПрочихНастроек(СведенияОПользователеИсточнике, ПрочиеНастройкиПользователей); + Ключи = Новый СписокЗначений; + МассивПрочихНастроек = Новый Массив; + Если ПрочиеНастройкиПользователей.Количество() <> 0 Тогда - СписокНастроек = Новый СписокЗначений; - Для Каждого Элемент Из Настройки.СписокНастроек Цикл - СписокНастроек.Добавить(Элемент.Объект, Элемент.Идентификатор); + Для Каждого ПрочаяНастройка Из ПрочиеНастройкиПользователей Цикл + ПрочиеНастройкиСтруктура = Новый Структура; + Если ПрочаяНастройка.Ключ = "НастройкаБыстрогоДоступа" Тогда + СписокНастроек = ПрочаяНастройка.Значение.СписокНастроек; + Для Каждого Элемент Из СписокНастроек Цикл + Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); + КонецЦикла; + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", "НастройкаБыстрогоДоступа"); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", Ключи); + Иначе + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", ПрочаяНастройка.Ключ); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", ПрочаяНастройка.Значение.СписокНастроек); + КонецЕсли; + ПриСохраненииПрочихНастроек(СведенияОПользователеПриемнике, ПрочиеНастройкиСтруктура); КонецЦикла; - ПриСохраненииПрочихПользовательскихНастроек(СписокНастроек, ПользователиПолучатели); КонецЕсли; КонецПроцедуры @@ -4340,28 +4453,28 @@ Возврат; КонецЕсли; - ИмяНовогоПользователя = ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Имя; + ИмяНовогоПользователяИБ = ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Имя; - ИдентификаторКопируемогоПользователяИБ = - ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ПараметрыОбработки.ЗначениеКопирования, "ИдентификаторПользователяИБ"); + ИдентификаторКопируемогоПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ПараметрыОбработки.ЗначениеКопирования, "ИдентификаторПользователяИБ"); Если НЕ ЗначениеЗаполнено(ИдентификаторКопируемогоПользователяИБ) Тогда Возврат; КонецЕсли; ОписаниеКопируемогоПользователяИБ = Неопределено; + УстановитьПривилегированныйРежим(Истина); Если НЕ Пользователи.ПрочитатьПользователяИБ( ИдентификаторКопируемогоПользователяИБ, ОписаниеКопируемогоПользователяИБ) Тогда - Возврат; КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); ИмяКопируемогоПользователяИБ = ОписаниеКопируемогоПользователяИБ.Имя; // Копирование настроек. - СкопироватьНастройкиПользователя(ИмяКопируемогоПользователяИБ, ИмяНовогоПользователя, Ложь); + СкопироватьНастройкиПользователя(ИмяКопируемогоПользователяИБ, ИмяНовогоПользователяИБ, Ложь); КонецПроцедуры @@ -4383,13 +4496,16 @@ ЭлементДанных.ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + ЭлементДанных.Подготовлен = Ложь; + ЭлементДанных.СвойстваПользователяИБ = Новый ХранилищеЗначения(Неопределено); КонецЕсли; КонецПроцедуры // Переопределяет стандартное поведение при загрузке данных. // Реквизит ИдентификаторПользователяИБ не переносится, т.к. всегда -// связан с пользователем текущей базы или не связан с пользователем. +// относится к пользователю текущей информационной базы или не заполнен. // Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, ОтПодчиненного) @@ -4415,8 +4531,13 @@ ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - ЭлементДанных.ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ЭлементДанных.Ссылка, "ИдентификаторПользователяИБ"); + СписокСвойств = + "ИдентификаторПользователяИБ, + |Подготовлен, + |СвойстваПользователяИБ"; + + ЗаполнитьЗначенияСвойств(ЭлементДанных, ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ЭлементДанных.Ссылка, СписокСвойств)); ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда @@ -4431,7 +4552,7 @@ КонецПопытки; Если ОбъектПолучен Тогда - Объект.ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбмененДанными(); + Объект.ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными(); КонецЕсли; КонецЕсли; КонецЕсли; @@ -4446,6 +4567,352 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Для процедуры НачатьОбработкуПользователяИБ + +Процедура ЗапомнитьСвойстваПользователя(ПользовательОбъект, ПараметрыОбработки) + + Поля = + "Ссылка, + |ИдентификаторПользователяИБ, + |ИдентификаторПользователяСервиса, + |СвойстваПользователяИБ, + |Подготовлен, + |ПометкаУдаления, + |Недействителен"; + + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") Тогда + Поля = Поля + ", + |Служебный"; + КонецЕсли; + + СтарыйПользователь = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПользовательОбъект.Ссылка, Поля); + + Если ТипЗнч(ПользовательОбъект) <> Тип("СправочникОбъект.Пользователи") Тогда + СтарыйПользователь.Вставить("Служебный", Ложь); + КонецЕсли; + + Если ПользовательОбъект.ЭтоНовый() Или ПользовательОбъект.Ссылка <> СтарыйПользователь.Ссылка Тогда + СтарыйПользователь.ИдентификаторПользователяИБ = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + СтарыйПользователь.ИдентификаторПользователяСервиса = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + СтарыйПользователь.СвойстваПользователяИБ = Новый ХранилищеЗначения(Неопределено); + СтарыйПользователь.Подготовлен = Ложь; + СтарыйПользователь.ПометкаУдаления = Ложь; + СтарыйПользователь.Недействителен = Ложь; + КонецЕсли; + ПараметрыОбработки.Вставить("СтарыйПользователь", СтарыйПользователь); + + // Свойства старого пользователя ИБ (если существует). + УстановитьПривилегированныйРежим(Истина); + + ОписаниеСтарогоПользователяИБ = Неопределено; + ПараметрыОбработки.Вставить("СтарыйПользовательИБСуществует", Пользователи.ПрочитатьПользователяИБ( + СтарыйПользователь.ИдентификаторПользователяИБ, ОписаниеСтарогоПользователяИБ)); + + ПараметрыОбработки.Вставить("СтарыйПользовательИБТекущий", Ложь); + + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + ПараметрыОбработки.Вставить("ОписаниеСтарогоПользователяИБ", ОписаниеСтарогоПользователяИБ); + + Если ОписаниеСтарогоПользователяИБ.УникальныйИдентификатор = + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор Тогда + + ПараметрыОбработки.Вставить("СтарыйПользовательИБТекущий", Истина); + КонецЕсли; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + + // Начальное заполнение значений полей авто реквизитов значениями старого пользователя. + ЗаполнитьЗначенияСвойств(ПараметрыОбработки.АвтоРеквизиты, СтарыйПользователь); + + // Начальное заполнение значений полей блокируемых реквизитов значениями нового пользователя. + ЗаполнитьЗначенияСвойств(ПараметрыОбработки.БлокируемыеРеквизиты, ПользовательОбъект); + +КонецПроцедуры + +Процедура ЗаписатьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) + + ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; + ОписаниеПользователяИБ = ДополнительныеСвойства.ОписаниеПользователяИБ; + СтарыйПользователь = ПараметрыОбработки.СтарыйПользователь; + АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; + + Если ОписаниеПользователяИБ.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СоздатьНовогоПользователяИБ = Ложь; + + Если ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") + И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) + И ОписаниеПользователяИБ.УникальныйИдентификатор + <> ПараметрыОбработки.СтарыйПользователь.ИдентификаторПользователяИБ Тогда + + ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; + + ИначеЕсли ЗначениеЗаполнено(СтарыйПользователь.ИдентификаторПользователяИБ) Тогда + ИдентификаторПользователяИБ = СтарыйПользователь.ИдентификаторПользователяИБ; + СоздатьНовогоПользователяИБ = НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует; + Иначе + ИдентификаторПользователяИБ = Неопределено; + СоздатьНовогоПользователяИБ = Истина; + КонецЕсли; + + // Заполнение автоматических свойств пользователя ИБ. + Если ОписаниеПользователяИБ.Свойство("ПолноеИмя") Тогда + ОписаниеПользователяИБ.Вставить("ПолноеИмя", ПользовательОбъект.Наименование); + КонецЕсли; + + ХранимыеСвойства = ХранимыеСвойстваПользователяИБ(ПользовательОбъект); + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + СтараяАутентификация = ПараметрыОбработки.ОписаниеСтарогоПользователяИБ; + Если Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) Тогда + ХранимыеСвойства.АутентификацияСтандартная = СтараяАутентификация.АутентификацияСтандартная; + ХранимыеСвойства.АутентификацияOpenID = СтараяАутентификация.АутентификацияOpenID; + ХранимыеСвойства.АутентификацияОС = СтараяАутентификация.АутентификацияОС; + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + Иначе + СтараяАутентификация = Новый Структура; + СтараяАутентификация.Вставить("АутентификацияСтандартная", Ложь); + СтараяАутентификация.Вставить("АутентификацияОС", Ложь); + СтараяАутентификация.Вставить("АутентификацияOpenID", Ложь); + ХранимыеСвойства.АутентификацияСтандартная = Ложь; + ХранимыеСвойства.АутентификацияOpenID = Ложь; + ХранимыеСвойства.АутентификацияОС = Ложь; + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + + Если ОписаниеПользователяИБ.Свойство("АутентификацияСтандартная") Тогда + ХранимыеСвойства.АутентификацияСтандартная = ОписаниеПользователяИБ.АутентификацияСтандартная; + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + + Если ОписаниеПользователяИБ.Свойство("АутентификацияОС") Тогда + ХранимыеСвойства.АутентификацияОС = ОписаниеПользователяИБ.АутентификацияОС; + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + + Если ОписаниеПользователяИБ.Свойство("АутентификацияOpenID") Тогда + ХранимыеСвойства.АутентификацияOpenID = ОписаниеПользователяИБ.АутентификацияOpenID; + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + + УстановитьХранимуюАутентификацию = Неопределено; + Если ОписаниеПользователяИБ.Свойство("ВходВПрограммуРазрешен") Тогда + УстановитьХранимуюАутентификацию = ОписаниеПользователяИБ.ВходВПрограммуРазрешен = Истина; + + ИначеЕсли ОписаниеПользователяИБ.Свойство("АутентификацияСтандартная") + И ОписаниеПользователяИБ.АутентификацияСтандартная = Истина + ИЛИ ОписаниеПользователяИБ.Свойство("АутентификацияОС") + И ОписаниеПользователяИБ.АутентификацияОС = Истина + ИЛИ ОписаниеПользователяИБ.Свойство("АутентификацияOpenID") + И ОписаниеПользователяИБ.АутентификацияOpenID = Истина Тогда + + УстановитьХранимуюАутентификацию = Истина; + КонецЕсли; + + Если УстановитьХранимуюАутентификацию = Неопределено Тогда + НоваяАутентификация = СтараяАутентификация; + Иначе + Если УстановитьХранимуюАутентификацию Тогда + ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", ХранимыеСвойства.АутентификацияСтандартная); + ОписаниеПользователяИБ.Вставить("АутентификацияOpenID", ХранимыеСвойства.АутентификацияOpenID); + ОписаниеПользователяИБ.Вставить("АутентификацияОС", ХранимыеСвойства.АутентификацияОС); + Иначе + ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Ложь); + ОписаниеПользователяИБ.Вставить("АутентификацияОС", Ложь); + ОписаниеПользователяИБ.Вставить("АутентификацияOpenID", Ложь); + КонецЕсли; + НоваяАутентификация = ОписаниеПользователяИБ; + КонецЕсли; + + Если ХранимыеСвойства.ВходВПрограммуРазрешен <> Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) Тогда + ХранимыеСвойства.ВходВПрограммуРазрешен = Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация); + ПользовательОбъект.СвойстваПользователяИБ = Новый ХранилищеЗначения(ХранимыеСвойства); + АвтоРеквизиты.СвойстваПользователяИБ = ПользовательОбъект.СвойстваПользователяИБ; + КонецЕсли; + + // Проверка прав на изменение разрешения входа в программу. + Если Не ПараметрыОбработки.УровеньДоступа.ПолныеПрава + И (Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) + <> Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) + ИЛИ Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) + И СтараяАутентификация.АутентификацияСтандартная <> НоваяАутентификация.АутентификацияСтандартная + И СтараяАутентификация.АутентификацияОС <> НоваяАутентификация.АутентификацияОС + И СтараяАутентификация.АутентификацияOpenID <> НоваяАутентификация.АутентификацияOpenID) + И НЕ (ПараметрыОбработки.УровеньДоступа.УправлениеСписком + И Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) = Ложь) Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; + + // Попытка записи пользователя ИБ. + ОписаниеОшибки = ""; + ПользовательИБ = Неопределено; + Если НЕ Пользователи.ЗаписатьПользователяИБ( + ИдентификаторПользователяИБ, + ОписаниеПользователяИБ, + СоздатьНовогоПользователяИБ, + ОписаниеОшибки, + ПользовательИБ) Тогда + + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + ПараметрыОбработки.Вставить("ЗаписьАдминистратора"); + КонецЕсли; + + Если СоздатьНовогоПользователяИБ Тогда + ОписаниеПользователяИБ.Вставить("РезультатДействия", "ДобавленПользовательИБ"); + ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; + ПараметрыОбработки.Вставить("УстановкаПользователяИБ"); + + Если ПараметрыОбработки.УровеньДоступа.УправлениеСписком + И Не Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + + ПользовательОбъект.Подготовлен = Истина; + ПараметрыОбработки.БлокируемыеРеквизиты.Подготовлен = Истина; + КонецЕсли; + Иначе + ОписаниеПользователяИБ.Вставить("РезультатДействия", "ИзмененПользовательИБ"); + + Если Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + ПользовательОбъект.Подготовлен = Ложь; + ПараметрыОбработки.БлокируемыеРеквизиты.Подготовлен = Ложь; + КонецЕсли; + КонецЕсли; + + ПользовательОбъект.ИдентификаторПользователяИБ = ИдентификаторПользователяИБ; + + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ИдентификаторПользователяИБ); + +КонецПроцедуры + +Функция УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) + + ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; + СтарыйПользователь = ПараметрыОбработки.СтарыйПользователь; + + // Очистка идентификатора пользователя ИБ. + ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; + + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + + УстановитьПривилегированныйРежим(Истина); + + ОписаниеОшибки = ""; + ПользовательИБ = Неопределено; + Если Пользователи.УдалитьПользователяИБ( + СтарыйПользователь.ИдентификаторПользователяИБ, + ОписаниеОшибки, + ПользовательИБ) Тогда + + // Установка идентификатора удаляемого пользователя ИБ, как результата действия Удалить. + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", + СтарыйПользователь.ИдентификаторПользователяИБ); + + ОписаниеПользователяИБ.Вставить("РезультатДействия", "УдаленПользовательИБ"); + Иначе + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(СтарыйПользователь.ИдентификаторПользователяИБ) Тогда + + ОписаниеПользователяИБ.Вставить( + "РезультатДействия", "ОчищеноСопоставлениеСНесуществующимПользователемИБ"); + Иначе + ОписаниеПользователяИБ.Вставить( + "РезультатДействия", "НеТребуетсяУдалениеПользовательИБ"); + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Для процедуры ЗавершитьОбработкуПользователяИБ + +Процедура ПроверитьИзмененияРеквизитовПользователя(ПользовательОбъект, ПараметрыОбработки) + + СтарыйПользователь = ПараметрыОбработки.СтарыйПользователь; + АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; + БлокируемыеРеквизиты = ПараметрыОбработки.БлокируемыеРеквизиты; + + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") + И БлокируемыеРеквизиты.Служебный <> ПользовательОбъект.Служебный Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит Служебный не допускается изменять в подписках на события.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если БлокируемыеРеквизиты.Подготовлен <> ПользовательОбъект.Подготовлен Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит Подготовлен не допускается изменять в подписках на события.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если АвтоРеквизиты.ИдентификаторПользователяИБ <> ПользовательОбъект.ИдентификаторПользователяИБ Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит ИдентификаторПользователяИБ не допускается изменять. + |Обновление реквизита выполняется автоматически.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если Не ОбщегоНазначения.ДанныеСовпадают(АвтоРеквизиты.СвойстваПользователяИБ, + ПользовательОбъект.СвойстваПользователяИБ) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит СвойстваПользователяИБ не допускается изменять. + |Обновление реквизита выполняется автоматически.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если СтарыйПользователь.ПометкаУдаления = Ложь + И ПользовательОбъект.ПометкаУдаления = Истина + И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя помечать на удаление пользователя, которому разрешен вход в программу.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если СтарыйПользователь.Недействителен = Ложь + И ПользовательОбъект.Недействителен = Истина + И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя пометить недействительным пользователя, которому разрешен вход в программу.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если СтарыйПользователь.Подготовлен = Ложь + И ПользовательОбъект.Подготовлен = Истина + И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя пометить подготовленным пользователя, которому разрешен вход в программу.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для процедуры ОбработатьИнтерфейсРолей @@ -4584,7 +5051,7 @@ ПоказатьТолькоВыбранныеРоли = Истина; КонецЕсли; - ПоказатьПодсистемыРолей = Параметры.Форма.ПоказатьПодсистемыРолей; + ПоказатьПодсистемыРолей = Параметры.Форма.ПоказатьПодсистемыРолей; // Запоминание текущей строки. ТекущаяПодсистема = ""; @@ -4592,7 +5059,11 @@ Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда + + Если ТекущиеДанные = Неопределено Тогда + Элементы.Роли.ТекущаяСтрока = Неопределено; + + ИначеЕсли ТекущиеДанные.ЭтоРоль Тогда ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); ТекущаяРоль = ТекущиеДанные.Имя; Иначе @@ -4752,7 +5223,6 @@ КонецЦикла; КонецЕсли; - Если Параметры.Свойство("ЗапретИзмененияАдминистративногоДоступа") И Параметры.ЗапретИзмененияАдминистративногоДоступа Тогда @@ -4853,3 +5323,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 66192e36b..29ed0533f 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Возвращает флаг доступности действий изменения пользователей. // @@ -40,7 +39,7 @@ Если ЕстьПравоДобавленияПользователей() Тогда Возврат ДействияСНовымПользователемСервиса(); Иначе - ВызватьИсключение(НСтр("ru = 'Недостаточно прав доступа для добавления новых пользователей'")); + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа для добавления новых пользователей'"); КонецЕсли; КонецЕсли; @@ -152,7 +151,157 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Обработка пользователя ИБ в ходе записи элемента справочника Пользователи и ВнешниеПользователи. + +// Вызывается из процедуры НачатьОбработкуПользователяИБ для поддержки модели сервиса. +Процедура ПередНачаломОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; + СтарыйПользователь = ПараметрыОбработки.СтарыйПользователь; + АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; + + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ВызватьИсключение НСтр("ru = 'Внешние пользователи не поддерживаются в модели сервиса.'"); + КонецЕсли; + + АвтоРеквизиты.Вставить("ИдентификаторПользователяСервиса", СтарыйПользователь.ИдентификаторПользователяСервиса); + + Если ДополнительныеСвойства.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда + + Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ВызватьИсключение + НСтр("ru = 'Обновление пользователя по сообщению + |канала удаленного администрирования + |доступно только неразделенным пользователям.'"); + КонецЕсли; + + ПараметрыОбработки.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); + АвтоРеквизиты.ИдентификаторПользователяСервиса = ПользовательОбъект.ИдентификаторПользователяСервиса; + + ИначеЕсли НЕ ПользовательОбъект.Служебный Тогда + ОбновитьОписаниеWebСервисаМенеджераСервиса(); + КонецЕсли; + + Если ЗначениеЗаполнено(АвтоРеквизиты.ИдентификаторПользователяСервиса) + И АвтоРеквизиты.ИдентификаторПользователяСервиса <> СтарыйПользователь.ИдентификаторПользователяСервиса Тогда + + Если ЗначениеЗаполнено(СтарыйПользователь.ИдентификаторПользователяСервиса) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя изменять уже установленный идентификатор + |пользователя сервиса в элементе справочника.'"), + ПользовательОбъект.Наименование); + + КонецЕсли; + + НайденныйПользователь = Неопределено; + + Если ПользователиСлужебный.ПользовательПоИдентификаторуСуществует( + АвтоРеквизиты.ИдентификаторПользователяСервиса, + ПользовательОбъект.Ссылка, + НайденныйПользователь, + Истина) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя устанавливать идентификатор + |пользователя сервиса ""%2"" + |в этот элемент справочника, т.к. он + |уже используется в элементе ""%3"".'"), + ПользовательОбъект.Наименование, + АвтоРеквизиты.ИдентификаторПользователяСервиса, + НайденныйПользователь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Вызывается из процедуры НачатьОбработкуПользователяИБ для поддержки модели сервиса. +Процедура ПослеНачалаОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; + + ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Ложь); + + Если ПараметрыОбработки.НовыйПользовательИБСуществует + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если НЕ ЗначениеЗаполнено(АвтоРеквизиты.ИдентификаторПользователяСервиса) Тогда + + ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Истина); + ПользовательОбъект.ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор; + + // Обновление значения реквизита контролируемого при записи. + АвтоРеквизиты.ИдентификаторПользователяСервиса = ПользовательОбъект.ИдентификаторПользователяСервиса; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Вызывается из процедуры ЗавершитьОбработкуПользователяИБ для поддержки модели сервиса. +Процедура ПередЗавершениемОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + АвтоРеквизиты = ПараметрыОбработки.АвтоРеквизиты; + + Если АвтоРеквизиты.ИдентификаторПользователяСервиса <> ПользовательОбъект.ИдентификаторПользователяСервиса Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит ИдентификаторПользователяСервиса не допускается изменять. + |Обновление реквизита выполняется автоматически.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + +КонецПроцедуры + +// Вызывается из процедуры ЗавершитьОбработкуПользователяИБ для поддержки модели сервиса. +Процедура ПриЗавершенииОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки, ОбновлятьРоли) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда + ОбновлятьРоли = Ложь; + КонецЕсли; + + ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") + И ОписаниеПользователяИБ.Свойство("РезультатДействия") + И НЕ ПользовательОбъект.Служебный Тогда + + Если ОписаниеПользователяИБ.РезультатДействия = "УдаленПользовательИБ" Тогда + + УстановитьПривилегированныйРежим(Истина); + АннулироватьДоступПользователяСервиса(ПользовательОбъект); + УстановитьПривилегированныйРежим(Ложь); + + Иначе // ДобавленПользовательИБ или ИзмененПользовательИБ + ОбновитьПользователяСервиса(ПользовательОбъект, ПараметрыОбработки.СоздатьПользователяСервиса); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Только для внутреннего использования Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() Экспорт @@ -168,14 +317,8 @@ КонецПроцедуры -// Только для внутреннего использования -Процедура ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса) Экспорт - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ ПользовательОбъект.Служебный Тогда - - Возврат; - КонецЕсли; +// Для процедуры ПриЗавершенииОбработкиПользователяИБ +Процедура ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса) Если НЕ ПользовательОбъект.ДополнительныеСвойства.Свойство("СинхронизироватьССервисом") ИЛИ НЕ ПользовательОбъект.ДополнительныеСвойства.СинхронизироватьССервисом Тогда @@ -310,8 +453,8 @@ КонецПроцедуры -// Только для внутреннего использования -Процедура АннулироватьДоступПользователяСервиса(ПользовательОбъект) Экспорт +// Для процедуры ПриЗавершенииОбработкиПользователяИБ +Процедура АннулироватьДоступПользователяСервиса(ПользовательОбъект) Если НЕ ЗначениеЗаполнено(ПользовательОбъект.ИдентификаторПользователяСервиса) Тогда Возврат; @@ -462,3 +605,5 @@ ИмяОперации); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl index 427225d27..fcf582d57 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Открывает форму ввода пароля пользователя сервиса // @@ -22,3 +21,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl index 49a99512e..4bcfd222c 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает имя подсистемы, которое должно использоваться в именах // событий журнала регистрации. @@ -15,4 +14,6 @@ Возврат Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.РаботаВМоделиСервиса.Подсистемы.ПользователиВМоделиСервиса.Имя; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl index 2c5913333..af280915c 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl @@ -3,42 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Только для внутреннего использования. -Функция ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(ВернутьТекстОшибки = Ложь) Экспорт - - Возврат ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ( - ВернутьТекстОшибки); - -КонецФункции - -// Только для внутреннего использования. -Процедура СоздатьПервогоАдминистратораСистемы() Экспорт - - ТекстОшибки = ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина); - - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - УстановитьПривилегированныйРежим(Истина); - - Администратор = ПользователиИнформационнойБазы.СоздатьПользователя(); - Администратор.Имя = НСтр("ru = 'Администратор'"); - Администратор.ПолноеИмя = Администратор.Имя; - Администратор.АутентификацияСтандартная = Истина; - Администратор.ПоказыватьВСпискеВыбора = Истина; - Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - Администратор.Роли.Добавить(Пользователи.РольАдминистратораСистемы()); - Администратор.Записать(); - - ПользователиСлужебный.УстановитьНачальныеНастройки(Администратор.Имя); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Проверяет, что объект информационной базы используется в качестве объекта авторизации // какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). @@ -56,4 +21,6 @@ ЕстьПравоДобавленияВнешнегоПользователя, ТекстОшибки); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index 07f48dbc5..aa32c735b 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей в управляемой форме @@ -28,22 +27,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Выполняет попытку авторизации пользователя и проверку результата. -Процедура ПроверитьАвторизациюПользователя(Параметры, ПроверитьЗапускСПустымСпискомПользователей = Ложь) Экспорт +Процедура ПроверитьАвторизациюПользователя(Параметры) Экспорт + + Параметры.ПолученныеПараметрыКлиента.Вставить("ДействияПередАвторизациейПользователяВыполнены"); + Параметры.Вставить("КоличествоПолученныхПараметровКлиента", + Параметры.ПолученныеПараметрыКлиента.Количество()); + ОбновитьПовторноИспользуемыеЗначения(); ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПроверитьЗапускСПустымСпискомПользователей Тогда - Если НЕ ПараметрыКлиента.Свойство("ОшибкаЗапускаСПустымСпискомПользователей") Тогда - Возврат; - КонецЕсли; - Иначе - Если НЕ ПараметрыКлиента.Свойство("ОшибкаАвторизации") Тогда - Возврат; - КонецЕсли; + Если НЕ ПараметрыКлиента.Свойство("ОшибкаАвторизации") Тогда + Возврат; КонецЕсли; Параметры.Отказ = Истина; @@ -60,69 +59,19 @@ ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если НЕ ПараметрыКлиента.Свойство("ОшибкаЗапускаСПустымСпискомПользователей") Тогда - ОшибкаАвторизации = ПараметрыКлиента.ОшибкаАвторизации; - - Если ТипЗнч(ОшибкаАвторизации) = Тип("ФиксированнаяСтруктура") Тогда - Параметры.Перезапустить = Истина; - Если ЗначениеЗаполнено(ОшибкаАвторизации.ДополнительныеПараметрыКоманднойСтроки) Тогда - Параметры.ДополнительныеПараметрыКоманднойСтроки = - ОшибкаАвторизации.ДополнительныеПараметрыКоманднойСтроки; - КонецЕсли; - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - Возврат; - Иначе - СтандартныеПодсистемыКлиент.ПоказатьПредупреждениеИПродолжить(Параметры, ОшибкаАвторизации); - Возврат; + ОшибкаАвторизации = ПараметрыКлиента.ОшибкаАвторизации; + + Если ТипЗнч(ОшибкаАвторизации) = Тип("ФиксированнаяСтруктура") Тогда + Параметры.Перезапустить = Истина; + Если ЗначениеЗаполнено(ОшибкаАвторизации.ДополнительныеПараметрыКоманднойСтроки) Тогда + Параметры.ДополнительныеПараметрыКоманднойСтроки = + ОшибкаАвторизации.ДополнительныеПараметрыКоманднойСтроки; КонецЕсли; + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + Иначе + СтандартныеПодсистемыКлиент.ПоказатьПредупреждениеИПродолжить(Параметры, ОшибкаАвторизации); КонецЕсли; - // Создание администратора или завершение работы. - ТекстВопроса = - НСтр("ru = 'Запуск с пустым списком пользователей информационной базы невозможен. - |Добавить пользователя Администратор и перезапустить программу? - | - |Пояснение: также можно завершить работу и вручную добавить в список - |пользователей информационной базы учетную запись администратора с двумя ролями - |""Администратор системы"", ""Полные права"" и повторить запуск программы от его имени. - | - |Для перехода к списку пользователей информационной базы необходимо открыть - |Конфигуратор и воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("СоздатьИПерезапустить", НСтр("ru = 'Добавить и перезапустить'")); - Кнопки.Добавить("ЗавершитьРаботу", НСтр("ru = 'Завершить работу'")); - - ОбработкаОтвета = Новый ОписаниеОповещения("ПослеОтветаНаВопросСоздатьАдминистратораИлиЗавершитьРаботу", - ЭтотОбъект, Параметры); - - ПоказатьВопрос( - ОбработкаОтвета, - ТекстВопроса, - Кнопки, - , - "СоздатьИПерезапустить", - НСтр("ru = 'Авторизация пользователя'") ); - КонецПроцедуры -// Продолжение предыдущей процедуры. -Процедура ПослеОтветаНаВопросСоздатьАдминистратораИлиЗавершитьРаботу(Ответ, Параметры) Экспорт - - Если Ответ = "СоздатьИПерезапустить" Тогда - ПользователиСлужебныйВызовСервера.СоздатьПервогоАдминистратораСистемы(); - - НовыйПараметрЗапуска = " /N""" + НСтр("ru = 'Администратор'")+ """"; - - Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда - НовыйПараметрЗапуска = НовыйПараметрЗапуска - + " /C """ + СтрЗаменить(ПараметрЗапуска, """", """""") + """"; - КонецЕсли; - - Параметры.Перезапустить = Истина; - Параметры.ДополнительныеПараметрыКоманднойСтроки = НовыйПараметрЗапуска; - КонецЕсли; - - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - -КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index 9727917a9..486e162fd 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Вычисляет начальное имя для входа по полному имени пользователя. Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя) Экспорт @@ -50,3 +49,5 @@ Возврат КраткоеИмя; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index c999394c9..02d7c3217 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Содержит сохраненные параметры, используемые подсистемой. Функция Параметры() Экспорт @@ -144,3 +143,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 8b7bee339..2b47bfcb9 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Инициировать уведомление о всех имеющихся в МС поставляемых данных (за исключением тех, // у которых стоит пометка "Запрет уведомления" @@ -63,7 +62,7 @@ // Может использоваться в связке с ДескрипторыПоставляемыхДанныхИзМенеджера для // ручной инициации процесса обработки данных. После вызова метода система поведет // себя так, как будто она только что получила уведомление о доступности новых данных, -// с указанным дескриптором – будет вызван ДоступныНовыеДанные, а затем, при необходимости, +// с указанным дескриптором - будет вызван ДоступныНовыеДанные, а затем, при необходимости, // ОбработатьНовыеДанные для соответствующих обработчиков. // // Параметры: @@ -81,7 +80,7 @@ // зависимости от константы ХранитьФайлыВТомахНаДиске и наличия свободных томов. Данные // могут быть позднее извлечены при помощи поиска по реквизитам, либо путем указания // уникального идентификатора, который передавался в поле Дескриптор.FileGUID. Если в базе -// уже есть данные с тем же видом данных и набором ключевых характеристик – новые данные +// уже есть данные с тем же видом данных и набором ключевых характеристик - новые данные // замещают старые. При это используется обновление существующего элемента справочника, а // не удаление и создание нового. // @@ -350,7 +349,6 @@ Запрос = ЗапросДанныхПоИменам(Дескриптор.DataType, Фильтр); Возврат Не Запрос.Выполнить().Пустой(); - КонецФункции @@ -538,8 +536,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Объявляет события подсистемы ПоставляемыеДанные: // @@ -602,8 +601,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция НовыйПроксиНаМенеджереСервиса() @@ -768,7 +768,6 @@ // Булево // Функция ХарактеристикиСовпадают(Знач Фильтр, Знач Характеристики) Экспорт - Для Каждого СтрокаФильтр из Фильтр Цикл СтрокаНайдена = Ложь; @@ -819,3 +818,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl index cc5001522..60cfe518d 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для подсистемы ПоставляемыеДанные @@ -35,3 +34,5 @@ Процедура ПолучитьОбработчикиПоставляемыхДанных(Обработчики) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl index c25470fab..7eecfa2fe 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // Формирование номера/кода объекта для вывода в печатных формах. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта // Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где @@ -233,8 +232,9 @@ Возврат НомерОбъекта; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция НомерСодержитСтандартныйПрефикс(Знач НомерОбъекта) @@ -250,3 +250,5 @@ Возврат Найти(НомерОбъекта, "-") = 5; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl index ff0328f07..ae9af41fa 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события "При получении номера на печать". // Событие возникает перед стандартной обработкой получения номера. @@ -12,7 +11,7 @@ // // Параметры: // НомерОбъекта - Строка - номер или код объекта, который обрабатывается -// СтандартнаяОбработка – Булево – флаг стандартной обработки; если установить значение флага в Ложь, +// СтандартнаяОбработка - Булево - флаг стандартной обработки; если установить значение флага в Ложь, // то стандартная обработка формирования номера на печать выполняться не будет // // Пример реализации кода обработчика: @@ -22,5 +21,6 @@ // Процедура ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка) Экспорт - КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl index f6df8973d..602783422 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события при изменении номера объекта. // Обработчик предназначен для вычисления базового номера объекта в случае, @@ -12,20 +11,20 @@ // Обработчик вызывается только для случая, когда обрабатываемые номера и коды объектов // были сформированы нестандартным образом, не в формате номеров и кодов БСП. // -// Параметры: -// Объект. Тип: ДокументОбъект, БизнесПроцессОбъект, ЗадачаОбъект. -// Объект данных, для которого необходимо определить базовый номер. -// -// Номер. Тип: Строка. Номер текущего объекта, из которого необходимо извлечь базовый номер. -// -// БазовыйНомер. Тип: Строка. Базовый номер объекта. Под базовым номером объекта подразумевается номер объекта -// за вычетом всех префиксов (префикса ИБ, префикса организации, префикса подразделения, пользовательского префикса и пр). -// -// СтандартнаяОбработка. Тип: Булево. Флаг стандартной обработки. Значения по умолчанию Истина. -// Если в обработчике установить данному параметру значение Ложь, то стандартная обработка выполнена не будет. -// Стандартная обработка получает базовый номер справа до первого нечислового символа. -// Например, для номера "АА00005/12/368" стандартная обработка вернет "368". -// Однако базовый номер для объекта будет равен "5/12/368". +// Параметры: +// Объект - ДокументОбъект, БизнесПроцессОбъект, ЗадачаОбъект - Объект данных, +// для которого необходимо определить базовый номер. +// Номер - Строка - Номер текущего объекта, из которого необходимо извлечь базовый номер. +// БазовыйНомер - Строка - Базовый номер объекта. +// Под базовым номером объекта подразумевается номер объекта +// за вычетом всех префиксов (префикса ИБ, префикса организации, +// префикса подразделения, пользовательского префикса и пр). +// СтандартнаяОбработка - Булево - Флаг стандартной обработки. Значения по умолчанию Истина. +// Если в обработчике установить данному параметру значение Ложь, +// то стандартная обработка выполнена не будет. +// Стандартная обработка получает базовый код справа до первого нечислового символа. +// Например, для кода "АА00005/12/368" стандартная обработка вернет "368". +// Однако базовый код для объекта будет равен "5/12/368". // Процедура ПриИзмененииНомера(Объект, Знач Номер, БазовыйНомер, СтандартнаяОбработка) Экспорт @@ -39,39 +38,37 @@ // Обработчик вызывается только для случая, когда обрабатываемые номера и коды объектов // были сформированы нестандартным образом, не в формате номеров и кодов БСП. // -// Параметры: -// Объект. Тип: СправочникОбъект, ПланВидовХарактеристикОбъект. -// Объект данных, для которого необходимо определить базовый код. -// -// Код. Тип: Строка. Код текущего объекта, из которого необходимо извлечь базовый код. -// -// БазовыйКод. Тип: Строка. Базовый код объекта. Под базовым кодом объекта подразумевается код объекта -// за вычетом всех префиксов (префикса ИБ, префикса организации, префикса подразделения, пользовательского префикса и пр). -// -// СтандартнаяОбработка. Тип: Булево. Флаг стандартной обработки. Значения по умолчанию Истина. -// Если в обработчике установить данному параметру значение Ложь, то стандартная обработка выполнена не будет. -// Стандартная обработка получает базовый код справа до первого нечислового символа. -// Например, для кода "АА00005/12/368" стандартная обработка вернет "368". -// Однако базовый код для объекта будет равен "5/12/368". +// Параметры: +// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект - Объект данных, +// для которого необходимо определить базовый код. +// Код - Строка - Код текущего объекта, из которого необходимо извлечь базовый код. +// БазовыйКод - Строка - Базовый код объекта. Под базовым кодом объекта подразумевается код объекта +// за вычетом всех префиксов (префикса ИБ, префикса организации, +// префикса подразделения, пользовательского префикса и пр). +// СтандартнаяОбработка - Булево - Флаг стандартной обработки. Значения по умолчанию Истина. +// Если в обработчике установить данному параметру значение Ложь, +// то стандартная обработка выполнена не будет. +// Стандартная обработка получает базовый код справа до первого нечислового символа. +// Например, для кода "АА00005/12/368" стандартная обработка вернет "368". +// Однако базовый код для объекта будет равен "5/12/368". // Процедура ПриИзмененииКода(Объект, Знач Код, БазовыйКод, СтандартнаяОбработка) Экспорт - - КонецПроцедуры // В процедуре необходимо заполнить параметр "Объекты" для тех объектов метаданных, // для которых ссылка на организацию располагается в реквизите с именем отличным от стандартного имени "Организация". // -// Параметры: -// Объекты. Тип: Таблица значений. -// Колонки таблицы: -// Объект. Тип: Объект метаданных. Объект метаданных, для которого указывается реквизит, -// содержащий ссылку на организацию. -// Реквизит. Тип: Строка. Имя реквизита, который содержит ссылку на организацию. +// Параметры: +// Объекты - ТаблицаЗначений. +// * Объект - ОбъектМетаданных - Объект метаданных, для которого указывается реквизит, +// содержащий ссылку на организацию. +// * Реквизит - Строка - Имя реквизита, который содержит ссылку на организацию. // Процедура ПолучитьПрефиксообразующиеРеквизиты(Объекты) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl index ec112d5e2..e2a5061a3 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает таблицу префиксообразующих реквизитов, заданных в переопределяемом модуле. // @@ -25,3 +24,5 @@ Возврат Новый ФиксированноеСоответствие(РеквизитыОбъектов); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index ff2ec8763..dd294fa84 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -12,14 +11,14 @@ // Возвращает признак изменения организации или даты объекта // // Параметры: -// Ссылка – ссылка на объект ИБ. -// ДатаПослеИзменения – дата объекта после изменения -// ОрганизацияПослеИзменения – организация объекта после изменения. +// Ссылка - ссылка на объект ИБ. +// ДатаПослеИзменения - дата объекта после изменения +// ОрганизацияПослеИзменения - организация объекта после изменения. // // Возвращаемое значение: -// Тип: Булево. Истина – организация объекта была изменена или новая дата объекта -// задана в другом интервале периодичности по сравнению с предыдущим значением даты. -// Ложь – организация и дата документа не были изменены. +// Истина - организация объекта была изменена или новая дата объекта +// задана в другом интервале периодичности по сравнению с предыдущим значением даты. +// Ложь - организация и дата документа не были изменены. // Функция ДатаИлиОрганизацияОбъектаИзменена(Ссылка, Знач ДатаПослеИзменения, Знач ОрганизацияПослеИзменения, ПолноеИмяТаблицы) Экспорт @@ -57,11 +56,11 @@ // Возвращает признак изменения организации объекта // // Параметры: -// Ссылка – ссылка на объект ИБ. -// ОрганизацияПослеИзменения – организация объекта после изменения. +// Ссылка - ссылка на объект ИБ. +// ОрганизацияПослеИзменения - организация объекта после изменения. // // Возвращаемое значение: -// Тип: Булево. Истина – организация объекта была изменена. Ложь – организация не была изменена. +// Истина - организация объекта была изменена. Ложь - организация не была изменена. // Функция ОрганизацияОбъектаИзменена(Ссылка, Знач ОрганизацияПослеИзменения, ПолноеИмяТаблицы) Экспорт @@ -98,12 +97,12 @@ // Даты считаются равными, если они принадлежат одному периоду времени: Год, Месяц, День и пр. // // Параметры: -// Дата1 – первая дата для сравнения; -// Дата2 – вторая дата для сравнения; -// МетаданныеОбъекта – метаданные объекта, для которого необходимо получить значение функции. +// Дата1 - первая дата для сравнения; +// Дата2 - вторая дата для сравнения; +// МетаданныеОбъекта - метаданные объекта, для которого необходимо получить значение функции. // // Возвращаемое значение: -// Тип: Булево. Истина – даты объекта одного периода; Ложь – даты объекта разных периодов. +// Истина - даты объекта одного периода; Ложь - даты объекта разных периодов. // Функция ДатыОбъектаОдногоПериода(Знач Дата1, Знач Дата2, Ссылка) Экспорт @@ -161,3 +160,5 @@ Возврат МетаданныеОбъекта.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.День; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index c4c817b7f..a215463c1 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -3,12 +3,11 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Устанавливает префикс источника подписки в соответствии с префиксом организации. // Источник подписки должен содержать -// обязательный реквизит шапки "Организация", тип: "СправочникСсылка.Организации" +// обязательный реквизит шапки "Организация", с типом "СправочникСсылка.Организации" // // Параметры: // Источник - Источник события подписки. @@ -39,7 +38,7 @@ // Устанавливает префикс источника подписки в соответствии с префиксом информационной базы и префиксом организации. // Источник подписки должен содержать -// обязательный реквизит шапки "Организация", тип: "СправочникСсылка.Организации" +// обязательный реквизит шапки "Организация", с типом "СправочникСсылка.Организации" // // Параметры: // Источник - Источник события подписки. @@ -132,8 +131,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации) @@ -310,3 +310,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 96ab134e1..49dcf80ae 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает двоичные данные присоединенного файла. // @@ -18,6 +17,12 @@ ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + Если ФайлОбъект = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден присоединенный файл ""%1"".'"), + Строка(ПрисоединенныйФайл)); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -98,6 +103,12 @@ ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + Если ФайлОбъект = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден присоединенный файл ""%1"".'"), + Строка(ПрисоединенныйФайл)); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); СсылкаНаДвоичныеДанныеФайла = Неопределено; @@ -517,7 +528,6 @@ МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); - ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов подсистемы Работа с файлами |в присоединенные файлы подсистемы Присоединенные файлы.'"); @@ -653,6 +663,22 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры, вызываемые из модуля менеджера справочников с присоединенными файлами. + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + РедактируемыеРеквизиты = Новый Массив; + РедактируемыеРеквизиты.Добавить("Описание"); + РедактируемыеРеквизиты.Добавить("Редактирует"); + + Возврат РедактируемыеРеквизиты; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Операции с ЭП @@ -846,7 +872,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -981,7 +1006,6 @@ //////////////////////////////////////////////////////////////////////////////// // УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - // Устарела. Следует использовать ВыполнитьДействияПередЗаписьюПрисоединенногоФайла. Процедура ПередЗаписьюПрисоединенногоФайла(Источник, Отказ) Экспорт @@ -1011,13 +1035,13 @@ ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ПрисоединенныеФайлыКлиентСервер.ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); КонецПроцедуры // Устарела. Следует использовать подписку на событие ОбработкаПолученияФормы. -// см. ПрисоединенныеФайлы.ПереопределитьПолучаемуюФормуПрисоединенногоФайла +// см. ПрисоединенныеФайлыКлиентСервер.ПереопределитьПолучаемуюФормуПрисоединенногоФайла. // // Настраивает форму присоединенного файла ПриСозданииНаСервере. Процедура ПриСозданииНаСервереПрисоединенныйФайл(Знач Форма) Экспорт @@ -1057,3 +1081,5 @@ ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index 7d30a427c..657a887d5 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает файл для просмотра или редактирования. // Если файл открывается для просмотра, тогда получает файл в рабочий каталог пользователя, @@ -55,6 +54,57 @@ КонецПроцедуры +// Подписывает присоединенный файл. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// ДополнительныеПараметры - Неопределено - стандартное поведение (см. ниже). +// - Структура - со свойствами: +// * ДанныеФайла - Структура - данные файла, если свойства нет, будет вставлено. +// * ОповещениеПользователя - Структура - параметры оповещения пользователя об успехе: +// Текст, НавигационнаяСсылка, Пояснение, Картинка, +// - Неопределено - использовать стандартное оповещение, +// если свойства нет, не выводить оповещение, +// если ДополнительныеПараметры не указаны, значит значение Неопределено. +// * ОбработкаРезультата - ОписаниеОповещения - при вызове передается значение типа Булево, +// если Истина - файл успешно подписан, иначе не подписан, +// если свойства нет, оповещение не будет вызвано. +// +Процедура ПодписатьФайл(ПрисоединенныйФайл, ИдентификаторФормы, ДополнительныеПараметры = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Не выбран файл, который нужно подписать.'")); + Возврат; + КонецЕсли; + + Если Не ЭлектроннаяПодписьКлиент.ИспользоватьЭлектронныеПодписи() Тогда + ПоказатьПредупреждение(, + НСтр("ru = 'Чтобы добавить электронную подпись, включите + |в настройках программы использование электронных подписей.'")); + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОповещениеПользователя"); + КонецЕсли; + + Если Не ДополнительныеПараметры.Свойство("ДанныеФайла") Тогда + ДополнительныеПараметры.Вставить("ДанныеФайла", ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы)); + КонецЕсли; + + #Если ВебКлиент Тогда + ПараметрыВыполнения = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ДополнительныеПараметры); + #Иначе + ПараметрыВыполнения = Новый Структура(Новый ФиксированнаяСтруктура(ДополнительныеПараметры)); + #КонецЕсли + ПараметрыВыполнения.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); + ПрисоединенныеФайлыСлужебныйКлиент.СформироватьПодписьФайла(ПараметрыВыполнения); + +КонецПроцедуры + // Сохраняет файл вместе вместе с ЭП. // Используется в обработчике команды сохранения файла. // @@ -289,8 +339,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Устаревшие процедуры и функции @@ -313,3 +364,4 @@ Возврат ИнформацияОФайле.ФайлПомещенВХранилище; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl new file mode 100644 index 000000000..625eeb667 --- /dev/null +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl @@ -0,0 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Присоединенные файлы". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// См. эту процедуру в модуле ПрисоединенныеФайлы. +// Предназначена для поддержки толстого клиента (вариант клиент-сервер). +// +Процедура ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка) Экспорт + + ПрисоединенныеФайлыСлужебныйВызовСервера.ПереопределитьПолучаемуюФормуПрисоединенногоФайла( + Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти 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 76c333206..f95c3c142 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВАвтономномРежиме/ДополнительныеОтчетыИОбработкиВАвтономномРежиме.mdo +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/ПрисоединенныеФайлыКлиентСервер.mdo @@ -1,10 +1,11 @@ - - ДополнительныеОтчетыИОбработкиВАвтономномРежиме + + ПрисоединенныеФайлыКлиентСервер ru - Дополнительные отчеты и обработки в автономном режиме + Присоединенные файлы клиент сервер + true true true true diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl index 84a86a4d7..87a4169e6 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Позволяет переопределить справочники хранения файлов по типам владельцев. // @@ -21,6 +20,6 @@ // Процедура ПриОпределенииСправочниковХраненияФайлов(ТипВладелецФайла, ИменаСправочников) Экспорт - - КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl index 86791e9c6..ce7d7a20d 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Объявляет события подсистемы ПрисоединенныеФайлы: // @@ -698,6 +697,13 @@ КонецЕсли; + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаличиеПрисоединенныхФайлов") Тогда + + // В каждом узле свои идентификаторы объекта. Сброс перед отправкой. + Для каждого Запись Из ЭлементДанных Цикл + Запись.ИдентификаторОбъекта = ""; + КонецЦикла; + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ПрисоединенныеФайлы") И Не СозданиеНачальногоОбраза Тогда @@ -798,6 +804,25 @@ КонецЕсли; + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаличиеПрисоединенныхФайлов") Тогда + + Набор = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьНаборЗаписей(); + Если ЭлементДанных.Отбор.ОбъектСФайлами.Использование Тогда + Набор.Отбор.ОбъектСФайлами.Установить(ЭлементДанных.Отбор.ОбъектСФайлами.Значение); + КонецЕсли; + Набор.Прочитать(); + + СтарыеДанные = Набор.Выгрузить(); + СтарыеДанные.Индексы.Добавить("ОбъектСФайлами"); + + // В каждом узле свои идентификаторы объекта. Восстановление перед загрузкой. + Для каждого Запись Из ЭлементДанных Цикл + Строка = СтарыеДанные.Найти(Запись.ОбъектСФайлами, "ОбъектСФайлами"); + Если Строка <> Неопределено Тогда + Запись.ИдентификаторОбъекта = Строка.ИдентификаторОбъекта; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -843,8 +868,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обновляет свойства файла при окончании редактирования. // @@ -1186,7 +1212,7 @@ ТекстЗапросов = ТекстЗапросов + ТекстЗапроса; КонецЦикла; - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос(ТекстЗапросов); Запрос.УстановитьПараметр("ВладелецФайлов", ВладелецФайлов); Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -1725,7 +1751,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1830,7 +1856,6 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Идентификатор = Выборка.ИдентификаторОбъекта; @@ -1869,7 +1894,6 @@ Результат = Идентификатор; КонецЕсли; - Возврат Результат; КонецФункции @@ -1947,3 +1971,5 @@ Возврат Ложь; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl index 28f6a3670..b401cfcd2 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. эту процедуру в модуле ПрисоединенныеФайлы. Процедура ОбновитьПрисоединенныйФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт @@ -86,3 +85,21 @@ КонецФункции +// См. эту процедуру в модуле ПрисоединенныеФайлы. +Процедура ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка) Экспорт + + ПрисоединенныеФайлы.ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl index 3cef6e429..5a8101042 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Добавляет файлы перетаскиванием в список файлов. // @@ -42,7 +41,6 @@ КонецПроцедуры - // Помещает файл с диска в хранилище присоединенных файлов (веб-клиент). // // Параметры: @@ -107,7 +105,6 @@ КонецПроцедуры - // Помещает отредактированные файлы в хранилище. // Используется, как обработчик команды окончания редактирования файлов. // @@ -191,7 +188,6 @@ ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат); КонецПроцедуры - // Выбирает файл с диска и помещает его во временное хранилище на сервере. // // Параметры: @@ -250,7 +246,6 @@ КонецПроцедуры - // Помещает файл с диска клиента во временное хранилище. // Аналог функции ПоместитьФайлНаДискеВХранилище // для веб-клиента без расширения для работы с файлами. @@ -308,7 +303,6 @@ КонецПроцедуры - // Открывает каталог с файлом (при необходимости получает файл из хранилища). // Используется, как обработчик команды открытия каталога с файлом. // @@ -393,31 +387,60 @@ // Используется в обработчике команды "Подписать" формы списка. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения - процедура, в которую необходимо передать управление при завершении. -// Параметры вызываемой процедуры: -// ПодписьСформирована - Булево - Истина, если подпись сформирована успешно, иначе Ложь; -// ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта оповещения. -// ПрисоединенныйФайл - Ссылка присоединенный файл. -// ДанныеФайла - Структура с данными файла. +// ПараметрыВыполнения - Структура - содержащая параметры: +// * ПрисоединенныйФайл - СправочникСсылка.*ПрисоединенныеФайлы - ссылка на файл. +// * ДанныеФайла - Структура - данные файла. +// * ОповещениеПользователя - Структура - параметры оповещения пользователя об успехе: +// Текст, НавигационнаяСсылка, Пояснение, Картинка; +// - Неопределено - не выводить оповещение; +// если свойства нет, используется стандартное оповещение. +// * ОбработкаРезультата - ОписаниеОповещения - при вызове передается результат типа Булево, +// если Истина - файл успешно подписан. // -Процедура СформироватьПодписьФайла(ОбработчикРезультата, Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("ОбработчикРезультата", ОбработчикРезультата); - Параметры.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); - ОписаниеОповещения = Новый ОписаниеОповещения("СформироватьПодписьФайлаПодписьПолучена", ЭтотОбъект, Параметры); - ВыбратьСертификатыЭПИСформироватьДанныеПодписи(ОписаниеОповещения, ПрисоединенныйФайл, ДанныеФайла); +Процедура СформироватьПодписьФайла(ПараметрыВыполнения) Экспорт + + ВыбратьСертификатыЭПИСформироватьДанныеПодписи( + Новый ОписаниеОповещения( + "СформироватьПодписьФайлаПодписьПолучена", ЭтотОбъект, ПараметрыВыполнения), + ПараметрыВыполнения.ПрисоединенныйФайл, + ПараметрыВыполнения.ДанныеФайла); + КонецПроцедуры // Продолжение процедуры СформироватьПодписьФайла. -Процедура СформироватьПодписьФайлаПодписьПолучена(ДанныеПодписи, ДополнительныеПараметры) Экспорт +Процедура СформироватьПодписьФайлаПодписьПолучена(ДанныеПодписи, ПараметрыВыполнения) Экспорт + ПодписьСформирована = ДанныеПодписи <> Неопределено; + Если ПодписьСформирована Тогда - ПрисоединенныеФайлыСлужебныйВызовСервера.ЗанестиИнформациюОднойПодписи(ДополнительныеПараметры.ПрисоединенныйФайл, ДанныеПодписи); + ПрисоединенныйФайл = ПараметрыВыполнения.ПрисоединенныйФайл; + + ПрисоединенныеФайлыСлужебныйВызовСервера.ЗанестиИнформациюОднойПодписи( + ПрисоединенныйФайл, ДанныеПодписи); + + ОповеститьОбИзменении(ПрисоединенныйФайл); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ПрисоединенныйФайл); + + Если ПараметрыВыполнения.Свойство("ОповещениеПользователя") Тогда + Оповещение = ПараметрыВыполнения.ОповещениеПользователя; + Если Оповещение = Неопределено Тогда + ЭлектроннаяПодписьКлиент.ИнформироватьОПодписанииОбъекта(ПрисоединенныйФайл); + Иначе + ПоказатьОповещениеПользователя( + Оповещение.Текст, + Оповещение.НавигационнаяСсылка, + Оповещение.Пояснение, + Оповещение.Картинка); + КонецЕсли; + КонецЕсли; КонецЕсли; - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, ПодписьСформирована); + + Если ПараметрыВыполнения.Свойство("ОбработкаРезультата") Тогда + ВыполнитьОбработкуОповещения(ПараметрыВыполнения.ОбработкаРезультата, ПодписьСформирована); + КонецЕсли; + КонецПроцедуры - // Формирует подпись для двоичных данных файла: // - предлагает пользователю диалог выбора сертификатов ЭП, // - подписывает двоичные данные присоединенного файла с целью получения подписи. @@ -481,7 +504,6 @@ КонецПроцедуры - // Добавляет ЭП из файла(ов) на диске. // // Параметры: @@ -530,7 +552,6 @@ КонецПроцедуры - // Возвращает подписи, для чего вызывает диалог добавления подписей. // // ОСОБЫЕ УСЛОВИЯ @@ -570,7 +591,6 @@ КонецПроцедуры - // Служебная процедура используется для оповещения системы об изменении объекта, // а так же для отображения оповещения пользователя о добавлении подписей. // Параметры @@ -750,7 +770,6 @@ КонецПроцедуры - // Шифрует двоичные данные файла по указанному массиву сертификатов. // // Параметры: @@ -801,7 +820,6 @@ КонецФункции - // Удаляет файл из рабочего каталога, оповещает об изменениях открытые формы. Процедура ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт @@ -844,7 +862,6 @@ КонецПроцедуры - // Расшифровывает файл в хранилище: // - показывает пользователю диалог с предложением расшифровать файл, // - получает двоичные данные и массив отпечатков, @@ -874,7 +891,6 @@ ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл); КонецПроцедуры - // Получает расшифрованные данные файла. // // Параметры: @@ -981,7 +997,6 @@ КонецПроцедуры - // Оповещает систему и пользователя о расшифровке файла. // // Параметры: @@ -1206,7 +1221,6 @@ КонецПроцедуры - // Продолжение процедуры ПрисоединенныеФайлыКлиент.ДобавитьФайлы. Процедура ДобавитьФайлыРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт @@ -1276,7 +1290,6 @@ КонецПроцедуры - // Продолжение процедуры ПрисоединенныеФайлыКлиент.СохранитьВместеСЭП. Процедура СохранитьВместеСЭПРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт @@ -1301,7 +1314,6 @@ ДанныеФайла = ДополнительныеПараметры.ДанныеФайла; ИдентификаторФормы = ДополнительныеПараметры.ИдентификаторФормы; - Настройка = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().ДействияПриСохраненииСЭП; Если Настройка = "Спрашивать" Тогда ПараметрыФормы = Новый Структура; @@ -1337,7 +1349,6 @@ КонецЕсли; КонецПроцедуры - // Продолжение процедуры ПрисоединенныеФайлыКлиент.СохранитьФайлКак. Процедура СохранитьФайлКакРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт @@ -1500,3 +1511,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index c61df9c1d..9d1471d73 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // ИспользованиеМодальности @@ -62,8 +61,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Проверить легальность получения обновления при запуске программы. // Должна вызываться перед обновлением информационной базы. @@ -95,8 +95,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. Продолжение процедуры ПроверитьЛегальностьПолученияОбновленияПриЗапуске. Процедура ПослеЗакрытияФормыПроверкиЛегальностиПолученияОбновленияПриЗапуске(Результат, Параметры) Экспорт @@ -108,3 +109,5 @@ ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl new file mode 100644 index 000000000..8fdf37a79 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -0,0 +1,741 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Поддержка работы с включенными профилями безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Функции-конструкторы разрешений +// + +// Возвращает внутреннее описание разрешения на использование каталога файловой системы. +// +// Параметры: +// Адрес - Строка - адрес ресурса файловой системы, +// ЧтениеДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на чтение данных из данного каталога файловой системы, +// ЗаписьДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на запись данных в указанный каталог файловой системы, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеКаталогаФайловойСистемы(Знач Адрес, Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "FileSystemAccess")); + Результат.Description = Описание; + + Если Прав(Адрес, 1) = "\" Или Прав(Адрес, 1) = "/" Тогда + Адрес = Лев(Адрес, СтрДлина(Адрес) - 1); + КонецЕсли; + + Результат.Path = Адрес; + Результат.AllowedRead = ЧтениеДанных; + Результат.AllowedWrite = ЗаписьДанных; + + Возврат Результат; + +КонецФункции + +// Возвращает внутреннее описание разрешения на использование каталога временных файлов. +// +// Параметры: +// ЧтениеДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на чтение данных из каталога временных файлов, +// ЗаписьДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на запись данных в каталог временных файлов, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт + + Возврат РазрешениеНаИспользованиеКаталогаФайловойСистемы(ПсевдонимКаталогаВременныхФайлов(), ЧтениеДанных, ЗаписьДанных); + +КонецФункции + +// Возвращает внутреннее описание разрешения на использование каталога программы. +// +// Параметры: +// ЧтениеДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на чтение данных из каталога программы, +// ЗаписьДанных - Булево - флаг, указывающий необходимость предоставления разрешения +// на запись данных в каталог программы, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеКаталогаПрограммы(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт + + Возврат РазрешениеНаИспользованиеКаталогаФайловойСистемы(ПсевдонимКаталогаПрограммы(), ЧтениеДанных, ЗаписьДанных); + +КонецФункции + +// Возвращает внутреннее описание разрешения на использование COM-класса. +// +// Параметры: +// ProgID - Строка - ProgID класса COM, с которым он зарегистрирован в системе. +// Например, "Excel.Application", +// CLSID - Строка - CLSID класса COM, с которым он зарегистрирован в системе. +// ИмяКомпьютера - Строка - имя компьютера, на котором надо создать указанный объект. +// Если параметр опущен - объект будет создан на компьютере, на котором выполняется +// текущий рабочий процесс, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаСозданиеCOMКласса(Знач ProgID, Знач CLSID, Знач ИмяКомпьютера = "", Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "CreateComObject")); + Результат.Description = Описание; + + Результат.ProgId = ProgID; + Результат.CLSID = Строка(CLSID); + Результат.ComputerName = ИмяКомпьютера; + + Возврат Результат; + +КонецФункции + +// Возвращает внутренее описание разрешения на использование внешней компоненты, поставляемой +// в общем макете конфигурации. +// +// Параметры: +// ИмяМакета - Строка - имя общего макета в конфигурации, в котором поставляется внешняя +// компонента, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеВнешнейКомпоненты(Знач ИмяМакета, Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "AttachAddin")); + Результат.Description = Описание; + + Результат.TemplateName = ИмяМакета; + + Возврат Результат; + +КонецФункции + +// Возвращает внутренее описание разрешения на использование приложения операционной системы. +// +// Параметры: +// ШаблонСтрокиЗапуска - Строка - шаблон строки запуска приложения. Подробнее см. документацию +// к платформе, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеПриложенияОперационнойСистемы(Знач ШаблонСтрокиЗапуска, Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "RunApplication")); + Результат.Description = Описание; + + Результат.CommandMask = ШаблонСтрокиЗапуска; + + Возврат Результат; + +КонецФункции + +// Возвращает внутренее описание разрешения на использование интернет-ресурса. +// +// Параметры: +// Протокол: Строка - протокол, по которому выполняется взаимодействие с ресурсом. Допустимые +// значения: +// IMAP, +// POP3, +// SMTP, +// HTTP, +// HTTPS, +// FTP, +// FTPS, +// Адрес - Строка - адрес ресурса без указания протокола, +// Порт - Число - номер порта через который выполняется взаимодействие с ресурсом, +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеИнтернетРесурса(Знач Протокол, Знач Адрес, Знач Порт = Неопределено, Знач Описание = "") Экспорт + + Если Порт = Неопределено Тогда + СтандартныеПорты = СтандартныеПортыИнтернетПротоколов(); + Если СтандартныеПорты.Свойство(ВРег(Протокол)) <> Неопределено Тогда + Порт = СтандартныеПорты[ВРег(Протокол)]; + КонецЕсли; + КонецЕсли; + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "InternetResourceAccess")); + Результат.Description = Описание; + + Результат.Protocol = Протокол; + Результат.Host = Адрес; + Результат.Port = Порт; + + Возврат Результат; + +КонецФункции + +// Возвращает внутренее описание разрешения на расширенную работу с данными (включая установку +// привилегированного режима) для внешних модулей. +// +// Параметры: +// Описание - Строка - описание причины, по которой требуется предоставление разрешения. +// +// Возвращаемое значение: ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +// +Функция РазрешениеНаИспользованиеПривилегированногоРежима(Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "ExternalModulePrivilegedModeAllowed")); + Результат.Description = Описание; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции создания запросов на использование внешних ресурсов +// + +// Создает запрос на использование внешних ресурсов. +// +// Параметры: +// НовыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). +// Владелец - ЛюбаяСсылка - ссылка на объект информационной базы, с которой логически связаны запрашиваемые +// разрешения. Например, все разрешения на доступ к каталогам томов хранения файлов логически связаны +// с соответствующими элементами справочника ТомаХраненияФайлов, все разрешения на доступ к каталогам +// обмена данными (или к другим ресурсам в зависимости от используемого транспорта обмена) логически +// связаны с соответствующими узлами планов обмена и т.д. В том случае, если разрешение является логически +// обособленным (например, предоставление разрешения регулируется значением константы с типом Булево) - +// рекомендуется использовать ссылку на элемент справочника ИдентификаторыОбъектовМетаданных, +// РежимЗамещения - Булево - определяет режим замещения ранее выданных разрешений для данного владельца. При +// значении параметра равным Истина, помимо предоставления запрошенных разрешений в запрос будет добавлена +// очистка всех разрешений, ранее запрошенных для этого же владельца. +// +// Возвращаемое значение: +// УникальныйИдентификатор, ссылка на записанный в ИБ запрос разрешений. После создания +// всех запросов на изменение разрешений требуется применить запрошенные изменения с помощью вызова процедуры +// РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(). +// +Функция ЗапросНаИспользованиеВнешнихРесурсов(Знач НовыеРазрешения, Знач Владелец = Неопределено, Знач РежимЗамещения = Истина) Экспорт + + Возврат РаботаВБезопасномРежимеСлужебный.ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + Владелец, + РежимЗамещения, + НовыеРазрешения); + +КонецФункции + +// Создает запрос на отмену разрешений использования внешних ресурсов. +// +// Параметры: +// Владелец - ЛюбаяСсылка - ссылка на объект информационной базы, с которой логически связаны отменяемые +// разрешения. Например, все разрешения на доступ к каталогам томов хранения файлов логически связаны +// с соответствующими элементами справочника ТомаХраненияФайлов, все разрешения на доступ к каталогам +// обмена данными (или к другим ресурсам в зависимости от используемого транспорта обмена) логически +// связаны с соответствующими узлами планов обмена и т.д. В том случае, если разрешение является логически +// обособленным (например, отменяемые разрешения регулируется значением константы с типом Булево) - +// рекомендуется использовать ссылку на элемент справочника ИдентификаторыОбъектовМетаданных, +// ОтменяемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// отменяемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). +// +// Возвращаемое значение: +// УникальныйИдентификатор, ссылка на записанный в ИБ запрос разрешений. После создания +// всех запросов на изменение разрешений требуется применить запрошенные изменения с помощью вызова процедуры +// РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(). +// +Функция ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов(Знач Владелец, Знач ОтменяемыеРазрешения) Экспорт + + Возврат РаботаВБезопасномРежимеСлужебный.ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + Владелец, + Ложь, + , + ОтменяемыеРазрешения); + +КонецФункции + +// Создает запрос на отмену всех разрешений использования внешних ресурсов, связанных в владельцем. +// +// Параметры: +// Владелец - ЛюбаяСсылка - ссылка на объект информационной базы, с которой логически связаны отменяемые +// разрешения. Например, все разрешения на доступ к каталогам томов хранения файлов логически связаны +// с соответствующими элементами справочника ТомаХраненияФайлов, все разрешения на доступ к каталогам +// обмена данными (или к другим ресурсам в зависимости от используемого транспорта обмена) логически +// связаны с соответствующими узлами планов обмена и т.д. В том случае, если разрешение является логически +// обособленным (например, отменяемые разрешения регулируется значением константы с типом Булево) - +// рекомендуется использовать ссылку на элемент справочника ИдентификаторыОбъектовМетаданных. +// +// Возвращаемое значение: +// УникальныйИдентификатор, ссылка на записанный в ИБ запрос разрешений. После создания +// всех запросов на изменение разрешений требуется применить запрошенные изменения с помощью вызова процедуры +// РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(). +// +Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Знач Владелец) Экспорт + + Возврат РаботаВБезопасномРежимеСлужебный.ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + Владелец, + Истина); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции для поддержки работы конфигурации с профилем безопасности, в котором +// запрещено подключение внешних модулей без установки безопасного режима. +// + +// Проверят установленность безопасного режима, игнорируя безопасный режим профиля безопасности, +// использующегося в качестве профиля безопасности с уровнем привилегий конфигурации. +// +// Возвращаемое значение: Булево. +// +Функция УстановленБезопасныйРежим() Экспорт + + ТекущийБезопасныйРежим = БезопасныйРежим(); + + Если ТипЗнч(ТекущийБезопасныйРежим) = Тип("Строка") Тогда + + Если Не ДоступенПереходВПривилегированныйРежим() Тогда + Возврат Истина; // В небезопасном режиме переход в привилегированный режим всегда доступен. + КонецЕсли; + + Попытка + ПрофильКонфигурации = ПрофильСПривилегиямиКонфигурации(); + Исключение + Возврат Истина; + КонецПопытки; + + Возврат (ТекущийБезопасныйРежим <> ПрофильКонфигурации); + + ИначеЕсли ТипЗнч(ТекущийБезопасныйРежим) = Тип("Булево") Тогда + + Возврат ТекущийБезопасныйРежим; + + КонецЕсли; + +КонецФункции + +// Вычисляет переданное выражение, предварительно устанавливая безопасный режим выполнения кода +// и безопасный режим разделения данных для всех разделителей, присутствующих в составе конфигурации. +// В результате при вычислении выражения: +// - игнорируются попытки установки привилегированного режима, +// - запрещаются все внешние (по отношению к платформе 1С:Предприятие) действия (COM, +// загрузка внешних компонент, запуск внешних приложений и команд операционной системы, +// доступ к файловой системе и Интернет-ресурсам), +// - запрещается отключение использования разделителей сеанса, +// - запрещается изменение значений разделителей сеанса (если разделение данным разделителем не +// является условно выключенным), +// - запрещается изменение объектов, которые управляют состоянием условного разделения. +// +// Параметры: +// Выражение - Строка - выражение, которое требуется вычислить, +// Параметры - Произвольный - в качестве значения данного параметра может быть передано значение, +// которое требуется для вычисления выражения (при этом в тексте выражения обращение к данному +// значению должно осуществляться как к имени переменной Параметры). +// +// Возвращаемое значение: Произвольный - результат вычисления выражения. +// +Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт + + УстановитьБезопасныйРежим(Истина); + + МассивРазделителей = РаботаВБезопасномРежимеСлужебныйПовтИсп.МассивРазделителей(); + + Для Каждого ИмяРазделителя Из МассивРазделителей Цикл + + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + + КонецЦикла; + + Возврат Вычислить(Выражение); + +КонецФункции + +// Выполняет произвольный алгоритм на встроенном языке 1С:Предприятия, предварительно устанавливая +// безопасный режим выполнения кода и безопасный режим разделения данных для всех разделителей, +// присутствующих в составе конфигурации. В результате при выполнении алгоритма: +// - игнорируются попытки установки привилегированного режима, +// - запрещаются все внешние (по отношению к платформе 1С:Предприятие) действия (COM, +// загрузка внешних компонент, запуск внешних приложений и команд операционной системы, +// доступ к файловой системе и Интернет-ресурсам), +// - запрещается отключение использования разделителей сеанса, +// - запрещается изменение значений разделителей сеанса (если разделение данным разделителем не +// является условно выключенным), +// - запрещается изменение объектов, которые управляют состоянием условного разделения. +// +// Параметры: +// Алгоритм - Строка - содержащая произвольный алгоритм на встроенном языке 1С:Предприятия. +// Параметры - Произвольный - в качестве значения данного параметра может быть передано значение, +// которое требуется для выполнения алгоритма (при этом в тексте алгоритма обращение к данному +// значению должно осуществляться как к имени переменной Параметры). +// +Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено) Экспорт + + УстановитьБезопасныйРежим(Истина); + + МассивРазделителей = РаботаВБезопасномРежимеСлужебныйПовтИсп.МассивРазделителей(); + + Для Каждого ИмяРазделителя Из МассивРазделителей Цикл + + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + + КонецЦикла; + + Выполнить Алгоритм; + +КонецПроцедуры + +// Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации. +// При включении профилей безопасности для вызова оператора Выполнить() используется +// переход в безопасный режим с профилем безопасности, используемом для самой конфигурации +// (если выше по стеку не был установлен другой безопасный режим). +// +// Параметры +// ИмяЭкспортнойПроцедуры - Строка - имя экспортной процедуры в формате +// <имя объекта>.<имя процедуры>, где <имя объекта> - это +// общий модуль или модуль менеджера объекта. +// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры> +// в порядке расположения элементов массива. +// +// Пример: +// Параметры = Новый Массив(); +// Параметры.Добавить("1"); +// РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации("МойОбщийМодуль.МояПроцедура", Параметры); +// +Процедура ВыполнитьМетодКонфигурации(Знач ИмяЭкспортнойПроцедуры, Знач Параметры = Неопределено) Экспорт + + ПроверитьИмяМетодаКонфигурации(ИмяЭкспортнойПроцедуры); + + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Не УстановленБезопасныйРежим() Тогда + + ПрофильКонфигурации = ПрофильСПривилегиямиКонфигурации(); + + Если ЗначениеЗаполнено(ПрофильКонфигурации) Тогда + + УстановитьБезопасныйРежим(ПрофильКонфигурации); + Если БезопасныйРежим() = Истина Тогда + УстановитьБезопасныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Выполнить ИмяЭкспортнойПроцедуры + "(" + ПараметрыСтрока + ")"; + +КонецПроцедуры + +// Выполнить экспортную процедуру обработки (в составе конфигурации) по имени с уровнем привилегий конфигурации. +// При включении профилей безопасности для вызова оператора Выполнить() используется +// переход в безопасный режим с профилем безопасности, используемом для самой конфигурации +// (если выше по стеку не был установлен другой безопасный режим). +// +// Параметры: +// Обработка - ОбработкаОбъект - объект обработки, встроенной в состав конфигурации, +// ИмяПроцедуры - Строка - имя экспортной процедуры модуля объекта обработки. +// Параметры - Массив - параметры передаются в процедуру <ИмяПроцедуры> +// в порядке расположения элементов массива. +// +Процедура ВыполнитьМетодОбъекта(Обработка, Знач ИмяПроцедуры, Знач Параметры = Неопределено) Экспорт + + // Проверка имени метода на корректность + Попытка + Тест = Новый Структура(ИмяПроцедуры, ИмяПроцедуры); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Некорректное значение параметра ИмяПроцедуры (%1)'"), + ИмяПроцедуры); + КонецПопытки; + + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Не УстановленБезопасныйРежим() Тогда + + ПрофильКонфигурации = ПрофильСПривилегиямиКонфигурации(); + + Если ЗначениеЗаполнено(ПрофильКонфигурации) Тогда + + УстановитьБезопасныйРежим(ПрофильКонфигурации); + Если БезопасныйРежим() = Истина Тогда + УстановитьБезопасныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Выполнить "Обработка." + ИмяПроцедуры + "(" + ПараметрыСтрока + ")"; + +КонецПроцедуры + +// Проверяет, что переданное имя является именем экспортной процедуры конфигурации. +// Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма +// на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить() и Вычислить() +// при их использовании для динамического вызова методов код конфигурации. +// +// В случае, если переданная строка не соответствует имени метода конфигурации - генерируется +// +Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяЭкспортнойПроцедуры) Экспорт + + // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. + ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); + Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + КонецЕсли; + + ИмяОбъекта = ЧастиИмени[0]; + Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): + |Не найден общий модуль ""%2"".'"), + ИмяЭкспортнойПроцедуры, + ИмяОбъекта); + КонецЕсли; + + Если ЧастиИмени.Количество() = 3 Тогда + ДопустимыеИменаТипов = Новый Массив; + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаКонстанты())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаРегистрыСведений())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаРегистрыНакопления())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаРегистрыРасчета())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаСправочники())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаДокументы())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаОтчеты())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаОбработки())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаБизнесПроцессы())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаЖурналыДокументов())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаЗадачи())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаПланыСчетов())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаПланыОбмена())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик())); + ДопустимыеИменаТипов.Добавить(ВРег(ОбщегоНазначения.ИмяТипаПланыВидовРасчета())); + ИмяТипа = ВРег(ЧастиИмени[0]); + Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): + |Не найдена коллекция объектов метаданных ""%2"", + |или для этой коллекции не поддерживается безопасное выполнение.'"), + ИмяЭкспортнойПроцедуры, + ИмяОбъекта); + КонецЕсли; + КонецЕсли; + + ИмяМетода = ЧастиИмени[ЧастиИмени.ВГраница()]; + ВременнаяСтруктура = Новый Структура; + Попытка + // Проверка на то, что ИмяМетода является допустимым идентификатором. + // Например: МояПроцедура + ВременнаяСтруктура.Вставить(ИмяМетода); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1): + |Имя метода ""%2"" не соответствует требованиям образования имен переменных.'"), + ИмяЭкспортнойПроцедуры, + ИмяМетода); + КонецПопытки; + +КонецПроцедуры + +// Проверяет возможность выполнения обработчиков установки параметров сеанса. +// +// В случае, если при текущих настройках профилей безопасности (в кластере серверов и в информационной +// базе) выполнение обработчиков установки параметров сеанса невозможно - генерируется исключение, +// содержащее описание причины невозможности выполнения обработчиков установки параметров сеанса +// и перечень действий, которые можно предпринять для устранения этой причины. +// +Процедура ПроверитьВозможностьВыполненияОбработчиковУстановкиПараметровСеанса() Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияИнформационнойБазы()) Тогда + Возврат; + КонецЕсли; + + Попытка + ДоступенПривилегированныйРежим = Вычислить("ДоступенПереходВПривилегированныйРежим()"); + Исключение + + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + + Профиль = ПрофильСПривилегиямиКонфигурации(); + УстановитьБезопасныйРежим(Профиль); + Если БезопасныйРежим() = Истина Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 не найден. + | + |Возможно, он был удален через консоль кластера. + |В этом случае требуется отключить использование профиля безопасности через консоль кластера и + |заново включить его с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), + Профиль + ); + КонецЕсли; + ДоступенПривилегированныйРежим = Вычислить("ДоступенПереходВПривилегированныйРежим()"); + УстановитьБезопасныйРежим(Ложь); + Если Не ДоступенПривилегированныйРежим Тогда + НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 не содержит разрешения на использование привилегированного режима. + | + |Возможно, он был отредактирован через консоль кластера. + |В этом случае требуется отключить использование профиля безопасности через консоль кластера и + |заново включить его с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'", + Профиль + ); + КонецЕсли; + + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: %1. + | + |Возможно, для информационной базы через консоль кластера был установлен профиль безопасности, + |не допускающий выполнения внешних модулей без установки безопасного режима. + |В этом случае требуется отключить использование профиля безопасности через консоль кластера + | и включить его с помощью интерфейса конфигурации (соответствующие команды находятся в разделе + |настроек программы). При этом программа будет автоматически корректно настроена на использование + |совместно с включенными профилями безопасности.'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. +// +// Возвращаемое значение: Булево. +// +Функция ДоступенПереходВПривилегированныйРежим() + + УстановитьПривилегированныйРежим(Истина); + Возврат ПривилегированныйРежим(); + +КонецФункции + +// Возвращает имя профиля безопасности, предоставляющего привилегии кода конфигурации. +// +// Возвращаемое значение: Строка - имя профиля безопасности. +// +Функция ПрофильСПривилегиямиКонфигурации() + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + +КонецФункции + +// Возвращает "предопределенный" псевдоним (alias) для каталога программы. +// +// Возвращаемое значение: Строка. +// +Функция ПсевдонимКаталогаПрограммы() + + Возврат "/bin"; + +КонецФункции + +// Возвращает "предопределенный" псевдоним (alias) для каталога временных файлов. +// +Функция ПсевдонимКаталогаВременныхФайлов() + + Возврат "/temp"; + +КонецФункции + +// Возвращает стандартные сетевые порты для Интернет-протоколов, инструменты для использования которых +// есть во встроенном языке 1С:Предприятия. Используется для определения сетевого порта в тех +// случаях, когда из прикладного кода запрашивается разрешение без указания сетевого порта. +// +// Возвращаемое значение: ФиксированнаяСтруктура: +// * Ключ - Строка, имя Интернет-протокола, +// * Значение - Число, номер сетевого порта. +// +Функция СтандартныеПортыИнтернетПротоколов() + + Результат = Новый Структура(); + + Результат.Вставить("IMAP", 143); + Результат.Вставить("POP3", 110); + Результат.Вставить("SMTP", 25); + Результат.Вставить("HTTP", 80); + Результат.Вставить("HTTPS", 443); + Результат.Вставить("FTP", 21); + Результат.Вставить("FTPS", 21); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo b/SSL/src/CommonModules/РаботаВБезопасномРежиме/РаботаВБезопасномРежиме.mdo similarity index 52% rename from SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo rename to SSL/src/CommonModules/РаботаВБезопасномРежиме/РаботаВБезопасномРежиме.mdo index 152b22867..feb201c22 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/РаботаВБезопасномРежиме.mdo @@ -1,9 +1,9 @@ - - ДополнительныеОтчетыИОбработкиВМоделиСервиса + + РаботаВБезопасномРежиме ru - Дополнительные отчеты и обработки в модели сервиса + Работа в безопасном режиме true true diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl new file mode 100644 index 000000000..4e91b8c54 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl @@ -0,0 +1,60 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Применяет ранее сохраненные в информационной базе запросы на использование внешних ресурсов. +// +// Параметры: +// Идентификаторы - Массив(УникальныйИдентификатор) - идентификаторы запросов, которые требуется применить, +// ФормаВладелец - УправляемаяФорма - форма, которая должна блокироваться до окончания применения разрешений, +// ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений. +// +Процедура ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Знач Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии) Экспорт + + СтандартнаяОбработка = Истина; + + ОбработчикиСобытия = ОбщегоНазначенияКлиент.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриОбработкеЗапросовНаИспользованиеВнешнихРесурсов"); + + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриОбработкеЗапросовНаИспользованиеВнешнихРесурсов(Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии); + + КонецЕсли; + +КонецПроцедуры + +// Открывает диалог настройки режима использования профилей безопасности для +// текущей информационной базы. +// +Процедура ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности() Экспорт + + ОткрытьФорму( + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкиИспользованияПрофилейБезопасности", + , + , + "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкиИспользованияПрофилейБезопасности", + , + , + , + РежимОткрытияОкнаФормы.Независимый); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиент/ФизическиеЛицаКлиент.mdo b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/РаботаВБезопасномРежимеКлиент.mdo similarity index 57% rename from SSL/src/CommonModules/ФизическиеЛицаКлиент/ФизическиеЛицаКлиент.mdo rename to SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/РаботаВБезопасномРежимеКлиент.mdo index f80d227f8..96e29c261 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиент/ФизическиеЛицаКлиент.mdo +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/РаботаВБезопасномРежимеКлиент.mdo @@ -1,9 +1,9 @@ - - ФизическиеЛицаКлиент + + РаботаВБезопасномРежимеКлиент ru - Физические лица клиент + Работа в безопасном режиме клиент true true diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl new file mode 100644 index 000000000..a1563a3ff --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl @@ -0,0 +1,42 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается при проверке возможности использования профилей безопасности. +// +// Параметры: +// Отказ - Булево - если конфигурация не адаптирована к использованию +// профилей безопасности, значение параметра в данной процедуры необходимо +// установить равным Истина. +// +Процедура ПриПроверкеВозможностиИспользованияПрофилейБезопасности(Отказ) Экспорт + + + +КонецПроцедуры + +// Вызывается при включении использования для информационной базы профилей безопасности. +// +Процедура ПриВключенииИспользованияПрофилейБезопасности() Экспорт + + + +КонецПроцедуры + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/РаботаВБезопасномРежимеПереопределяемый.mdo b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/РаботаВБезопасномРежимеПереопределяемый.mdo new file mode 100644 index 000000000..c2fc73db8 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/РаботаВБезопасномРежимеПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + РаботаВБезопасномРежимеПереопределяемый + + ru + Работа в безопасном режиме переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl new file mode 100644 index 000000000..ce32cb721 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -0,0 +1,804 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Декларация программных событий +// + +// Объявляет служебные события подсистемы БазоваяФункциональность, предназначенные +// для поддержки профилей безопасности. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Вызывается при проверке возможности использования профилей безопасности + // + // Параметры: + // Отказ - Булево. Если для информационной базы недоступно использование профилей безопасности - + // значение данного параметра нужно установить равным Истина. + // + // Синтаксис: + // Процедура ПриПроверкеВозможностиИспользованияПрофилейБезопасности(Отказ) Экспорт + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПроверкеВозможностиИспользованияПрофилейБезопасности"); + + // Вызывается при проверке возможности настройки профилей безопасности + // + // Параметры: + // Отказ - Булево. Если для информационной базы недоступно использование профилей безопасности - + // значение данного параметра нужно установить равным Истина. + // + // Синтаксис: + // Процедура ПриПроверкеВозможностиНастройкиПрофилейБезопасности(Отказ) Экспорт + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПроверкеВозможностиНастройкиПрофилейБезопасности"); + + // Вызывается при включении использования для информационной базы профилей безопасности. + // + // Синтаксис: + // Процедура ПриВключенииИспользованияПрофилейБезопасности() Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииИспользованияПрофилейБезопасности"); + + // Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены + // при создании информационной базы или обновлении программы. + // + // Параметры: + // ЗапросыРазрешений - Массив - список запросов, возвращаемых функцией + // ЗапросНаИспользованиеВнешнихРесурсов модуля РаботаВБезопасномРежиме. + // + // Синтаксис: + // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"); + + // Вызывается при регистрации менеджеров внешних модулей. + // + // Параметры: + // Менеджеры - Массив(ОбщийМодуль). + // + // Синтаксис: + // Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриРегистрацииМенеджеровВнешнихМодулей"); + + // Вызывается при создании запроса на администрирование разрешений использования внешних ресурсов. + // + // Параметры: + // ВнешнийМодуль - ЛюбаяСсылка, + // Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки создания запроса на администрирование + // использования внешних ресурсов. + // Результат - УникальныйИдентификатор - идентификатор запроса (в том случае, если внутри обработчика + // значение параметра СтандартнаяОбработка установлено в значение Ложь). + // + // Синтаксис: + // Процедура ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов(Знач ВнешнийМодуль, Знач Операция, СтандартнаяОбработка, Результат) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов"); + + // Вызывается при создании запроса на использование внешних ресурсов. + // + // Параметры: + // Владелец - ЛюбаяСсылка - владелец запрашиваемых разрешений на использование внешних ресурсов, + // РежимЗамещения - Булево - флаг замещения ранее предоставленных разрешений по владельцу, + // ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив добавляемых разрешений, + // УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив удаляемых разрешений, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки создания запроса на использование + // внешних ресурсов. + // Результат - УникальныйИдентификатор - идентификатор запроса (в том случае, если внутри обработчика + // значение параметра СтандартнаяОбработка установлено в значение Ложь). + // + // Синтаксис: + // Процедура ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения = Неопределено, Знач УдаляемыеРазрешения = Неопределено, СтандартнаяОбработка, Результат) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов"); + + // Вызывается при расчете дельты изменений на использование внешних ресурсов. + // + // Параметры: + // ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - массив идентификаторов запросов, + // для которых рассчитывается дельта, + // РежимВосстановления - Булево, флаг расчета дельты в режиме восстановления разрешений в кластере + // серверов, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки расчета дельты, + // Результат - ТаблицаЗначений - дельта изменений разрешений на использование внешних ресурсов + // (в том случае, если внутри обработчика значение параметра СтандартнаяОбработка установлено в значение Ложь). + // + // Синтаксис: + // Процедура ПриРасчетеДельтыИзмененийНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов, Знач РежимВосстановления, СтандартнаяОбработка, Результат) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриРасчетеДельтыИзмененийНаИспользованиеВнешнихРесурсов"); + + // Вызывается при применении запросов на использование внешних ресурсов. + // + // Параметры: + // ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - массив идентификаторов запросов, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки расчета дельты, + // + // Синтаксис: + // Процедура ПриПримененииЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПримененииЗапросовНаИспользованиеВнешнихРесурсов"); + + // Вызывается после обработки запросов на использование внешних ресурсов. + // + // Параметры: + // ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - массив идентификаторов запросов, + // РежимВосстановления - Булево, флаг вызова для запросов восстановления разрешений в кластере после + // отказа от записи объектов, для которых требовались разрешения на использование внешних ресурсов, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки, + // + // Синтаксис: + // Процедура ПослеОбработкиЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов, Знач РежимВосстановления, СтандартнаяОбработка) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПослеОбработкиЗапросовНаИспользованиеВнешнихРесурсов"); + + // КЛИЕНТСКИЕ СОБЫТИЯ. + + // Вызывается при обработке запросов на использование внешних ресурсов. + // + // Параметры: + // Идентификаторы - Массив(УникальныйИдентификатор), идентификаторы запросов, которые требуется применить, + // ФормаВладелец - УправляемаяФорма, форма, которая должна блокироваться до окончания применения разрешений, + // ОповещениеОЗакрытии - ОписаниеОповещения, которое будет вызвано при успешном предоставлении разрешений. + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки применения разрешений на использование + // внешних ресурсов (подключение к агенту сервера через COM-соединение или сервер администрирования с + // запросом параметров подключения к кластеру у текущего пользователя). Может быть установлен в значение Ложь + // внутри обработчика события, в этом случае стандартная обработка завершения сеанса выполняться не будет. + // + // Синтаксис: + // Процедура ПриОбработкеЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка) Экспорт + // + КлиентскиеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриОбработкеЗапросовНаИспользованиеВнешнихРесурсов"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Использование профилей безопасности +// + +// Возвращает URI пространства имен XDTO-пакета, который используется для описания разрешений +// в профилях безопасности. +// +// Возвращаемое значение: Строка, URI пространства имен XDTO-пакета. +// +Функция ПакетXDTOПредставленийРазрешений() Экспорт + + Возврат Метаданные.ПакетыXDTO.ApplicationPermissions_1_0_0_1.ПространствоИмен; + +КонецФункции + +// Проверяет возможность использования профилей безопасности для текущей информационной базы. +// +// Возвращаемое значение: Булево. +// +Функция ВозможноИспользованиеПрофилейБезопасности() Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияИнформационнойБазы()) Тогда + Возврат Ложь; + КонецЕсли; + + Отказ = Ложь; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПроверкеВозможностиИспользованияПрофилейБезопасности"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриПроверкеВозможностиИспользованияПрофилейБезопасности(Отказ); + Если Отказ Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + РаботаВБезопасномРежимеПереопределяемый.ПриПроверкеВозможностиИспользованияПрофилейБезопасности(Отказ); + + Возврат Не Отказ; + +КонецФункции + +// Проверяет возможность настройки профилей безопасности из текущей информационной базы. +// +// Возвращаемое значение: Булево. +// +Функция ДоступнаНастройкаПрофилейБезопасности() Экспорт + + Если ВозможноИспользованиеПрофилейБезопасности() Тогда + + Отказ = Ложь; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПроверкеВозможностиНастройкиПрофилейБезопасности"); + + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриПроверкеВозможностиНастройкиПрофилейБезопасности(Отказ); + Если Отказ Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Не Отказ; + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + +// Выполняет дополнительные (определенные бизнес-логикой) действия при включении +// использования профилей безопасности. +// +Процедура ПриВключенииИспользованияПрофилейБезопасности() Экспорт + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииИспользованияПрофилейБезопасности"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриВключенииИспользованияПрофилейБезопасности(); + КонецЦикла; + + РаботаВБезопасномРежимеПереопределяемый.ПриВключенииИспользованияПрофилейБезопасности(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Создание запросов разрешений +// + +// Создает запрос на изменение разрешений использования внешних ресурсов. +// Только для внутреннего использования. +// +// Параметры: +// Владелец - ЛюбаяСсылка - владелец разрешений на использование внешних ресурсов +// (Неопределено при запросе разрешений для конфигурации, а не для объектов конфигурации), +// РежимЗамещения - Булево - режим замещения ранее предоставленных для владельца разрешений, +// ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), +// УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// отменяемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов(Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения = Неопределено, Знач УдаляемыеРазрешения = Неопределено, Знач ВнешнийМодуль = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + Результат = Неопределено; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов( + Владелец, РежимЗамещения, ДобавляемыеРазрешения, УдаляемыеРазрешения, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Результат = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + Владелец, РежимЗамещения, ДобавляемыеРазрешения, УдаляемыеРазрешения, ВнешнийМодуль); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Создает запросы на использование внешних ресурсов для внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются разрешения, +// НовыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). +// При запросе разрешений для внешних модулей добавление разрешений всегда выполняется в режиме замещения. +// +// Возвращаемое значение - Массив(УникальныйИдентификатор) - идентификаторы созданных запросов. +// +Функция ЗапросыНаИспользованиеВнешнихРесурсовДляВнешнегоМодуля(Знач ВнешнийМодуль, Знач НовыеРазрешения = Неопределено) Экспорт + + Результат = Новый Массив(); + + Если НовыеРазрешения = Неопределено Тогда + НовыеРазрешения = Новый Массив(); + КонецЕсли; + + Если НовыеРазрешения.Количество() > 0 Тогда + + // Если профиля безопасности еще нет - его требуется создать + Если РежимПодключенияВнешнегоМодуля(ВнешнийМодуль) = Неопределено Тогда + Результат.Добавить(ЗапросНаСозданиеНабораРазрешений(ВнешнийМодуль)); + КонецЕсли; + + Результат.Добавить( + ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + ВнешнийМодуль, Истина, НовыеРазрешения, Неопределено, ВнешнийМодуль + ) + ); + + Иначе + + // Если профиль безопасности есть - его требуется удалить + Если РежимПодключенияВнешнегоМодуля(ВнешнийМодуль) <> Неопределено Тогда + Результат.Добавить(ЗапросНаУдалениеНабораРазрешений(ВнешнийМодуль)); + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Создает запрос на создание профиля безопасности для внешнего модуля. +// Только для внутреннего использования. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросНаСозданиеНабораРазрешений(Знач ВнешнийМодуль) Экспорт + + СтандартнаяОбработка = Истина; + Результат = Неопределено; + Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов( + ВнешнийМодуль, Операция, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Результат = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов( + ВнешнийМодуль, Операция); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Создает запрос на удаление профиля безопасности для внешнего модуля. +// Только для внутреннего использования. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросНаУдалениеНабораРазрешений(Знач ВнешнийМодуль) Экспорт + + СтандартнаяОбработка = Истина; + Результат = Неопределено; + Операция = Перечисления.ОперацииСНаборамиРазрешений.Удаление; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриЗапросеНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов( + ВнешнийМодуль, Операция, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Результат = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов( + ВнешнийМодуль, Операция); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Создает запросы на обновление разрешений конфигурации. +// +// Параметры: +// ВключаяЗапросСозданияПрофиляИБ - Булево - включать в результат запрос на создание профиля безопасности +// для текущей информационной базы. +// +// Возвращаемое значение: Массив(УникальныйИдентификатор) - идентификаторы запросов для обновления разрешений конфигурации +// до требуемых в настоящий момент. +// +Функция ЗапросыНаОбновлениеРазрешенийКонфигурации(Знач ВключаяЗапросСозданияПрофиляИБ = Истина) Экспорт + + Результат = Новый Массив(); + + НачатьТранзакцию(); + + Попытка + + Если ВключаяЗапросСозданияПрофиляИБ Тогда + Результат.Добавить(ЗапросНаСозданиеНабораРазрешений(РаботаВБезопасномРежимеСлужебныйПовтИсп.СлужебныйИОМ())); + КонецЕсли; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); + КонецЦикла; + + РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Применение запросов разрешений на использование внешних ресурсов +// + +// Формирует представление разрешений на использование внешних ресурсов по таблицам разрешений. +// +// Параметры: +// Таблицы - Структура - таблицы разрешений, для которых формируется представление +// (см. ТаблицыРазрешений()). +// +// Возвращаемое значение: ТабличныйДокумент, представление разрешений на использование внешних ресурсов. +// +Функция ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ТаблицыРазрешений) Экспорт + + Возврат Отчеты.ИспользуемыеВнешниеРесурсы.ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(ТаблицыРазрешений); + +КонецФункции + +// Применяет запросы на использование внешних ресурсов (должна вызываться после изменения настроек +// профилей безопасности в кластере серверов). +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы применяемых запросов. +// +Процедура ПрименитьЗапросы(Знач ИдентификаторыЗапросов) Экспорт + + НачатьТранзакцию(); + + Попытка + + СтандартнаяОбработка = Истина; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПримененииЗапросовНаИспользованиеВнешнихРесурсов"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриПримененииЗапросовНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ПрименитьЗапросы(ИдентификаторыЗапросов); + + КонецЕсли; + + ПослеОбработкиЗапросов(ИдентификаторыЗапросов); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Выполняет дополнительные действия после применения запросов на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы применяемых запросов. +// +Процедура ПослеОбработкиЗапросов(Знач ИдентификаторыЗапросов) Экспорт + + СтандартнаяОбработка = Истина; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПослеОбработкиЗапросовНаИспользованиеВнешнихРесурсов"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПослеОбработкиЗапросовНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов, Ложь, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ПослеОбработкиЗапросов(ИдентификаторыЗапросов); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Внешние модули +// + +// Возвращает режим подключения внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются +// режим подключения. +// +// Возвращаемое значение: Строка - имя профиля безопасности, который должен использоваться для подключения +// внешнего модуля. Если для внешнего модуля не зарегистрирован режим подключения - возвращается Неопределено. +// +Функция РежимПодключенияВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт + + Если РаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда + + Возврат БезопасныйРежим(); + + Иначе + + УстановитьПривилегированныйРежим(Истина); + + Менеджер = РегистрыСведений.РежимыПодключенияВнешнихМодулей.СоздатьМенеджерЗаписи(); + Менеджер.ВнешнийМодуль = ВнешнийМодуль; + Менеджер.Прочитать(); + Если Менеджер.Выбран() Тогда + Возврат Менеджер.БезопасныйРежим; + Иначе + Возврат Неопределено; + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// Возвращает программный модуль, выполняющий функции менеджера внешнего модуля. +// +// ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются +// менеджер. +// +// Возвращаемое значение: ОбщийМодуль. +// +Функция МенеджерВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт + + Контейнеры = Новый Массив(); + + Менеджеры = МенеджерыВнешнихМодулей(); + Для Каждого Менеджер Из Менеджеры Цикл + КонтейнерыМенеджера = Менеджер.КонтейнерыВнешнихМодулей(); + + Если ТипЗнч(ВнешнийМодуль) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВнешнийМодуль); + Иначе + ОбъектМетаданных = ВнешнийМодуль.Метаданные(); + КонецЕсли; + + Если КонтейнерыМенеджера.Найти(ОбъектМетаданных) <> Неопределено Тогда + Возврат Менеджер; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Контроль записи служебных данных +// + +// Вызывается при записи элемента справочника, использующегося в качестве контейнера внешних модулей. +// +// Параметры: +// Источник - СправочникОбъект - записываемый элемент справочника, +// Отказ - Булево - флаг отказа от записи. +// +Процедура ПриЗаписиКонтейнераВнешнегоМодуля(Источник, Отказ) Экспорт + + ПриЗаписиСлужебныхДанных(Источник); + +КонецПроцедуры + +// Процедура должна вызываться при записи любых служебных данных, изменение которых должно быть +// недопустимо при установленном безопасном режиме. +// +Процедура ПриЗаписиСлужебныхДанных(Объект) Экспорт + + Если РаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запись объекта %1 недоступна: установлен безопасный режим: %2!'"), + Объект.Метаданные().ПолноеИмя(), + БезопасныйРежим() + ); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Декларация обработчиков программных событий +// + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +// +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( + "РаботаВБезопасномРежимеСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РаботаВБезопасномРежимеСлужебный"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий +// + +// Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, +// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. +// +// Параметры: +// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// +Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт + + Массив.Добавить(Метаданные.РегистрыСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ПолноеИмя()); + + Массив.Добавить(Метаданные.РегистрыСведений.РежимыПодключенияВнешнихМодулей.ПолноеИмя()); + + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенияПереходаВПривилегированныйРежим.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенныеCOMКлассы.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенныеВнешниеКомпоненты.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенныеИнтернетРесурсы.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенныеКаталогиФайловойСистемы.ПолноеИмя()); + Массив.Добавить(Метаданные.РегистрыСведений.РазрешенныеПриложенияОперационнойСистемы.ПолноеИмя()); + +КонецПроцедуры + +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - См. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(). +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.31"; + Обработчик.Процедура = "РаботаВБезопасномРежимеСлужебный.ЗаполнитьВнешнийМодульДляПредоставленныхРазрешений"; + Обработчик.ОбщиеДанные = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления +// + +// [2.2.2.31] Процедура проставляет значение измерения ВнешнийМодуль у регистров, используемых в качестве +// кэша предоставленных разрешений. +// +Процедура ЗаполнитьВнешнийМодульДляПредоставленныхРазрешений() Экспорт + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗаполнитьВнешнийМодульДляПредоставленныхРазрешений(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов +// + +Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + + ДобавитьПараметрыРаботыКлиента(Параметры); + +КонецПроцедуры + +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Параметры.Вставить("ОтображатьПомощникНастройкиРазрешений", ИспользуетсяИнтерактивныйРежимЗапросаРазрешений()); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Использование профилей безопасности +// + +// Проверяет, требуется ли использовать интерактивный режим запроса разрешений. +// +// Возвращаемое значение: Булево. +// +Функция ИспользуетсяИнтерактивныйРежимЗапросаРазрешений() + + Если ВозможноИспользованиеПрофилейБезопасности() Тогда + + Возврат ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Получить(); + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Внешние модули +// + +// Возвращает массив менеджеров справочников, которые являются контейнерами внешних модулей. +// +// Возвращаемое значение: Массив(СправочникМенеджер). +// +Функция МенеджерыВнешнихМодулей() + + Менеджеры = Новый Массив(); + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриРегистрацииМенеджеровВнешнихМодулей"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры); + КонецЦикла; + + Возврат Менеджеры; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/РаботаВБезопасномРежимеСлужебный.mdo b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/РаботаВБезопасномРежимеСлужебный.mdo new file mode 100644 index 000000000..6a93c236a --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/РаботаВБезопасномРежимеСлужебный.mdo @@ -0,0 +1,11 @@ + + + РаботаВБезопасномРежимеСлужебный + + ru + Работа в безопасном режиме служебный + + true + true + true + diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/Module.bsl new file mode 100644 index 000000000..7fbb5c4df --- /dev/null +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/Module.bsl @@ -0,0 +1,41 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает служебный идентификатор объектов метаданных, который используется для хранения +// разрешений, связанных с конфигурацией (а не с объектами конфигурации). +// +// Возвращаемое значение: СправочникСсылка.ИдентификаторыОбъектовМетаданных. +// +Функция СлужебныйИОМ() Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту( + "ПолноеИмя", Метаданные.РегистрыСведений.РежимыПодключенияВнешнихМодулей.ПолноеИмя()); + +КонецФункции + +// Возвращает массив существующих в конфигурации разделителей. +// +// Возвращаемое значение: ФиксированныйМассив(Строка) - массив строк общих реквизитов, которые +// являются разделителями. +// +Функция МассивРазделителей() Экспорт + + МассивРазделителей = Новый Массив; + + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда + МассивРазделителей.Добавить(ОбщийРеквизит.Имя); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(МассивРазделителей); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.mdo b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/РаботаВБезопасномРежимеСлужебныйПовтИсп.mdo similarity index 53% rename from SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.mdo rename to SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/РаботаВБезопасномРежимеСлужебныйПовтИсп.mdo index 2e879511b..13e1ecee0 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп/ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп.mdo +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебныйПовтИсп/РаботаВБезопасномРежимеСлужебныйПовтИсп.mdo @@ -1,9 +1,9 @@ - - ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп + + РаботаВБезопасномРежимеСлужебныйПовтИсп ru - Дополнительные отчеты и обработки в модели сервиса повт исп + Работа в безопасном режиме служебный повт исп true true diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index cacd89c94..cf35845e1 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает имя общего реквизита, который является разделителем основных данных. // @@ -514,7 +513,6 @@ НаборЗаписей.Записать(); КонецЦикла; - КонецЕсли; КонецЕсли; @@ -578,6 +576,8 @@ Возврат; КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + МаксимальноеКоличествоПовторов = 3; УстановитьПривилегированныйРежим(Истина); @@ -1109,8 +1109,9 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Проверяет возможность использования конфигурации в модели сервиса. // При невозможности использования - генерируется исключение с указанием причины, @@ -1520,14 +1521,14 @@ // Ссылочные типы данных // Определяет принадлежность объекта метаданных к общему типу "Документ" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяДокумента(Знач ПолноеИмя) Экспорт @@ -1536,14 +1537,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Справочник" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяСправочника(Знач ПолноеИмя) Экспорт @@ -1552,14 +1553,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Перечисление" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПеречисления(Знач ПолноеИмя) Экспорт @@ -1568,14 +1569,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "План обмена" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПланаОбмена(Знач ПолноеИмя) Экспорт @@ -1584,14 +1585,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "План видов характеристик" по -// полному имени объекта метаданных +// полному имени объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПланаВидовХарактеристик(Знач ПолноеИмя) Экспорт @@ -1600,14 +1601,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Бизнес-процесс" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяБизнесПроцесса(Знач ПолноеИмя) Экспорт @@ -1616,14 +1617,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Задача" по полному имени объекта -// метаданных +// метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // -// Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Возвращаемое значение: +// Булево. // Функция ЭтоПолноеИмяЗадачи(Знач ПолноеИмя) Экспорт @@ -1632,14 +1633,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "План счетов" по полному имени объекта -// метаданных +// метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПланаСчетов(Знач ПолноеИмя) Экспорт @@ -1648,14 +1649,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "План видов расчета" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПланаВидовРасчета(Знач ПолноеИмя) Экспорт @@ -1666,14 +1667,14 @@ // Регистры // Определяет принадлежность объекта метаданных к общему типу "Регистр сведений" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегистраСведений(Знач ПолноеИмя) Экспорт @@ -1682,14 +1683,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Регистр накопления" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегистраНакопления(Знач ПолноеИмя) Экспорт @@ -1698,14 +1699,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Регистр бухгалтерии" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегистраБухгалтерии(Знач ПолноеИмя) Экспорт @@ -1714,14 +1715,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к общему типу "Регистр расчета" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегистраРасчета(Знач ПолноеИмя) Экспорт @@ -1733,14 +1734,14 @@ // Перерасчеты // Определяет принадлежность объекта метаданных к типу "Перерасчет" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПерерасчета(Знач ПолноеИмя) Экспорт @@ -1751,14 +1752,14 @@ // Константы // Определяет принадлежность объекта метаданных к общему типу "Константа" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяКонстанты(Знач ПолноеИмя) Экспорт @@ -1769,14 +1770,14 @@ // Журналы документов // Определяет принадлежность объекта метаданных к общему типу "Журнал документов" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяЖурналаДокументов(Знач ПолноеИмя) Экспорт @@ -1790,11 +1791,11 @@ // объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяПоследовательности(Знач ПолноеИмя) Экспорт @@ -1805,14 +1806,14 @@ // РегламентныеЗадания // Определяет принадлежность объекта метаданных к общему типу "Регламентные задания" по полному имени -// объекта метаданных +// объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегламентногоЗадания(Знач ПолноеИмя) Экспорт @@ -1822,14 +1823,14 @@ // Общие -// Определяет принадлежность объекта метаданных к типу регистр по полному имени объекта метаданных +// Определяет принадлежность объекта метаданных к типу регистр по полному имени объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяРегистра(Знач ПолноеИмя) Экспорт @@ -1841,14 +1842,14 @@ КонецФункции -// Определяет принадлежность объекта метаданных к ссылочному типу по полному имени объекта метаданных +// Определяет принадлежность объекта метаданных к ссылочному типу по полному имени объекта метаданных. // // Параметры: -// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить -// принадлежность к заданному типу +// ПолноеИмя - Строка - полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // Функция ЭтоПолноеИмяОбъектаСсылочногоТипа(Знач ПолноеИмя) Экспорт @@ -1894,8 +1895,28 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Для внутреннего использования. +// +Функция ИспользуемыеОбластиДанных() Экспорт + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных + |ГДЕ + | Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) + | И ОбластьДанныхВспомогательныеДанные <> 0 + |"); + Результат = Запрос.Выполнить(); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает полный путь к каталогу временных файлов. // @@ -2068,7 +2089,7 @@ КонецЕсли; - ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы(); Возврат Результат; @@ -2116,7 +2137,7 @@ УдалитьФайлы(ИмяФайлаВыгрузки); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; @@ -2318,99 +2339,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа через Агента сервиса - -// Для текущей ИБ удаляет заданные сеансы и разрывает соединения через Агент сервиса. -// Сеансы задаются своими номерами во входном массиве либо одним номером. -// -// Параметры: -// СеансыКУдалению - Массив; Число - Числовой массив номеров сеансов или один номер сеанса. -// ПараметрыАдминистрированияИБ - Структура с полями -// ИмяАдминистратораИБ - Строка. -// ПарольАдминистратораИБ - Строка. -// ИмяАдминистратораКластера - Строка. -// ПарольАдминистратораКластера - Строка. -// ПортКластераСерверов - Число. -// ПортАгентаСервера - Число. -// -// Возвращаемое значение: -// Булево - Истина, если успешно. -// -Функция УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(Знач СеансыКУдалению, Знач ПараметрыАдминистрированияИБ) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Ложь; - КонецЕсли; - - Если ТипЗнч(СеансыКУдалению) = Тип("Массив") Тогда - СписокСеансов = СеансыКУдалению; - ИначеЕсли ТипЗнч(СеансыКУдалению) = Тип("Число") Тогда - СписокСеансов = Новый Массив; - СписокСеансов.Добавить(СеансыКУдалению); - Иначе - ВызватьИсключение(НСтр("ru = 'Неверный тип параметра ""СеансыКУдалению"".'")); - КонецЕсли; - - Если СписокСеансов.Количество() = 0 Тогда - Возврат Истина; - КонецЕсли; - - ПубликацияАгента = Константы.АдресАгентаСервиса.Получить(); - ПользовательАгента = Константы.ИмяПользователяАгентаСервиса.Получить(); - ПарольАгента = Константы.ПарольПользователяАгентаСервиса.Получить(); - - // Проверить с помощью версионирования, поддерживается ли нужный интерфейс. - МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПубликацияАгента, - ПользовательАгента, ПарольАгента, "УправлениеАгентом"); - - Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда - ВызватьИсключение(НСтр("ru = 'Агент сервиса. Выборочное удаление сеансов не поддерживается в этой версии.'")); - КонецЕсли; - - // Сформировать XDTO-строку входных параметров для обращения к операциям сервиса. - - ЗначенияПараметров = Новый Структура; - - // Получить для текущей ИБ параметры соединения. - ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); - ЗначенияПараметров.Вставить("ИнформационнаяБаза", ПараметрыСоединения.Ref); - - ТипПараметрыАдминистрирования = ФабрикаXDTO.Тип("http://v8.1c.ru/agent/scripts/1.0", "ClusterAdministrationInfo"); - ПараметрыАдминистрированияКластера = ФабрикаXDTO.Создать(ТипПараметрыАдминистрирования); - ПараметрыАдминистрированияКластера.AgentConnectionString = - "tcp://" + ПараметрыСоединения.Srvr + ":" - + Формат(ПараметрыАдминистрированияИБ.ПортАгентаСервера, "ЧГ="); - ПараметрыАдминистрированияКластера.ClusterPort = ПараметрыАдминистрированияИБ.ПортКластераСерверов; - ПараметрыАдминистрированияКластера.ClusterUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера; - ПараметрыАдминистрированияКластера.ClusterPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); - ПараметрыАдминистрированияКластера.IBUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ; - ПараметрыАдминистрированияКластера.IBPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ); - - ЗначенияПараметров.Вставить("ПараметрыАдминистрированияКластера", ПараметрыАдминистрированияКластера); - ЗначенияПараметров.Вставить("СписокСеансов", СписокСеансов); - - ПараметрыXDTO = ЗаписатьСтруктурныйОбъектXDTOВСтроку(ЗначенияПараметров); - - // Требуется поддержка 2-й версии, в которой реализовано выборочное удаление сеансов. - - Прокси = ОбщегоНазначения.WSПрокси(ПубликацияАгента + "/ws/ManageAgent_1_0_2_1?wsdl", - "http://www.1c.ru/SaaS/1.0/WS", - "ManageAgent_1_0_2_1", - , - ПользовательАгента, - ПарольАгента, - 20); - - - // Выполнить действие с помощью операции Web-сервиса. - СостояниеЗавершения = Неопределено; - Прокси.DoAction("УдалитьСеансыПоСписку", ПараметрыXDTO, СостояниеЗавершения); - - Возврат СостояниеЗавершения = "ДействиеВыполнено"; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Работа с параметрами ИБ @@ -2665,7 +2593,7 @@ ТекущаяУниверсальнаяДата() - НачалоВыполнения, ОбменЧерезФС); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла. Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменЧерезФС = Ложь; КонецПопытки; @@ -3003,7 +2931,6 @@ , ОбщегоНазначения.ЗначениеВСтрокуXML(ДанныеСобытия)); - КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////// @@ -3538,7 +3465,7 @@ ПроверяетсяСсылка = Ложь; КонецЕсли; - Если ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ПроверяемоеЗначение.Метаданные(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если Не МонопольныйРежим() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ПроверяемоеЗначение.Метаданные(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -3605,6 +3532,10 @@ ОчиститьВсеПараметрыСеансаКромеРазделителей(); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -3699,7 +3630,6 @@ Попытка - ТекстЗапроса = "ВЫБРАТЬ | ЕСТЬNULL(ОбластиДанных.ОбластьДанныхВспомогательныеДанные, УдалитьОбластиДанных.ОбластьДанных) КАК ОбластьДанныхВспомогательныеДанные, @@ -3827,6 +3757,7 @@ // Конец СтандартныеПодсистемы.ОбменДанными Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + Исключения.Добавить(Метаданные.Справочники.Найти("КлючевыеОперации")); Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыВремени")); КонецЕсли; @@ -4050,4 +3981,6 @@ Возврат "1.0.2.1"; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl index b08e43d25..3d5fdc38b 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -26,3 +25,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl index 472e6243a..1946cc02d 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается при удалении области данных. // В процедуре необходимо удалить данные области данных, которые не @@ -78,3 +77,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl index 206e62c71..e09a118a9 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает массив сериализуемых структурных типов, поддерживаемых в настоящее время. // @@ -120,3 +119,5 @@ Возврат Новый ФиксированноеСоответствие(Результат); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 2031d5329..699ac5efb 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Работа с данными справочника КлассификаторБанковРФ @@ -33,8 +32,9 @@ КонецЕсли; КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -59,8 +59,15 @@ "РаботаСБанками"); КонецЕсли; + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "РаботаСБанками"); + КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. // // Параметры: @@ -108,9 +115,44 @@ КонецПроцедуры +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Возвращает список разрешений для загрузки классификатора банков с сайта РБК. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() + + Протокол = "HTTP"; + Адрес = "cbrates.rbc.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Загрузка классификатора банков из интернета.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) + ); + + Возврат Разрешения; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Работа с данными сайта РБК @@ -284,11 +326,11 @@ // Процедура ЗагрузитьКлассификаторБанков() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + ИмяСобытия = НСтр("ru ='Загрузка классификатора банков. Сайт РБК'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ИмяСобытия = НСтр("ru ='Загрузка классификатора банков. Сайт РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); УровеньСобытия = УровеньЖурналаРегистрации.Информация; Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда @@ -981,3 +1023,5 @@ Возврат Истина; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl index ab5744a84..7a8051898 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl @@ -3,11 +3,12 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выводит оповещение о необходимости обновления классификатора банков. // Процедура РаботаСБанкамиВывестиОповещениеОНеактуальности() Экспорт РаботаСБанкамиКлиент.ОповеститьКлассификаторУстарел(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl index 6870f26f9..298765739 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Вызывается после запуска конфигурации, подключает обработчик ожидания. // @@ -17,8 +16,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обновление классификатора банков @@ -64,3 +64,5 @@ Функция НавигационнаяСсылкаФормыЗагрузки() Возврат "e1cib/data/Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl index 8340fc800..f768e5c36 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Включает/отключает показ предупреждений о необходимости обновления классификатора банков. // @@ -12,4 +11,6 @@ // ПоказыватьПредупреждение - Булево. Процедура ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшемКлассификатореБанков(ПоказыватьПредупреждение) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 998cd2e15..d350b8656 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Добавляет в справочник валют валюты из макета. // @@ -48,7 +47,7 @@ КонецФункции -// Возвращает курс валюты на дату +// Возвращает курс валюты на дату. // // Параметры: // Валюта - СправочникСсылка.Валюты - Валюта, для которой получается курс. @@ -97,108 +96,39 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. - - КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( - "РаботаСКурсамиВалютКлиент"); - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "РаботаСКурсамиВалют"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( - "РаботаСКурсамиВалют"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( - "РаботаСКурсамиВалют"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( - "РаботаСКурсамиВалют"); - КонецЕсли; - -КонецПроцедуры - -// Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. +// Пересчитывает сумму из одной валюты в другую. // // Параметры: -// Параметры - Структура - Параметры запуска. +// Сумма - Число - сумма, которую необходимо пересчитать; +// ИсходнаяВалюта - СправочникСсылка.Валюты - пересчитываемая валюта; +// НоваяВалюта - СправочникСсылка.Валюты - валюта, в которую необходимо пересчитать; +// Дата - Дата - дата курсов валют. // -Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически. - ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда - КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют. - Иначе - КурсыОбновляютсяОтветственными = КурсыЗагружаютсяИзИнтернета(); // Есть валюты, для которых можно загружать курсы. - КонецЕсли; - - РаботаСКурсамиВалютПереопределяемый.ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшихКурсахВалют(КурсыОбновляютсяОтветственными); - - Параметры.Вставить("Валюты", Новый ФиксированнаяСтруктура("КурсыОбновляютсяОтветственными", КурсыОбновляютсяОтветственными)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий подсистем БСП - -// Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, -// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. +// Возвращаемое значение: +// Число - пересчитанная сумма. // -// Параметры: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". -// -Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт +Функция ПересчитатьВВалюту(Сумма, ИсходнаяВалюта, НоваяВалюта, Дата) Экспорт - Массив.Добавить(Метаданные.РегистрыСведений.КурсыВалют.ПолноеИмя()); - -КонецПроцедуры + Возврат РаботаСКурсамиВалютКлиентСервер.ПересчитатьПоКурсу(Сумма, + ПолучитьКурсВалюты(ИсходнаяВалюта, Дата), + ПолучитьКурсВалюты(НоваяВалюта, Дата)); + +КонецФункции -// Добавляет в таблицу информацию о регламентных заданиях подсистемы для модели сервиса. -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - Таблица регламентных заданий. -// * РегламентноеЗадание - Строка - Имя предопределенного регламентного задания. -// * Использование - Булево - Истина, если регламентное задание должно -// выполняться в модели сервиса. -// -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКурсовВалют"; - НоваяСтрока.Использование = Ложь; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Выполнение регламентных заданий - -// Загружает курсы валют на текущую дату +// Загружает курсы валют на текущую дату. // Процедура ЗагрузитьАктуальныйКурс() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый вызов процедуры ""ЗагрузитьАктуальныйКурс"".'"); КонецЕсли; - ИмяСобытия = НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Информация, - , - , + ИмяСобытия = НСтр("ru = 'Валюты.Загрузка курсов валют'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начата регламентная загрузка курсов валют'")); ТекущаяДата = ТекущаяДатаСеанса(); @@ -230,6 +160,134 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. + + КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( + "РаботаСКурсамиВалютКлиент"); + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РаботаСКурсамиВалют"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( + "РаботаСКурсамиВалют"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( + "РаботаСКурсамиВалют"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( + "РаботаСКурсамиВалют"); + КонецЕсли; + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "РаботаСКурсамиВалют"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий подсистем БСП + +// Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. +// +// Параметры: +// Параметры - Структура - Параметры запуска. +// +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически. + ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда + КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют. + Иначе + КурсыОбновляютсяОтветственными = КурсыЗагружаютсяИзИнтернета(); // Есть валюты, для которых можно загружать курсы. + КонецЕсли; + + РаботаСКурсамиВалютПереопределяемый.ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшихКурсахВалют(КурсыОбновляютсяОтветственными); + + Параметры.Вставить("Валюты", Новый ФиксированнаяСтруктура("КурсыОбновляютсяОтветственными", КурсыОбновляютсяОтветственными)); + +КонецПроцедуры + +// Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, +// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. +// +// Параметры: +// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// +Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт + + Массив.Добавить(Метаданные.РегистрыСведений.КурсыВалют.ПолноеИмя()); + +КонецПроцедуры + +// Добавляет в таблицу информацию о регламентных заданиях подсистемы для модели сервиса. +// +// Параметры: +// ТаблицаИспользования - ТаблицаЗначений - Таблица регламентных заданий. +// * РегламентноеЗадание - Строка - Имя предопределенного регламентного задания. +// * Использование - Булево - Истина, если регламентное задание должно +// выполняться в модели сервиса. +// +Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКурсовВалют"; + НоваяСтрока.Использование = Ложь; + +КонецПроцедуры + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + +КонецПроцедуры + +// Возвращает список разрешений для загрузки курсов валют с сайта РБК. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() + + Протокол = "HTTP"; + Адрес = "cbrates.rbc.ru"; + Порт = Неопределено; + Описание = НСтр("ru = 'Загрузка курсов валют из интернета.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) + ); + + Возврат Разрешения; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -237,9 +295,9 @@ // сведений базовой валюты (период, курс, кратность). // // Параметры -// ВалютаИсточник – Справочники.Валюты – ссылка на базовую валюту, из регистра +// ВалютаИсточник - Справочники.Валюты - ссылка на базовую валюту, из регистра // сведений которой, будут копироваться данные -// ВалютаПриемник – Справочники.Валюты – ссылка на зависимую валюту от базовой, +// ВалютаПриемник - Справочники.Валюты - ссылка на зависимую валюту от базовой, // в регистр сведений которой данные будут копироваться // Процедура ЗаписатьСведенияДляПодчиненногоРегистра(ВалютаИсточник, ВалютаПриемник) Экспорт @@ -291,14 +349,15 @@ СтруктураКурса = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаКурса, Новый Структура("Валюта", Валюта)); Если (СтруктураКурса.Курс = 0) Или (СтруктураКурса.Кратность = 0) Тогда - - РегистрКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); - - РегистрКурсыВалют.Период = ДатаКурса; - РегистрКурсыВалют.Валюта = Валюта; - РегистрКурсыВалют.Курс = 1; - РегистрКурсыВалют.Кратность = 1; - РегистрКурсыВалют.Записать(); + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(Валюта); + Запись = НаборЗаписей.Добавить(); + Запись.Валюта = Валюта; + Запись.Период = ДатаКурса; + Запись.Курс = 1; + Запись.Кратность = 1; + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + НаборЗаписей.Записать(); КонецЕсли; КонецПроцедуры @@ -641,3 +700,5 @@ КонецЕсли; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl index 071656971..15d6959fa 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Загружает информацию о курсе валюты. // @@ -17,3 +16,5 @@ Функция КурсыАктуальны() Экспорт Возврат РаботаСКурсамиВалют.КурсыАктуальны(); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl index 410ee1b36..5d91affeb 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выводит оповещение о необходимости обновления курсов валют. // @@ -18,3 +17,4 @@ ПодключитьОбработчикОжидания("РаботаСКурсамиВалютВывестиОповещениеОНеактуальности", ПериодОбработчикаСледующегоДня, Истина); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl index 2931c72e1..cf13a5803 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Вызывается после запуска конфигурации, подключает обработчик ожидания. Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -16,8 +15,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обновление курсов валют @@ -63,3 +63,5 @@ Функция НавигационнаяСсылкаОбработки() Возврат "e1cib/app/Обработка.ЗагрузкаКурсовВалют"; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index 0b0620741..eed21016c 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Пересчитывает Сумму из Текущей валюты в Новую валюту по параметрам их курсов. // Параметры курсов валют можно получить воспользовавшись функцией @@ -80,8 +79,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура для загрузки курсов валют по определенному периоду. // @@ -150,8 +150,8 @@ КонецЦикла; - Возврат СостояниеЗагрузки; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl index 46f2bbf5f..b42ccdd24 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Включает/отключает показ предупреждений о необходимости обновления курсов валют. // @@ -12,4 +11,6 @@ // ПоказыватьПредупреждение - Булево. Процедура ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшихКурсахВалют(ПоказыватьПредупреждение) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index b642ca575..14e9dfdf8 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -2,19 +2,153 @@ // Подсистема "Работа с почтовыми сообщениями". // //////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// Модуль "РаботаСПочтовымиСообщениями", содержит функции-интерфейсы, -// для работы с почтовыми сообщениями. Должен присутствовать в любой -// конфигурации, которая содержит почтовую подсистему. -// -// Функции не содержат спецификации параметров - их необходимо смотреть -// в модуле, непосредственно реализующем ту или иную механику работы с -// почтовыми сообщениями (с серверами). // -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс + +// Функция для отправки сообщений. Проверяет корректность заполнения учетной +// записи и вызывает функцию, реализующую механику отправки. +// +// см. параметры функции ОтправитьСообщение +// +// Примечание: параметр ПараметрыПисьма.Вложения может содержать вместо двоичных данных адреса во +// временном хранилище, по которым хранятся эти данные. +// +Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, + Знач ПараметрыПисьма, + Знач Соединение = Неопределено) Экспорт + + Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + Или НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда + ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'"); + КонецЕсли; + + Если ПараметрыПисьма = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'"); + КонецЕсли; + + ТипЗнчКому = ?(ПараметрыПисьма.Свойство("Кому"), ТипЗнч(ПараметрыПисьма.Кому), Неопределено); + ТипЗнчКопии = ?(ПараметрыПисьма.Свойство("Копии"), ТипЗнч(ПараметрыПисьма.Копии), Неопределено); + ТипЗнчСлепыеКопии = ?(ПараметрыПисьма.Свойство("СлепыеКопии"), ТипЗнч(ПараметрыПисьма.СлепыеКопии), Неопределено); + + Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И ТипЗнчСлепыеКопии = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'"); + КонецЕсли; + + Если ТипЗнчКому = Тип("Строка") Тогда + ПараметрыПисьма.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); + ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда + ПараметрыПисьма.Вставить("Кому", Новый Массив); + КонецЕсли; + + Если ТипЗнчКопии = Тип("Строка") Тогда + ПараметрыПисьма.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Копии); + ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда + ПараметрыПисьма.Вставить("Копии", Новый Массив); + КонецЕсли; + + Если ТипЗнчСлепыеКопии = Тип("Строка") Тогда + ПараметрыПисьма.СлепыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СлепыеКопии); + ИначеЕсли ТипЗнчСлепыеКопии <> Тип("Массив") Тогда + ПараметрыПисьма.Вставить("СлепыеКопии", Новый Массив); + КонецЕсли; + + Если ПараметрыПисьма.Свойство("АдресОтвета") И ТипЗнч(ПараметрыПисьма.АдресОтвета) = Тип("Строка") Тогда + ПараметрыПисьма.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.АдресОтвета); + КонецЕсли; + + Если ПараметрыПисьма.Свойство("Вложения") Тогда + Если ТипЗнч(ПараметрыПисьма.Вложения) = Тип("Соответствие") Тогда + Для Каждого Вложение Из ПараметрыПисьма.Вложения Цикл + ДанныеВложения = Вложение.Значение; + Если РаботаСПочтовымиСообщениямиСлужебный.ПривестиВложениеДляВставкиВПисьмо(ДанныеВложения) Тогда + ПараметрыПисьма.Вложения.Вставить(Вложение.Ключ, ДанныеВложения); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыПисьма, Соединение); + +КонецФункции + +// Функция для загрузки сообщений. Проверяет корректность заполнения учетной +// записи и вызывает функцию, реализующую механику загрузки сообщений. +// +// параметры к функции см. в функции ЗагрузитьСообщения. +// +Функция ЗагрузитьПочтовыеСообщения(Знач УчетнаяЗапись, + Знач ПараметрыЗагрузки = Неопределено) Экспорт + + ИспользоватьДляПолучения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ИспользоватьДляПолучения"); + Если НЕ ИспользоватьДляПолучения Тогда + ВызватьИсключение НСтр("ru = 'Учетная запись не предназначена для получения сообщений.'"); + КонецЕсли; + + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = Новый Структура; + КонецЕсли; + + Результат = РаботаСПочтовымиСообщениямиСлужебный.ЗагрузитьСообщения(УчетнаяЗапись, ПараметрыЗагрузки); + + Возврат Результат; + +КонецФункции + +// Получить доступные учетные записи электронной почты +// Параметры: +// ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту +// ДляПолучения - Булево - Если установлено Истина, то будут выбирать только записи, по которым можно получать почту +// ВключатьСистемнуюУчетнуюЗапись - Булево - включать системную учетную запись, если доступна +// +// Возвращаемое значение: +// ДоступныеУчетныеЗаписи - ТаблицаЗначений - С колонками: +// Ссылка - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - Ссылка на учетную запись +// Наименование - Строка - Наименование учетной записи +// Адрес - Строка - Адрес электронной почты +// +Функция ДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, + Знач ДляПолучения = Неопределено, + Знач ВключатьСистемнуюУчетнуюЗапись = Истина) Экспорт + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, + | УчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, + | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК Адрес + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = ЛОЖЬ + | И ВЫБОР + | КОГДА &ДляОтправки = НЕОПРЕДЕЛЕНО + | ТОГДА ИСТИНА + | ИНАЧЕ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки = &ДляОтправки + | КОНЕЦ + | И ВЫБОР + | КОГДА &ДляПолучения = НЕОПРЕДЕЛЕНО + | ТОГДА ИСТИНА + | ИНАЧЕ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения = &ДляПолучения + | КОНЕЦ + | И ВЫБОР + | КОГДА &ВключатьСистемнуюУчетнуюЗапись + | ТОГДА ИСТИНА + | ИНАЧЕ УчетныеЗаписиЭлектроннойПочты.Ссылка <> ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты) + | КОНЕЦ"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("ДляОтправки", ДляОтправки); + Запрос.Параметры.Вставить("ДляПолучения", ДляПолучения); + Запрос.Параметры.Вставить("ВключатьСистемнуюУчетнуюЗапись", ВключатьСистемнуюУчетнуюЗапись); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции // Получает ссылку на учетную запись по виду назначения учетной записи. // @@ -22,9 +156,9 @@ // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка // на описание учетной записи. // -Функция ПолучитьСистемнуюУчетнуюЗапись() Экспорт +Функция СистемнаяУчетнаяЗапись() Экспорт - Возврат ЭлектроннаяПочта.ПолучитьСистемнуюУчетнуюЗапись(); + Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты; КонецФункции @@ -32,26 +166,21 @@ // Функция ПроверитьСистемнаяУчетнаяЗаписьДоступна() Экспорт - Возврат ЭлектроннаяПочта.ПроверитьСистемнаяУчетнаяЗаписьДоступна(); + Возврат РаботаСПочтовымиСообщениямиСлужебный.ПроверитьСистемнаяУчетнаяЗаписьДоступна(); КонецФункции -// Возвращает доступные учетные записи электронной почты. -// Параметры: -// ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту -// ДляПриема - Булево - Если установлено Истина, то будут выбирать только записи, по которым можно получать почту -// Возвращаемое значение: -// ДоступныеУчетныеЗаписи - ТаблицаЗначений - С колонками: -// Ссылка - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - Ссылка на учетную запись -// Наименование - Строка - Наименование учетной записи -// Адрес - Строка - Адрес электронной почты +// Возвращает Истину, если есть по меньшей мере одна настроенная учетная запись для отправки почты. +Функция ДоступнаОтправкаПисем() Экспорт + Возврат ДоступныеУчетныеЗаписи(Истина).Количество() > 0 + Или ПравоДоступа("Изменение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Устаревшие процедуры и функции + +// Устарела. Следует использовать ОтправитьПочтовоеСообщение // -Функция ПолучитьДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, Знач ДляПриема = Неопределено, Знач ВключатьСистемнуюУчетнуюЗапись = Истина) Экспорт - - Возврат ЭлектроннаяПочта.ПолучитьДоступныеУчетныеЗаписи(ДляОтправки, ДляПриема, ВключатьСистемнуюУчетнуюЗапись); - -КонецФункции - // Производит отправку сообщения электронной почты. // // Параметры: @@ -88,109 +217,24 @@ // Функция ОтправитьСообщение(Знач УчетнаяЗапись, Знач ПараметрыПисьма) Экспорт - Возврат ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Возврат ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Устарела. Следует использовать ДоступныеУчетныеЗаписи. +Функция ПолучитьДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, + Знач ДляПолучения = Неопределено, + Знач ВключатьСистемнуюУчетнуюЗапись = Истина) Экспорт + + Возврат ДоступныеУчетныеЗаписи(ДляОтправки, ДляПолучения, ВключатьСистемнуюУчетнуюЗапись); + +КонецФункции -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт +// Устарела. Следует использовать СистемнаяУчетнаяЗапись. +Функция ПолучитьСистемнуюУчетнуюЗапись() Экспорт - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + Возврат СистемнаяУчетнаяЗапись(); - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ЭлектроннаяПочта"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( - "РаботаСПочтовымиСообщениями"); - - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( - "РаботаСПочтовымиСообщениями"); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП - -// Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. -// Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректные сведения. -// -// Обязательно требуется заполнить только виды доступа, используемые -// в шаблонах ограничения доступа явно, а виды доступа, используемые -// в наборах значений доступа могут быть получены из текущего состояния -// регистра сведений НаборыЗначенийДоступа. -// -// Для автоматической подготовки содержимого процедуры следует -// воспользоваться инструментами разработчика для подсистемы -// Управление доступом. -// -// Параметры: -// Описание - Строка, многострочная строка формата <Таблица>.<Право>.<ВидДоступа>[.Таблица объекта] -// Например, Документ.ПриходнаяНакладная.Чтение.Организации -// Документ.ПриходнаяНакладная.Чтение.Контрагенты -// Документ.ПриходнаяНакладная.Изменение.Организации -// Документ.ПриходнаяНакладная.Изменение.Контрагенты -// Документ.ЭлектронныеПисьма.Чтение.Объект.Документ.ЭлектронныеПисьма -// Документ.ЭлектронныеПисьма.Изменение.Объект.Документ.ЭлектронныеПисьма -// Документ.Файлы.Чтение.Объект.Справочник.ПапкиФайлов -// Документ.Файлы.Чтение.Объект.Документ.ЭлектронноеПисьмо -// Документ.Файлы.Изменение.Объект.Справочник.ПапкиФайлов -// Документ.Файлы.Изменение.Объект.Документ.ЭлектронноеПисьмо -// Вид доступа Объект предопределен, как литерал, его нет в предопределенных элементах -// ПланыВидовХарактеристик.ВидыДоступа. Этот вид доступа используется в шаблонах ограничений доступа, -// как "ссылка" на другой объект, по которому ограничивается таблица. -// Когда вид доступа "Объект" задан, также требуется задать типы таблиц, которые используются -// для этого вида доступа. Т.е. перечислить типы, которые соответствующие полю, -// использованному в шаблоне ограничения доступа в паре с видом доступа "Объект". -// При перечислении типов по виду доступа "Объект" нужно перечислить только те типы поля, -// которые есть у поля РегистрыСведений.НаборыЗначенийДоступа.Объект, остальные типы лишние. -// -Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт - - Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Возврат; - КонецЕсли; - - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - - Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("УчетныеЗаписиЭлектроннойПочты") Тогда - - Описание = Описание + - " - |Справочник.УчетныеЗаписиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты - |"; - - КонецЕсли; - -КонецПроцедуры - -// Заполняет виды доступа, используемые в ограничениях прав доступа. -// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. -// Их можно удалить, если они не требуются для ограничения прав доступа. -// -// Параметры: -// ВидыДоступа - ТаблицаЗначений с полями: -// - Имя - Строка - имя используемое в описании поставляемых -// профилей групп доступа и текстах ОДД. -// - Представление - Строка - представляет вид доступа в профилях и группах доступа. -// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). -// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). -// -Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт - - ВидДоступа = ВидыДоступа.Добавить(); - ВидДоступа.Имя = "УчетныеЗаписиЭлектроннойПочты"; - ВидДоступа.Представление = НСтр("ru = 'Учетные записи электронной почты'"); - ВидДоступа.ТипЗначений = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"); - -КонецПроцедуры +КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl new file mode 100644 index 000000000..848fbe9a8 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl @@ -0,0 +1,38 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Возвращает указан ли в учетной записи пароль или нет +// +// см. описание функции РаботаСПочтовымиСообщениямиСлужебный.ПарольЗадан. +// +Функция ПарольЗадан(УчетнаяЗапись) Экспорт + + Возврат РаботаСПочтовымиСообщениямиСлужебный.ПарольЗадан(УчетнаяЗапись); + +КонецФункции + +// Проверка учетной записи электронной почты. +// +// см. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. +// +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт + + РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + +КонецПроцедуры + +// Возвращает Истина, если текущему пользователю доступна по меньшей мере одна учетная запись для отправки. +Функция ЕстьДоступныеУчетныеЗаписиДляОтправки() Экспорт + Возврат РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина).Количество() > 0; +КонецФункции + +// Проверяет возможность добавления пользователем новых учетных записей. +Функция ДоступноПравоДобавленияУчетныхЗаписей() Экспорт + Возврат ПравоДоступа("Добавление", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/РаботаСПочтовымиСообщениямиВызовСервера.mdo similarity index 59% rename from SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo rename to SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/РаботаСПочтовымиСообщениямиВызовСервера.mdo index 11b923dbb..e20a860ca 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/РаботаСПочтовымиСообщениямиВызовСервера.mdo @@ -1,9 +1,9 @@ - ЭлектроннаяПочтаВызовСервера + РаботаСПочтовымиСообщениямиВызовСервера ru - Электронная почта вызов сервера + Работа с почтовыми сообщениями вызов сервера true true diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 1b766c1c7..0e7e0fbe9 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -3,9 +3,79 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс +// Открывает форму создания нового письма. +// +// Параметры: +// ПараметрыОтправки - Структура - параметры для заполнения в форме отправки нового письма (все необязательные): +// * Отправитель - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, с которой может +// быть отправлено почтовое сообщение; +// - СписокЗначений - список учетных записей, доступных для выбора в форме: +// ** Представление - Строка- наименование учетной записи; +// ** Значение - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись. +// +// * Получатель - список почтовых адресов +// - Строка - список адресов в формате: +// [ПредставлениеПолучателя1] <Адрес1>; [[ПредставлениеПолучателя2] <Адрес2>;...] +// - СписокЗначений - Список адресов +// ** Представление - Строка - представление получателя, +// ** Значение - Строка - почтовый адрес. +// +// * Тема - Строка - тема письма. +// +// * Текст - Строка - тело письма. +// +// * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур): +// ** Структура - описание вложения: +// *** Представление - Строка - имя файла вложения; +// *** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище. +// *** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). +// +// * УдалятьФайлыПослеОтправки - Булево - удалять временные файлы после отправки сообщения. +// +// ОповещениеОЗакрытииФормы - ОписаниеОповещения - процедура, в которую необходимо передать управление после закрытия +// формы отправки письма. +// +Процедура СоздатьНовоеПисьмо(ПараметрыОтправки = Неопределено, ОповещениеОЗакрытииФормы = Неопределено) Экспорт + + Если ПараметрыОтправки = Неопределено Тогда + ПараметрыОтправки = Новый Структура; + КонецЕсли; + ПараметрыОтправки.Вставить("ОповещениеОЗакрытииФормы", ОповещениеОЗакрытииФормы); + + ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьНовоеПисьмоПроверкаУчетнойЗаписиВыполнена", ЭтотОбъект, ПараметрыОтправки); + ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + +КонецПроцедуры + +// Если у пользователя нет настроенной учетной записи для отправки писем, то в зависимости от прав либо показывает +// помощник настройки новой учетной записи, либо выводит сообщение о невозможности отправки. +// Предназначена для сценариев, в которых требуется выполнить настройку учетной записи перед запросом дополнительных +// параметров отправки. +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещение - процедура, в которую необходимо передать выполнение кода после проверки. +// +Процедура ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОбработчикРезультата) Экспорт + Если РаботаСПочтовымиСообщениямиВызовСервера.ЕстьДоступныеУчетныеЗаписиДляОтправки() Тогда + ВыполнитьОбработкуОповещения(ОбработчикРезультата, Истина); + Иначе + Если РаботаСПочтовымиСообщениямиВызовСервера.ДоступноПравоДобавленияУчетныхЗаписей() Тогда + ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПомощникНастройкиУчетнойЗаписи", + Новый Структура("КонтекстныйРежим", Истина), , , , , ОбработчикРезультата); + Иначе + ТекстСообщения = НСтр("ru = 'Для отправки письма требуется настройка учетной записи электронной почты.'"); + ПоказатьПредупреждение(ОбработчикРезультата, ТекстСообщения); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Устарела. Следует использовать СоздатьНовоеПисьмо. +// // Интерфейсная клиентская функция, поддерживающая упрощенный вызов формы редактирования // нового письма. // Параметры @@ -24,7 +94,7 @@ // Тема - Строка - тема письма // Текст - Строка - тело письма // -// СписокФайлов - СписокЗначений, где +// Вложения - СписокЗначений, где // представление - строка - наименование вложения // значение - ДвоичныеДанные - двоичные данные вложения // - Строка - адрес файла во временном хранилище @@ -34,43 +104,63 @@ // ПисьмоДолжноСохраняться - булево - должно ли письмо сохраняться (используется только // если встроена подсистема Взаимодействия) // -Процедура ОткрытьФормуОтправкиПочтовогоСообщения(Знач Отправитель = Неопределено, - Знач Получатель = Неопределено, - Знач Тема = "", - Знач Текст = "", - Знач СписокФайлов = Неопределено, - Знач УдалятьФайлыПослеОтправки = Ложь, - Знач ПисьмоДолжноСохраняться = Истина) Экспорт +Процедура ОткрытьФормуОтправкиПочтовогоСообщения(Знач Отправитель = Неопределено, Знач Получатель = Неопределено, Знач Тема = "", + Знач Текст = "", Знач Вложения = Неопределено, Знач УдалятьФайлыПослеОтправки = Ложь, Знач ПисьмоДолжноСохраняться = Истина) Экспорт - Если Не ЭлектроннаяПочтаВызовСервера.ЕстьДоступныеУчетныеЗаписиДляОтправки() Тогда - ТекстСообщения = НСтр("ru = 'Для отправки письма требуется настройка учетной записи электронной почты.'"); - ПоказатьПредупреждение(, ТекстСообщения); + ПараметрыОтправки = Новый Структура; + ПараметрыОтправки.Вставить("Отправитель", Отправитель); + ПараметрыОтправки.Вставить("Получатель", Получатель); + ПараметрыОтправки.Вставить("Тема", Тема); + ПараметрыОтправки.Вставить("Текст", Текст); + ПараметрыОтправки.Вставить("Вложения", Вложения); + ПараметрыОтправки.Вставить("УдалятьФайлыПослеОтправки", УдалятьФайлыПослеОтправки); + ПараметрыОтправки.Вставить("ПисьмоДолжноСохраняться", ПисьмоДолжноСохраняться); + + СоздатьНовоеПисьмо(ПараметрыОтправки); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Продолжение процедуры СоздатьНовоеПисьмо. +Процедура СоздатьНовоеПисьмоПроверкаУчетнойЗаписиВыполнена(УчетнаяЗаписьНастроена, ПараметрыОтправки) Экспорт + Перем Отправитель, Получатель, Вложения, Тема, Текст, УдалятьФайлыПослеОтправки; + + Если УчетнаяЗаписьНастроена <> Истина Тогда Возврат; КонецЕсли; - + + ПараметрыОтправки.Свойство("Отправитель", Отправитель); + ПараметрыОтправки.Свойство("Получатель", Получатель); + ПараметрыОтправки.Свойство("Тема", Тема); + ПараметрыОтправки.Свойство("Текст", Текст); + ПараметрыОтправки.Свойство("Вложения", Вложения); + ПараметрыОтправки.Свойство("УдалятьФайлыПослеОтправки", УдалятьФайлыПослеОтправки); + + ОповещениеОЗакрытииФормы = ПараметрыОтправки.ОповещениеОЗакрытииФормы; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, - Получатель, Тема, Текст, СписокФайлов); + Получатель, Тема, Текст, Вложения, ОповещениеОЗакрытииФормы); Иначе ОткрытьПростуюФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, - Тема,Текст, СписокФайлов, УдалятьФайлыПослеОтправки); + Тема,Текст, Вложения, УдалятьФайлыПослеОтправки, ОповещениеОЗакрытииФормы); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - // Интерфейсная клиентская функция, поддерживающая упрощенный вызов простой // формы редактирования нового письма. При отправке письма через простую // форму сообщения не сохраняются в информационной базе. // -// Параметры см. к функции ОткрытьФормуОтправкиПочтовогоСообщения +// Параметры см. в описании функции СоздатьНовоеПисьмо. // Процедура ОткрытьПростуюФормуОтправкиПочтовогоСообщения(Отправитель, - Получатель, Тема,Текст, СписокФайлов, УдалятьФайлыПослеОтправки) Экспорт + Получатель, Тема,Текст, СписокФайлов, УдалятьФайлыПослеОтправки, ОписаниеОповещенияОЗакрытии) ПараметрыПисьма = Новый Структура; @@ -81,8 +171,7 @@ ПараметрыПисьма.Вставить("Вложения", СписокФайлов); ПараметрыПисьма.Вставить("УдалятьФайлыПослеОтправки", УдалятьФайлыПослеОтправки); - ОткрытьФорму("ОбщаяФорма.ОтправкаСообщения", ПараметрыПисьма); - + ОткрытьФорму("ОбщаяФорма.ОтправкаСообщения", ПараметрыПисьма, , , , , ОписаниеОповещенияОЗакрытии); КонецПроцедуры // Выполняет проверку учетной записи. @@ -97,7 +186,7 @@ Состояние(НСтр("ru = 'Проверка учетной записи'"),,НСтр("ru = 'Выполняется проверка учетной записи. Подождите...'")); - Если ЭлектроннаяПочтаВызовСервера.ПарольЗадан(УчетнаяЗапись) Тогда + Если РаботаСПочтовымиСообщениямиВызовСервера.ПарольЗадан(УчетнаяЗапись) Тогда ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(Неопределено, УчетнаяЗапись, Неопределено); Иначе ПараметрыФормы = Новый Структура; @@ -110,13 +199,13 @@ // Проверка учетной записи электронной почты. // -// см. описание процедуры ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. +// см. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОбработчикРезультата, УчетнаяЗапись, ПарольПараметр) Экспорт СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; - ЭлектроннаяПочтаВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + РаботаСПочтовымиСообщениямиВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПоказатьПредупреждение(ОбработчикРезультата, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -131,3 +220,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl similarity index 64% rename from SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl rename to SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index 100d04200..b9986a6cd 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -3,169 +3,55 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныеПроцедурыИФункции -// Функция для отправки сообщений. Проверяет корректность заполнения учетной -// записи и вызывает функцию, реализующую механику отправки. -// -// см. параметры функции ОтправитьСообщение -// -// Примечание: параметр ПараметрыПисьма.Вложения может содержать вместо двоичных данных адреса во -// временном хранилище, по которым хранятся эти данные. -// -Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, - Знач ПараметрыПисьма, - Знач Соединение = Неопределено) Экспорт +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") - ИЛИ НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда - ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'"); + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); КонецЕсли; - Если ПараметрыПисьма = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'"); - КонецЕсли; + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); - ТипЗнчКому = ?(ПараметрыПисьма.Свойство("Кому"), ТипЗнч(ПараметрыПисьма.Кому), Неопределено); - ТипЗнчКопии = ?(ПараметрыПисьма.Свойство("Копии"), ТипЗнч(ПараметрыПисьма.Копии), Неопределено); - ТипЗнчСлепыеКопии = ?(ПараметрыПисьма.Свойство("СлепыеКопии"), ТипЗнч(ПараметрыПисьма.СлепыеКопии), Неопределено); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); - Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И ТипЗнчСлепыеКопии = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'"); - КонецЕсли; + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); - Если ТипЗнчКому = Тип("Строка") Тогда - ПараметрыПисьма.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); - ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда - ПараметрыПисьма.Вставить("Кому", Новый Массив); - КонецЕсли; - - Если ТипЗнчКопии = Тип("Строка") Тогда - ПараметрыПисьма.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Копии); - ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда - ПараметрыПисьма.Вставить("Копии", Новый Массив); - КонецЕсли; - - Если ТипЗнчСлепыеКопии = Тип("Строка") Тогда - ПараметрыПисьма.СлепыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СлепыеКопии); - ИначеЕсли ТипЗнчСлепыеКопии <> Тип("Массив") Тогда - ПараметрыПисьма.Вставить("СлепыеКопии", Новый Массив); - КонецЕсли; - - Если ПараметрыПисьма.Свойство("АдресОтвета") И ТипЗнч(ПараметрыПисьма.АдресОтвета) = Тип("Строка") Тогда - ПараметрыПисьма.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.АдресОтвета); - КонецЕсли; - - Если ПараметрыПисьма.Свойство("Вложения") Тогда - Для Каждого КлючИЗначение Из ПараметрыПисьма.Вложения Цикл - Вложение = КлючИЗначение.Значение; - Если ПривестиВложениеДляВставкиВПисьмо(Вложение) Тогда - ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, Вложение); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Возврат ОтправитьСообщение(УчетнаяЗапись, ПараметрыПисьма,Соединение); - -КонецФункции +КонецПроцедуры -// Функция для загрузки сообщений. Проверяет корректность заполнения учетной -// записи и вызывает функцию, реализующую механику загрузки сообщений. -// -// параметры к функции см. в функции ЗагрузитьСообщения. +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. // -Функция ЗагрузитьПочтовыеСообщения(Знач УчетнаяЗапись, - Знач ПараметрыЗагрузки = Неопределено) Экспорт - - ИспользоватьДляПолучения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ИспользоватьДляПолучения"); - Если НЕ ИспользоватьДляПолучения Тогда - ВызватьИсключение НСтр("ru = 'Учетная запись не предназначена для получения сообщений.'"); - КонецЕсли; - - Если ПараметрыЗагрузки = Неопределено Тогда - ПараметрыЗагрузки = Новый Структура; - КонецЕсли; - - Результат = ЗагрузитьСообщения(УчетнаяЗапись, ПараметрыЗагрузки); - - Возврат Результат; - -КонецФункции - -// Получает ссылку на учетную запись по виду назначения учетной записи. // Параметры: -// ВидНазначенияУчетнойЗаписи - Перечисления.ВидыНазначенияУчетныхЗаписей - -// вид назначения учетной записи -// Возвращаемое значение: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка -// на описание учетной записи +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). // -Функция ПолучитьСистемнуюУчетнуюЗапись() Экспорт - - Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты; - -КонецФункции +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт -// Получить доступные учетные записи электронной почты -// Параметры: -// ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту -// ДляПолучения - Булево - Если установлено Истина, то будут выбирать только записи, по которым можно получать почту -// ВключатьСистемнуюУчетнуюЗапись - Булево - включать системную учетную запись, если доступна -// -// Возвращаемое значение: -// ДоступныеУчетныеЗаписи - ТаблицаЗначений - С колонками: -// Ссылка - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - Ссылка на учетную запись -// Наименование - Строка - Наименование учетной записи -// Адрес - Строка - Адрес электронной почты -// -Функция ПолучитьДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, - Знач ДляПолучения = Неопределено, - Знач ВключатьСистемнуюУчетнуюЗапись = Истина) Экспорт - - Если Не ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда - Возврат Новый ТаблицаЗначений; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + Возврат; КонецЕсли; - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, - | УчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК Адрес - |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - |ГДЕ"; - - Если ДляОтправки <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + " - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки = &ДляОтправки"; - КонецЕсли; - - Если ДляПолучения <> Неопределено Тогда - Если ДляОтправки <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + " - | И"; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения = &ДляПолучения"; - КонецЕсли; + РазрешенияУчетныхЗаписей = Справочники.УчетныеЗаписиЭлектроннойПочты.РазрешенияУчетныхЗаписей(); + Для Каждого ОписаниеРазрешений Из РазрешенияУчетныхЗаписей Цикл + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(ОписаниеРазрешений.Значение, ОписаниеРазрешений.Ключ)); + КонецЦикла; - Если НЕ ВключатьСистемнуюУчетнуюЗапись Тогда - ТекстЗапроса =ТекстЗапроса + " - | И УчетныеЗаписиЭлектроннойПочты.Ссылка <> Значение(Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты)"; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("ДляОтправки", ДляОтправки); - Запрос.Параметры.Вставить("ДляПолучения", ДляПолучения); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +КонецПроцедуры // Преобразовывает внутренние форматы вложений к двоичным данным. // @@ -203,7 +89,7 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("Ссылка", ПолучитьСистемнуюУчетнуюЗапись()); + Запрос.Параметры.Вставить("Ссылка", РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись()); Если Запрос.Выполнить().Пустой() Тогда Возврат Ложь; КонецЕсли; @@ -327,7 +213,6 @@ КонецЦикла; КонецЕсли; - // получение реквизитов отправителя РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты"); @@ -338,12 +223,22 @@ // добавляем вложения к письму Если Вложения <> Неопределено Тогда - Для Каждого ЭлементВложение Из Вложения Цикл - Если ТипЗнч(ЭлементВложение.Значение) = Тип("Структура") Тогда - НовоеВложение = Письмо.Вложения.Добавить(ЭлементВложение.Значение.ДвоичныеДанные, ЭлементВложение.Ключ); - НовоеВложение.Идентификатор = ЭлементВложение.Значение.Идентификатор; - Иначе - Письмо.Вложения.Добавить(ЭлементВложение.Значение, ЭлементВложение.Ключ); + Для Каждого Вложение Из Вложения Цикл + Если ТипЗнч(Вложение) = Тип("Структура") Тогда + НовоеВложение = Письмо.Вложения.Добавить(ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), Вложение.Представление); + Если Не ПустаяСтрока(Вложение.Кодировка) Тогда + НовоеВложение.Кодировка = Вложение.Кодировка; + КонецЕсли; + Иначе // поддержка обратной совместимости с 2.2.1 + Если ТипЗнч(Вложение.Значение) = Тип("Структура") Тогда + НовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение.ДвоичныеДанные, Вложение.Ключ); + НовоеВложение.Идентификатор = Вложение.Значение.Идентификатор; + Если Вложение.Значение.Свойство("Кодировка") Тогда + НовоеВложение.Кодировка = Вложение.Значение.Кодировка; + КонецЕсли; + Иначе + Письмо.Вложения.Добавить(Вложение.Значение, Вложение.Ключ); + КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; @@ -410,9 +305,9 @@ Если ТипЗнч(Соединение) <> Тип("ИнтернетПочта") Тогда ПараметрыПисьма.Свойство("Пароль", Пароль); - Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись, Пароль); - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); + Соединение = Новый ИнтернетПочта; + Соединение.Подключиться(Профиль); КонецЕсли; Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения); @@ -464,7 +359,7 @@ // данные и их тексты в виде двоичных данных, рекурсивно // Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, - Знач ПараметрыЗагрузки = Неопределено) + Знач ПараметрыЗагрузки = Неопределено) Экспорт // Используется для проверки возможности входа на почтовый ящик Перем РежимТестирования; @@ -490,11 +385,7 @@ ПолучениеЗаголовков = Ложь; КонецЕсли; - Если ПараметрыЗагрузки.Свойство("Пароль") Тогда - Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись, ПараметрыЗагрузки.Пароль); - Иначе - Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись); - КонецЕсли; + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина); Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы; @@ -506,7 +397,12 @@ Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); + Протокол = ПротоколИнтернетПочты.POP3; + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда + Протокол = ПротоколИнтернетПочты.IMAP; + КонецЕсли; + + Соединение.Подключиться(Профиль, Протокол); Если РежимТестирования ИЛИ ПолучениеЗаголовков Тогда @@ -590,92 +486,68 @@ КонецФункции -// По переданной ссылке на учетную запись формирует профиль почтового соединения +// Создает профиль переданной учетной записи для подключения к почтовому серверу. // -// Параметры -// УчетнаяЗапись - СправочникСсылка.УчетнаяЗаписьЭлектроннойПочты - -// параметры профиля в виде соответствия +// Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись. // -// Возвращаемое значение -// Почтовый профиль (тип ИнтернетПочтовыйПрофиль) +// Возвращаемое значение: +// ИнтернетПочтовыйПрофиль - профиль учетной записи; +// Неопределено - не удалось получить учетную запись по ссылке. // -Функция СформироватьИнтернетПрофиль(Знач УчетнаяЗапись, - Знач Пароль = Неопределено, - Знач ФормироватьSMTPПрофиль = Истина, - Знач ФормироватьPOP3Профиль = Истина) Экспорт +Функция ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ДляПолучения = Ложь) Экспорт - НастройкиСоединения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - УчетнаяЗапись, - "Пользователь, - |Пароль, - |ВремяОжидания, - |СерверИсходящейПочтыSMTP, - |ПортSMTP, - |SMTPАутентификация, - |СпособSMTPАутентификации, - |ПользовательSMTP, - |ПарольSMTP, - |СерверВходящейПочтыPOP3, - |ПортPOP3, - |СпособPOP3Аутентификации"); - - Профиль = Новый ИнтернетПочтовыйПрофиль; - Профиль.Пользователь = НастройкиСоединения.Пользователь; - Профиль.ВремяОжидания = НастройкиСоединения.ВремяОжидания; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераIMAP, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортIMAP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLIMAP, + | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательIMAP, + | УчетныеЗаписиЭлектроннойПочты.Пароль КАК ПарольIMAP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияIMAP, + | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераPOP3, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортPOP3, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLPOP3, + | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК Пользователь, + | УчетныеЗаписиЭлектроннойПочты.Пароль КАК Пароль, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияPOP3, + | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК АдресСервераSMTP, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP, + | УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой КАК POP3ПередSMTP, + | УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP, + | УчетныеЗаписиЭлектроннойПочты.ПарольSMTP КАК ПарольSMTP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ТолькоЗащищеннаяАутентификацияSMTP, + | УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут, + | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка"; - Если ЗначениеЗаполнено(Пароль) Тогда - Профиль.Пароль = Пароль; - Иначе - Профиль.Пароль = НастройкиСоединения.Пароль; - КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); + Выборка = Запрос.Выполнить().Выбрать(); - Если ФормироватьSMTPПрофиль Тогда - Профиль.АдресСервераSMTP = НастройкиСоединения.СерверИсходящейПочтыSMTP; - Профиль.ПортSMTP = НастройкиСоединения.ПортSMTP; - - Если НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.АналогичноPOP3 Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию; - Профиль.ПользовательSMTP = НастройкиСоединения.Пользователь; - Профиль.ПарольSMTP = Профиль.Пароль; - ИначеЕсли НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами Тогда - - Если НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.CramMD5 Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.CramMD5; - ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Login Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login; - ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Plain Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Plain; - ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.БезАутентификации Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; + Результат = Неопределено; + Если Выборка.Следующий() Тогда + СписокСвойств = ""; + Если ДляПолучения Тогда + Если Выборка.Протокол = "IMAP" Тогда + СписокСвойств = "АдресСервераIMAP,ПортIMAP,ИспользоватьSSLIMAP,ПользовательIMAP,ПарольIMAP,ТолькоЗащищеннаяАутентификацияIMAP"; Иначе - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию; + СписокСвойств = "АдресСервераPOP3,ПортPOP3,ИспользоватьSSLPOP3,Пользователь,Пароль,ТолькоЗащищеннаяАутентификацияPOP3"; КонецЕсли; - - Профиль.ПользовательSMTP = НастройкиСоединения.ПользовательSMTP; - Профиль.ПарольSMTP = НастройкиСоединения.ПарольSMTP; - - ИначеЕсли НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.POP3ПередSMTP Тогда - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; - Профиль.POP3ПередSMTP = Истина; Иначе - Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; + СписокСвойств = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP,POP3ПередSMTP,ПользовательSMTP,ПарольSMTP,ТолькоЗащищеннаяАутентификацияSMTP"; КонецЕсли; - КонецЕсли; - - Если ФормироватьPOP3Профиль Тогда - Профиль.АдресСервераPOP3 = НастройкиСоединения.СерверВходящейПочтыPOP3; - Профиль.ПортPOP3 = НастройкиСоединения.ПортPOP3; + СписокСвойств = СписокСвойств + ",Таймаут"; - Если НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда - Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.APOP; - ИначеЕсли НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда - Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.CramMD5; - Иначе - Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная; - КонецЕсли; + Результат = Новый ИнтернетПочтовыйПрофиль; + ЗаполнитьЗначенияСвойств(Результат, Выборка, СписокСвойств); КонецЕсли; - Возврат Профиль; + Возврат Результат; КонецФункции @@ -869,7 +741,11 @@ Обработчик = Обработчики.Добавить(); Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "ЭлектроннаяПочта.ЗаполнитьСистемнуюУчетнуюЗапись"; + Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьСистемнуюУчетнуюЗапись"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьНовыеРеквизитыУчетныхЗаписей"; + Обработчик.Версия = "2.2.2.5"; КонецПроцедуры @@ -877,12 +753,50 @@ // Процедура ЗаполнитьСистемнуюУчетнуюЗапись() Экспорт - УчетнаяЗапись = ПолучитьСистемнуюУчетнуюЗапись().ПолучитьОбъект(); + УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись().ПолучитьОбъект(); УчетнаяЗапись.ЗаполнитьОбъектЗначениямиПоУмолчанию(); ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); КонецПроцедуры +// Заполняет новые реквизиты справочника УчетныеЗаписиЭлектроннойПочты. +Процедура ЗаполнитьНовыеРеквизитыУчетныхЗаписей() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ""POP"" КАК ПротоколВходящейПочты, + | ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.SMTPАутентификация = ЗНАЧЕНИЕ(Перечисление.ВариантыSMTPАутентификации.POP3ПередSMTP) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ТребуетсяВходНаСерверПередОтправкой, + | ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.СпособPOP3Аутентификации <> ЗНАЧЕНИЕ(Перечисление.СпособыPOP3Аутентификации.Обычная) + | И УчетныеЗаписиЭлектроннойПочты.СпособPOP3Аутентификации <> ЗНАЧЕНИЕ(Перечисление.СпособыPOP3Аутентификации.ПустаяСсылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИспользоватьБезопасныйВходНаСерверВходящейПочты, + | ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.СпособSMTPАутентификации = ЗНАЧЕНИЕ(Перечисление.СпособыSMTPАутентификации.CramMD5) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИспользоватьБезопасныйВходНаСерверИсходящейПочты, + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = Ложь"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + УчетнаяЗапись = Выборка.Ссылка.ПолучитьОбъект(); + ЗаполнитьЗначенияСвойств(УчетнаяЗапись, Выборка, , "Ссылка"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // // Проверка учетной записи @@ -951,8 +865,7 @@ // если Ложь - ошибка при входе на сервер pop3 // ключ "СообщениеОбОшибке" - строка - если статус Ложь - содержит сообщение об ошибке // -Процедура ПроверитьВозможностьОтправкиТестовогоСообщения(Знач УчетнаяЗапись, - Знач Пароль = Неопределено) +Процедура ПроверитьВозможностьОтправкиТестовогоСообщения(Знач УчетнаяЗапись, Знач Пароль = Неопределено) ПараметрыПисьма = Новый Структура; @@ -964,7 +877,7 @@ КонецЕсли; Попытка - ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,, УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -986,8 +899,7 @@ // если Ложь - ошибка при входе на сервер pop3 // ключ "СообщениеОбОшибке" - строка - если статус Ложь - содержит сообщение об ошибке // -Процедура ПроверитьВходНаСерверВходящейЭлектроннойПочты(Знач УчетнаяЗапись, - Знач Пароль = Неопределено) +Процедура ПроверитьВходНаСерверВходящейЭлектроннойПочты(Знач УчетнаяЗапись, Знач Пароль = Неопределено) ПараметрыЗагрузки = Новый Структура("РежимТестирования", Истина); @@ -996,7 +908,7 @@ КонецЕсли; Попытка - ЗагрузитьПочтовыеСообщения(УчетнаяЗапись, ПараметрыЗагрузки); + РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(УчетнаяЗапись, ПараметрыЗагрузки); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,, УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1008,3 +920,147 @@ Функция СобытиеЖурналаРегистрации() Возврат НСтр("ru = 'Проверка учетной записи электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции + +// РИБ + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + +КонецПроцедуры + +// Процедура является обработчиком событий ПриПолученииДанныхОтГлавного и ПриПолученииДанныхОтПодчиненного, возникающих +// при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание соответствующих обработчиков событий в синтаксис-помощнике. +// +Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) + + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.УчетныеЗаписиЭлектроннойПочты") Тогда + Если ЭлементДанных.ЭтоНовый() Тогда + ЭлементДанных.ИспользоватьДляПолучения = Ложь; + ЭлементДанных.ИспользоватьДляОтправки = Ложь; + Иначе + ЭлементДанных.ИспользоватьДляПолучения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ИспользоватьДляПолучения"); + ЭлементДанных.ИспользоватьДляОтправки = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ИспользоватьДляОтправки"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Отключает все учетные записи. Используется при начальной настройке узла РИБ. +Процедура ОтключитьИспользованиеУчетныхЗаписей() Экспорт + ТекстЗапроса = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | (УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки + | ИЛИ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения)"; + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + УчетнаяЗапись = Выборка.Ссылка.ПолучитьОбъект(); + УчетнаяЗапись.ИспользоватьДляОтправки = Ложь; + УчетнаяЗапись.ИспользоватьДляПолучения = Ложь; + УчетнаяЗапись.ОбменДанными.Загрузка = Истина; + УчетнаяЗапись.Записать(); + КонецЦикла; +КонецПроцедуры + +// Управление доступом + +// Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. +// Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректные сведения. +// +// Обязательно требуется заполнить только виды доступа, используемые +// в шаблонах ограничения доступа явно, а виды доступа, используемые +// в наборах значений доступа могут быть получены из текущего состояния +// регистра сведений НаборыЗначенийДоступа. +// +// Для автоматической подготовки содержимого процедуры следует +// воспользоваться инструментами разработчика для подсистемы +// Управление доступом. +// +// Параметры: +// Описание - Строка, многострочная строка формата <Таблица>.<Право>.<ВидДоступа>[.Таблица объекта] +// Например, Документ.ПриходнаяНакладная.Чтение.Организации +// Документ.ПриходнаяНакладная.Чтение.Контрагенты +// Документ.ПриходнаяНакладная.Изменение.Организации +// Документ.ПриходнаяНакладная.Изменение.Контрагенты +// Документ.ЭлектронныеПисьма.Чтение.Объект.Документ.ЭлектронныеПисьма +// Документ.ЭлектронныеПисьма.Изменение.Объект.Документ.ЭлектронныеПисьма +// Документ.Файлы.Чтение.Объект.Справочник.ПапкиФайлов +// Документ.Файлы.Чтение.Объект.Документ.ЭлектронноеПисьмо +// Документ.Файлы.Изменение.Объект.Справочник.ПапкиФайлов +// Документ.Файлы.Изменение.Объект.Документ.ЭлектронноеПисьмо +// Вид доступа Объект предопределен, как литерал, его нет в предопределенных элементах +// ПланыВидовХарактеристик.ВидыДоступа. Этот вид доступа используется в шаблонах ограничений доступа, +// как "ссылка" на другой объект, по которому ограничивается таблица. +// Когда вид доступа "Объект" задан, также требуется задать типы таблиц, которые используются +// для этого вида доступа. Т.е. перечислить типы, которые соответствующие полю, +// использованному в шаблоне ограничения доступа в паре с видом доступа "Объект". +// При перечислении типов по виду доступа "Объект" нужно перечислить только те типы поля, +// которые есть у поля РегистрыСведений.НаборыЗначенийДоступа.Объект, остальные типы лишние. +// +Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + + Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("УчетныеЗаписиЭлектроннойПочты") Тогда + + Описание = Описание + + " + |Справочник.УчетныеЗаписиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты + |"; + + КонецЕсли; + +КонецПроцедуры + +// Заполняет виды доступа, используемые в ограничениях прав доступа. +// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. +// Их можно удалить, если они не требуются для ограничения прав доступа. +// +// Параметры: +// ВидыДоступа - ТаблицаЗначений с полями: +// - Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// - Представление - Строка - представляет вид доступа в профилях и группах доступа. +// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). +// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), +// можно выбрать несколько групп значений (Групп доступа номенклатуры). +// +Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "УчетныеЗаписиЭлектроннойПочты"; + ВидДоступа.Представление = НСтр("ru = 'Учетные записи электронной почты'"); + ВидДоступа.ТипЗначений = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/РаботаСПочтовымиСообщениямиСлужебный.mdo similarity index 66% rename from SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo rename to SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/РаботаСПочтовымиСообщениямиСлужебный.mdo index ea066ffa8..4be563038 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/РаботаСПочтовымиСообщениямиСлужебный.mdo @@ -1,9 +1,9 @@ - ЭлектроннаяПочта + РаботаСПочтовымиСообщениямиСлужебный ru - Электронная почта + Работа с почтовыми сообщениями служебный true true diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index ce6409e52..01f3ad109 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Создает карточку Файла в БД вместе с версией // Параметры @@ -75,7 +74,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -111,3 +109,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 7855f83ac..74a497f0c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Процедуры и функция для работы со сканером @@ -48,6 +47,46 @@ КонецПроцедуры +// Создает новый файл интерактивно. +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещения - Необязательный. Описание процедуры, принимающей результат работы метода. +// ВладелецФайла - ЛюбаяСсылка - Необязательный. Определяет группу, в которой создается Элемент. +// Если группа неизвестна в момент вызова этого метода - там будет Неопределено. +// ФормаВладелец - УправляемаяФорма - Необязательный. Форма, из которой вызвано создание файла. +// РежимСоздания - Необязательный. Режим создания файла. +// - Неопределено - Значение по умолчанию. Показать диалог выбора режима создания файла. +// - Число - Создать файл указанным способом: +// * 1 - из шаблона (копированием другого файла), +// * 2 - с диска (из файловой системы клиента), +// * 3 - со сканера. +// НеОткрыватьКарточку - Булево - Необязательный. Действие после создания. +// * Ложь - Значение по умолчанию. Открывать карточку файла после создания. +// * Истина - Не открывать карточку файла после создания. +// +// Возвращаемое значение: +// Неопределено +// +Процедура ДобавитьФайл( + ОбработчикРезультата = Неопределено, + ВладелецФайла = Неопределено, + ФормаВладелец = Неопределено, + РежимСоздания = Неопределено, + НеОткрыватьКарточку = Ложь) Экспорт + + Если РежимСоздания = Неопределено Тогда + РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, , НеОткрыватьКарточку); + Иначе + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); + ПараметрыВыполнения.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыВыполнения.Вставить("ФормаВладелец", ФормаВладелец); + ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточку); + РаботаСФайламиСлужебныйКлиент.ДобавитьПослеВыбораРежимаСоздания(РежимСоздания, ПараметрыВыполнения); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Дополнительные процедуры и функции для работы с файлами @@ -119,3 +158,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl index eb22110fa..1694dd4f6 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Вызывается при ошибке захвате файла // Параметры @@ -14,3 +13,5 @@ Процедура ПриОшибкеЗахватаФайла(ДанныеФайла, СтандартнаяОбработка) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index 0990f5e84..f71952c33 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Определяет, можно ли занять файл и, если нет, то формирует строку ошибки // @@ -18,7 +17,6 @@ Возврат Ложь; КонецЕсли; - Если ДанныеФайла.Редактирует.Пустая() Или ДанныеФайла.РедактируетТекущийПользователь Тогда @@ -106,3 +104,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index b57efaead..26beb835f 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Можно ли занять данный файл. // @@ -35,8 +34,8 @@ // ВерсииФайлов в конфигурации. // // Параметры: -// НовыйФайл - СправочникСcылка.Файлы - ссылка на новый файл, который надо заполнить -// ИсходныйФайл - СправочникСcылка.Файлы - ссылка на исходный файл, откуда надо скопировать реквизиты +// НовыйФайл - СправочникСсылка.Файлы - ссылка на новый файл, который надо заполнить +// ИсходныйФайл - СправочникСсылка.Файлы - ссылка на исходный файл, откуда надо скопировать реквизиты // Процедура ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл) Экспорт @@ -61,3 +60,5 @@ Процедура ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index a8c629c1b..9b1138b9e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -176,7 +175,7 @@ Иначе // Копируем файл из тома на диске в каталог создания начального образа - ИмяКаталогаФайлов = ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог"); + ИмяКаталогаФайлов = Строка(ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог")); ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; УникальныйИдентификатор = ЭлементДанных.Ссылка.УникальныйИдентификатор(); @@ -556,8 +555,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -875,7 +875,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -908,26 +908,26 @@ СписокКодировок = Новый СписокЗначений; - СписокКодировок.Добавить("ibm852", "IBM852 (Центральноевропейская DOS)"); - СписокКодировок.Добавить("ibm866", "IBM866 (Кириллица DOS)"); - СписокКодировок.Добавить("iso-8859-1", "ISO-8859-1 (Западноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-2", "ISO-8859-2 (Центральноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-3", "ISO-8859-3 (Латиница 3 ISO)"); - СписокКодировок.Добавить("iso-8859-4", "ISO-8859-4 (Балтийская ISO)"); - СписокКодировок.Добавить("iso-8859-5", "ISO-8859-5 (Кириллица ISO)"); - СписокКодировок.Добавить("iso-8859-7", "ISO-8859-7 (Греческая ISO)"); - СписокКодировок.Добавить("iso-8859-9", "ISO-8859-9 (Турецкая ISO)"); - СписокКодировок.Добавить("iso-8859-15", "ISO-8859-15 (Латиница 9 ISO)"); - СписокКодировок.Добавить("koi8-r", "KOI8-R (Кириллица KOI8-R)"); - СписокКодировок.Добавить("koi8-u", "KOI8-U (Кириллица KOI8-U)"); - СписокКодировок.Добавить("us-ascii", "US-ASCII США"); - СписокКодировок.Добавить("utf-8", "UTF-8 (Юникод UTF-8)"); - СписокКодировок.Добавить("windows-1250", "Windows-1250 (Центральноевропейская Windows)"); - СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)"); - СписокКодировок.Добавить("windows-1252", "Windows-1252 (Западноевропейская Windows)"); - СписокКодировок.Добавить("windows-1253", "Windows-1253 (Греческая Windows)"); - СписокКодировок.Добавить("windows-1254", "Windows-1254 (Турецкая Windows)"); - СписокКодировок.Добавить("windows-1257", "Windows-1257 (Балтийская Windows)"); + СписокКодировок.Добавить("ibm852", НСтр("ru = 'IBM852 (Центральноевропейская DOS)'")); + СписокКодировок.Добавить("ibm866", НСтр("ru = 'IBM866 (Кириллица DOS)'")); + СписокКодировок.Добавить("iso-8859-1", НСтр("ru = 'ISO-8859-1 (Западноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-2", НСтр("ru = 'ISO-8859-2 (Центральноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-3", НСтр("ru = 'ISO-8859-3 (Латиница 3 ISO)'")); + СписокКодировок.Добавить("iso-8859-4", НСтр("ru = 'ISO-8859-4 (Балтийская ISO)'")); + СписокКодировок.Добавить("iso-8859-5", НСтр("ru = 'ISO-8859-5 (Кириллица ISO)'")); + СписокКодировок.Добавить("iso-8859-7", НСтр("ru = 'ISO-8859-7 (Греческая ISO)'")); + СписокКодировок.Добавить("iso-8859-9", НСтр("ru = 'ISO-8859-9 (Турецкая ISO)'")); + СписокКодировок.Добавить("iso-8859-15", НСтр("ru = 'ISO-8859-15 (Латиница 9 ISO)'")); + СписокКодировок.Добавить("koi8-r", НСтр("ru = 'KOI8-R (Кириллица KOI8-R)'")); + СписокКодировок.Добавить("koi8-u", НСтр("ru = 'KOI8-U (Кириллица KOI8-U)'")); + СписокКодировок.Добавить("us-ascii", НСтр("ru = 'US-ASCII (США)'")); + СписокКодировок.Добавить("utf-8", НСтр("ru = 'UTF-8 (Юникод UTF-8)'")); + СписокКодировок.Добавить("windows-1250", НСтр("ru = 'Windows-1250 (Центральноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1251", НСтр("ru = 'windows-1251 (Кириллица Windows)'")); + СписокКодировок.Добавить("windows-1252", НСтр("ru = 'Windows-1252 (Западноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1253", НСтр("ru = 'Windows-1253 (Греческая Windows)'")); + СписокКодировок.Добавить("windows-1254", НСтр("ru = 'Windows-1254 (Турецкая Windows)'")); + СписокКодировок.Добавить("windows-1257", НСтр("ru = 'Windows-1257 (Балтийская Windows)'")); Возврат СписокКодировок; @@ -1155,3 +1155,5 @@ Возврат ПараметрыПриЗавершении; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 5e0b24cbb..b8d726ff7 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Создает новый файл по аналогии с указанным и возвращает ссылку на него // Параметры @@ -90,8 +89,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Освобождает файл // Параметры: @@ -1560,7 +1560,6 @@ КонецФункции - // Получает ДанныеФайла для файлов и помещает в МассивДанныхФайла // МассивФайлов - массив ссылок на файлы // МассивДанныхФайла - массив структур с данными файлов @@ -1574,7 +1573,6 @@ КонецПроцедуры - // Получает данные файла для открытия и делает заем (checkout) - для экономии вызовов //клиент сервер поместили ПолучитьДанныеФайлаДляОткрытия и ЗанятьФайл в одну функцию // Параметры @@ -1805,8 +1803,9 @@ ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); Исключение // запись в журнал регистрации + СсылкаНаФайл = ?(ФайлСсылка <> Неопределено, ФайлСсылка, ВерсияСсылка); СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), ФайлСсылка); + ИнформацияОбОшибке(), СсылкаНаФайл); ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Открытие файла'", @@ -1940,7 +1939,7 @@ Если НЕ ПустаяСтрока(РабочийКаталог) Тогда // Добавляем слэш в конце, если его нет - РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог); КонецЕсли; Возврат РабочийКаталог; @@ -2095,7 +2094,6 @@ // не добавляем записи в набор - чтобы все стереть НаборЗаписей.Записать(); - // для дочерних папок очищаем рабочие каталоги Запрос = Новый Запрос; Запрос.Текст = @@ -2467,7 +2465,7 @@ ТабМакет = Справочники.Файлы.ПолучитьМакет("МакетОтчета"); ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); - ОбластьЗаголовок.Параметры.Описание = "Файлы с ошибками:"; + ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Файлы с ошибками:'"); ТабДок.Вывести(ОбластьЗаголовок); ОбластьСтрока = ТабМакет.ПолучитьОбласть("Строка"); @@ -3114,7 +3112,6 @@ КонецЕсли; КонецЦикла; - Возврат Ложь; КонецФункции @@ -3807,7 +3804,7 @@ СообщениеОбОшибке); ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ВерсияСсылка.ПолноеНаименованиеВерсии + "." + ВерсияСсылка.Расширение); + ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); КонецПопытки; КонецЕсли; Иначе @@ -5063,3 +5060,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 9b0527ff4..4335cc2d8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Открывает форму папки со списком файлов. // @@ -70,8 +69,9 @@ Предупреждения.Добавить(ПредупреждениеПользователю); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Проверяет можно ли освободить Файл. // @@ -1896,7 +1896,7 @@ // Продолжение процедуры (см. выше). Процедура ОсвободитьФайлПослеОтветаНаВопросОтменаРедактирования(Ответ, ПараметрыВыполнения) Экспорт - Если ТипЗнч(Ответ) <> -1 Тогда + Если Ответ <> -1 Тогда Если Ответ = КодВозвратаДиалога.Да Тогда ПараметрыВыполнения.ПродолжитьРаботу = Истина; Иначе @@ -2208,7 +2208,6 @@ ФормаВозврата.Открыть(); - Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ПараметрыВыполнения.ХранитьВерсии Тогда @@ -2524,7 +2523,6 @@ ФормаВозврата.Открыть(); - Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ПараметрыВыполнения.ХранитьВерсии Тогда @@ -3593,8 +3591,7 @@ Если Не ПустаяСтрока(ПараметрыВыполнения.ИмяФайла) Тогда ПараметрыВыполнения.ПолноеИмяФайла = ПараметрыВыполнения.ИмяКаталога + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем( ПараметрыВыполнения.ИмяКаталога, - ПараметрыВыполнения.ИмяФайла, - ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПараметрыВыполнения.ИмяФайла); КонецЕсли; Если ПустаяСтрока(ПараметрыВыполнения.ИмяФайла) Тогда @@ -3675,8 +3672,7 @@ ПараметрыВыполнения.ПолноеИмяФайла = ПараметрыВыполнения.ИмяКаталога + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем( ПараметрыВыполнения.ИмяКаталога, - ПараметрыВыполнения.ИмяФайла, - ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПараметрыВыполнения.ИмяФайла); Если СтрДлина(ПараметрыВыполнения.ПолноеИмяФайла) <= ПараметрыВыполнения.МаксимальнаяДлинаПолногоПути Тогда // уложились в 260 символов Обработчик = Новый ОписаниеОповещения("ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПослеПереносаСодержимогоРабочегоКаталога", ЭтотОбъект, ПараметрыВыполнения); @@ -3728,7 +3724,7 @@ КонецЕсли; //ПутьКФайлу = ФайлНаДискеПоИмени.Путь; - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу); ПараметрыВыполнения.ПолноеИмяФайла = ПутьКФайлу + ПараметрыВыполнения.ИмяФайла; // могло смениться расширение ТекстПояснения = @@ -3954,11 +3950,11 @@ Если ПараметрыВыполнения.ПолноеИмяФайла = "" Тогда ПараметрыВыполнения.ПолноеИмяФайла = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца + ИмяФайла; Обработчик = Новый ОписаниеОповещения("ПолучитьФайлВерсииВРабочийКаталогПапкиПослеПроверкиДлиныПути", ЭтотОбъект, ПараметрыВыполнения); - ПроверитьМаксимальнуюДлинуПолногоПутиВРабочемКаталоге(Обработчик, ПараметрыВыполнения.ДанныеФайла, ПараметрыВыполнения.ПолноеИмяФайла, ИмяФайла) + ПроверитьМаксимальнуюДлинуПолногоПутиВРабочемКаталоге(Обработчик, ПараметрыВыполнения.ДанныеФайла, ПараметрыВыполнения.ПолноеИмяФайла, ИмяФайла); + Иначе + ПолучитьФайлВерсииВРабочийКаталогПапкиПродолжение(ПараметрыВыполнения); КонецЕсли; - ПолучитьФайлВерсииВРабочийКаталогПапкиПродолжение(ПараметрыВыполнения); - КонецПроцедуры // Продолжение процедуры (см. выше). @@ -4177,6 +4173,7 @@ ПараметрыВыполнения.НаЧтение, ПараметрыВыполнения.ИдентификаторФормы, ПараметрыВыполнения.ДополнительныеПараметры); + Возврат; КонецЕсли; // Получаем путь файла в рабочем каталоге - с проверкой на уникальность @@ -4452,8 +4449,8 @@ // Процедура КопироватьСодержимоеКаталога(Результат, КаталогИсточника, КаталогПриемника) - КаталогПриемника = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемника, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); - КаталогИсточника = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогИсточника, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + КаталогПриемника = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемника); + КаталогИсточника = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогИсточника); СоздатьКаталог(КаталогПриемника); @@ -4958,7 +4955,7 @@ Параметры = Новый Структура; Параметры.Вставить("МассивИменФайловСОшибками", ПараметрыВыполнения.МассивИменФайловСОшибками); Если ПараметрыВыполнения.РежимЗагрузки Тогда - Параметры.Вставить("Заголовок", "Отчет о загрузке файлов"); + Параметры.Вставить("Заголовок", НСтр("ru = 'Отчет о загрузке файлов'")); КонецЕсли; ОткрытьФорму("Справочник.Файлы.Форма.ФормаОтчета", Параметры); @@ -5192,7 +5189,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу); // Сохраним Файл из БД на диск Если ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь) Тогда @@ -5220,7 +5217,6 @@ КонецПопытки; КонецЕсли; - НовыйФайл = Новый Файл(ВыборФайла.ПолноеИмяФайла); НовыйФайл.УстановитьУниверсальноеВремяИзменения( @@ -6314,24 +6310,10 @@ //////////////////////////////////////////////////////////////////////////////// // Создает новый файл. -// Создает новый файл интерактивно. -// Происходит вызов диалога выбора режима создания Файла. +// Создает новый файл интерактивно с вызовом диалога выбора режима создания Файла. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено- Описание процедуры, принимающей результат работы метода. -// -// ВладелецФайла - определяет группу, в которой создается Элемент, если -// группа неизвестна в момент вызова этого метода - там будет Неопределено. -// -// ФормаВладелец - УправляемаяФорма из которой вызвано создание файла. -// -// РежимСоздания - Число: -// 1 - создать из шаблона, -// 2 - создать из файла, -// 3 - создать пустую карточку. -// -// НеОткрыватьКарточкуПослеСозданияИзФайла - Булево, когда Истина -// карточка файла не открывается после создания. +// см. РаботаСФайламиКлиент.ДобавитьФайл(). // Процедура ДобавитьФайл( ОбработчикРезультата, @@ -6356,20 +6338,18 @@ КонецПроцедуры -// Создает новый файл. +// Создает новый файл интерактивно указанным образом. // // Параметры: // РежимСоздания - Число - Режим создания файла. -// * 1 - Создать из шаблона. -// * 2 - Создать из файла. -// * 3 - Создать пустую карточку. -// ПараметрыДобавления - Структура: -// * ОбработчикРезультата - ОписаниеОповещения, Неопределено -// - Описание процедуры, принимающей результат работы метода. -// * ВладелецФайла - ЛюбаяСсылка - владелец файла. -// * ФормаВладелец - УправляемаяФорма из которой вызвано создание файла. -// * НеОткрыватьКарточкуПослеСозданияИзФайла - Булево -// - Истина когда карточка файла не открывается после создания. +// * 1 - из шаблона (копированием другого файла), +// * 2 - с диска (из файловой системы клиента), +// * 3 - со сканера. +// ПараметрыВыполнения - Структура - типы значений и описания см. в РаботаСФайламиКлиент.ДобавитьФайл(). +// * ОбработчикРезультата +// * ВладелецФайла +// * ФормаВладелец +// * НеОткрыватьКарточкуПослеСозданияИзФайла // Процедура ДобавитьПослеВыбораРежимаСоздания(РежимСоздания, ПараметрыВыполнения) Экспорт @@ -6808,7 +6788,9 @@ ПараметрыВыполнения.ДанныеФайла.Ссылка, ПолученныеДанныеФайла.ДвоичныеДанные, Результат); + ПараметрыВыполнения.Успех = Истина; + ОповеститьОбИзменении(ПараметрыВыполнения.ДанныеФайла.Ссылка); ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения); @@ -7082,7 +7064,7 @@ Если Рекурсивно = Истина Тогда НовыйПуть = Строка(ВыбранныйФайл.Путь); - НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайлов = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); @@ -7662,7 +7644,7 @@ Если Не ПустаяСтрока(ДанныеФайла.РабочийКаталогВладельца) Тогда ПолноеИмяФайла = ДанныеФайла.РабочийКаталогВладельца + ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение; Иначе - ПолноеИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПолноеИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла); КонецЕсли; КонецЕсли; @@ -7952,7 +7934,7 @@ Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяКаталога = ДиалогОткрытияФайла.Каталог; - ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога); // Создать каталог для файлов Попытка @@ -8040,7 +8022,7 @@ Если Рекурсивно Тогда НовыйПуть = Строка(ВыбранныйФайл.Путь); - НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); @@ -8255,7 +8237,6 @@ // Результат - Произвольный - Результат, который необходимо вернуть в Обработчик. // - // Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. Процедура ВернутьРезультатПослеПоказаПредупреждения(Обработчик, ТекстПредупреждения, Результат) Экспорт @@ -8376,3 +8357,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl index 97b017056..4bca6b774 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает форму, которая используется при создании нового файла // для выбора варианта создания @@ -33,3 +32,5 @@ Функция ФормаЭкспортаПапкиФайлСуществует() Экспорт Возврат ПолучитьФорму("Справочник.Файлы.Форма.ФайлСуществует"); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl index ad4f1ab88..58b4448e5 100644 --- a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl @@ -3,8 +3,7 @@ // Устаревший модуль. Будет удален в следующей редакции БСП. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Устаревший программный интерфейс. Будет удален в следующей редакции БСП. // Устарела. Будет удалена в следующей редакции БСП. @@ -16,3 +15,5 @@ Возврат РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index a1f4ae4aa..aca67410b 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Подготавливает параметры для функции ВыполнитьРассылку и выполняет ее. // @@ -313,7 +312,7 @@ // * ШаблонТекста - Строка - Тело письма // * ПараметрыПисьма - Структура - Параметры сообщения, // которые будут переданы подсистеме "РаботаСПочтовымиСообщениями" напрямую. -// Их обработку можно увидеть в модуле "ЭлектроннаяПочта", процедура "ОтправитьСообщение". +// Их обработку можно увидеть в модуле "РаботаСПочтовымиСообщениямиСлужебный", процедура "ОтправитьСообщение". // Подсистемой "РассылкаОтчетов" могут использоваться: // ** ТипТекста - ТипТекстаПочтовогоСообщения, Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем - // Тип текста письма. @@ -730,8 +729,68 @@ ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Добавление обработчиков служебных событий (подписок) + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныйМодуль = "РассылкаОтчетов"; + + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | РассылкиОтчетов.Ссылка, + | РассылкиОтчетов.ИспользоватьFTPРесурс, + | РассылкиОтчетов.FTPСервер, + | РассылкиОтчетов.FTPКаталог, + | РассылкиОтчетов.FTPПорт, + | РассылкиОтчетов.ИспользоватьСетевойКаталог, + | РассылкиОтчетов.СетевойКаталогWindows, + | РассылкиОтчетов.СетевойКаталогLinux + |ИЗ + | Справочник.РассылкиОтчетов КАК РассылкиОтчетов + |ГДЕ + | РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ + | И (РассылкиОтчетов.ИспользоватьСетевойКаталог = ИСТИНА + | ИЛИ РассылкиОтчетов.ИспользоватьFTPРесурс = ИСТИНА)"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Рассылка = Запрос.Выполнить().Выбрать(); + Пока Рассылка.Следующий() Цикл + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( + РазрешенияНаРесурсыСервера(Рассылка), Рассылка.Ссылка)); + + КонецЦикла; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов @@ -789,8 +848,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Выполнение регламентных заданий @@ -802,9 +862,7 @@ // Процедура ВыполнитьРассылкуПоРасписанию(Рассылка) Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); // Проверки Если НЕ Рассылка.ВыполнятьПоРасписанию Тогда @@ -1043,25 +1101,25 @@ // // Параметры, изменяемые в процессе работы метода: // ПараметрыОтчета - Структура - -// Заполняются для всех отчетов: +// Результат инициализации: +// * Инициализирован - Булево - Истина, если инициализация прошла успешно. +// * Ошибки - Строка - Текст ошибок. +// Свойства всех отчетов: // * Имя - Строка - Имя отчета. // * ЭтоВариант - Булево - Истина, если поставщик - справочник "ВариантыОтчетов". // * СКД - Булево - Истина, если отчет на базе СКД. // * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. // * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. -// Заполняются для отчетов на базе СКД: +// Свойства отчетов на базе СКД: // * СхемаКД - СхемаКомпоновкиДанных - // * КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - // * НастройкиКД - НастройкиКомпоновкиДанных - // * АдресСхемыКД - Строка - Адрес схемы компоновки данных во временном хранилище. -// Заполняются для произвольных отчетов: +// Свойства произвольных отчетов: // * ДоступныеРеквизиты - Структура - Имя и параметры реквизита. // ** <Имя реквизита> - Структура - Параметры реквизита. // *** Представление - Строка - Представление реквизита. // *** Тип - ОписаниеТипов - Тип реквизита. -// Результат инициализации: -// * Инициализирован - Булево - Истина, если инициализация прошла успешно. -// * Ошибки - Строка - Текст ошибок. // // Возвращаемое значение: // Булево - Истина, если инициализация прошла успешно (соответствует ПараметрыОтчета.Инициализирован). @@ -1183,8 +1241,13 @@ КлючВарианта = ПараметрыОтчета.Отчет.КлючВарианта; ВариантНастроекКД = ВариантыНастроекКД.Найти(КлючВарианта); Если ВариантНастроекКД = Неопределено Тогда + Если КлючВарианта = "" Тогда + Комментарий = НСтр("ru = 'Отчет ""%2"" не содержит настроек. Выберите один из его вариантов.'"); + Иначе + Комментарий = НСтр("ru = 'Предопределенный вариант ""%1"" не найден для отчета ""%2""'"); + КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Предопределенный вариант ""%1"" не найден для отчета ""%2""'"), , + Комментарий, , КлючВарианта, ПараметрыОтчета.Имя); Возврат ПараметрыОтчета.Инициализирован; @@ -1694,6 +1757,40 @@ КонецПроцедуры +// Формирует массив разрешений по данным рассылки отчетов. +Функция РазрешенияНаРесурсыСервера(Рассылка) Экспорт + Разрешения = Новый Массив; + Если Рассылка.ИспользоватьСетевойКаталог Тогда + Если ЗначениеЗаполнено(Рассылка.СетевойКаталогWindows) Тогда + Элемент = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + Рассылка.СетевойКаталогWindows, + Истина, + Истина, + НСтр("ru = 'Сетевой каталог для публикации отчетов с сервера Windows.'")); + Разрешения.Добавить(Элемент); + КонецЕсли; + Если ЗначениеЗаполнено(Рассылка.СетевойКаталогLinux) Тогда + Элемент = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + Рассылка.СетевойКаталогLinux, + Истина, + Истина, + НСтр("ru = 'Сетевой каталог для публикации отчетов с сервера Linux.'")); + Разрешения.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + Если Рассылка.ИспользоватьFTPРесурс Тогда + Если ЗначениеЗаполнено(Рассылка.FTPСервер) Тогда + Элемент = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + "FTP", + Рассылка.FTPСервер + Рассылка.FTPКаталог, + Рассылка.FTPПорт, + НСтр("ru = 'FTP ресурс для публикации отчетов.'")); + Разрешения.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + Возврат Разрешения; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции @@ -2184,7 +2281,7 @@ КонецФункции // Формирует список рассылки из списка получателей, подготавливает все параметры письма -// и передает управление подсистеме "ЭлектроннаяПочта" +// и передает управление подсистеме "РаботаСПочтовымиСообщениями" // Для контроля за выполнением рекомендуется вызывать в конструкции "Попытка ... Исключение". // // Параметры: @@ -2206,7 +2303,7 @@ ЭтоМассив = ТипЗнч(ПараметрыПисьма.Вложения) = Тип("Массив"); Для Каждого КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения Цикл Вложение = КлючИЗначение.Значение; - ЭлектроннаяПочта.ПривестиВложениеДляВставкиВПисьмо(Вложение); + РаботаСПочтовымиСообщениямиСлужебный.ПривестиВложениеДляВставкиВПисьмо(Вложение); Если ЭтоМассив Тогда ПараметрыПисьма.Вложения.Добавить(Новый Структура("Ключ, Значение", КлючИЗначение.Ключ, Вложение)); Иначе @@ -2263,7 +2360,7 @@ ПараметрыПисьма.Вставить(КлючАдресаДоставки, КлючИЗначение.Значение); // Отправляем письмо - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); КонецЦикла; Иначе // Шаблоны не персонализированы - склеивание E-Mail адресов получателей и совместная доставка @@ -2275,7 +2372,7 @@ ПараметрыПисьма.Вставить(КлючАдресаДоставки, Кому); // Отправляем письмо - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); КонецЕсли; Иначе // Доставка конкретному получателю @@ -2292,7 +2389,7 @@ ПараметрыПисьма.Вставить(КлючАдресаДоставки, ПараметрыДоставки.Получатели[Получатель]); // Отправляем письмо - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(ПараметрыДоставки.УчетнаяЗапись, ПараметрыПисьма, ПараметрыДоставки.Соединение); КонецЕсли; КонецПроцедуры @@ -2341,31 +2438,34 @@ Вложения = Новый Соответствие; Вложения.Вставить(ПараметрыДоставки.ИмяАрхива, ПолноеИмяФайла); - Если ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = - ПараметрыДоставки.ПредставлениеОтчетовПолучателя - + Символы.ПС - + Символы.ПС - + НСтр("ru = 'Файлы отчетов запакованы в архив'") - + " "; - КонецЕсли; - - Если ПараметрыДоставки.ДобавлятьСсылки = "КАрхиву" Тогда - // Способ доставки подразумевает добавление ссылок - Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +""+ ПараметрыДоставки.ИмяАрхива +""); - Иначе - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +""""+ ПараметрыДоставки.ИмяАрхива +""":"+ Символы.ПС +"<"+ ПолноеИмяФайла +">"); + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + Если ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + + Символы.ПС + + Символы.ПС + + НСтр("ru = 'Файлы отчетов запакованы в архив'") + + " "; КонецЕсли; - ИначеЕсли ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда - // Доставка только по почте - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +""""+ ПараметрыДоставки.ИмяАрхива +""""); + + Если ПараметрыДоставки.ДобавлятьСсылки = "КАрхиву" Тогда + // Способ доставки подразумевает добавление ссылок + Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + +""+ ПараметрыДоставки.ИмяАрхива +""); + Иначе + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + +""""+ ПараметрыДоставки.ИмяАрхива +""":"+ Символы.ПС +"<"+ ПолноеИмяФайла +">"); + КонецЕсли; + ИначеЕсли ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда + // Доставка только по почте + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + +""""+ ПараметрыДоставки.ИмяАрхива +""""); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -2783,3 +2883,5 @@ Возврат Ложь; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 091a2faea..1ac181293 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на сервере, но может вызываться с клиента. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования. Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт @@ -23,13 +22,10 @@ Если РезультатВыполнения.БылиКритичныеОшибки Тогда ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); - РезультатВыполнения.Вставить( - "ВыводПредупреждения", - Новый Структура( - "Использование, Текст, ТекстОшибок", - Истина, - НСтр("ru = 'Не удалось сформировать список получателей'"), - ТекстОшибок)); + СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(РезультатВыполнения); + РезультатВыполнения.ВыводПредупреждения.Использование = Истина; + РезультатВыполнения.ВыводПредупреждения.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); + РезультатВыполнения.ВыводПредупреждения.ТекстОшибок = ТекстОшибок; КонецЕсли; Возврат РезультатВыполнения; @@ -51,3 +47,4 @@ Возврат Результат; КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 3446c8f7a..62a481e6d 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на клиенте. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов @@ -74,8 +73,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Формирует список получателей рассылки, предлагает пользователю выбрать // конкретного получателя или всех получателей рассылки и возвращает @@ -194,3 +194,5 @@ ОткрытьФорму("Справочник.РассылкиОтчетов.ФормаОбъекта", ПараметрыФормы, , Строка(Форма.УникальныйИдентификатор) + ".ОткрытьРассылкуОтчетов"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index 61847b547..2f7a70f34 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на клиенте и на сервере. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Разбирает строку FTP адреса на Логин, Пароль, Сервер, Порт и Каталог. // Подробнее - см. RFC 1738 (http://tools.ietf.org/html/rfc1738#section-3.1). @@ -167,14 +166,11 @@ // Преобразует массив сообщений пользователю в одну строку. Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт Если МассивОшибок = Неопределено Тогда - МассивОшибокПолучен = Ложь; -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда МассивОшибок = ПолучитьСообщенияПользователю(Истина); - МассивОшибокПолучен = Истина; -#КонецЕсли - Если НЕ МассивОшибокПолучен Тогда + #Иначе Возврат ""; - КонецЕсли; + #КонецЕсли КонецЕсли; Отступ = Символы.ПС + Символы.ПС; @@ -210,3 +206,4 @@ Возврат ?(Результат = 0, ЗначениеПоУмолчанию, Результат); КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index eb972f772..6953a0053 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -5,8 +5,7 @@ // но предназначен для использования только данной подсистемой. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Позволяет изменить форматы по умолчанию и установить картинки. // @@ -102,3 +101,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index 5d3121fc7..affe595b4 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // Выполняется на сервере, возвращаемые значения кэшируются на время сеанса. //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает список значений перечисления "ФорматыСохраненияОтчетов" // @@ -114,3 +113,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl index c4c2d5441..c232a3e7a 100644 --- a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверяет соответствие ИНН требованиям. // @@ -255,99 +254,49 @@ КонецФункции -// Проверяет соответствие КодаПоОКПО требованиям. +// Проверяет соответствие кода ОКПО требованиям стандартов. // // Параметры: -// КодПоОКПО - Строка - Проверяемый индивидуальный номер налогоплательщика. -// ЭтоЮрЛицо - Булево - признак, является ли владелец Кода по ОКПО юридическим лицом. -// ТекстСообщения - Строка - Текст сообщения о найденных ошибках. -// ОтбрасыватьВедущиеНули - Булево - Признак необходимости проверки кода физического лица без ведущих нулей +// ПроверяемыйКод - Строка - проверяемый код ОКПО; +// ЭтоЮрЛицо - Булево - признак, является ли владелец кода ОКПО юридическим лицом; +// ТекстСообщения - Строка - текст сообщения о найденных ошибках в проверяемом коде ОКПО; +// ОтбрасыватьВедущиеНули - Булево - (не используется) признак необходимости проверки кода физического лица без ведущих нулей. // // Возвращаемое значение: -// Истина - Код по ОКПО соответствует требованиям; -// Ложь - Код по ОКПО не соответствует требованиям. -// -Функция КодПоОКПОСоответствуетТребованиям(КодПоОКПО, ЭтоЮрЛицо, ТекстСообщения = "", ОтбрасыватьВедущиеНули = Ложь) Экспорт - - СоответствуетТребованиям = Истина; +// Булево. +// +Функция КодПоОКПОСоответствуетТребованиям(Знач ПроверяемыйКод, ЭтоЮрЛицо, ТекстСообщения = "", ОтбрасыватьВедущиеНули = Ложь) Экспорт + + ПроверяемыйКод = СокрЛП(ПроверяемыйКод); ТекстСообщения = ""; - - КодПоОКПО = СокрЛП(КодПоОКПО); - ДлинаКодаПоОКПО = СтрДлина(КодПоОКПО); + ДлинаКода = СтрДлина(ПроверяемыйКод); Если ЭтоЮрЛицо = Неопределено Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не определен тип владельца кода по ОКПО.'"); + ТекстСообщения = ТекстСообщения + НСтр("ru = 'Не определен тип владельца кода ОКПО.'"); Возврат Ложь; КонецЕсли; - Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодПоОКПО) Тогда - СоответствуетТребованиям = Ложь; - ТекстСообщения = ТекстСообщения + НСтр("ru = 'Код по ОКПО должен состоять только из цифр.'"); + Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ПроверяемыйКод) Тогда + ТекстСообщения = ТекстСообщения + НСтр("ru = 'Код ОКПО должен состоять только из цифр.'") + Символы.ПС; КонецЕсли; - Если ЭтоЮрЛицо И ДлинаКодаПоОКПО <> 8 Тогда - СоответствуетТребованиям = Ложь; - ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") - + НСтр("ru = 'Код по ОКПО юридического лица должен состоять из 8 цифр.'"); - ИначеЕсли НЕ ЭтоЮрЛицо И ДлинаКодаПоОКПО <> 10 Тогда - СоответствуетТребованиям = Ложь; - ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") - + НСтр("ru = 'Код по ОКПО физического лица должен состоять из 10 цифр.'"); + Если ЭтоЮрЛицо И ДлинаКода <> 8 Тогда + ТекстСообщения = ТекстСообщения + НСтр("ru = 'Код ОКПО юридического лица должен состоять из 8 цифр.'") + Символы.ПС; + ИначеЕсли Не ЭтоЮрЛицо И ДлинаКода <> 10 Тогда + ТекстСообщения = ТекстСообщения + НСтр("ru = 'Код ОКПО физического лица должен состоять из 10 цифр.'") + Символы.ПС; КонецЕсли; - Если СоответствуетТребованиям Тогда - - КонтрольнаяСумма = 0; - - Если ЭтоЮрЛицо Тогда - КодПоОКПОДляРасчета = КодПоОКПО; - Иначе - Если ОтбрасыватьВедущиеНули Тогда - КодПоОКПОДляРасчета = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(КодПоОКПО, "0"); - Иначе - КодПоОКПОДляРасчета = КодПоОКПО; - КонецЕсли; - КонецЕсли; - - ДлинаКода = СтрДлина(КодПоОКПОДляРасчета); - - Для инд = 1 По (ДлинаКода-1) Цикл - - КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПОДляРасчета,инд,1) * инд; - - КонецЦикла; - - КонтрольнаяЦифра = КонтрольнаяСумма % 11; - - Если КонтрольнаяЦифра = 10 Тогда - - КонтрольнаяСумма = 0; - Для инд = 1 По (ДлинаКода-1) Цикл - - КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПОДляРасчета,инд,1) * (инд + 2); - - КонецЦикла; - - КонтрольнаяЦифра = КонтрольнаяСумма % 11; - КонтрольнаяЦифра = ?(КонтрольнаяЦифра = 10,0,КонтрольнаяЦифра); - - КонецЕсли; - - Если Число(Сред(КодПоОКПОДляРасчета,ДлинаКода,1)) <> КонтрольнаяЦифра Тогда - - Если Не ЭтоЮрЛицо И НЕ ОтбрасыватьВедущиеНули Тогда - ТекстСообщения = ""; - СоответствуетТребованиям = КодПоОКПОСоответствуетТребованиям(КодПоОКПО,ЭтоЮрЛицо, ТекстСообщения, Истина); - Иначе - СоответствуетТребованиям = ЛОЖЬ; - ТекстСообщения = НСтр("ru = 'Контрольное число для кода по ОКПО не совпадает с рассчитанным.'"); - КонецЕсли; - - КонецЕсли; - + Если Не ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = СокрЛП(ТекстСообщения); + Возврат Ложь; КонецЕсли; - Возврат СоответствуетТребованиям; + Если Не КодКлассификатораВерный(ПроверяемыйКод) Тогда + ТекстСообщения = НСтр("ru = 'Контрольное число для кода по ОКПО не совпадает с рассчитанным.'"); + Возврат Ложь + КонецЕсли; + + Возврат Истина; КонецФункции @@ -467,3 +416,53 @@ Возврат Прав(Строка(КонтрольнаяСумма), 1) = "0"; КонецФункции + +// Проверяет правильность кода по контрольному числу (последняя цифра в коде). +// +// ПР 50.1.024-2005 «Основные положения и порядок проведения работ по разработке, ведению и применению общероссийских +// классификаторов», приложение В. +// +// Контрольное число рассчитывается следующим образом: +// 1. Разрядам кода в общероссийском классификаторе, начиная со старшего разряда, присваивается набор весов, +// соответствующий натуральному ряду чисел от 1 до 10. Если разрядность кода больше 10, то набор весов повторяется. +// 2. Каждая цифра кода умножается на вес разряда и вычисляется сумма полученных произведений. +// 3. Контрольное число для кода представляет собой остаток от деления полученной суммы на модуль «11». +// 4. Контрольное число должно иметь один разряд, значение которого находится в пределах от 0 до 9. +// Если получается остаток, равный 10, то для обеспечения одноразрядного контрольного числа необходимо провести +// повторный расчет, применяя вторую последовательность весов, сдвинутую на два разряда влево (3, 4, 5,…). Если в +// случае повторного расчета остаток от деления вновь сохраняется равным 10, то значение контрольного числа +// проставляется равным «0». +// +// Параметры: +// ПроверяемыйКод - Строка - код для проверки. +// +// Возвращаемое значение: +// Булево. +// +Функция КодКлассификатораВерный(ПроверяемыйКод) + + СуммаПроизведений = 0; + Для Позиция = 1 По СтрДлина(ПроверяемыйКод)-1 Цикл + Цифра = Число(Сред(ПроверяемыйКод, Позиция, 1)); + Вес = (Позиция - 1) % 10 + 1; + СуммаПроизведений = СуммаПроизведений + Цифра * Вес; + КонецЦикла; + + КонтрольнаяЦифра = СуммаПроизведений % 11; + Если КонтрольнаяЦифра = 10 Тогда + СуммаПроизведений = 0; + Для Позиция = 1 По СтрДлина(ПроверяемыйКод)-1 Цикл + Цифра = Число(Сред(ПроверяемыйКод, Позиция, 1)); + Вес = (Позиция + 1) % 10 + 1; + СуммаПроизведений = СуммаПроизведений + Цифра * Вес; + КонецЦикла; + КонтрольнаяЦифра = СуммаПроизведений % 11; + КонецЕсли; + + КонтрольнаяЦифра = КонтрольнаяЦифра % 10; + + Возврат Строка(КонтрольнаяЦифра) = Прав(ПроверяемыйКод, 1); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index f224f2ab4..5fd0ffd31 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает использование регламентного задания. // Перед вызовом требуется иметь право Администрирования @@ -163,3 +162,5 @@ Возврат РегламентноеЗадание; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index dfb1530c4..e7a657e78 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -18,8 +17,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Вызывает исключение, если у пользователя нет права администрирования. Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() Экспорт @@ -559,4 +559,6 @@ Возврат ПоследнееФоновоеЗадание; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index c761d6c76..0b6242026 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Устанавливает настройку в параметры резервного копирования. // @@ -72,4 +71,6 @@ РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 714a7e3d8..f6fbe955f 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -3,15 +3,14 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура проверяет необходимость проведения резервного копирования // или показа пользователю необходимого информационного сообщения. // Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда Возврат; КонецЕсли; @@ -49,8 +48,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Заполнение глобальных переменных. Процедура ЗаполнитьЗначенияГлобальныхПеременных(ФиксированныеПараметрыРезервногоКопированияИБ) Экспорт @@ -131,12 +131,33 @@ КонецФункции +// Открывает форму для запуска процесса резервного копирования +// Параметры: +// Владелец - Произвольный - Владелец для открываемой формы. +// ПараметрыОткрытияФормы - Структура - Параметры окна, см ОткрытьФорму() +// +Функция ОткрытьФормуРезервногоКопирования(Знач Владелец = Неопределено, Знач ПараметрыОткрытияФормы = Неопределено) Экспорт + + Параметры = Новый Структура("Параметры, Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); + Если ПараметрыОткрытияФормы <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Параметры, ПараметрыОткрытияФормы); + КонецЕсли; + + ВладелецФормы = ?(Владелец = Неопределено, Параметры.Владелец, Владелец); + + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", + Параметры.Параметры, ВладелецФормы, + Параметры.Уникальность, Параметры.Окно, Параметры.НавигационнаяСсылка, Параметры.ОписаниеОповещенияОЗакрытии, + Параметры.РежимОткрытияОкна); + +КонецФункции + // Проверяет необходимость запуска автоматического резервного копирования // в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального. // Процедура ОбработчикОжиданияЗапуска() Экспорт - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда Возврат; КонецЕсли; @@ -206,7 +227,7 @@ КаталогХранения = ФиксированныеПараметрыРезервногоКопированияИБ.КаталогХраненияРезервныхКопий; ПараметрыУдаления = ФиксированныеПараметрыРезервногоКопированияИБ.ПараметрыУдаления; - Если ПараметрыУдаления.ПроизводитьУдаление И КаталогХранения <> Неопределено Тогда + Если ПараметрыУдаления.ТипОграничения <> "ХранитьВсе" И КаталогХранения <> Неопределено Тогда Попытка Файл = Новый Файл(КаталогХранения); @@ -271,16 +292,27 @@ // Параметры: // Параметры - Структура - параметры резервного копирования. // -Процедура ПроверитьРезервноеКопированиеИБ(Параметры) Экспорт +Процедура ПроверитьРезервноеКопированиеИБ(Параметры) - Если Не Параметры.ПроведеноКопирование Тогда + Если Не Параметры.ПроведеноКопирование Тогда Возврат; КонецЕсли; - ПараметрыФормы = Новый Структура(); - ПараметрыФормы.Вставить("РежимРаботы", ?(Параметры.РезультатКопирования, "УспешноВыполнено", "НеВыполнено")); - ПараметрыФормы.Вставить("ИмяФайлаРезервнойКопии", Параметры.ИмяФайлаРезервнойКопии); - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); + Если Параметры.РучнойЗапускПоследнегоРезервногоКопирования Тогда + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("РежимРаботы", ?(Параметры.РезультатКопирования, "УспешноВыполнено", "НеВыполнено")); + ПараметрыФормы.Вставить("ИмяФайлаРезервнойКопии", Параметры.ИмяФайлаРезервнойКопии); + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); + + Иначе + + ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), + "e1cib/command/ОбщаяКоманда.ПоказатьРезультатРезервногоКопирования", + НСтр("ru = 'Резервное копирование проведено успешно'"), БиблиотекаКартинок.Информация32); + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроведеноКопирование", Ложь); + + КонецЕсли; КонецПроцедуры @@ -295,7 +327,7 @@ Если ВариантОповещения = "Просрочено" Тогда ТекстПояснения = НСтр("ru = 'Автоматическое резервное копирование не было выполнено.'"); - ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование.'"), + ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), "e1cib/app/Обработка.РезервноеКопированиеИБ", ТекстПояснения, БиблиотекаКартинок.Предупреждение32); ИначеЕсли ВариантОповещения = "ЕщеНеНастроено" Тогда @@ -305,7 +337,7 @@ ИмяФормыНастроек, ИмяФормыНастроекРезервногоКопирования()); ТекстПояснения = НСтр("ru = 'Рекомендуется настроить резервное копирование информационной базы.'"); - ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование.'"), + ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, ТекстПояснения, БиблиотекаКартинок.Предупреждение32); КонецЕсли; @@ -432,4 +464,6 @@ Возврат Множитель * Период; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl index bd8fb7b1c..758b09ad3 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Выполняет обработчик ожидания старта автоматического резервного копирования // в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального. @@ -14,3 +13,5 @@ РезервноеКопированиеИБКлиент.ОбработчикОжиданияЗапуска(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index dca17cf43..d3fcb3cd5 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -34,11 +33,15 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "РезервноеКопированиеИБСервер"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииИспользованияПрофилейБезопасности"].Добавить( + "РезервноеКопированиеИБСервер"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает параметры подсистемы РезервногоКопированияИБ, которые необходимы при завершении работы // пользователей. @@ -49,8 +52,9 @@ Функция ПараметрыПриЗавершенииРаботы() НастройкиРезервногоКопирования = НастройкиРезервногоКопирования(); - ВыполнятьПриЗавершенииРаботы = ?(НастройкиРезервногоКопирования = Неопределено, - Ложь, НастройкиРезервногоКопирования.ВыборПунктаНастройки = 2); + ВыполнятьПриЗавершенииРаботы = ?(НастройкиРезервногоКопирования = Неопределено, Ложь, + НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование + И НастройкиРезервногоКопирования.ВариантВыполнения = "ПриЗавершенииРаботы"); ПараметрыПриЗавершении = Новый Структура; ПараметрыПриЗавершении.Вставить("ДоступностьРолейОповещения", ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования()); @@ -349,9 +353,6 @@ КонецЕсли; Результат = ПараметрыРезервногоКопирования(); - Если Не Результат.Свойство("ПервыйЗапуск") Тогда - Результат.Вставить("ПервыйЗапуск", Истина); - КонецЕсли; ВариантОповещения = ВариантОповещения(); @@ -403,11 +404,13 @@ ПараметрыОповещенияОКопировании = ПараметрыРезервногоКопирования(); ОповещатьОНеобходимостиРезервногоКопирования = ТекущаяДатаСеанса() >= (ПараметрыОповещенияОКопировании.ДатаПоследнегоОповещения + 3600 * 24); - Если ПараметрыОповещенияОКопировании.ВыборПунктаНастройки = 3 Тогда + Если ПараметрыОповещенияОКопировании.ВыполнятьАвтоматическоеРезервноеКопирование Тогда - Результат = "НеОповещать"; + Если НеобходимостьАвтоматическогоРезервногоКопирования() Тогда + Результат = "Просрочено"; + КонецЕсли; - ИначеЕсли ПараметрыОповещенияОКопировании.ВыборПунктаНастройки = 0 Тогда + ИначеЕсли Не ПараметрыОповещенияОКопировании.РезервноеКопированиеНастроено Тогда Если ОповещатьОНеобходимостиРезервногоКопирования Тогда Результат = "ЕщеНеНастроено"; @@ -415,9 +418,7 @@ Иначе - Если НеобходимостьАвтоматическогоРезервногоКопирования() Тогда - Результат = "Просрочено"; - КонецЕсли; + Результат = "НеОповещать"; КонецЕсли; @@ -434,23 +435,27 @@ // Функция НачальноеЗаполнениеНастроекРезервногоКопирования(СохранятьПараметры = Истина) Экспорт - ТекущаяДата = ТекущаяДатаСеанса(); Параметры = Новый Структура; + + Параметры.Вставить("ВыполнятьАвтоматическоеРезервноеКопирование", Ложь); + Параметры.Вставить("РезервноеКопированиеНастроено", Ложь); + Параметры.Вставить("ДатаПоследнегоОповещения", '00010101'); - Параметры.Вставить("ДатаПоследнегоРезервногоКопирования", ТекущаяДата); + Параметры.Вставить("ДатаПоследнегоРезервногоКопирования", '00010101'); + Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", '29990101'); + Параметры.Вставить("РасписаниеКопирования", ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Новый РасписаниеРегламентногоЗадания)); Параметры.Вставить("КаталогХраненияРезервныхКопий", ""); - Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", '29990101'); Параметры.Вставить("ПроведеноКопирование", Ложь); Параметры.Вставить("ПроведеноВосстановление", Ложь); Параметры.Вставить("РезультатКопирования", Неопределено); Параметры.Вставить("ИмяФайлаРезервнойКопии", ""); - Параметры.Вставить("ВыборПунктаНастройки", 0); - Параметры.Вставить("ПервыйЗапуск", Истина); + Параметры.Вставить("ВариантВыполнения", "ПоРасписанию"); Параметры.Вставить("ПроцессВыполняется", Ложь); Параметры.Вставить("АдминистраторИБ", ""); Параметры.Вставить("ПарольАдминистратораИБ", ""); Параметры.Вставить("ПараметрыУдаления", ПараметрыУдаленияРезервныхКопийПоУмолчанию()); + Параметры.Вставить("РучнойЗапускПоследнегоРезервногоКопирования", Истина); Если СохранятьПараметры Тогда УстановитьПараметрыРезервногоКопирования(Параметры); @@ -481,7 +486,6 @@ СтруктураРезультата.ПроведеноКопирование = Истина; СтруктураРезультата.РезультатКопирования = Результат; СтруктураРезультата.ИмяФайлаРезервнойКопии = ИмяФайлаРезервнойКопии; - СтруктураРезультата.ПервыйЗапуск = Ложь; УстановитьПараметрыРезервногоКопирования(СтруктураРезультата); КонецПроцедуры @@ -510,25 +514,31 @@ Возврат НСтр("ru = 'Для настройки резервного копирования необходимо обратиться к администратору.'"); КонецЕсли; - КодНастройки = НастройкиРезервногоКопирования.ВыборПунктаНастройки; - ТекущаяНастройка = НСтр("ru = 'Резервное копирование не настроено, информационная база подвергается риску потери данных.'"); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Если КодНастройки = 3 Тогда // Не требуется - ТекущаяНастройка = НСтр("ru = 'Резервное копирование не выполняется (организовано сторонними программами).'"); - ИначеЕсли КодНастройки = 2 Тогда // При завершении работы - ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно при завершении работы.'"); - ИначеЕсли КодНастройки = 1 Тогда // По расписанию - Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования); - Если Не ПустаяСтрока(Расписание) Тогда - ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно по расписанию: %1'"); - ТекущаяНастройка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекущаяНастройка, Расписание); + Если НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование Тогда + + Если НастройкиРезервногоКопирования.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно при завершении работы.'"); + ИначеЕсли НастройкиРезервногоКопирования.ВариантВыполнения = "ПоРасписанию" Тогда // По расписанию + Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования); + Если Не ПустаяСтрока(Расписание) Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно по расписанию: %1'"); + ТекущаяНастройка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекущаяНастройка, Расписание); + КонецЕсли; КонецЕсли; + + Иначе + + Если НастройкиРезервногоКопирования.РезервноеКопированиеНастроено Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование не выполняется (организовано сторонними программами).'"); + КонецЕсли; + КонецЕсли; - ИначеЕсли КодНастройки = 3 Тогда + Иначе ТекущаяНастройка = НСтр("ru = 'Резервное копирование не выполняется (организовано средствами СУБД).'"); @@ -542,7 +552,6 @@ ПараметрыУдаления = Новый Структура; - ПараметрыУдаления.Вставить("ПроизводитьУдаление", Истина); ПараметрыУдаления.Вставить("ТипОграничения", "ПоПериоду"); ПараметрыУдаления.Вставить("КоличествоКопий", 10); @@ -662,6 +671,70 @@ КонецПроцедуры +// Обновляет настройки резервного копирования +// +Процедура ОбновитьПараметрыРезервногоКопирования_2_2_2_33() Экспорт + + ПараметрыРезервногоКопирования = НастройкиРезервногоКопирования(); + + Если ПараметрыРезервногоКопирования = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПараметрыРезервногоКопирования.Свойство("ВыполнятьАвтоматическоеРезервноеКопирование") Тогда + + Возврат; // Уже было выполнено обновление + + КонецЕсли; + + Если ПараметрыРезервногоКопирования.ПервыйЗапуск Тогда + + ПараметрыРезервногоКопирования.ДатаПоследнегоРезервногоКопирования = Дата(1, 1, 1); + + КонецЕсли; + + Если ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 2 Тогда + ВариантВыполнения = "ПриЗавершенииРаботы"; + Иначе + ВариантВыполнения = "ПоРасписанию"; + КонецЕсли; + + ВыполнятьАвтоматическоеРезервноеКопирование = (ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 1 Или ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 2); + + ПараметрыРезервногоКопирования.Вставить("ВыполнятьАвтоматическоеРезервноеКопирование", ВыполнятьАвтоматическоеРезервноеКопирование); + ПараметрыРезервногоКопирования.Вставить("РезервноеКопированиеНастроено", ПараметрыРезервногоКопирования.ВыборПунктаНастройки <> 0); + ПараметрыРезервногоКопирования.Вставить("ВариантВыполнения", ВариантВыполнения); + ПараметрыРезервногоКопирования.Вставить("РучнойЗапускПоследнегоРезервногоКопирования", Истина); + + МассивУдаляемыхПараметров = Новый Массив; + МассивУдаляемыхПараметров.Добавить("ВыборПунктаНастройки"); + МассивУдаляемыхПараметров.Добавить("ПервыйЗапуск"); + + Для Каждого УдаляемыйПараметр Из МассивУдаляемыхПараметров Цикл + + Если ПараметрыРезервногоКопирования.Свойство(УдаляемыйПараметр) Тогда + + ПараметрыРезервногоКопирования.Удалить(УдаляемыйПараметр); + + КонецЕсли; + + КонецЦикла; + + Если ПараметрыРезервногоКопирования.Свойство("ПараметрыУдаления") + И ПараметрыРезервногоКопирования.ПараметрыУдаления.Свойство("ПроизводитьУдаление") Тогда + + Если Не ПараметрыРезервногоКопирования.ПараметрыУдаления.ПроизводитьУдаление Тогда + ПараметрыРезервногоКопирования.ПараметрыУдаления.ТипОграничения = "ХранитьВсе"; + КонецЕсли; + + ПараметрыРезервногоКопирования.ПараметрыУдаления.Удалить("ПроизводитьУдаление"); + + КонецЕсли; + + УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -721,4 +794,30 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "РезервноеКопированиеИБСервер.ОбновитьПараметрыРезервногоКопирования_2_2_1_33"; -КонецПроцедуры \ No newline at end of file + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.33"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "РезервноеКопированиеИБСервер.ОбновитьПараметрыРезервногоКопирования_2_2_2_33"; + +КонецПроцедуры + +// Вызывается при включении использования для информационной базы профилей безопасности. +// +Процедура ПриВключенииИспользованияПрофилейБезопасности() Экспорт + + ПараметрыРезервногоКопирования = НастройкиРезервногоКопирования(); + + Если ПараметрыРезервногоКопирования = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПараметрыРезервногоКопирования.Свойство("ПарольАдминистратораИБ") Тогда + + ПараметрыРезервногоКопирования.ПарольАдминистратораИБ = ""; + УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl index d159dafa0..44dd15d48 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обмен сообщениями @@ -20,8 +19,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -417,57 +417,34 @@ СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); - НачатьТранзакцию(); + ИмяАрхива = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); + + ДатаСозданияКопии = ТекущаяУниверсальнаяДата(); + + ОписаниеАрхива = Новый Файл(ИмяАрхива); + РазмерФайла = ОписаниеАрхива.Размер(); + + ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ОписаниеАрхива); Попытка - - ИмяАрхива = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); - - ДатаСозданияКопии = ТекущаяУниверсальнаяДата(); - - ОписаниеАрхива = Новый Файл(ИмяАрхива); - РазмерФайла = ОписаниеАрхива.Размер(); - - ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ОписаниеАрхива); - - Попытка - УдалитьФайлы(ИмяАрхива); - Исключение - // При невозможности удаления файла выполнение не должно прерываться - КонецПопытки; - - ИдКопии = Новый УникальныйИдентификатор; - - НачатьТранзакцию(); - - Попытка - - ПараметрыСообщения = Новый Структура; - ПараметрыСообщения.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - ПараметрыСообщения.Вставить("ИДКопии", ИдКопии); - ПараметрыСообщения.Вставить("ИДФайла", ИДФайла); - ПараметрыСообщения.Вставить("ДатаСоздания", ДатаСозданияКопии); - Для каждого КлючИЗначение Из ФлагиПериодичности Цикл - ПараметрыСообщения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - - ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыСообщения); - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - + УдалитьФайлы(ИмяАрхива); Исключение - - ВызватьИсключение; - + // При невозможности удаления файла выполнение не должно прерываться КонецПопытки; + ИдКопии = Новый УникальныйИдентификатор; + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыСообщения.Вставить("ИДКопии", ИдКопии); + ПараметрыСообщения.Вставить("ИДФайла", ИДФайла); + ПараметрыСообщения.Вставить("ДатаСоздания", ДатаСозданияКопии); + Для каждого КлючИЗначение Из ФлагиПериодичности Цикл + ПараметрыСообщения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыСообщения); + // Обновление состояния в параметрах ОтборЗаданий = Новый Структура; ОтборЗаданий.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); @@ -645,7 +622,6 @@ МодульВыгрузкаЗагрузкаОбластейДанных = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаЗагрузкаОбластейДанных"); - ИмяАрхива = Неопределено; Попытка @@ -793,30 +769,43 @@ // Процедура ОтправитьСообщениеРезервнаяКопияОбластиСоздана(Знач ПараметрыСообщения) - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеРезервнаяКопияОбластиСоздана()); + НачатьТранзакцию(); - Тело = Сообщение.Body; - - Тело.Zone = ПараметрыСообщения.ОбластьДанных; - Тело.BackupId = ПараметрыСообщения.ИДКопии; - Тело.FileId = ПараметрыСообщения.ИДФайла; - Тело.Date = ПараметрыСообщения.ДатаСоздания; - Если ПараметрыСообщения.Свойство("Ежедневная") Тогда - Тело.Daily = ПараметрыСообщения.Ежедневная; - Тело.Monthly = ПараметрыСообщения.Ежемесячная; - Тело.Yearly = ПараметрыСообщения.Ежегодная; - Иначе - Тело.Daily = Ложь; - Тело.Monthly = Ложь; - Тело.Yearly = Ложь; - КонецЕсли; - Тело.ConfigurationVersion = Метаданные.Версия; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеРезервнаяКопияОбластиСоздана()); + + Тело = Сообщение.Body; + + Тело.Zone = ПараметрыСообщения.ОбластьДанных; + Тело.BackupId = ПараметрыСообщения.ИДКопии; + Тело.FileId = ПараметрыСообщения.ИДФайла; + Тело.Date = ПараметрыСообщения.ДатаСоздания; + Если ПараметрыСообщения.Свойство("Ежедневная") Тогда + Тело.Daily = ПараметрыСообщения.Ежедневная; + Тело.Monthly = ПараметрыСообщения.Ежемесячная; + Тело.Yearly = ПараметрыСообщения.Ежегодная; + Иначе + Тело.Daily = Ложь; + Тело.Monthly = Ложь; + Тело.Yearly = Ложь; + КонецЕсли; + Тело.ConfigurationVersion = Метаданные.Версия; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + КонецПроцедуры // Планировать архивацию области в прикладной базе. @@ -824,7 +813,9 @@ Процедура ОтправитьСообщениеОшибкаАрхивацииОбласти(Знач ПараметрыСообщения) НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеОшибкаАрхивацииОбласти()); @@ -834,11 +825,14 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -848,7 +842,9 @@ Процедура ОтправитьСообщениеАрхивацияОбластиПропущена(Знач ПараметрыСообщения) НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеАрхивацияОбластиПропущена()); @@ -858,11 +854,14 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -1029,4 +1028,6 @@ КонецПопытки; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl index 64be25ae6..373ff5615 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт @@ -44,4 +43,6 @@ Возврат ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис"); КонецЕсли; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl index 775a3ee72..8652bde92 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт @@ -98,4 +97,6 @@ "ZoneBackupControl", // Не локализуется ИмяОперации); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl index b71a8efa0..32826a9d1 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает соответствие русских названий полей программных системных настроек // английским из XDTO-пакета ZoneBackupControl Менеджера сервиса @@ -112,3 +111,5 @@ Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 9ba22b088..2511c3ed3 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Блокировка и завершение соединений с ИБ. @@ -14,7 +13,7 @@ // то устанавливает блокировку сеансов области данных. // // Параметры -// ТекстСообщения – Строка – текст, который будет частью сообщения об ошибке +// ТекстСообщения - Строка - текст, который будет частью сообщения об ошибке // при попытке установки соединения с заблокированной // информационной базой. // @@ -25,7 +24,7 @@ // Не применимо для блокировки сеансов области данных. // // Возвращаемое значение: -// Булево – Истина, если блокировка установлена успешно. +// Булево - Истина, если блокировка установлена успешно. // Ложь, если для выполнения блокировки недостаточно прав. // Функция УстановитьБлокировкуСоединений(Знач ТекстСообщения = "", @@ -83,7 +82,7 @@ // заполняется поле КоличествоСеансов. // // Возвращаемое значение: -// Структура – с полями: +// Структура - с полями: // Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. // Начало - Дата - дата начала блокировки. // Конец - Дата - дата окончания блокировки. @@ -125,7 +124,7 @@ // Снять блокировку информационной базы. // // Возвращаемое значение: -// Булево – Истина, если операция выполнена успешно. +// Булево - Истина, если операция выполнена успешно. // Ложь, если для выполнения операции недостаточно прав. // Функция РазрешитьРаботуПользователей() Экспорт @@ -160,46 +159,13 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Блокировка регламентных заданий. - -// Установить или снять блокировку регламентных заданий. -// -// Параметры -// Значение – Булево - Истина, если устанавливать, Ложь - Иначе. -// -Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт - - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - СоединенияИБКлиентСервер.УстановитьБлокировкуРегламентныхЗаданий(Значение); - -КонецПроцедуры - -// Получить текущее состояние блокировки регламентных заданий. -// -// Возвращаемое значение: -// Булево – Истина, если блокировка установлена. -// -Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт - - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - Возврат СоединенияИБКлиентСервер.БлокировкаРегламентныхЗаданийУстановлена(); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Блокировка сеансов областей данных. // Получить пустую структуру с параметрами блокировки сеансов области данных. // // Возвращаемое значение: -// Структура – с полями: +// Структура - с полями: // Начало - Дата - время начала действия блокировки // Конец - Дата - время завершения действия блокировки // Сообщение - Строка - сообщения для пользователей, выполняющих вход в заблокированную область данных @@ -216,11 +182,15 @@ // Установить блокировку сеансов области данных. // // Параметры: -// Параметры – Структура – см. НовыеПараметрыБлокировкиСоединений +// Параметры - Структура - см. НовыеПараметрыБлокировкиСоединений // ПоМестномуВремени - Булево - время начала и окончания блокировки указаны в местном времени сеанса. // Если Ложь, то в универсальном времени. +// ОбластьДанных - Число(7,0) - номер области данных, для которой устанавливается блокировка. +// При вызове из сеанса, в котором заданы значения разделителей, может быть передано только значение, +// совпадающее со значением разделителя в сеансе (или опущено). +// При вызове из сеанса, в котором не заданы значения разделителей, значение параметра не может быть опущено. // -Процедура УстановитьБлокировкуСеансовОбластиДанных(Параметры, Знач ПоМестномуВремени = Истина) Экспорт +Процедура УстановитьБлокировкуСеансовОбластиДанных(Параметры, Знач ПоМестномуВремени = Истина, Знач ОбластьДанных = -1) Экспорт Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); @@ -234,6 +204,22 @@ ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если ОбластьДанных = -1 Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИначеЕсли ОбластьДанных <> ОбщегоНазначения.ЗначениеРазделителяСеанса() Тогда + ВызватьИсключение НСтр("ru = 'Из сеанса с используемыми значениями разделителей нельзя установить блокировку сеансов области данных, отличной от используемой в сеансе!'"); + КонецЕсли; + + Иначе + + Если ОбластьДанных = -1 Тогда + ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку сеансов области данных - не указана область данных!'"); + КонецЕсли; + + КонецЕсли; + СтруктураНастроек = Параметры; Если ТипЗнч(Параметры) = Тип("БлокировкаСеансов") Тогда СтруктураНастроек = НовыеПараметрыБлокировкиСоединений(); @@ -242,12 +228,12 @@ УстановитьПривилегированныйРежим(Истина); НаборБлокировок = РегистрыСведений.БлокировкиСеансовОбластейДанных.СоздатьНаборЗаписей(); - НаборБлокировок.Отбор.ОбластьДанныхВспомогательныеДанные.Установить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + НаборБлокировок.Отбор.ОбластьДанныхВспомогательныеДанные.Установить(ОбластьДанных); НаборБлокировок.Прочитать(); НаборБлокировок.Очистить(); Если Параметры.Установлена Тогда Блокировка = НаборБлокировок.Добавить(); - Блокировка.ОбластьДанныхВспомогательныеДанные = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Блокировка.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; Блокировка.НачалоБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Начало), УниверсальноеВремя(СтруктураНастроек.Начало), СтруктураНастроек.Начало); Блокировка.КонецБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Конец), @@ -267,7 +253,7 @@ // возвращается в универсальном времени. // // Возвращаемое значение: -// Структура – см. НовыеПараметрыБлокировкиСоединений +// Структура - см. НовыеПараметрыБлокировкиСоединений // Функция ПолучитьБлокировкуСеансовОбластиДанных(Знач ПоМестномуВремени = Истина) Экспорт @@ -304,8 +290,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Заполняет структуру параметров, необходимых для работы клиентского кода // конфигурации. @@ -318,15 +305,33 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в эту подсистему +// Объявление служебных событий, к которым можно добавлять обработчики. -// Снимает блокировку информационной файловой базы. +// Объявляет события подсистемы ЗавершениеРаботыПользователей: // -Процедура ПриСнятииБлокировкиФайловойБазы() Экспорт +// Клиентские события: +// ПриЗавершенииСеанса. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт - Блокировка = Новый БлокировкаСеансов; - Блокировка.Установлена = Ложь; - УстановитьБлокировкуСеансов(Блокировка); + // КЛИЕНТСКИЕ СОБЫТИЯ. + + // Вызывается при завершении сеанса средствами подсистемы ЗавершениеРаботыПользователей. + // + // Параметры: + // ФормаВладелец - УправляемаяФорма, из которой выполняется завершение сеанса, + // НомерСеанса - Число (8,0,+) - номер сеанса, который будет завершен, + // СтандартнаяОбработка - Булево, флаг выполнения стандартной обработки завершения сеанса + // (подключение к агенту сервера через COM-соединение или сервер администрирования с + // запросом параметров подключения к кластеру у текущего пользователя). Может быть + // установлен в значение Ложь внутри обработчика события, в этом случае стандартная + // обработка завершения сеанса выполняться не будет. + // + // Синтаксис: + // Процедура ПриЗавершенииСеанса(Знач НомерСеанса, СтандартнаяОбработка) Экспорт + // + КлиентскиеСобытия.Добавить("СтандартныеПодсистемы.ЗавершениеРаботыПользователей\ПриЗавершенииСеанса"); КонецПроцедуры @@ -372,8 +377,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -546,82 +552,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Принудительное отключение сеансов. - -// Отключает сеанс по номеру сеанса. -// -// Параметры -// НомерСеанса - Число - номер сеанса для отключения -// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи -// -// Возвращаемое значение: -// Булево – результат отключения сеанса. -// -Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - - СтандартнаяОбработка = Истина; - Результат = Истина; - ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка); - Если Не СтандартнаяОбработка Тогда - Возврат Результат; - КонецЕсли; - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - УстановитьПривилегированныйРежим(Истина); - Возврат СоединенияИБКлиентСервер.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); - Иначе // Для Linux - СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеансы, - | так как на сервере не установлена ОС Microsoft Windows'"); - ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); - Возврат Ложь; - КонецЕсли; - -КонецФункции - -// Отключить все активные соединения ИБ (кроме текущего сеанса). -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. -// -// Возвращаемое значение: -// Булево – результат отключения соединений. -// -Функция ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ) Экспорт - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - Возврат СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); - -КонецФункции - -// Осуществляет попытку подключиться к кластеру серверов и получить список -// активных соединений к ИБ и использованием указанных параметров администрирования. -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ -// ВыдаватьСообщения – Булево – разрешить вывод интерактивных сообщений. -// -// Возвращаемое значение: -// Булево – Истина, если проверка завершена успешно. -// -Процедура ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, - Знач ПодробноеСообщениеОбОшибке = Ложь) Экспорт - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - СоединенияИБКлиентСервер.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, - ПодробноеСообщениеОбОшибке); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Прочее. @@ -635,13 +565,12 @@ // Строка - сообщение блокировки. // Функция СформироватьСообщениеБлокировки(Знач Сообщение, Знач КодРазрешения) Экспорт - - ПараметрыАдминистрированияИБ = СоединенияИБВызовСервераПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); ПризнакФайловогоРежима = Ложь; - ПутьКИБ = СоединенияИБКлиентСервер.ПутьКИнформационнойБазе(ПризнакФайловогоРежима, - ?(ПараметрыАдминистрированияИБ.Свойство("ПортКластераСерверов"), ПараметрыАдминистрированияИБ.ПортКластераСерверов, 0)); - СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима = Истина, "/F", "/S") + ПутьКИБ; - ТекстСообщения = ""; + ПутьКИБ = СоединенияИБКлиентСервер.ПутьКИнформационнойБазе(ПризнакФайловогоРежима, ПараметрыАдминистрирования.ПортКластера); + СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима = Истина, "/F", "/S") + ПутьКИБ; + ТекстСообщения = ""; Если НЕ ПустаяСтрока(Сообщение) Тогда ТекстСообщения = Сообщение + Символы.ПС + Символы.ПС; КонецЕсли; @@ -687,52 +616,6 @@ КонецФункции -// Получить сохраненные параметры администрирования кластера серверов. -// -// Возвращаемое значение: -// Структура – с полями, возвращаемыми функцией НовыеПараметрыАдминистрированияИБ. -// -Функция ПолучитьПараметрыАдминистрированияИБ() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - - Иначе - - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; - - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - Результат = СоединенияИБКлиентСервер.НовыеПараметрыАдминистрированияИБ(); - СтруктураНастроек = Константы.ПараметрыАдминистрированияИБ.Получить(); - Если СтруктураНастроек <> Неопределено Тогда - СтруктураНастроек = СтруктураНастроек.Получить(); - Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Результат, СтруктураНастроек); - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Сохранить параметры администрирования кластера серверов в ИБ. -// -// Параметры: -// Параметры - структура с полями, возвращаемыми функцией НовыеПараметрыАдминистрированияИБ. -// -Процедура ЗаписатьПараметрыАдминистрированияИБ(Параметры) Экспорт - - Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(Параметры)); - ОбновитьПовторноИспользуемыеЗначения(); - -КонецПроцедуры - // Получить число активных сеансов ИБ. // // Параметры: @@ -743,7 +626,7 @@ // сформированных на клиенте. // // Возвращаемое значение: -// Число – количество активных сеансов ИБ. +// Число - количество активных сеансов ИБ. // Функция КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль = Истина, СообщенияДляЖурналаРегистрации = Неопределено) Экспорт @@ -765,38 +648,6 @@ КонецФункции -// Записать в журнал регистрации список сеансов ИБ. -// -// Параметры: -// ТекстСообщения - Строка - опциональный текст с пояснениями. -// -Процедура ЗаписатьНазванияСоединенийИБ(Знач ТекстСообщения) Экспорт - Сообщение = ПолучитьНазванияСоединенийИБ(ТекстНеУдалосьЗавершитьРаботуПользователей(ТекстСообщения)); - ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, , , Сообщение); -КонецПроцедуры - -// Возвращает текст о неудачном завершении работы пользователей. -// -// Параметры: -// Сообщение - Строка - передаваемая строка. -// -// Возвращаемое значение: -// Строка - сообщение о неудаче завершения работы пользователей. -// -Функция ТекстНеУдалосьЗавершитьРаботуПользователей(Знач Сообщение) - - Если Не ПустаяСтрока(Сообщение) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось завершить работу пользователей (%1):'"), - Сообщение); - Иначе - ТекстСообщения = НСтр("ru = 'Не удалось завершить работу пользователей:'"); - КонецЕсли; - Возврат ТекстСообщения; - -КонецФункции - // Возвращает установлена ли блокировка соединений на конкретную дату. // // Параметры: @@ -837,41 +688,4 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы - -// Вызывается при отключении сеанса на стороне сервера 1С:Предприятия. -// -// Параметры -// НомерСеанса - Число - номер сеанса для отключения. -// Результат - Булево – результат отключения сеанса. -// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи. -// СтандартнаяОбработка - Булево - вернуть Ложь, если необходимо запретить стандартную обработку отключения сеанса. -// -Процедура ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - // Если сервер работает не под управлением ОС Microsoft Windows, то передаем управление Агенту сервиса. - СтандартнаяОбработка = Ложь; - УстановитьПривилегированныйРежим(Истина); - Параметры = СоединенияИБВызовСервераПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Попытка - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - Результат = МодульРаботаВМоделиСервиса.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Результат = Ложь; - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index cf41e2957..7bedc39b4 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Получить параметры блокировки соединений ИБ для использования на стороне клиента. // @@ -13,7 +12,7 @@ // заполняется поле КоличествоСеансов. // // Возвращаемое значение: -// Структура – с полями: +// Структура - с полями: // Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. // Начало - Дата - дата начала блокировки. // Конец - Дата - дата окончания блокировки. @@ -33,7 +32,7 @@ // то устанавливает блокировку сеансов области данных. // // Параметры -// ТекстСообщения – Строка – текст, который будет частью сообщения об ошибке +// ТекстСообщения - Строка - текст, который будет частью сообщения об ошибке // при попытке установки соединения с заблокированной // информационной базой. // @@ -44,7 +43,7 @@ // Не применимо для блокировки сеансов области данных. // // Возвращаемое значение: -// Булево – Истина, если блокировка установлена успешно. +// Булево - Истина, если блокировка установлена успешно. // Ложь, если для выполнения блокировки недостаточно прав. // Функция УстановитьБлокировкуСоединений(ТекстСообщения = "", @@ -57,7 +56,7 @@ // Установить блокировку сеансов области данных. // // Параметры: -// Параметры – Структура – см. НовыеПараметрыБлокировкиСоединений +// Параметры - Структура - см. НовыеПараметрыБлокировкиСоединений // ПоМестномуВремени - Булево - время начала и окончания блокировки указаны в местном времени сеанса. // Если Ложь, то в универсальном времени. // @@ -70,7 +69,7 @@ // Снять блокировку информационной базы. // // Возвращаемое значение: -// Булево – Истина, если операция выполнена успешно. +// Булево - Истина, если операция выполнена успешно. // Ложь, если для выполнения операции недостаточно прав. // Функция РазрешитьРаботуПользователей() Экспорт @@ -79,104 +78,6 @@ КонецФункции -// Получить число активных сеансов ИБ. -// -// Параметры: -// УчитыватьКонсоль - Булево - если Ложь, то исключить сеансы консоли кластера серверов. -// сеансы консоли кластера серверов не препятствуют выполнению -// административных операций (установке монопольного режима и т.п.). -// СообщенияДляЖурналаРегистрации - СписокЗначений - пакета сообщения для журнала регистрации -// сформированных на клиенте. -// -// Возвращаемое значение: -// Число – количество активных сеансов ИБ. -// -Функция КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль = Истина, - СообщенияДляЖурналаРегистрации = Неопределено) Экспорт - - Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль, СообщенияДляЖурналаРегистрации); - -КонецФункции - -// Записать в журнал регистрации список сеансов ИБ. -// -// Параметры: -// ТекстСообщения - Строка - опциональный текст с пояснениями. -// -Процедура ЗаписатьНазванияСоединенийИБ(ТекстСообщения) Экспорт - - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(ТекстСообщения); - -КонецПроцедуры - -// Отключает сеанс по номеру сеанса. -// -// Параметры -// НомерСеанса - Число - номер сеанса для отключения -// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи -// -// Возвращаемое значение: -// Булево – результат отключения сеанса. -// -Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - - Возврат СоединенияИБ.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); - -КонецФункции - -// Отключить все активные соединения ИБ (кроме текущего сеанса). -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. -// -// Возвращаемое значение: -// Булево – результат отключения соединений. -// -Функция ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ) Экспорт - - Возврат СоединенияИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); - -КонецФункции - -// Осуществляет попытку подключиться к кластеру серверов и получить список -// активных соединений к ИБ и использованием указанных параметров администрирования. -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ -// ВыдаватьСообщения – Булево – разрешить вывод интерактивных сообщений. -// -// Возвращаемое значение: -// Булево – Истина, если проверка завершена успешно. -// -Процедура ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, - ПодробноеСообщениеОбОшибке = Ложь) Экспорт - - СоединенияИБ.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); - -КонецПроцедуры - -// Установить или снять блокировку регламентных заданий. -// -// Параметры -// Значение – Булево - Истина, если устанавливать, Ложь - Иначе. -// -Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт - - СоединенияИБ.УстановитьБлокировкуРегламентныхЗаданий(Значение); - -КонецПроцедуры - -// Получить текущее состояние блокировки регламентных заданий. -// -// Возвращаемое значение: -// Булево – Истина, если блокировка установлена. -// -Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт - - Возврат СоединенияИБ.БлокировкаРегламентныхЗаданийУстановлена(); - -КонецФункции - // Получить информацию о блокировке сеансов области данных. // // Параметры: @@ -185,10 +86,12 @@ // возвращается в универсальном времени. // // Возвращаемое значение: -// Структура – см. НовыеПараметрыБлокировкиСоединений +// Структура - см. НовыеПараметрыБлокировкиСоединений // Функция ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени = Истина) Экспорт Возврат СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl index 31a48a9e8..771f15769 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl @@ -3,22 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Получить сохраненные параметры администрирования кластера серверов. -// -// Возвращаемое значение: -// Структура – с полями, возвращаемыми функцией НовыеПараметрыАдминистрированияИБ. -// -Функция ПолучитьПараметрыАдминистрированияИБ() Экспорт - - Возврат СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает структуру с параметрами для принудительного отключения сеансов. // @@ -32,3 +17,5 @@ Или ТипПлатформыСервера = ТипПлатформы.Windows_x86_64); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index b562e07e3..7a975f933 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Выполнить завершение текущего сеанса, если установлена блокировка соединений // с информационной базой. @@ -124,12 +123,22 @@ Возврат; КонецЕсли; - // после начала блокировки сеансы всех пользователей должны быть отключены + // после начала блокировки сеансы всех пользователей должны быть отключены // если этого не произошло пробуем принудительно прервать соединения ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); - Результат = СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(); - Если Результат Тогда + Результат = Истина; + Попытка + + ПараметрыАдминистрирования = СоединенияИБКлиент.СохраненныеПараметрыАдминистрирования(); + СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(Неопределено); + + Исключение + Результат = Ложь; + КонецПопытки; + + Если Результат Тогда СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), "e1cib/app/Обработка.БлокировкаРаботыПользователей", @@ -146,3 +155,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 687f7fa18..10d82dd26 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -3,8 +3,36 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс + +// Открывает форму ввода параметров администрирования информационной базы и/или кластера +// +// Параметры: +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - Обработчик, который будет вызван после ввода параметров администрирования +// ЗапрашиватьПараметрыАдминистрированияИБ - Булево - Признак необходимости ввода параметров администрирования информационной базы +// ЗапрашиватьПараметрыАдминистрированияКластера - Булево - Признак необходимости ввода параметров администрирования кластера +// ПараметрыАдминистрирования - Структура - Параметры администрирования, которые были введены ранее +// Заголовок - Строка - Заголовок формы, описывающий для чего запрашиваются параметры администрирования +// ПоясняющаяНадпись - Строка - Пояснение для выполняемого действия, в контексте которого запрашиваются параметры +// +Процедура ПоказатьПараметрыАдминистрирования(ОписаниеОповещенияОЗакрытии, ЗапрашиватьПараметрыАдминистрированияИБ = Истина, + ЗапрашиватьПараметрыАдминистрированияКластера = Истина, ПараметрыАдминистрирования = Неопределено, + Заголовок = "", ПоясняющаяНадпись = "") Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗапрашиватьПараметрыАдминистрированияИБ", ЗапрашиватьПараметрыАдминистрированияИБ); + ПараметрыФормы.Вставить("ЗапрашиватьПараметрыАдминистрированияКластера", ЗапрашиватьПараметрыАдминистрированияКластера); + ПараметрыФормы.Вставить("ПараметрыАдминистрирования", ПараметрыАдминистрирования); + ПараметрыФормы.Вставить("Заголовок", Заголовок); + ПараметрыФормы.Вставить("ПоясняющаяНадпись", ПоясняющаяНадпись); + + ОткрытьФорму("ОбщаяФорма.ПараметрыАдминистрированияПрограммы", ПараметрыФормы,,,,,ОписаниеОповещенияОЗакрытии); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Выполняет действия перед началом работы системы. Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -49,12 +77,12 @@ // Обработать параметры запуска, связанные с завершение и разрешение соединений ИБ. // // Параметры -// ЗначениеПараметраЗапуска – Строка – главный параметр запуска -// ПараметрыЗапуска – Массив – дополнительные параметры запуска, разделенные +// ЗначениеПараметраЗапуска - Строка - главный параметр запуска +// ПараметрыЗапуска - Массив - дополнительные параметры запуска, разделенные // символом ";". // // Возвращаемое значение: -// Булево – Истина, если требуется прекратить выполнение запуска системы. +// Булево - Истина, если требуется прекратить выполнение запуска системы. // Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) Экспорт @@ -164,8 +192,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -175,7 +204,7 @@ // Параметры: // ПервыйПараметр - Строка - первое значение параметра запуска, // до первого символа ";" в верхнем регистре. -// ПараметрыЗапуска – Массив – массив строк разделенных символом ";" в параметре запуска, +// ПараметрыЗапуска - Массив - массив строк разделенных символом ";" в параметре запуска, // переданным в конфигурацию с помощью ключа командной строки /C. // Отказ - Булево (возвращаемое значение), если установить Истина, // обработка события ПриНачалеРаботыСистемы будет прервана. @@ -207,9 +236,46 @@ // Процедура УстановитьПризнакРаботаПользователейЗавершается(Значение) Экспорт - РаботаПользователейЗавершается = Значение; + Если ТипЗнч(ПараметрыЗавершенияРаботыПользователей) <> Тип("Структура") Тогда + ПараметрыЗавершенияРаботыПользователей = Новый Структура; + КонецЕсли; -КонецПроцедуры + ПараметрыЗавершенияРаботыПользователей.Вставить("РаботаПользователейЗавершается", Значение); + +КонецПроцедуры + +Функция РаботаПользователейЗавершается() Экспорт + + Возврат ТипЗнч(ПараметрыЗавершенияРаботыПользователей) = Тип("Структура") + И ПараметрыЗавершенияРаботыПользователей.Свойство("РаботаПользователейЗавершается") + И ПараметрыЗавершенияРаботыПользователей.РаботаПользователейЗавершается; + +КонецФункции + +Функция СохраненныеПараметрыАдминистрирования() Экспорт + + ПараметрыАдминистрирования = Неопределено; + + Если ТипЗнч(ПараметрыЗавершенияРаботыПользователей) = Тип("Структура") + И ПараметрыЗавершенияРаботыПользователей.Свойство("ПараметрыАдминистрирования") Тогда + + ПараметрыАдминистрирования = ПараметрыЗавершенияРаботыПользователей.ПараметрыАдминистрирования; + + КонецЕсли; + + Возврат ПараметрыАдминистрирования; + +КонецФункции + +Процедура СохранитьПараметрыАдминистрирования(Значение) Экспорт + + Если ТипЗнч(ПараметрыЗавершенияРаботыПользователей) <> Тип("Структура") Тогда + ПараметрыЗавершенияРаботыПользователей = Новый Структура; + КонецЕсли; + + ПараметрыЗавершенияРаботыПользователей.Вставить("ПараметрыАдминистрирования", Значение); + +КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// // Обработчики оповещений. @@ -288,3 +354,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index 9b34a9425..8cdee6573 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -3,225 +3,26 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Принудительное отключение сеансов. +// Удаляет все сеансы информационной базы кроме текущего +// +Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт + + НомерТекущегоСеанса = СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().НомерСеансаИнформационнойБазы; + + ВсеКромеТекущего = Новый Структура; + ВсеКромеТекущего.Вставить("Свойство", "Номер"); + ВсеКромеТекущего.Вставить("ВидСравнения", ВидСравнения.НеРавно); + ВсеКромеТекущего.Вставить("Значение", НомерТекущегоСеанса); + + Фильтр = Новый Массив; + Фильтр.Добавить(ВсеКромеТекущего); -// Отключает сеанс по номеру сеанса. -// -// Параметры -// НомерСеанса - Число - номер сеанса для отключения -// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи -// -// Возвращаемое значение: -// Булево – результат отключения сеанса. -// -Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - - Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда - Возврат Истина;// Отключены все пользователи, кроме текущего сеанса - КонецЕсли; - - // Невозможно принудительно отсоединить сеансы в файловом режиме работы - Если ИнформационнаяБазаФайловая() Тогда - СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеанс в файловом режиме работы'"); - СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); - Возврат Ложь; - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() - Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - // Передаем управление на Windows-сервер - Возврат СоединенияИБВызовСервера.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); - КонецЕсли; -#КонецЕсли - - Попытка - Возврат ЗавершитьСеанс(НомерСеанса); - Исключение - СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеанс - |по причине: - |%1 - | - |Возможно не настроены параметры администрирования ИБ. - |Технические подробности об ошибке см. в Журнале регистрации.'"); - ИнфоОбОшибке = ИнформацияОбОшибке(); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, - КраткоеПредставлениеОшибки(ИнфоОбОшибке)); - ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнфоОбОшибке), "Ошибка"); - Возврат Ложь; - КонецПопытки; - -КонецФункции - -// Отключить все активные соединения ИБ (кроме текущего сеанса). -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. -// -// Возвращаемое значение: -// Булево – результат отключения соединений. -// -Функция ОтключитьСоединенияИБ(Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт - - Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда - Возврат Истина; // Отключены все пользователи, кроме текущего сеанса - КонецЕсли; - - // Невозможно принудительно отсоединить сеансы в файловом режиме работы - Если ИнформационнаяБазаФайловая() Тогда - СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы в файловом режиме работы'")); - Возврат Ложь; - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() - Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - // Передаем управление на сервер - Возврат СоединенияИБВызовСервера.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); - КонецЕсли; - СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ( - НСтр("ru = 'Невозможно принудительно завершить сеансы, - | если на сервере не установлена ОС Microsoft Windows'")); - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - Попытка - Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); - Для каждого Сеанс Из Сеансы.Сеансы Цикл - // Разрываем сеансы с ИБ - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершается сеанс: %1, компьютер %2, начат %3, режим %4'"), - Сеанс.UserName, - Сеанс.Host, - Сеанс.StartedAt, - Сеанс.AppID); - - ЗаписатьСобытие(Сообщение, "Информация", Ложь); - Сеансы.АгентСервера.TerminateSession(Сеансы.КластерСерверов, Сеанс); - КонецЦикла; - -#Если НаКлиенте Тогда - КлиентскиеСообщения = СообщенияДляЖурналаРегистрации; -#Иначе - КлиентскиеСообщения = Неопределено; -#КонецЕсли - Возврат СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы(КлиентскиеСообщения) <= 1; - Исключение - ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); - Возврат Ложь; - КонецПопытки; - -КонецФункции - -// Подключается к кластеру серверов и получает список -// активных сеансов с использованием указанных параметров администрирования. -// -// Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ -// ПодробноеСообщениеОбОшибке – Булево – в случае ошибки в текст исключения включается -// дополнительная информация об ошибке. -// -// Возвращаемое значение: -// Булево – Истина, если проверка завершена успешно. -// -Процедура ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, - Знач ПодробноеСообщениеОбОшибке = Ложь) Экспорт - - Попытка - Если ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - // Передаем управление на сервер - СоединенияИБВызовСервера.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); - КонецЕсли; - // Невозможно выполнить операцию при работе с клиента через веб-сервер, - // если на сервере не установлена ОС Microsoft Windows - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); - КонецЕсли; -#КонецЕсли - - Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); - Исключение - Сообщение = НСтр("ru = 'Не удалось подключиться к кластеру серверов.'"); - ЗаписатьСобытие(Сообщение + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); - Если ПодробноеСообщениеОбОшибке Тогда - Сообщение = Сообщение + " " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецЕсли; - ВызватьИсключение Сообщение; - КонецПопытки; + АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Блокировка регламентных заданий. - -// Установить или снять блокировку регламентных заданий. -// -// Параметры -// Значение – Булево - если Истина, то будет установлена блокировка регламентных заданий -// -Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт - - Если ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий в файловом режиме работы'"); - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - // Передаем управление на сервер - СоединенияИБВызовСервера.УстановитьБлокировкуРегламентныхЗаданий(Значение); - КонецЕсли; - ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий при работе с клиента через веб-сервер, - | если на сервере не установлена ОС Microsoft Windows'"); - КонецЕсли; -#КонецЕсли - - Подключение = ПодключитьсяКТекущейИБ(); - Подключение.ТекущаяБаза.ScheduledJobsDenied = Значение; - Подключение.РабочийПроцесс.UpdateInfoBase(Подключение.ТекущаяБаза); - -КонецПроцедуры - -// Получить текущее состояние блокировки регламентных заданий. -// -// Возвращаемое значение: -// Булево – Истина, если блокировка установлена. -// -Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт - - Если ИнформационнаяБазаФайловая() Тогда - Возврат Ложь; - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Если СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - // Передаем управление на сервер - Возврат СоединенияИБВызовСервера.БлокировкаРегламентныхЗаданийУстановлена(); - КонецЕсли; - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - Подключение = ПодключитьсяКТекущейИБ(); - Возврат Подключение.ТекущаяБаза.ScheduledJobsDenied; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - // Получить строку соединения ИБ, если задан нестандартный порт кластера серверов. // // Параметры @@ -315,34 +116,6 @@ КонецФункции -// Получить пустую структуру параметров администрирования кластера серверов. -// -// Параметры: -// ИмяАдминистратораИБ - Строка - имя администратора информационной базы. -// ПарольАдминистратораИБ - Строка - пароль администратора информационной базы. -// ИмяАдминистратораКластера - Строка - имя администратора кластера. -// ПарольАдминистратораКластера - Строка - пароль администратора кластера. -// ПортКластераСерверов - Число - порт кластера серверов. -// ПортАгентаСервера - Число - порт агента серверов. -// -// Возвращаемое значение: -// Структура – структура с полями входящих параметров данной функции. -// -Функция НовыеПараметрыАдминистрированияИБ(Знач ИмяАдминистратораИБ = "", Знач ПарольАдминистратораИБ = "", - Знач ИмяАдминистратораКластера = "", Знач ПарольАдминистратораКластера = "", - Знач ПортКластераСерверов = 0, Знач ПортАгентаСервера = 0) Экспорт - - Возврат Новый Структура("ИмяАдминистратораИБ,ПарольАдминистратораИБ,ИмяАдминистратораКластера, - |ПарольАдминистратораКластера,ПортКластераСерверов,ПортАгентаСервера", - ИмяАдминистратораИБ, - ПарольАдминистратораИБ, - ИмяАдминистратораКластера, - ПарольАдминистратораКластера, - ПортКластераСерверов, - ПортАгентаСервера); - -КонецФункции - // Возвращает текстовую константу для формирования сообщений. // Используется в целях локализации. // @@ -387,287 +160,6 @@ КонецФункции -// Подключается к агенту сервера. -// -// Параметры: -// ПараметрыСоединенияССервером1СПредприятие - Структура - параметры соединения с сервером 1С:Предприятие. -// -// Возвращаемое значение - Структура с полями: -// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. -// ИмяСервера - Строка - имя сервера. -// ИмяИБ - Строка - имя информационной базы. -// АгентСервера - Строка - агент сервера. -// НомерПортаКластера - Число - номер порта кластера. -// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. -// -Функция ПодключитьсяКАгентуСервера(ПараметрыСоединенияССервером1СПредприятие) - - ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СтрокаСоединенияИнформационнойБазы(), ";"); - - СтрокаИмениСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); - ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - - #Если Клиент Тогда - COMСоединитель = Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); - #Иначе - COMСоединитель = Новый COMОбъект(ОбщегоНазначения.ИмяCOMСоединителя()); - #КонецЕсли - - СписокСерверовКластера = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаИмениСервера, ","); - - СообщениеОбОшибке = Символы.ПС; - ШаблонОшибки = Нстр("ru = 'Не удалось подключиться к серверу ""%1"" по причине: - |%2'"); - - Для Каждого ИмяСервера Из СписокСерверовКластера Цикл - - РазделительПорта = Найти(ИмяСервера, ":"); - Если РазделительПорта > 0 Тогда - ИмяИПортСервера = ИмяСервера; - ИмяСервера = Сред(ИмяИПортСервера, 1, РазделительПорта - 1); - НомерПортаКластера = Число(Сред(ИмяИПортСервера, РазделительПорта + 1)); - ИначеЕсли ПараметрыСоединенияССервером1СПредприятие.ПортКластераСерверов <> 0 Тогда - НомерПортаКластера = ПараметрыСоединенияССервером1СПредприятие.ПортКластераСерверов; - Иначе - НомерПортаКластера = COMСоединитель.RMngrPortDefault; - КонецЕсли; - - ИдентификаторАгентаСервера = ИмяСервера; - Если ПараметрыСоединенияССервером1СПредприятие.ПортАгентаСервера <> 0 Тогда - ИдентификаторАгентаСервера = ИдентификаторАгентаСервера + ":" + - Формат(ПараметрыСоединенияССервером1СПредприятие.ПортАгентаСервера, "ЧГ=0"); - КонецЕсли; - - // Подключение к агенту сервера - Попытка - - АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера); - Результат = Новый Структура("COMСоединитель,ИмяСервера,ИмяИБ,АгентСервера,НомерПортаКластера,ИдентификаторАгентаСервера"); - Результат.COMСоединитель = COMСоединитель; - Результат.ИмяСервера = ИмяСервера; - Результат.ИмяИБ = ИмяИБ; - Результат.АгентСервера = АгентСервера; - Результат.НомерПортаКластера = НомерПортаКластера; - Результат.ИдентификаторАгентаСервера = ИдентификаторАгентаСервера; - Возврат Результат; - - Исключение - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, - ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - СообщениеОбОшибке = СообщениеОбОшибке + ТекстОшибки + Символы.ПС + Символы.ПС; - - КонецПопытки; - - КонецЦикла; - - ВызватьИсключение СообщениеОбОшибке; - -КонецФункции - -// Подключается к рабочему процессу. -// -// Параметры: -// ПараметрыСоединенияССервером1СПредприятие - Структура - параметры соединения с сервером 1С:Предприятие. -// -// Возвращаемое значение - Структура с полями: -// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. -// ИмяСервера - Строка - имя сервера. -// ИмяИБ - Строка - имя информационной базы. -// АгентСервера - COMОбъект - агент сервера. -// НомерПортаКластера - Число - номер порта кластера. -// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. -// РабочийПроцесс - РабочийПроцесс - рабочий процесс. -// -Функция ПодключитьсяКРабочемуПроцессу(ПараметрыСоединенияССервером1СПредприятие) - - // Подключение к агенту сервера - Подключение = ПодключитьсяКАгентуСервера(ПараметрыСоединенияССервером1СПредприятие); - - // Найдем необходимый нам кластер - Для каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл - - Если Кластер.MainPort <> Подключение.НомерПортаКластера Тогда - Продолжить; - КонецЕсли; - - ПортРабочегоПроцесса = -1; - Подключение.АгентСервера.Authenticate(Кластер, - ПараметрыСоединенияССервером1СПредприятие.ИмяАдминистратораКластера, - ПараметрыСоединенияССервером1СПредприятие.ПарольАдминистратораКластера); - РабочиеПроцессы = Подключение.АгентСервера.GetWorkingProcesses(Кластер); - Для Каждого РабочийПроцесс Из РабочиеПроцессы Цикл - Если РабочийПроцесс.Running = 1 Тогда - ПортРабочегоПроцесса = РабочийПроцесс.MainPort; - ИмяСервераРабочегоПроцесса = РабочийПроцесс.HostName; - Прервать; - КонецЕсли; - КонецЦикла; - Если ПортРабочегоПроцесса = -1 Тогда - ВызватьИсключение НСтр("ru = 'Нет ни одного активного рабочего процесса'"); - КонецЕсли; - Прервать; - - КонецЦикла; - - ИдентификаторРабочегоПроцесса = ИмяСервераРабочегоПроцесса + ":" + Формат(ПортРабочегоПроцесса, "ЧГ=0"); - - // Подключение к рабочему процессу - РабочийПроцесс = Подключение.COMСоединитель.ConnectWorkingProcess(ИдентификаторРабочегоПроцесса); - Подключение.Вставить("РабочийПроцесс", РабочийПроцесс); - Возврат Подключение; - -КонецФункции - -// Подключиться к рабочему процессу текущей информационной базы. -// -// Возвращаемое значение - Структура с полями: -// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. -// ИмяСервера - Строка - имя сервера. -// ИмяИБ - Строка - имя информационной базы. -// АгентСервера - COMОбъект - агент сервера. -// НомерПортаКластера - Число - номер порта кластера. -// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. -// ТекущаяБаза - IInfoBaseInfo - информационная база. -// -Функция ПодключитьсяКТекущейИБ() - - ПараметрыАдминистрированияИБ = СоединенияИБВызовСервераПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Подключение = ПодключитьсяКРабочемуПроцессу(ПараметрыАдминистрированияИБ); - Подключение.РабочийПроцесс.AddAuthentication(ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ, - ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ); - - Базы = Подключение.РабочийПроцесс.GetInfoBases(); - ТекущаяБаза = Неопределено; - Для Каждого База Из Базы Цикл - Если База.Name = Подключение.ИмяИБ Тогда - ТекущаяБаза = База; - Прервать; - КонецЕсли; - КонецЦикла; - Если ТекущаяБаза = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'База ""%1"" не зарегистрирована в кластере сервером'"), Подключение.ИмяИБ); - КонецЕсли; - Подключение.Вставить("ТекущаяБаза", ТекущаяБаза); - Возврат Подключение; - -КонецФункции - -// Возвращает активные сеансы информационной базы. -// -// Параметры: -// ВсеКромеТекущего - Булево - Истина, если не считать текущий сеанс. -// ПараметрыАдминистрированияИБ - Структура - см. НовыеПараметрыАдминистрированияИБ. -// -// Возвращаемое значение - Структура с полями: -// АгентСервера - COMОбъект - агент сервера. -// КластерСерверов - COMОбъект - кластер серверов. -// Сеансы - Массив - активные сеансы. -// -Функция ПолучитьАктивныеСеансыИБ(Знач ВсеКромеТекущего = Истина, Знач ПараметрыАдминистрированияИБ = Неопределено) - - Результат = Новый Структура("АгентСервера,КластерСерверов,Сеансы", Неопределено, Неопределено, Новый Массив); - - // Подключение к агенту сервера - Параметры = ПараметрыАдминистрированияИБ; - Если Параметры = Неопределено Тогда - Параметры = СоединенияИБВызовСервераПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - КонецЕсли; - Подключение = ПодключитьсяКАгентуСервера(Параметры); - Результат.АгентСервера = Подключение.АгентСервера; - - // Найдем необходимый нам кластер - Для каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл - - Если Кластер.MainPort <> Подключение.НомерПортаКластера Тогда - Продолжить; - КонецЕсли; - - Результат.КластерСерверов = Кластер; - Подключение.АгентСервера.Authenticate(Кластер, - Параметры.ИмяАдминистратораКластера, - Параметры.ПарольАдминистратораКластера); - - // Получаем список сеансов - НомерТекущегоСеанса = СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().НомерСеансаИнформационнойБазы; - СписокСеансов = Подключение.АгентСервера.GetSessions(Кластер); - Для Каждого Сеанс из СписокСеансов Цикл - Если ВРег(Сеанс.InfoBase.Name) <> ВРег(Подключение.ИмяИБ) Тогда - Продолжить; - КонецЕсли; - Если НЕ ВсеКромеТекущего ИЛИ (НомерТекущегоСеанса <> Сеанс.SessionID) Тогда - Результат.Сеансы.Добавить(Сеанс); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Возвращает активные сеансы информационной базы. -// -// Параметры: -// НомерСеансаДляЗавершения - Число - номер сеанса. -// -// Возвращаемое значение: -// Булево - Истина, если сеанс удалось завершить. -// -Функция ЗавершитьСеанс(Знач НомерСеансаДляЗавершения) - - Результат = Новый Структура("СоединениеСРабочимПроцессом, Соединения", Неопределено, Новый Массив); - - Если ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); - КонецЕсли; -#КонецЕсли - - // Подключение к агенту сервера - ПараметрыАдминистрированияИБ = СоединенияИБВызовСервераПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Подключение = ПодключитьсяКАгентуСервера(ПараметрыАдминистрированияИБ); - - // Найдем необходимый нам кластер - Для Каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл - - Если Кластер.MainPort = Подключение.НомерПортаКластера Тогда - - Подключение.АгентСервера.Authenticate(Кластер, - ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера, - ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); - СписокСеансов = Подключение.АгентСервера.GetSessions(Кластер); - Для Каждого Сеанс из СписокСеансов Цикл - Если ВРег(Сеанс.InfoBase.Name) = ВРег(Подключение.ИмяИБ) Тогда - Если Сеанс.SessionID = НомерСеансаДляЗавершения Тогда - Подключение.АгентСервера.TerminateSession(Кластер, Сеанс); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Разорван сеанс %1: Пользователь %2, компьютер %3, начат %4, режим %5'"), - Формат(НомерСеансаДляЗавершения, "ЧГ=0"), - Сеанс.UserName, - Сеанс.Host, - Сеанс.StartedAt, - Сеанс.AppID); - ЗаписатьСобытие(Сообщение, "Информация"); - Возврат Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; - -КонецФункции - // Возвращает является ли информационная база файловой. // // Возвращаемое значение: @@ -682,19 +174,4 @@ Возврат Результат; КонецФункции -// Записывает событие в журнал регистрации. -// -// Параметры: -// ТекстСобытия - Строка - текст события. -// ПредставлениеУровня - Строка - представление уровня. -// Записать - Булево - Истина, если сразу записать в журнал регистрации. -// -Процедура ЗаписатьСобытие(Знач ТекстСобытия, ПредставлениеУровня = "Информация", Записать = Истина) -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - ПредопределенноеЗначение("УровеньЖурналаРегистрации." + ПредставлениеУровня),,, ТекстСобытия); -#Иначе - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - ПредставлениеУровня, ТекстСобытия,,Записать); -#КонецЕсли -КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl index 8e3586e48..c1993a37d 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -45,8 +44,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Control/a.b.c.d}CorrespondentConnectionCompleted @@ -184,8 +181,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования // @@ -199,5 +197,4 @@ КонецФункции - - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl index cebbdafd7..12093e01c 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -63,8 +62,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПредставлениеОперацииПолученияНастроек() @@ -90,4 +90,4 @@ КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl index 66a64e589..ee124bf27 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -45,8 +44,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/SaaS/ExchangeAdministration/Manage/a.b.c.d}ConnectCorrespondent @@ -184,8 +181,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -197,3 +195,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index 5ebbfc83b..9e7bf0c41 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -57,8 +56,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПодключитьКорреспондента(Сообщение, Отправитель) @@ -232,6 +232,8 @@ ВызватьИсключение СтрокаСообщения; КонецЕсли; + ОбменДаннымиСервер.УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных(Тело.ImportTransactionQuantity); + СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("КонечнаяТочкаКорреспондента", Корреспондент); @@ -247,8 +249,6 @@ СтруктураЗаписи.Вставить("FTPСоединениеПуть", Тело.FTP_ExchangeFolder); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена[Тело.ExchangeTransport]); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", Тело.ExportTransactionQuantity); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", Тело.ImportTransactionQuantity); СтруктураЗаписи.Вставить("ПарольАрхиваСообщенияОбмена", Тело.ExchangeMessagePassword); РегистрыСведений.НастройкиТранспортаОбменаОбластейДанных.ОбновитьЗапись(СтруктураЗаписи); @@ -280,11 +280,11 @@ Если НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда Если Не ПустаяСтрока(НастройкиТранспорта.FILEОбщийКаталогОбменаИнформацией) - И Не ПустаяСтрока(НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией) Тогда + И Не ПустаяСтрока(НастройкиТранспорта.ОтносительныйКаталогОбменаИнформацией) Тогда АбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( НастройкиТранспорта.FILEОбщийКаталогОбменаИнформацией, - НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией); + НастройкиТранспорта.ОтносительныйКаталогОбменаИнформацией); АбсолютныйКаталог = Новый Файл(АбсолютныйКаталогОбменаИнформацией); @@ -346,3 +346,5 @@ Возврат НСтр("ru = 'Обмен данными.Подключение корреспондента обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index 09274e1d6..ac369b204 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -1,6 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает новое сообщение. // @@ -168,7 +167,7 @@ // Процедура ЗаписатьСобытиеНачалоОбработки(Знач Сообщение) Экспорт - ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Начало обработки'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Начало обработки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , @@ -184,7 +183,7 @@ // Процедура ЗаписатьСобытиеОкончаниеОбработки(Знач Сообщение) Экспорт - ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Окончание обработки'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Окончание обработки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , @@ -240,16 +239,17 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обработчик события перед отправкой сообщения. // Обработчик данного события вызывается перед запись сообщения для последующей отправки // Обработчик вызывается для каждого отправляемого сообщения. // // Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело записываемого сообщения. +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - тело записываемого сообщения. // Процедура ПередОтправкойСообщения(Знач КаналСообщений, Знач ТелоСообщения) Экспорт @@ -261,7 +261,7 @@ Если ТелоСодержитТипизированноеСообщение(ТелоСообщения, Сообщение) Тогда Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда Если ОбщегоНазначения.ЗначениеРазделителяСеанса() <> Сообщение.Body.Zone Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Отправка сообщения'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Отправка сообщения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , @@ -284,9 +284,9 @@ // Обработчик вызывается для каждого отправляемого сообщения. // // Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// КаналСообщений - Строка - идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения - Произвольный - тело отправляемого сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -296,7 +296,7 @@ Сообщение.Header.Sent = ТекущаяУниверсальнаяДата(); ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Отправка'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Отправка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , @@ -321,9 +321,9 @@ // Обработчик вызывается для каждого получаемого сообщения. // // Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение +// ТелоСообщения - Произвольный - тело полученного сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -334,7 +334,7 @@ ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Получение'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Получение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , @@ -461,3 +461,5 @@ Сообщение = ТрансляцияXDTO.ТранслироватьВВерсию(Сообщение, ВерсияКорреспондента, ИнтерфейсСообщения.ПространствоИмен); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl index 71be92190..50ceb5361 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl @@ -3,15 +3,14 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений // // Параметры: -// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. -// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. -// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - тело сообщения, полученное из канала, которое подлежит обработке. +// Отправитель - ПланОбменаСсылка.ОбменСообщениями - конечная точка, которая является отправителем сообщения. // Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт @@ -77,8 +76,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПолучитьОбработчикКаналаСообщенийСервиса(КаналСообщений) @@ -108,4 +108,6 @@ КонецЦикла; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl index 918aec2ce..8b7cf7bd7 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl @@ -4,56 +4,49 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события при получении сообщения. // Обработчик данного события вызывается при получении сообщения из XML-потока. // Обработчик вызывается для каждого получаемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - Тело полученного сообщения. В обработчике события тело сообщения может +// быть изменено, например, дополнено информацией. // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт - - КонецПроцедуры // Обработчик события при отправке сообщения. // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения - Произвольный - тело отправляемого сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт - - КонецПроцедуры // Процедура вызывается при начале обработки входящего сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение. // Процедура ПриНачалеОбработкиСообщения(Знач Сообщение, Знач Отправитель) Экспорт - - КонецПроцедуры // Процедура вызывается после обработки входящего сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение, // СообщениеОбработано - булево, флаг того, что сообщение было успешно обработано. Если значение @@ -62,19 +55,17 @@ // Процедура ПослеОбработкиСообщения(Знач Сообщение, Знач Отправитель, СообщениеОбработано) Экспорт - - КонецПроцедуры // Процедура вызывается при возникновении ошибки обработки сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение. // Процедура ПриОшибкеОбработкиСообщения(Знач Сообщение, Знач Отправитель) Экспорт - - КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl index 6e4befdf9..06e35fab3 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl @@ -1,6 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает XDTO тип - сообщение // @@ -125,3 +124,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index a1bb78502..1c916dddf 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -3,14 +3,13 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Вызывается при заполнении массива справочников, которые могут использоваться для // хранения сообщений. // // Параметры: -// МассивСправочник - Массив, в этот параметр в данном методе должны быть добавлены +// МассивСправочник - Массив - в этот параметр в данном методе должны быть добавлены // менеджеры справочников, которые могут использоваться для хранения заданий очереди. // Процедура ПриЗаполненииСправочниковСообщений(МассивСправочников) Экспорт @@ -22,7 +21,7 @@ // Выбирает справочник для сообщения // // Параметры: -// ТелоСообщения - произвольный, тело сообщения. +// ТелоСообщения - Произвольный - тело сообщения. // Функция ПриВыбореСправочникаДляСообщения(Знач ТелоСообщения) Экспорт @@ -73,10 +72,10 @@ // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения - Произвольный - Тело отправляемого сообщения. В обработчике события тело сообщения +// может быть изменено, например, дополнено информацией. // Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -131,10 +130,10 @@ // Обработчик данного события вызывается при получении сообщения из XML-потока. // Обработчик вызывается для каждого получаемого сообщения. // -// Параметры: -// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. -// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. -// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// Параметры: +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - Тело полученного сообщения. В обработчике события тело +// сообщения может быть изменено, например, дополнено информацией. // Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт @@ -183,7 +182,7 @@ // Процедура вызывается при начале обработки входящего сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение. // @@ -201,7 +200,7 @@ // Процедура вызывается после обработки входящего сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение, // СообщениеОбработано - булево, флаг того, что сообщение было успешно обработано. Если значение @@ -221,7 +220,7 @@ // Процедура вызывается при возникновении ошибки обработки сообщения // // Параметры: -// Сообщение - ОбъектXDTO, входящее сообщение, +// Сообщение - ОбъектXDTO - входящее сообщение, // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующей // информационной базе, отправившей сообщение. // @@ -235,8 +234,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбработатьКлючОбластиВСообщении(Сообщение) @@ -324,3 +324,5 @@ Возврат (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МаксимальнаяВерсия, "1.0.4.1") >= 0); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl deleted file mode 100644 index f7de23bf9..000000000 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl +++ /dev/null @@ -1,123 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ИНТЕРФЕЙСА СООБЩЕНИЙ КОНТРОЛЯ ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений -Функция Пакет() Экспорт - - Возврат "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 deleted file mode 100644 index 01a3c94f2..000000000 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс - - ru - Сообщения контроль дополнительных отчетов и обработок интерфейс - - true - true - true - diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl deleted file mode 100644 index 2402085d4..000000000 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ТРАНСЛЯЦИИ СООБЩЕНИЙ КОНТРОЛЯ ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК -// ИЗ ВЕРСИИ 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 deleted file mode 100644 index 55511404b..000000000 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1 - - ru - Сообщения контроль удаленного администрирования обработчик трансляции 1.0.0.1 - - true - true - true - diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl index 6cfec0c29..459b52a5e 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -34,8 +33,6 @@ // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Выполняет регистрацию обработчиков трансляции сообщений. @@ -98,8 +95,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -111,3 +109,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl index db2e61dd7..006254b34 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает номер версии, для трансляции с которой предназначен обработчик Функция ИсходнаяВерсия() Экспорт @@ -125,4 +124,6 @@ Возврат Результат; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl index 98e094004..d8aa22627 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -34,8 +33,6 @@ // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Выполняет регистрацию обработчиков трансляции сообщений. @@ -140,8 +137,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -152,3 +150,5 @@ Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3/Module.bsl index 277cb29e0..d9bdc9767 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает номер версии, для трансляции с которой предназначен обработчик Функция ИсходнаяВерсия() Экспорт @@ -62,8 +61,4 @@ КонецФункции - - - - - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl index 41622883f..b570f6c21 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает номер версии, для трансляции с которой предназначен обработчик Функция ИсходнаяВерсия() Экспорт @@ -62,8 +61,4 @@ КонецФункции - - - - - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl index 76e5597e0..4f0ef7a87 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -45,8 +44,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Control/a.b.c.d}SetupExchangeStep1Completed @@ -229,8 +226,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -242,4 +240,4 @@ КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl index 015600e0d..3a9118888 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -100,8 +99,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Настройка обмена @@ -219,5 +219,4 @@ КонецФункции - - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl index 7e779f506..514cefc86 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получает список обработчиков сообщений, которые обрабатывает данная подсистема. // @@ -60,8 +59,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Для совместимости, если корреспондент имеет БСП версии ниже БСП 2.1.2 // @@ -314,3 +314,5 @@ Возврат НСтр("ru = 'Отправка сообщений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl index bd67abcc8..161a84ff8 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -45,8 +44,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/SaaS/Exchange/Manage/a.b.c.d}SetupExchangeStep1 @@ -139,9 +136,9 @@ КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -153,4 +150,4 @@ КонецФункции - +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index 50054566a..9f335aec1 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -76,8 +75,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура НастроитьОбменШаг1(Сообщение, Отправитель) @@ -470,3 +470,5 @@ КонецПопытки; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index acc0992e4..0259b9caa 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -3,9 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - +#Область СлужебныеПроцедурыИФункции // Получает список обработчиков сообщений, которые обрабатывает данная подсистема. // @@ -21,9 +19,9 @@ // Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений // // Параметры: -// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. -// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. -// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// КаналСообщений - Строка - идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения - Произвольный - тело сообщения, полученное из канала, которое подлежит обработке. +// Отправитель - ПланОбменаСсылка.ОбменСообщениями - конечная точка, которая является отправителем сообщения. // Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт @@ -43,7 +41,6 @@ ВызватьИсключение; КонецПопытки; - КонецПроцедуры // Обрабатывает новые данные. Вызывается из ОбработатьСообщение и из ПоставляемыеДанные.ЗагрузитьИОбработатьДанные @@ -84,7 +81,6 @@ УровеньЖурналаРегистрации.Информация, , , ?(Загружать, НСтр("ru = 'В очередь добавлено задание на загрузку.'"), НСтр("ru = 'Загрузка данных не требуется.'")) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); - КонецПроцедуры @@ -346,7 +342,6 @@ Возврат XDTOОбъект; КонецФункции - // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Процедура ДобавитьОбработчикКаналаСообщений(Знач Канал, Знач ОбработчикКанала, Знач Обработчики) @@ -356,3 +351,5 @@ Обработчик.Обработчик = ОбработчикКанала; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl index 4f0b9880c..b91eb6c36 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -49,8 +48,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/1cfresh/RemoteAdministration/App/a.b.c.d}UpdateUser @@ -263,8 +260,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -274,4 +272,6 @@ Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_1/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_1/Module.bsl index e54836e7a..38b2e04dc 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -69,8 +68,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) @@ -155,3 +155,5 @@ Сообщение.Body.UserServiceID); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2/Module.bsl index 3fb948af8..b50a65bfa 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -71,8 +70,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) @@ -173,3 +173,5 @@ ТаблицаРейтинга, ТелоСообщения.SetAllZones); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3/Module.bsl index 817d0b0f6..c17c07201 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -73,8 +72,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) @@ -182,3 +182,5 @@ СообщенияУдаленногоАдминистрированияРеализация.ПрикрепитьОбластьДанных(ТелоСообщения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl index 735adc672..c646d720f 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -42,7 +41,7 @@ Словарь = СообщенияУдаленногоАдминистрированияИнтерфейс; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда СловарьДОиО = ОбщегоНазначения.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс"); Иначе СловарьДОиО = Неопределено; @@ -89,8 +88,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) @@ -201,157 +201,13 @@ Процедура УстановитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - - Попытка - - МодульДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс"); - МодульДополнительныеОтчетыИОбработкиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентСервер"); - - ТелоСообщения = Сообщение.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); - - Исключение - - ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку(ТелоСообщения.Extension); - ДополнительныеОтчетыИОбработкиВМоделиСервиса.ОбработатьОшибкуУстановкиДополнительнойОбработкиВОбластьДанных( - ПоставляемаяОбработка, ТелоСообщения.Installation, ТекстИсключения); - - КонецПопытки; - - КонецЕсли; + КонецПроцедуры Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда ТелоСообщения = Сообщение.Body; @@ -366,7 +222,7 @@ Процедура ОтключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначения.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); @@ -379,7 +235,7 @@ Процедура ВключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначения.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); @@ -392,7 +248,7 @@ Процедура ОтозватьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначения.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); @@ -403,3 +259,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl index bfffc8d96..cbed81623 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -73,8 +72,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) @@ -182,3 +182,5 @@ СообщенияУдаленногоАдминистрированияРеализация.ПрикрепитьОбластьДанных(ТелоСообщения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl index 9c4485d5a..91602949c 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}UpdateUser // @@ -543,7 +542,6 @@ ВызватьИсключение; КонецПопытки; КонецЕсли; - КонецПроцедуры @@ -701,8 +699,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПолучитьЯзыкПоКоду(Знач КодЯзыка) @@ -882,4 +881,6 @@ КонецЦикла; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl index fb9266f5e..ac0059890 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -46,8 +45,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}PlanZoneBackup @@ -114,8 +111,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -125,4 +123,6 @@ Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl index e7d061cf1..9ffeeb7f8 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -53,8 +52,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПланироватьАрхивациюОбласти(Знач Сообщение, Знач Отправитель) @@ -76,3 +76,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl index 68ca8c414..1774f8fbf 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений Функция Пакет() Экспорт @@ -55,8 +54,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПланироватьАрхивациюОбласти(Знач Сообщение, Знач Отправитель) @@ -101,3 +101,5 @@ ТелоСообщения.Zone); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl index c1c3782d7..911854a3b 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработка входящих сообщений с типом {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}PlanZoneBackup // @@ -131,3 +130,5 @@ КонецПопытки; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl deleted file mode 100644 index fff9227fd..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl +++ /dev/null @@ -1,153 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ИНТЕРФЕЙСА СООБЩЕНИЙ УПРАВЛЕНИЯ ДОПОЛНИТЕЛЬНЫМИ ОТЧЕТАМИ И ОБРАБОТКАМИ -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений -Функция Пакет() Экспорт - - Возврат "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 deleted file mode 100644 index 374873365..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс - - ru - Сообщения управления дополнительными отчетами и обработками интерфейс - - true - true - true - diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl deleted file mode 100644 index 74ae460e8..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl +++ /dev/null @@ -1,234 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 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); - - Исключение - - ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку(ТелоСообщения.Extension); - ДополнительныеОтчетыИОбработкиВМоделиСервиса.ОбработатьОшибкуУстановкиДополнительнойОбработкиВОбластьДанных( - ПоставляемаяОбработка, ТелоСообщения.Installation, ТекстИсключения); - - КонецПопытки; - -КонецПроцедуры - -Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - - ТелоСообщения = Сообщение.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 deleted file mode 100644 index 79bba172e..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1 - - ru - Сообщения управления дополнительными отчетами и обработками обработчик сообщения 1. 0 .1 .1 - - true - true - true - diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl deleted file mode 100644 index e0e53b646..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl +++ /dev/null @@ -1,238 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБЩАЯ РЕАЛИЗАЦИЯ ОБРАБОТКИ СООБЩЕНИЙ УПРАВЛЕНИЯ ДОПОЛНИТЕЛЬНЫМИ ОТЧЕТАМИ И ОБРАБОТКАМИ -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Обработка входящих сообщений с типом {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 deleted file mode 100644 index 5eecad9d0..000000000 --- a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация - - ru - Сообщения управления дополнительными отчетами и обработками реализация - - true - true - true - diff --git a/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl index b3dccfc60..93ddc6da0 100644 --- a/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений Функция Пакет() Экспорт @@ -34,8 +33,6 @@ // Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Выполняет регистрацию обработчиков трансляции сообщений. @@ -45,8 +42,6 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - - КонецПроцедуры // Возвращает тип сообщения {http://www.1c.ru/1cFresh/ManageApplication/Messages/a.b.c.d}RevokeUserAccess @@ -64,8 +59,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) @@ -75,4 +71,6 @@ Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 92f25771a..6f54f9c68 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Записать настройку подтверждения завершения работы программы // для текущего пользователя. @@ -38,6 +37,7 @@ УстановитьПривилегированныйРежим(Истина); Если ПараметрыСеанса.ПараметрыКлиентаНаСервере.Количество() = 0 Тогда + // Первый серверный вызов с клиента при запуске. ПараметрыКлиента = Новый Соответствие; ПараметрыКлиента.Вставить("ПараметрЗапуска", Параметры.ПараметрЗапуска); ПараметрыКлиента.Вставить("СтрокаСоединенияИнформационнойБазы", Параметры.СтрокаСоединенияИнформационнойБазы); @@ -45,11 +45,33 @@ ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПланыОбмена.ГлавныйУзел() <> Неопределено + Или ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда + // Предотвращение случайного обновления предопределенных данных в подчиненном узле РИБ: + // - при запуске с временно отмененным главным узлом; + // - при реструктуризации данных в процессе восстановления узла. + Если ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы() + <> ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически Тогда + УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы( + ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически); + КонецЕсли; + Если ПланыОбмена.ГлавныйУзел() <> Неопределено + И Не ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда + // Сохранение главного узла для возможности восстановления. + ГлавныйУзелМенеджер = Константы.ГлавныйУзел.СоздатьМенеджерЗначения(); + ГлавныйУзелМенеджер.Значение = ПланыОбмена.ГлавныйУзел(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГлавныйУзелМенеджер); + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЕсли; УстановитьПривилегированныйРежим(Ложь); Если НЕ СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Тогда - Возврат ФиксированныеПараметрыКлиентаБезВременныхПараметров(Параметры); + ФиксированныеПараметры = ФиксированныеПараметрыКлиентаБезВременныхПараметров(Параметры); + Возврат ФиксированныеПараметры; КонецЕсли; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( @@ -72,7 +94,8 @@ Параметры.Вставить(Параметр.Ключ, Параметр.Значение); КонецЦикла; - Возврат ФиксированныеПараметрыКлиентаБезВременныхПараметров(Параметры); + ФиксированныеПараметры = ФиксированныеПараметрыКлиентаБезВременныхПараметров(Параметры); + Возврат ФиксированныеПараметры; КонецФункции @@ -153,8 +176,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Устанавливает состояние отмены при создании форм рабочего стола. // Требуется, если при запуске программы возникает необходимость @@ -257,20 +281,6 @@ КонецПроцедуры -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима) Экспорт - - ОбновитьПовторноИспользуемыеЗначения(); - - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - Если ПравоДоступа("Администрирование", Метаданные, ТекущийПользователь) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - СтандартныеПодсистемыСервер.ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима); - -КонецПроцедуры - // Возвращает Ложь, если установка монопольного режима возможна. Функция ОшибкаУстановкиМонопольногоРежима() Экспорт @@ -288,6 +298,29 @@ КонецФункции +// Только для внутреннего использования. +Функция ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении(ПрекратитьРаботу, Знач Событие, Знач ТекстОшибки) Экспорт + + Если Событие = "Запуск" Тогда + ИмяСобытия = НСтр("ru = 'Запуск программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Если ПрекратитьРаботу Тогда + НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы. Запуск программы аварийно завершен.'"); + Иначе + НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы.'"); + КонецЕсли; + Иначе + ИмяСобытия = НСтр("ru = 'Завершение программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при завершении программы.'"); + КонецЕсли; + + ОписаниеОшибки = НачалоОписанияОшибки + + Символы.ПС + Символы.ПС + + ТекстОшибки; + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + Возврат НачалоОписанияОшибки; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными @@ -336,3 +369,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl index e0e0f128a..8a4a6f04f 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Продолжает завершение в режиме интерактивного взаимодействия с пользователем // после установки Отказ = Истина. @@ -14,3 +13,12 @@ СтандартныеПодсистемыКлиент.НачатьИнтерактивнуюОбработкуПередЗавершениемРаботыСистемы(); КонецПроцедуры + +// Продолжает запуск в режиме интерактивного взаимодействия с пользователем. +Процедура ОбработчикОжиданияПриНачалеРаботыСистемы() Экспорт + + СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы(, Ложь); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index 1f659ab75..a2702ab75 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает форму объединения элементов справочников, планов видов характеристик, видов расчетов и счетов. // @@ -129,10 +128,10 @@ // ДополнительныеПараметры - Структура // ТекстВопроса - Строка - текст задаваемого вопроса. // Кнопки - РежимДиалогаВопрос, СписокЗначений - может быть задан список значений, в котором -// Значение – содержит значение, связанное с +// Значение - содержит значение, связанное с // кнопкой и возвращаемое при выборе кнопки. В качестве значения может использоваться значение // перечисления КодВозвратаДиалога, а также другие значения, поддерживающее XDTO-сериализацию. -// Представление – задает текст кнопки. +// Представление - задает текст кнопки. // // ДополнительныеПараметры - Структура - дополнительные параметры, см. описание к ПараметрыВопросаПользователю. // @@ -264,7 +263,6 @@ Попытка ПроверитьВерсиюПлатформыПриЗапуске(Параметры); - Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); КонецПопытки; @@ -289,7 +287,7 @@ // - Перезапустить - Булево - если требуется перезапуск программы; // - ДополнительныеПараметрыКоманднойСтроки - Строка - для перезапуска. // -// НепрерывноеВыполнение - Булево - Возвращаемое значение. Только для внутреннего использования. +// НепрерывноеВыполнение - Булево - Только для внутреннего использования. // Для перехода из обработчика ПередНачаломРаботыСистемы // выполненного в режиме интерактивной обработки. // @@ -366,8 +364,28 @@ // Процедура ПередЗавершениемРаботыСистемы(Отказ = Ложь, Знач ОповещениеЗавершения = Неопределено) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыКлиент.ПередЗавершениемРаботыСистемы", - "Отказ", Отказ, Тип("Булево")); + Если ПараметрыПриЗапускеИЗавершенииПрограммы.Свойство("СкрытьРабочийСтолПриНачалеРаботыСистемы") Тогда + // Произошла попытка закрытия до окончания запуска. + #Если ВебКлиент Тогда + // В веб-клиенте это возможно в штатном случае (при закрытии страницы в целом), + // поэтому закрытие блокируется, так как его все равно можно выполнить принудительно, + // а в случае случайного закрытия у пользователя должна быть возможность остаться на странице. + // Исключением является выход из области данных, т.е. когда "ОповещениеЗавершения <> Неопределено". + Если ОповещениеЗавершения = Неопределено Тогда + Отказ = Истина; + КонецЕсли; + #Иначе + // Не в веб-клиенте это возможно в случае ошибок в немодальной последовательности запуска. + // То есть нет ни одного окна блокирующего весь интерфейс. Закрытие нужно разрешить, + // но без стандартных процедур перед завершение работы системы, так как они могут + // привести к ошибке в процессе закрытия из-за незавершенного запуска. + #КонецЕсли + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( + "СтандартныеПодсистемыКлиент.ПередЗавершениемРаботыСистемы", "Отказ", Отказ, Тип("Булево")); + Если ОповещениеЗавершения <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыКлиент.ПередЗавершениемРаботыСистемы", "ОповещениеЗавершения", ОповещениеЗавершения, Тип("ОписаниеОповещения")); @@ -439,10 +457,10 @@ // // Параметры: // Кнопки - СписокЗначений - в котором: -// Значение – содержит значение, связанное с +// Значение - содержит значение, связанное с // кнопкой и возвращаемое при выборе кнопки. В качестве значения может использоваться значение // перечисления КодВозвратаДиалога, а также другие значения, поддерживающее XDTO сериализацию. -// Представление – задает текст кнопки. +// Представление - задает текст кнопки. // // БольшеНеЗадаватьЭтотВопрос - Булево - принимает значение, выбранное пользователем в соответствующим // флажке диалога. @@ -510,8 +528,9 @@ // Конец ИспользованиеМодальности -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // После предупреждения вызывает процедуру с параметрами Результат, ДополнительныеПараметры. // @@ -536,11 +555,11 @@ Кнопки = Новый СписокЗначений(); Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); - Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить работу'")); + Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить работу'")); ПараметрыВопроса = ПараметрыВопросаПользователю(); ПараметрыВопроса.КнопкаПоУмолчанию = "Перезапустить"; - ПараметрыВопроса.КнопкаТаймаута = "Перезапустить"; + ПараметрыВопроса.КнопкаТаймаута = "Перезапустить"; ПараметрыВопроса.Таймаут = 60; ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; ПараметрыВопроса.БлокироватьВесьИнтерфейс = Истина; @@ -550,7 +569,9 @@ Кнопки = Новый СписокЗначений(); Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); - Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); + Если Параметры.Свойство("Перезапустить") Тогда + Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); + КонецЕсли; Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить работу'")); ПараметрыВопроса = ПараметрыВопросаПользователю(); @@ -561,8 +582,8 @@ КонецЕсли; - ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПоказатьПредупреждениеИПродолжитьЗавершение", ЭтотОбъект, Параметры); - ПоказатьВопросПользователю(ОповещениеОЗакрытие, ТекстПредупреждения, Кнопки, ПараметрыВопроса); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПоказатьПредупреждениеИПродолжитьЗавершение", ЭтотОбъект, Параметры); + ПоказатьВопросПользователю(ОповещениеОЗакрытии, ТекстПредупреждения, Кнопки, ПараметрыВопроса); КонецПроцедуры @@ -813,8 +834,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // ПередНачаломРаботыСистемы @@ -826,6 +848,29 @@ Возврат; КонецЕсли; + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеВосстановленияСвязиСГлавнымУзлом", ЭтотОбъект, Параметры)); + + Попытка + ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом(Параметры); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); + КонецПопытки; + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения, Ложь); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. +Процедура ДействияПередНачаломРаботыСистемыПослеВосстановленияСвязиСГлавнымУзлом(Неопределен, Параметры) Экспорт + + Если НЕ ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); @@ -897,9 +942,20 @@ Возврат; КонецЕсли; - Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеОбновленияПараметровРаботыПрограммы", ЭтотОбъект, Параметры)); + Иначе + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеПереопределяемойПроцедуры", ЭтотОбъект, Параметры)); + КонецЕсли; Попытка + // - Остановка при блокировке информационной базы для обновления. + // - Подготовка параметров работы программы. + // - Обновление неразделенных данных. ОбновлениеИнформационнойБазыКлиент.ПередНачаломРаботыСистемы(Параметры); Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); @@ -908,31 +964,6 @@ Возврат; КонецЕсли; - Попытка - ПользователиСлужебныйКлиент.ПроверитьАвторизациюПользователя(Параметры, Истина); - Исключение - ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); - КонецПопытки; - Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда - Возврат; - КонецЕсли; - - Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( - "ДействияПередНачаломРаботыСистемыПослеОбновленияПараметровРаботыПрограммы", ЭтотОбъект, Параметры)); - - Попытка - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыКлиента.Свойство("НеобходимоОбновлениеПараметровРаботыПрограммы") Тогда - // Параметры работы программы должны быть обновлены до продолжения работы. - ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры); - КонецЕсли; - Исключение - ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); - КонецПопытки; - Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда - Возврат; - КонецЕсли; - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); КонецПроцедуры @@ -956,22 +987,6 @@ КонецЕсли; Попытка - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если НЕ ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных - И ПараметрыКлиента.Свойство("НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы") Тогда - - // Обновление неразделенных данных ИБ в модели сервиса. - Состояние(НСтр("ru = 'Пожалуйста, подождите, выполняется обновление информационной базы...'")); - ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(, Истина); - Состояние(НСтр("ru = 'Обновление информационной базы выполнено успешно.'")); - КонецЕсли; - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда - ВыполнитьОбработкуОповещения(Параметры.ОбработкаЗавершения); - Возврат; - КонецЕсли; - УстановитьРасширенныйЗаголовокПриложения(Истина); // Для вспомогательных окон. Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); @@ -1052,7 +1067,9 @@ КонецЕсли; КонецЦикла; - Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеПереопределяемойПроцедуры", ЭтотОбъект, Параметры)); + Параметры.ИнтерактивнаяОбработка = Неопределено; Попытка @@ -1068,6 +1085,28 @@ КонецПроцедуры +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. +Процедура ДействияПередНачаломРаботыСистемыПослеПереопределяемойПроцедуры(Неопределен, Параметры) Экспорт + + Если НЕ ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); + + Попытка + УстановитьПараметрыФункциональныхОпцийИнтерфейсаПриЗапуске(); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); + КонецПопытки; + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + // Только для внутреннего использования. Завершение процедуры ПередНачаломРаботыСистемы. Процедура ДействияПередНачаломРаботыСистемыОбработкаЗавершения(Неопределен, Параметры) Экспорт @@ -1095,7 +1134,7 @@ Если ПараметрыПриЗапускеИЗавершенииПрограммы.Свойство("ПараметрыОбработки") Тогда ПараметрыПриЗапускеИЗавершенииПрограммы.Удалить("ПараметрыОбработки"); КонецЕсли; - ПриНачалеРаботыСистемы(, Ложь); + ПодключитьОбработчикОжидания("ОбработчикОжиданияПриНачалеРаботыСистемы", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -1228,7 +1267,7 @@ // Обработать параметры запуска программы. // // Возвращаемое значение: -// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. +// Булево - Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. // Функция ОбработатьПараметрыЗапуска() @@ -1350,6 +1389,24 @@ КонецПроцедуры +// Только для внутреннего использования. Завершение процедуры ПередЗавершениемРаботыСистемы. +Процедура ДействияПередЗавершениемРаботыСистемыПослеОбработкиОшибки(Неопределен, ДополнительныеПараметры) Экспорт + + Параметры = ДополнительныеПараметры.Параметры; + Параметры.ОбработкаПродолжения = ДополнительныеПараметры.ОбработкаПродолжения; + + Если Параметры.Отказ Тогда + Параметры.Отказ = Ложь; + ВыполнитьОбработкуОповещения(Параметры.ОбработкаЗавершения); + Иначе + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции для запуска и завершения работы программы + // Проверяет минимально допустимую версию платформы для запуска. // Если версия платформы более поздняя, чем РекомендуемаяВерсияПлатформы, то пользователю будет // показано оповещение. Работа программы будет прекращена, если ЗавершитьРаботу = Истина. @@ -1357,7 +1414,7 @@ // Возвращаемое значение // Булево - если версия актуальна, тогда Истина, иначе - Ложь. // -Процедура ПроверитьВерсиюПлатформыПриЗапуске(Параметры) Экспорт +Процедура ПроверитьВерсиюПлатформыПриЗапуске(Параметры) ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); @@ -1424,8 +1481,59 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции для запуска и завершения работы программы +// Проверяет необходимость восстановления связи с главным узлом и начинает восстановление, если требуется. +Процедура ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом(Параметры) + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если НЕ ПараметрыКлиента.Свойство("ВосстановитьСвязьСГлавнымУзлом") Тогда + Возврат; + КонецЕсли; + + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаВосстановленияСвязиСГлавнымУзлом", ЭтотОбъект, Параметры); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом. +Процедура ИнтерактивнаяОбработкаВосстановленияСвязиСГлавнымУзлом(Параметры, Неопределен) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если ПараметрыКлиента.ВосстановитьСвязьСГлавнымУзлом = Ложь Тогда + Параметры.Отказ = Истина; + ПоказатьПредупреждение( + ОповещениеБезРезультата(Параметры.ОбработкаПродолжения), + НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом. + |Обратитесь к администратору за подробностями.'"), + 15); + Возврат; + КонецЕсли; + + Форма = ОткрытьФорму("ОбщаяФорма.ВосстановлениеСвязиСГлавнымУзлом",,,,,, + Новый ОписаниеОповещения("ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом", ЭтотОбъект, Параметры)); + + Если Форма = Неопределено Тогда + ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Новый Структура("Отказ", Истина), Параметры); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом. +Процедура ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Параметры.Отказ = Истина; + + ИначеЕсли Результат.Отказ Тогда + Параметры.Отказ = Истина; + Иначе + Параметры.ПолученныеПараметрыКлиента.Вставить("ВосстановитьСвязьСГлавнымУзлом"); + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры // Вызывается при необходимости открыть форму списка активных пользователей, // которые в данный момент времени работают с системой. @@ -1495,59 +1603,6 @@ КонецПроцедуры -// Только для внутреннего использования см. процедуру ЗагрузитьОбновитьПараметрыРаботыПрограммы. -Процедура ОбработкаОшибкиУстановкиМонопольногоРежимаПриОбновленииПараметровРаботыПрограммы( - Параметры, Неопределен) Экспорт - - ОбработкаЗакрытияФормы = Новый ОписаниеОповещения( - "ПослеЗакрытияФормыБлокировкиИнформационнойБазы", ЭтотОбъект, Параметры); - - Параметры.МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима( - ОбработкаЗакрытияФормы); - -КонецПроцедуры - -// Только для внутреннего использования см. процедуру ЗагрузитьОбновитьПараметрыРаботыПрограммы. -Процедура ПослеЗакрытияФормыБлокировкиИнформационнойБазы(Отказ, Параметры) Экспорт - - Если Отказ Тогда - Параметры.Отказ = Истина; - ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - Возврат; - КонецЕсли; - - ТекстСостояния = НСтр("ru = 'Выполняется подготовка к запуску программы. Пожалуйста, подождите...'"); - Состояние(ТекстСостояния); - - Попытка - ОшибкаУстановкиМонопольногоРежима = ""; - СтандартныеПодсистемыВызовСервера.ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима); - Состояние(); - - Если ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) Тогда - ОбработкаЗакрытияФормы = Новый ОписаниеОповещения( - "ПослеЗакрытияФормыБлокировкиИнформационнойБазы", ЭтотОбъект, Параметры); - - Параметры.МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима( - ОбработкаЗакрытияФормы); - Возврат; - КонецЕсли; - ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); - Параметры.ПолученныеПараметрыКлиента.Вставить("НеобходимоОбновлениеПараметровРаботыПрограммы"); - Исключение - Параметры.ПолученныеПараметрыКлиента.Вставить("НеобходимоОбновлениеПараметровРаботыПрограммы"); - Состояние(); - ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); - КонецПопытки; - Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда - Возврат; - КонецЕсли; - - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - -КонецПроцедуры - // Только для внутреннего использования. Процедура НачатьИнтерактивнуюОбработкуПередЗавершениемРаботыСистемы() Экспорт @@ -1712,14 +1767,8 @@ Параметры.Вставить("КоличествоПолученныхПараметровКлиента", Параметры.ПолученныеПараметрыКлиента.Количество()); - - Если Параметры.НепрерывноеВыполнение <> Истина Тогда - ПараметрыПриЗапускеИЗавершенииПрограммы.Вставить( - "ПропуститьОчисткуСкрытияРабочегоСтола"); - КонецЕсли; - - ПараметрыПриЗапускеИЗавершенииПрограммы.Вставить( - "ПолученныеПараметрыКлиента", Параметры.ПолученныеПараметрыКлиента); + ПараметрыПриЗапускеИЗавершенииПрограммы.Вставить("ПолученныеПараметрыКлиента", + Параметры.ПолученныеПараметрыКлиента); ОбновитьПовторноИспользуемыеЗначения(); @@ -1769,6 +1818,8 @@ ПараметрыПриЗапускеИЗавершенииПрограммы.Вставить("ПараметрыОбработки", Параметры); СкрытьРабочийСтолПриНачалеРаботыСистемы(); + ПараметрыПриЗапускеИЗавершенииПрограммы.Вставить("ПропуститьОчисткуСкрытияРабочегоСтола"); + УстановитьПараметрыФункциональныхОпцийИнтерфейсаПриЗапуске(); Иначе // Выполнен вызов из процедуры ПередНачаломРаботыСистемы для немедленного // начала интерактивной обработки, т.к. процедура была вызвана программно, а не из @@ -1846,60 +1897,11 @@ КонецФункции -Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры) - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - МодульСоединенияИБКлиент = Неопределено; - - Если ПараметрыКлиента.ИнформационнаяБазаФайловая - И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - - МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); - КонецЕсли; - - ТекстСостояния = НСтр("ru = 'Выполняется подготовка к запуску программы. Пожалуйста, подождите...'"); - Состояние(ТекстСостояния); - - ОшибкаУстановкиМонопольногоРежима = ""; - Попытка - СтандартныеПодсистемыВызовСервера.ЗагрузитьОбновитьПараметрыРаботыПрограммы( - ОшибкаУстановкиМонопольногоРежима); - - Состояние(); - Исключение - Состояние(); - ВызватьИсключение; - КонецПопытки; - - Если НЕ ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) Тогда - Параметры.ПолученныеПараметрыКлиента.Вставить( - "НеобходимоОбновлениеПараметровРаботыПрограммы"); - Возврат; - КонецЕсли; - - Если МодульСоединенияИБКлиент = Неопределено Тогда - Параметры.Отказ = Истина; - - ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ПоказатьПредупреждениеИПродолжить", - ЭтотОбъект, - ОшибкаУстановкиМонопольногоРежима); - - Параметры.ИнтерактивнаяОбработка = ИнтерактивнаяОбработка; - Возврат; - КонецЕсли; - - Параметры.Вставить("МодульСоединенияИБКлиент", МодульСоединенияИБКлиент); - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ОбработкаОшибкиУстановкиМонопольногоРежимаПриОбновленииПараметровРаботыПрограммы", ЭтотОбъект); - -КонецПроцедуры - // Выводит форму сообщений пользователю при закрытии программы, либо выводит сообщение. Процедура ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Параметры) - // В веб-клиенте не выводится список предупреждений. -#Если ВебКлиент Тогда + // В режимах работы веб-клиент и толстый клиент (обычное приложение) не выводится список предупреждений. +#Если ВебКлиент Или ТолстыйКлиентОбычноеПриложение Тогда Возврат; #КонецЕсли @@ -1991,7 +1993,7 @@ КонецЕсли; КонецЕсли; ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - + КонецПроцедуры // Показывает пользователю диалог подтверждения выхода из программы. @@ -2086,36 +2088,26 @@ Процедура ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке, Событие, ПрекратитьРаботу = Ложь) Если Событие = "Запуск" Тогда - ИмяСобытия = НСтр("ru = 'Запуск программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Если ПрекратитьРаботу Тогда Параметры.Отказ = Истина; Параметры.ОбработкаПродолжения = Параметры.ОбработкаЗавершения; - - НачалоОписанияОшибки = - НСтр("ru = 'Возникла исключительная ситуация при запуске программы. Запуск программы аварийно завершен.'"); - Иначе - НачалоОписанияОшибки = - НСтр("ru = 'Возникла исключительная ситуация при запуске программы.'"); КонецЕсли; Иначе - ИмяСобытия = НСтр("ru = 'Завершение программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - НачалоОписанияОшибки = - НСтр("ru = 'Возникла исключительная ситуация при завершении программы.'"); + ДополнительныеПараметры = Новый Структура( + "Параметры, ОбработкаПродолжения", Параметры, Параметры.ОбработкаПродолжения); + + Параметры.ОбработкаПродолжения = Новый ОписаниеОповещения( + "ДействияПередЗавершениемРаботыСистемыПослеОбработкиОшибки", ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; - ТекстОшибки = НачалоОписанияОшибки - + Символы.ПС + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + НачалоОписанияОшибки = СтандартныеПодсистемыВызовСервера.ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении( + ПрекратитьРаботу, Событие, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); ТекстПредупреждения = НачалоОписанияОшибки + Символы.ПС + НСтр("ru = 'Техническая информация об ошибке записана в журнал регистрации.'") + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - ИмяСобытия, "Ошибка", ТекстОшибки, , Истина); - ИнтерактивнаяОбработка = Новый ОписаниеОповещения( "ПоказатьПредупреждениеИПродолжить", СтандартныеПодсистемыКлиент.ЭтотОбъект, @@ -2125,3 +2117,24 @@ КонецПроцедуры +Процедура УстановитьПараметрыФункциональныхОпцийИнтерфейсаПриЗапуске() + + ОпцииИнтерфейса = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОпцииИнтерфейса; + Если ТипЗнч(ОпцииИнтерфейса) = Тип("ФиксированнаяСтруктура") Тогда + #Если ВебКлиент Тогда + Структура = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Структура, ОпцииИнтерфейса, Истина); + ОпцииИнтерфейса = Структура; + #Иначе + ОпцииИнтерфейса = Новый Структура(ОпцииИнтерфейса); + #КонецЕсли + КонецЕсли; + // Установка параметров функциональных опций производится только тогда, когда они заданы. + Если ОпцииИнтерфейса.Количество() > 0 Тогда + УстановитьПараметрыФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index d45470196..5773de427 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает структуру параметров, необходимых для работы // конфигурации на клиенте при запуске, т.е. в обработчиках событий @@ -92,8 +91,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает массив описаний обработчиков клиентского события. Функция ОбработчикиКлиентскогоСобытия(Событие, Служебное = Ложь) Экспорт @@ -181,7 +181,7 @@ Иначе Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль(Обработчик.Модуль); КонецЕсли; - Элемент.Вставить("Модуль", Обработчик.Модуль); + Элемент.Вставить("Модуль", Модуль); Элемент.Вставить("Версия", Обработчик.Версия); Элемент.Вставить("Подсистема", Обработчик.Подсистема); Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); @@ -190,3 +190,5 @@ Возврат Новый ФиксированныйМассив(Массив); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index 3d4058882..36c5b3181 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработка результата выполнения @@ -86,3 +85,5 @@ ОповещениеФорм = Новый Структура("Использование, ИмяСобытия, Параметр, Источник", Истина, ИмяСобытия, Параметр, Источник); Результат.ОповещениеФорм.Добавить(ОповещениеФорм); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 8aebb9b17..e90509cb0 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Содержит сохраненные параметры, используемые подсистемой. Функция ПараметрыБазовойФункциональности() Экспорт @@ -108,15 +107,12 @@ Описание.ДобавлятьОбработчикиСлужебныхСобытий = Истина; КонецЕсли; - Если ОписанияПодсистем.ПоИменам.Получить(Описание.Имя) <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОбщегоНазначенияКлиентСервер.Проверить(ОписанияПодсистем.ПоИменам.Получить(Описание.Имя) = Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при подготовке описаний подсистем: - |в описании очередной подсистемы (см. процедуру - |ПриДобавленииПодсистемы в общем модуле ""%1"") - |указано имя подсистемы ""%2"", которое уже зарегистрировано.'"), - ИмяМодуля, - Описание.Имя); - КонецЕсли; + |в описании подсистемы (см. процедуру %1.ПриДобавленииПодсистемы) + |указано имя подсистемы ""%2"", которое уже зарегистрировано ранее.'"), + ИмяМодуля, Описание.Имя)); Если Описание.Имя = Метаданные.Имя Тогда ОписаниеКонфигурацииНайдено = Истина; @@ -142,18 +138,16 @@ // Проверка описания основной конфигурации. Если ОписаниеКонфигурацииНайдено Тогда Описание = ОписанияПодсистем.ПоИменам[Метаданные.Имя]; - Если Описание.Версия <> Метаданные.Версия Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + + ОбщегоНазначенияКлиентСервер.Проверить(Описание.Версия = Метаданные.Версия, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при подготовке описаний подсистем: - |для конфигурации ""%1"" - |версия ""%2"" в описании (см. процедуру - |ПриДобавленииПодсистемы в общем модуле ""%3"") + |версия ""%2"" конфигурации ""%1"" (см. процедуру %3.ПриДобавленииПодсистемы) |не совпадает с версией конфигурации в метаданных ""%4"".'"), Описание.Имя, Описание.Версия, Описание.ОсновнойСерверныйМодуль, - Метаданные.Версия); - КонецЕсли; + Метаданные.Версия)); Иначе Описание = НовоеОписаниеПодсистемы(); Описание.Вставить("Имя", Метаданные.Имя); @@ -253,7 +247,7 @@ // "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена" // // Возвращаемое значение: -// Тип: ФиксированноеСоответствие. Ключ – объект метаданных; Значение – Истина. +// Тип: ФиксированноеСоответствие. Ключ - объект метаданных; Значение - Истина. // Функция ОбъектыНачальногоОбраза() Экспорт @@ -280,26 +274,6 @@ КонецФункции -// Только для внутреннего использования. -Функция ИмяТекущегоПриложения() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НомерСеанса = НомерСеансаИнформационнойБазы(); - Сеансы = ПолучитьСеансыИнформационнойБазы(); - - ИмяПриложения = ""; - - Для каждого Сеанс Из Сеансы Цикл - Если Сеанс.НомерСеанса = НомерСеанса Тогда - ИмяПриложения = Сеанс.ИмяПриложения; - КонецЕсли; - КонецЦикла; - - Возврат ИмяПриложения; - -КонецФункции - // Возвращает список планов обмена РИБ. // Если конфигурация работает в модели сервиса, // то возвращает список разделенных планов обмена РИБ. @@ -446,10 +420,14 @@ // Только для внутреннего использования. Функция ТаблицаПереименованияДляТекущейВерсии() Экспорт - Таблица = Справочники.ИдентификаторыОбъектовМетаданных.ТаблицаПереименованияДляТекущейВерсии( - Справочники.ИдентификаторыОбъектовМетаданных.СвойстваКоллекцийОбъектовМетаданных()); + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ТаблицаПереименованияДляТекущейВерсии(); - Возврат Таблица; +КонецФункции + +// Только для внутреннего использования. +Функция СвойстваКоллекцийОбъектовМетаданных() Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.СвойстваКоллекцийОбъектовМетаданных(); КонецФункции @@ -580,7 +558,7 @@ Иначе Модуль = ОбщегоНазначения.ОбщийМодуль(Обработчик.Модуль); КонецЕсли; - Элемент.Вставить("Модуль", Обработчик.Модуль); + Элемент.Вставить("Модуль", Модуль); Элемент.Вставить("Версия", Обработчик.Версия); Элемент.Вставить("Подсистема", Обработчик.Подсистема); Массив.Добавить(Новый ФиксированнаяСтруктура(Элемент)); @@ -589,3 +567,5 @@ Возврат Новый ФиксированныйМассив(Массив); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 098503d98..b58a3b0cd 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс /////////////////////////////////////////////////////////////////////////////// // Инициализации параметров сеанса @@ -83,8 +82,134 @@ КонецФункции +// Обновляет кэши свойств метаданных, позволяющие ускорить +// открытие сеанса, а также обновление ИБ, особенно в модели сервиса. +// Их обновление происходит до обновления ИБ. +// +// Для использования в других библиотеках и конфигурациях. +// +Процедура ОбновитьВсеПараметрыРаботыПрограммы(НайтиИзменения = Ложь, + ЕстьИзменения = Неопределено, + ОшибкаУстановкиМонопольногоРежима = Неопределено, + ВФоне = Ложь) Экспорт + + ЕстьИзменения = Ложь; + ТолькоПроверка = Ложь; + СнятьМонопольныйРежим = Ложь; + + Если НайтиИзменения Тогда + ТолькоПроверка = Истина; + + ИначеЕсли НЕ МонопольныйРежим() Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + СнятьМонопольныйРежим = Истина; + Исключение + СнятьМонопольныйРежим = Ложь; + ТолькоПроверка = Истина; + КонецПопытки; + КонецЕсли; + + БезИзменений = Новый Структура; + Попытка + ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне); + Исключение + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + + Если НЕ НайтиИзменения И ТолькоПроверка Тогда + Если ЕстьИзменения Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + Исключение + ТекстОшибки = + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); + + Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + Иначе + ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; + Возврат; + КонецЕсли; + КонецПопытки; + Попытка + ОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, Ложь); + Исключение + УстановитьМонопольныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + УстановитьМонопольныйРежим(Ложь); + Иначе + // Монопольный режим не требуется. + ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений, ВФоне); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Параметры администрирования информационной базы и кластера серверов + +// Получает параметры администрирования информационной базы и кластера серверов. +// Пароли при этом не получаются. +// Возвращаемое значение: +// Структура - Содержит свойства двух структур АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера() +// и АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера() +// +Функция ПараметрыАдминистрирования() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + Иначе + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ПараметрыАдминистрированияИБ = Константы.ПараметрыАдминистрированияИБ.Получить().Получить(); + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияПоУмолчанию(); + КонецЕсли; + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ПрочитатьПараметрыИзСтрокиСоединения(ПараметрыАдминистрированияИБ); + КонецЕсли; + + Возврат ПараметрыАдминистрированияИБ; + +КонецФункции + +// Устанавливает параметры администрирования информационной базы и кластера серверов +// Параметры: +// ПараметрыАдминистрированияИБ - Структура - см. возвращаемое значение процедуры ПараметрыАдминистрирования() +// +Процедура УстановитьПараметрыАдминистрирования(ПараметрыАдминистрированияИБ) Экспорт + + ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера = ""; + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = ""; + Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрированияИБ)); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Работа с событиями служебного программного интерфейса. @@ -94,8 +219,8 @@ // через процедуру ПриДобавленииОбработчиковСлужебныхСобытий. // // Параметры: -// КлиентскиеСобытия – Массив, где значения типа Строка - полное имя события. -// СерверныеСобытия – Массив, где значения типа Строка - полное имя события. +// КлиентскиеСобытия - Массив, где значения типа Строка - полное имя события. +// СерверныеСобытия - Массив, где значения типа Строка - полное имя события. // // Для упрощения поддержки, рекомендуется делать вызов такой же // процедуры в общем модуле библиотеки. @@ -121,6 +246,8 @@ // СЕРВЕРНЫЕ СОБЫТИЯ. ПриДобавленииСлужебныхСобытийБазовойФункциональности(КлиентскиеСобытия, СерверныеСобытия); + РаботаВБезопасномРежимеСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + Обработки.УдалениеПомеченныхОбъектов.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); @@ -132,6 +259,16 @@ МодульВариантыОтчетов.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульВариантыОтчетов.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафики"); МодульКалендарныеГрафики.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); @@ -147,7 +284,7 @@ МодульОбменДаннымиСервер.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; - ОбновлениеИнформационнойБазы.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); ПользователиСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); @@ -199,13 +336,13 @@ // через процедуру ПриДобавленииСлужебныхСобытий. // // Параметры: -// КлиентскиеОбработчики – Соответствие, где -// Ключ – Строка - полное имя события, -// Значение – Массив - массив имен клиентских общих модулей обработчиков. +// КлиентскиеОбработчики - Соответствие, где +// Ключ - Строка - полное имя события, +// Значение - Массив - массив имен клиентских общих модулей обработчиков. // -// СерверныеОбработчики – Соответствие, где -// Ключ – Строка - полное имя события, -// Значение – Массив - массив имен серверных общих модулей обработчиков. +// СерверныеОбработчики - Соответствие, где +// Ключ - Строка - полное имя события, +// Значение - Массив - массив имен серверных общих модулей обработчиков. // // Для упрощения поддержки, рекомендуется делать вызов такой же // процедуры в общем модуле библиотеки. @@ -219,6 +356,7 @@ Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт ПриДобавленииОбработчиковСлужебныхСобытийБазовойФункциональности(КлиентскиеОбработчики, СерверныеОбработчики); + РаботаВБезопасномРежимеСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); @@ -253,6 +391,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "СтандартныеПодсистемыСервер"); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда @@ -267,6 +408,11 @@ МодульВерсионированиеОбъектов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -275,6 +421,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный"); + МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда @@ -313,7 +461,7 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеВерсииИБ") Тогда - МодульОбновлениеИнформационнойБазы = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазы"); + МодульОбновлениеИнформационнойБазы = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебный"); МодульОбновлениеИнформационнойБазы.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; @@ -332,6 +480,11 @@ МодульОрганизацииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + МодульОрганизацииСлужебный = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); + МодульОрганизацииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); МодульОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -382,13 +535,6 @@ МодульКурсыВалютСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); - МодульДополнительныеОтчетыИОбработкиВАвтономномРежиме = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВАвтономномРежиме"); - МодульДополнительныеОтчетыИОбработкиВАвтономномРежиме.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -449,7 +595,7 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); МодульРаботаСПочтовымиСообщениями.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; @@ -458,6 +604,11 @@ МодульРаботаСФайламиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); МодульРегламентныеЗаданияСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -488,11 +639,6 @@ МодульФайловыеФункцииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФизическиеЛица") Тогда - МодульФизическиеЛица = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛица"); - МодульФизическиеЛица.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); МодульЭлектроннаяПодпись.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -531,15 +677,13 @@ // Функция ПараметрыКлиентаНаСервере() Экспорт - Если ТекущийРежимЗапуска() = Неопределено Тогда - Возврат Новый ФиксированноеСоответствие(Новый Соответствие); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); ПараметрыКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере; УстановитьПривилегированныйРежим(Ложь); - Если ПараметрыКлиента.Количество() = 0 Тогда + Если ПараметрыКлиента.Количество() = 0 + И ТекущийРежимЗапуска() <> Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не заполнены параметры клиента на сервере.'"); КонецЕсли; @@ -550,79 +694,6 @@ //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность обновления информационной базы -// Обновляет кэши свойств метаданных, позволяющие ускорить -// открытие сеанса, а также обновление ИБ, особенно в модели сервиса. -// Их обновление происходит до обновления ИБ. -// -// Для использования в других библиотеках. -// -Процедура ОбновитьВсеПараметрыРаботыПрограммы(НайтиИзменения = Ложь, - ЕстьИзменения = Неопределено, - ОшибкаУстановкиМонопольногоРежима = Неопределено) Экспорт - - ЕстьИзменения = Ложь; - ТолькоПроверка = Ложь; - СнятьМонопольныйРежим = Ложь; - - Если НайтиИзменения Тогда - ТолькоПроверка = Истина; - - ИначеЕсли НЕ МонопольныйРежим() Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - СнятьМонопольныйРежим = Истина; - Исключение - СнятьМонопольныйРежим = Ложь; - ТолькоПроверка = Истина; - КонецПопытки; - КонецЕсли; - - БезИзменений = Новый Структура; - Попытка - ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений); - Исключение - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - - Если НЕ НайтиИзменения И ТолькоПроверка Тогда - Если ЕстьИзменения Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - Исключение - ТекстОшибки = - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); - - Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - Иначе - ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; - Возврат; - КонецЕсли; - КонецПопытки; - Попытка - ОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, Ложь); - Исключение - УстановитьМонопольныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; - УстановитьМонопольныйРежим(Ложь); - Иначе - // Монопольный режим не требуется. - ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Устарела. Следует использовать процедуру ОбновитьВсеПараметрыРаботыПрограммы. // // Для использования в других библиотеках. @@ -659,15 +730,18 @@ // Требуется при получении обновленных данных через модуль повторного использования // для блокировки получения, если не все параметры группы (константы) обновлены. // Не требуется при получении данных с целью обновления. +// Отказ - Неопределено - вызвать исключение, если параметры не обновлены. +// - Булево - возвращаемое значение - не вызывать исключение, +// если параметры не обновлены, а установить Истина. // -Процедура ПроверитьОбновлениеПараметровРаботыПрограммы(ИмяКонстанты, ИменаПараметров = "") Экспорт +Процедура ПроверитьОбновлениеПараметровРаботыПрограммы(ИмяКонстанты, ИменаПараметров = "", Отказ = Неопределено) Экспорт Если ИменаПараметров <> "" Тогда ТребуетсяОбновление = Ложь; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ТребуетсяОбновление = - ОбновлениеИнформационнойБазы.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы(); + ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы(); Иначе ТребуетсяОбновление = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); @@ -700,14 +774,28 @@ КонецЕсли; Если ТребуетсяОбновление Тогда - ВызватьИсключение - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию.'"); + Если Отказ <> Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + Если ТекущийРежимЗапуска() = Неопределено Тогда + ВызватьИсключение + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию.'"); + Иначе + ВызватьИсключение + НСтр("ru = 'Недопустимое обращение к необновленным параметрам работы программы + |(например, к некоторым параметрам сеанса): + |- если это обращение выполняется из формы на начальной странице + | (рабочем столе), то необходимо убедиться, что в ней имеется вызов + | процедуры ОбщегоНазначения.ПриСозданииНаСервере; + |- в остальных случаях необходимо перенести вызов прикладного кода + | после обновления параметров работы программы.'"); + КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры - // Возвращает изменения параметра работы программы с учетом текущей версии // конфигурации и текущей версии ИБ. // @@ -739,9 +827,9 @@ // Для остальных областей запускаются все обработчики обновления. // Версия неразделенных (общих) данных. - ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя, Истина); + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); Иначе - ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя); + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя); КонецЕсли; // При начальном заполнении изменение параметров работы программы не определено. @@ -829,7 +917,7 @@ Процедура ДобавитьИзмененияПараметраРаботыПрограммы(ИмяКонстанты, ИмяПараметра, Знач ИзмененияПараметра) Экспорт // Получение версии ИБ или неразделенных данных. - ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя); + ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя); // При начальном заполнении добавление изменений параметров пропускается. Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "0.0.0.0") = 0 Тогда @@ -962,7 +1050,7 @@ // и объектов-исключений из состава плана обмена. // // Параметры: -// ИмяПланаОбмена – Строка, ПланОбменаСсылка. Имя плана обмена или ссылка на узел плана обмена, +// ИмяПланаОбмена - Строка, ПланОбменаСсылка. Имя плана обмена или ссылка на узел плана обмена, // для которого необходимо выполнить проверку. // Процедура ПроверитьСоставПланаОбмена(Знач ИмяПланаОбмена) Экспорт @@ -1107,15 +1195,13 @@ КонецПроцедуры -// Определяет, является ли переданный объект, объектом начального образа подчиненного узла РИБ. +// Определяет, является ли переданный объект объектом начального образа подчиненного узла РИБ. // // Параметры: -// Объект – ОбъектМетаданных. Объект метаданных, который необходимо проверить. +// Объект - ОбъектМетаданных - проверяемый объект. // // Возвращаемое значение: -// Тип: Булево. -// Истина – объект используется в РИБ только в момент создания начального образа подчиненного узла; -// Ложь – в противном случае. +// Булево - Истина, если объект используется в РИБ только в момент создания начального образа подчиненного узла. // Функция ЭтоОбъектНачальногоОбразаУзлаРИБ(Знач Объект) Экспорт @@ -1130,10 +1216,10 @@ // регистрируемый объект должен быть неразделенным. // // Параметры: -// Объект – Объект данных (СправочникОбъект, ДокументОбъект и пр.). Объект, который требуется зарегистрировать. +// Объект - Объект данных (СправочникОбъект, ДокументОбъект и пр.). Объект, который требуется зарегистрировать. // Объект должен быть неразделенным, иначе будет выдано исключение. // -// ИмяПланаОбмена – Строка. Имя плана обмена, на всех узлах которого требуется выполнить регистрацию объекта. +// ИмяПланаОбмена - Строка. Имя плана обмена, на всех узлах которого требуется выполнить регистрацию объекта. // План обмена должен быть разделенным, иначе будет выдано исключение. // Процедура ЗарегистрироватьОбъектНаВсехУзлах(Знач Объект, Знач ИмяПланаОбмена) Экспорт @@ -1428,10 +1514,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1448,10 +1534,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1476,7 +1562,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1485,13 +1571,57 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.МестаИспользованияСсылок); + + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "Основной"); + Вариант.Описание = НСтр("ru = 'Поиск мест использования объектов приложения.'"); + Вариант.Включен = Ложь; + +КонецПроцедуры + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Разрешения = Новый Массив(); + + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, + НСтр("ru = 'Для возможности работы программы.'"))); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаСклоненияФИО", + НСтр("ru = 'Для использования функций по склонению ФИО.'"))); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима()); + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Дополнительные функции для работы с типами. // Возвращает тип ссылки или ключа записи указанного объекта метаданных. // // Параметры: -// ОбъектМетаданных – ОбъектМетаданных - регистр или ссылочный объект. +// ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. // // Возвращаемое значение: // Тип ссылки или ключа записи. @@ -1525,7 +1655,7 @@ // Возвращает тип объекта или набора записей указанного объекта метаданных. // // Параметры: -// ОбъектМетаданных – ОбъектМетаданных - регистр или ссылочный объект. +// ОбъектМетаданных - ОбъектМетаданных - регистр или ссылочный объект. // // Возвращаемое значение: // Тип объекта или набора записей. @@ -1586,34 +1716,32 @@ ИменаПредопределенныхДанных = Новый СписокЗначений; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВходВОбластьДанных = ОбщегоНазначенияПовтИсп.РазделениеВключено() + И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + + Если ВходВОбластьДанных Тогда + ВойтиВНулевуюОбласть(Истина); + КонецЕсли; - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, 0); - Попытка - Выборка = Запрос.Выполнить().Выбрать(); - Исключение - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - ВызватьИсключение; - КонецПопытки; - - Пока Выборка.Следующий() Цикл - ИмяПредопределенныхДанных = Выборка.ИмяПредопределенныхДанных; - Если ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда - ИменаПредопределенныхДанных.Добавить(ИмяПредопределенныхДанных); - КонецЕсли; - КонецЦикла; - - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - Иначе + Попытка Выборка = Запрос.Выполнить().Выбрать(); + Исключение + Если ВходВОбластьДанных Тогда + ВойтиВНулевуюОбласть(Ложь); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; - Пока Выборка.Следующий() Цикл - ИмяПредопределенныхДанных = Выборка.ИмяПредопределенныхДанных; - Если ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда - ИменаПредопределенныхДанных.Добавить(ИмяПредопределенныхДанных); - КонецЕсли; - КонецЦикла; + Пока Выборка.Следующий() Цикл + ИмяПредопределенныхДанных = Выборка.ИмяПредопределенныхДанных; + Если ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда + ИменаПредопределенныхДанных.Добавить(ИмяПредопределенныхДанных); + КонецЕсли; + КонецЦикла; + + Если ВходВОбластьДанных Тогда + ВойтиВНулевуюОбласть(Ложь); КонецЕсли; ИменаПредопределенныхДанных.СортироватьПоЗначению(); @@ -1636,8 +1764,9 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает номер версии Библиотеки стандартных подсистем. // @@ -1690,8 +1819,12 @@ УстановитьПривилегированныйРежим(Ложь); КонецЕсли; + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено Тогда + Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + КонецЕсли; + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено - И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("ПоказатьНерекомендуемуюВерсиюПлатформы") + И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ПоказатьНерекомендуемуюВерсиюПлатформы") И ПоказатьНерекомендуемуюВерсиюПлатформы(Параметры) Тогда Параметры.Вставить("ПоказатьНерекомендуемуюВерсиюПлатформы"); @@ -1700,13 +1833,27 @@ КонецЕсли; // Проверка продолжения работы. - ОписаниеОшибки = ОбновлениеИнформационнойБазы.ИнформационнаяБазаЗаблокированаДляОбновления(, Истина); + ОписаниеОшибки = ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления(); Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда Параметры.Вставить("ИнформационнаяБазаЗаблокированаДляОбновления", ОписаниеОшибки); // Работа будет завершена. Возврат Ложь; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ВосстановитьСвязьСГлавнымУзлом") + И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ПланыОбмена.ГлавныйУзел() = Неопределено + И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда + + УстановитьПривилегированныйРежим(Ложь); + Параметры.Вставить("ВосстановитьСвязьСГлавнымУзлом", Пользователи.ЭтоПолноправныйПользователь()); + СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + Возврат Ложь; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено И НЕ (Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -1721,44 +1868,10 @@ КонецЕсли; КонецЕсли; - Если ОбновлениеИнформационнойБазы.ТребуетсяПроверитьЛегальностьПолученияОбновления() Тогда + Если ОбновлениеИнформационнойБазыСлужебный.ТребуетсяПроверитьЛегальностьПолученияОбновления() Тогда Параметры.Вставить("ПроверитьЛегальностьПолученияОбновления"); КонецЕсли; - // Настройка автоматического создания предопределенных элементов для немигрируемых объектов метаданных. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - Если МодульОбменДаннымиСервер.НастройкаПодчиненногоУзлаРИБ() Или (ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") - И ОбщегоНазначения.ОбщийМодуль("АвтономнаяРаботаСлужебный").НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске()) Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда - МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль( - "ОценкаПроизводительностиВызовСервераПолныеПрава"); - МодульОценкаПроизводительностиВызовСервераПолныеПрава.УстановитьАвтоматическоеОбновлениеКлючевыхОперацийВРИБ(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Проверка запуска с пустым списком пользователей. - ОписаниеОшибки = ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина); - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - Параметры.Вставить("ОшибкаЗапускаСПустымСпискомПользователей", ОписаниеОшибки); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); - Если МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда - // Для автономного рабочего места проверка выполняется после загрузки данных. - Если Параметры.Свойство("ОшибкаЗапускаСПустымСпискомПользователей") Тогда - Параметры.Удалить("ОшибкаЗапускаСПустымСпискомПользователей"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если Параметры.Свойство("ОшибкаЗапускаСПустымСпискомПользователей") Тогда - // Будет предложено создать администратора или завершить работу. - Возврат Ложь; - КонецЕсли; - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() @@ -1767,6 +1880,15 @@ МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда Параметры.Вставить("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском"); + Попытка + Параметры.Вставить("ОбработчикиКлиентскихСобытий", СтандартныеПодсистемыПовтИсп.ПараметрыПрограммныхСобытий( + ).ОбработчикиСобытий.НаКлиенте); + Исключение + // При первом вызове будет исключение. + // При втором вызове параметры служебных событий обновляются в форме + // ПовторнаяСинхронизацияДанныхПередЗапуском для поддержки настройки параметров + // подключения синхронизации данных (в том числе для работы профилей безопасности). + КонецПопытки; Возврат Ложь; КонецЕсли; КонецЕсли; @@ -1791,10 +1913,14 @@ Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); - Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда Параметры.Вставить("НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы"); КонецЕсли; + Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + + РаботаВБезопасномРежимеСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры); + Если Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных Тогда Возврат Ложь; КонецЕсли; @@ -1802,10 +1928,8 @@ // Параметры для работы в локальном режиме или // в сеансе с установленными значениями разделителей в модели сервиса. - Параметры.Вставить("НеобходимоОбновлениеИнформационнойБазы", - ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()); - - Если Параметры.НеобходимоОбновлениеИнформационнойБазы Тогда + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Параметры.Вставить("НеобходимоОбновлениеИнформационнойБазы"); СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); КонецЕсли; @@ -1813,7 +1937,15 @@ И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - Параметры.Вставить("ЗагрузитьСообщениеОбменаДанными", МодульОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными()); + Если МодульОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными() Тогда + Параметры.Вставить("ЗагрузитьСообщениеОбменаДанными"); + КонецЕсли; + КонецЕсли; + + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("ДействияПередАвторизациейПользователяВыполнены") Тогда + + Возврат Ложь; КонецЕсли; ОшибкаАвторизации = ПользователиСлужебный.АвторизоватьТекущегоПользователя(Истина); @@ -1862,7 +1994,9 @@ Параметры.Вставить("ДоступноИспользованиеРазделенныхДанных", ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()); Параметры.Вставить("РазделениеВключено", ОбщегоНазначенияПовтИсп.РазделениеВключено()); - + + Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); Параметры.Вставить("ИмяКонфигурации", Метаданные.Имя); @@ -1878,7 +2012,12 @@ Параметры.Вставить("ИнформацияОПользователе", ПолучитьИнформациюОПользователе()); Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначения.ИмяCOMСоединителя()); - Параметры.Вставить("ПоправкаКВремениСеанса", ТекущаяДатаСеанса()); // записываем серверное время для последующей замены его на разницу с клиентом. + ДатаСеанса = ТекущаяДатаСеанса(); + ДатаСеансаУниверсальная = УниверсальноеВремя(ДатаСеанса, ЧасовойПоясСеанса()); + Параметры.Вставить("ПоправкаКВремениСеанса", ДатаСеанса); // записываем серверное время для последующей замены его на разницу с клиентом. + Параметры.Вставить("ПоправкаКУниверсальномуВремени", ДатаСеансаУниверсальная - ДатаСеанса); + + РаботаВБезопасномРежимеСлужебный.ДобавитьПараметрыРаботыКлиента(Параметры); КонецПроцедуры @@ -2103,7 +2242,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Обновление в модели сервиса. Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + И ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда Возврат Истина; КонецЕсли; @@ -2139,7 +2278,7 @@ КонецФункции // Только для внутреннего использования. -Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено) Экспорт +Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено, ВФоне = Ложь) Экспорт ВыполнитьЗагрузку = Истина; @@ -2195,10 +2334,14 @@ МодульОбменДаннымиСервер.ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=5"); + КонецЕсли; + // Проверка загрузки идентификаторов объектов метаданных из главного узла. - СписокНовыхОбъектовМетаданных = ""; + СписокКритичныхИзменений = ""; Попытка - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, , Истина, , , СписокНовыхОбъектовМетаданных); + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, , Истина, , , СписокКритичныхИзменений); Исключение Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда // Сброс кэша сообщения обмена. @@ -2208,20 +2351,15 @@ ВызватьИсключение; КонецПопытки; - Если ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных) Тогда - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Из главного узла не загружены идентификаторы новых объектов метаданных: - |%1.'"), - СписокНовыхОбъектовМетаданных); + Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Загрузка справочника ""Идентификаторы объектов метаданных""'", + НСтр("ru = 'Идентификаторы объектов метаданных.Требуется загрузить критичные изменения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , - ТекстОшибки); + СписокКритичныхИзменений); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда // Сброс кэша сообщения обмена, вызов исключения с пояснением дальнейших действий. @@ -2230,17 +2368,21 @@ ТекстОшибки = НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |не найдены идентификаторы новых объектов метаданных. См. подробности в журнале регистрации.'"); + |при проверке обнаружено, что требуется загрузить критичные изменения (см. подробности в журнале + |регистрации в событии ""Идентификаторы объектов метаданных.Требуется загрузить критичные изменения"").'"); ВызватьИсключение ТекстОшибки; КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=10"); + КонецЕсли; КонецЕсли; // Нет РИБ-обмена данными // или обновление в главном узле ИБ // или обновление при первом запуске подчиненного узла // или обновление после загрузки справочника "Идентификаторы объектов метаданных" из главного узла. - ОбновитьВсеПараметрыРаботыПрограммы( , , ОшибкаУстановкиМонопольногоРежима); + ОбновитьВсеПараметрыРаботыПрограммы( , , ОшибкаУстановкиМонопольногоРежима, ВФоне); Исключение Если СнятьМонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); @@ -2250,6 +2392,54 @@ КонецПроцедуры +// Только для внутреннего использования. +Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммыВФоне(ПараметрыВыполнения, АдресХранилища, ВФоне = Истина) Экспорт + + Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда + ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыВыполнения.ПараметрыКлиентаНаСервере; + КонецЕсли; + + РезультатВыполнения = Новый Структура; + РезультатВыполнения.Вставить("КраткоеСообщениеОбОшибке", Неопределено); + РезультатВыполнения.Вставить("ПодробноеСообщениеОбОшибке", Неопределено); + + ОшибкаУстановкиМонопольногоРежима = ""; + Попытка + ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима, ВФоне); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + РезультатВыполнения.КраткоеСообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + РезультатВыполнения.ПодробноеСообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ИнформацияОбОшибке = Неопределено + И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) + И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда + ОшибкаУстановкиМонопольногоРежима = "ЗаблокироватьВыполнениеРегламентныхЗаданий"; + КонецЕсли; + КонецЕсли; + + РезультатВыполнения.Вставить("ОшибкаУстановкиМонопольногоРежима", ОшибкаУстановкиМонопольногоРежима); + + Если Не ЗначениеЗаполнено(РезультатВыполнения.КраткоеСообщениеОбОшибке) + И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) + И ОшибкаУстановкиМонопольногоРежима <> "ЗаблокироватьВыполнениеРегламентныхЗаданий" Тогда + + РезультатВыполнения.КраткоеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; + РезультатВыполнения.ПодробноеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; + КонецЕсли; + + Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда + РезультатВыполнения.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); + КонецЕсли; + + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища); + +КонецПроцедуры + // Возвращает соответствие имен и серверных модулей. Функция ИменаСерверныхМодулей() Экспорт @@ -2320,6 +2510,11 @@ Обработчик.Версия = "2.1.3.4"; Обработчик.Процедура = "СтандартныеПодсистемыСервер.УстановитьВерсиюОписанийИзменений"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.10"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ОбновитьПараметрыАдминистрированияИнформационнойБазы"; + КонецПроцедуры // Устанавливает корректное значение константе НеИспользоватьРазделениеПоОбластямДанных @@ -2390,7 +2585,7 @@ // Процедура УстановитьВерсиюОписанийИзменений() Экспорт - ТекущаяВерсия = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя); + ТекущаяВерсия = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя); УстановитьПривилегированныйРежим(Истина); @@ -2488,6 +2683,47 @@ КонецПроцедуры +// Удаляет сохраненные пароли и изменяет структуру хранения настроек. +// +Процедура ОбновитьПараметрыАдминистрированияИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтароеЗначениеПараметров = Константы.ПараметрыАдминистрированияИБ.Получить().Получить(); + НовоеЗначениеПараметров = ПараметрыАдминистрированияПоУмолчанию(); + + Если СтароеЗначениеПараметров <> Неопределено Тогда + + Если СтароеЗначениеПараметров.Свойство("ИмяАдминистратораИнформационнойБазы") Тогда + Возврат; // Обновление уже было выполнено ранее + КонецЕсли; + + Если СтароеЗначениеПараметров.Свойство("ПортАгентаСервера") + И ЗначениеЗаполнено(СтароеЗначениеПараметров.ПортАгентаСервера) Тогда + НовоеЗначениеПараметров.ПортАгентаСервера = СтароеЗначениеПараметров.ПортАгентаСервера; + КонецЕсли; + + Если СтароеЗначениеПараметров.Свойство("ПортКластераСерверов") + И ЗначениеЗаполнено(СтароеЗначениеПараметров.ПортКластераСерверов) Тогда + НовоеЗначениеПараметров.ПортКластера = СтароеЗначениеПараметров.ПортКластераСерверов; + КонецЕсли; + + Если СтароеЗначениеПараметров.Свойство("ИмяАдминистратораКластера") + И Не ПустаяСтрока(СтароеЗначениеПараметров.ИмяАдминистратораКластера) Тогда + НовоеЗначениеПараметров.ИмяАдминистратораКластера = СтароеЗначениеПараметров.ИмяАдминистратораКластера; + КонецЕсли; + + Если СтароеЗначениеПараметров.Свойство("ИмяАдминистратораИБ") + И Не ПустаяСтрока(СтароеЗначениеПараметров.ИмяАдминистратораИБ) Тогда + НовоеЗначениеПараметров.ИмяАдминистратораИнформационнойБазы = СтароеЗначениеПараметров.ИмяАдминистратораИБ; + КонецЕсли; + + КонецЕсли; + + УстановитьПараметрыАдминистрирования(НовоеЗначениеПараметров); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Подтверждение завершения работы программы @@ -2641,9 +2877,8 @@ // Точка входа регламентного задания. // Процедура УдалениеПомеченныхПоРасписанию() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъектыИзРегламентногоЗадания(); @@ -2657,19 +2892,47 @@ // Привилегированный режим (установлен платформой). // Проверка основного языка программирования, установленного в конфигурации. - // БСП поддерживает только Русский. ОбщегоНазначенияКлиентСервер.Проверить( Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант встроенного языка конфигурации ""%1"" не поддерживается. Необходимо использовать вариант языка ""%2"".'"), + НСтр("ru = 'Вариант встроенного языка конфигурации ""%1"" не поддерживается. + |Необходимо использовать вариант языка ""%2"".'"), Метаданные.ВариантВстроенногоЯзыка, Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский)); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульРаботаВМоделиСервиса.ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных(); - + // Проверка настройки совместимости конфигурации с версией платформы. + СистемнаяИнформация = Новый СистемнаяИнформация; + ОбщегоНазначенияКлиентСервер.Проверить(ОбщегоНазначенияКлиентСервер.СравнитьВерсии( + СистемнаяИнформация.ВерсияПриложения, "8.3.4.365") >= 0, + НСтр("ru = 'Для запуска необходима версия платформы 1С:Предприятие 8.3.4.365 или выше.'")); + + Режимы = Метаданные.СвойстваОбъектов.РежимСовместимости; + ТекущийРежим = Метаданные.РежимСовместимости; + + Если ТекущийРежим = Режимы.НеИспользовать Тогда + НедоступныйРежим = ""; + ИначеЕсли ТекущийРежим = Режимы.Версия8_1 Тогда + НедоступныйРежим = "8.1" + ИначеЕсли ТекущийРежим = Режимы.Версия8_2_13 Тогда + НедоступныйРежим = "8.2.13" + ИначеЕсли ТекущийРежим = Режимы.Версия8_2_16 Тогда + НедоступныйРежим = "8.2.16"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_1 Тогда + НедоступныйРежим = "8.3.1"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_2 Тогда + НедоступныйРежим = "8.3.2"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_3 Тогда + НедоступныйРежим = "8.3.3"; + Иначе + НедоступныйРежим = ""; + КонецЕсли; + + Если ЗначениеЗаполнено(НедоступныйРежим) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Режим совместимости конфигурации с 1С:Предприятием версии %1 не поддерживается. + |Для запуска установите в конфигурации режим совместимости с 1С:Предприятием + |версии не ниже 8.3.4 или ""Не использовать"".'"), + НедоступныйРежим); КонецЕсли; // Проверка заполнения версии конфигурации. @@ -2692,6 +2955,28 @@ КонецЕсли; КонецЕсли; + Если Метаданные.ОсновныеРоли.Количество() <> 2 + Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.АдминистраторСистемы) + Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + ВызватьИсключение + НСтр("ru = 'В конфигурации в свойстве ОсновныеРоли не указаны стандартные роли + |АдминистраторСистемы и ПолныеПрава или указаны лишние роли.'"); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) + И (Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()) + И ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ("СтандартныеПодсистемы", + ОбщегоНазначенияПовтИсп.РазделениеВключено()) = "0.0.0.0" Тогда + + ПользователиСлужебный.УстановитьНачальныеНастройки(""); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных(); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда // Установка флага активности пользователей в области МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); @@ -2704,6 +2989,8 @@ Перем ТекстСообщения; + РаботаВБезопасномРежиме.ПроверитьВозможностьВыполненияОбработчиковУстановкиПараметровСеанса(); + // массив с ключами параметров сеанса // задаются начальным словом в имени параметра сеанса и символом "*" ПараметрыСеансаКлючи = Новый Массив; @@ -2721,20 +3008,23 @@ КонецЕсли; Обработчик = Обработчики.Получить(ИмяПараметра); Если Обработчик <> Неопределено Тогда - Если Не ОбщегоНазначения.ПроверитьИмяЭкспортнойПроцедуры(Обработчик, ТекстСообщения) Тогда - ВызватьИсключение ТекстСообщения; - КонецЕсли; - Выполнить Обработчик + "(ИмяПараметра, УстановленныеПараметры)"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ИмяПараметра); + ПараметрыОбработчика.Добавить(УстановленныеПараметры); + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыОбработчика); Продолжить; + КонецЕсли; Для Каждого ИмяКлючаПараметра Из ПараметрыСеансаКлючи Цикл Если Лев(ИмяПараметра, СтрДлина(ИмяКлючаПараметра)) = ИмяКлючаПараметра Тогда + Обработчик = Обработчики.Получить(ИмяКлючаПараметра+"*"); - Если Не ОбщегоНазначения.ПроверитьИмяЭкспортнойПроцедуры(Обработчик, ТекстСообщения) Тогда - ВызватьИсключение ТекстСообщения; - КонецЕсли; - Выполнить Обработчик + "(ИмяПараметра, УстановленныеПараметры)"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ИмяПараметра); + ПараметрыОбработчика.Добавить(УстановленныеПараметры); + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыОбработчика); + КонецЕсли; КонецЦикла; КонецЦикла; @@ -2877,6 +3167,66 @@ КонецФункции +Функция ПараметрыАдминистрированияПоУмолчанию() + + ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); + ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); + + // Объединяем структуры параметров + СтруктураПараметровАдминистрирования = ПараметрыАдминистрированияКластера; + Для Каждого Элемент Из ПараметрыАдминистрированияИБ Цикл + СтруктураПараметровАдминистрирования.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + + Возврат СтруктураПараметровАдминистрирования; + +КонецФункции + +Процедура ПрочитатьПараметрыИзСтрокиСоединения(СтруктураПараметровАдминистрирования) + + ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + СтрокаСоединенияИнформационнойБазы(), ";"); + + СтрокаИмениСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); + СтруктураПараметровАдминистрирования.ИмяВКластере = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); + + СписокСерверовКластера = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаИмениСервера, ","); + + ИмяСервера = СписокСерверовКластера[0]; + РазделительПорта = Найти(ИмяСервера, ":"); + Если РазделительПорта > 0 Тогда + АдресАгентаСервера = Сред(ИмяСервера, 1, РазделительПорта - 1); + ПортКластера = Число(Сред(ИмяСервера, РазделительПорта + 1)); + Если СтруктураПараметровАдминистрирования.ПортКластера = 1541 Тогда + СтруктураПараметровАдминистрирования.ПортКластера = ПортКластера; + КонецЕсли; + Иначе + АдресАгентаСервера = ИмяСервера; + КонецЕсли; + + СтруктураПараметровАдминистрирования.АдресАгентаСервера = АдресАгентаСервера; + +КонецПроцедуры + +// Временный аналог процедуры РаботаВМоделиСервиса.УстановитьРазделениеСеанса. +// Для внутреннего использования. +// +Процедура ВойтиВНулевуюОбласть(Знач Использование = Неопределено) + + Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ВызватьИсключение(НСтр("ru = 'Изменить разделение сеанса возможно только из сеанса запущенного без указания разделителей'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Использование <> Неопределено Тогда + ПараметрыСеанса.ОбластьДанныхИспользование = Использование; + КонецЕсли; + + ПараметрыСеанса.ОбластьДанныхЗначение = 0; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Объявление событий, к которым можно добавлять обработчики. @@ -2955,7 +3305,7 @@ // Параметры: // ПервыйПараметр - Строка - первое значение параметра запуска, // до первого символа ";" в верхнем регистре. - // ПараметрыЗапуска – Массив – массив строк разделенных символом ";" в параметре запуска, + // ПараметрыЗапуска - Массив - массив строк разделенных символом ";" в параметре запуска, // переданным в конфигурацию с помощью ключа командной строки /C. // Отказ - Булево (возвращаемое значение), если установить Истина, // обработка события ПриНачалеРаботыСистемы будет прервана. @@ -3067,7 +3417,7 @@ // Переопределяет текстовое описание предмета. // // Параметры: - // СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. + // СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. // Представление - Строка (возвращаемое значение) - произвольное текстовое описание. // // Синтаксис: @@ -3077,7 +3427,6 @@ СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПредставленияПредмета"); - // Доопределяет переименования тех объектов метаданных, которые невозможно // автоматически найти по типу, но ссылки на которые требуется сохранять // в базе данных (например: подсистемы, роли). @@ -3157,6 +3506,26 @@ СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"); + // Вызывается при загрузке ссылок предопределенных элементов в процессе загрузки важных данных. + // Позволяет выполнить действия по исправлению или регистрации сведений о не уникальности + // предопределенных элементов, а также позволяет отказаться от продолжения, если это недопустимо. + // + // Параметры: + // Объект - СправочникОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект - + // объект предопределенного элемента после записи которого обнаружено наличие не уникальности. + // ЗаписатьВЖурнал - Булево - возвращаемое значение. Если указать Ложь, тогда сведения о не уникальности не будут + // добавлены в журнал регистрации в общем сообщении. + // Нужно установить Ложь, если не уникальность была устранена автоматически. + // Отказ - Булево - возвращаемое значение. Если указать Истина, будет вызвано общее исключение, + // содержащее все причины отказа. + // ОписаниеОтказа - Строка - возвращаемое значение. Если Отказ установлен в Истина, то описание будет добавлено + // в список причин невозможности продолжения. + // + // Синтаксис: + // Процедура ПриОбнаруженииНеУникальностиПредопределенного(Объект, ЗаписатьВЖурнал, Отказ, ОписаниеОтказа) Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриОбнаруженииНеУникальностиПредопределенного"); + // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. // // Параметры: @@ -3201,8 +3570,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: - // Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. - // Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, + // Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. + // Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -3216,8 +3585,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: - // Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. - // Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, + // Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. + // Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -3231,8 +3600,8 @@ // Вызывается в момент завершения записи сообщения обмена, когда все зарегистрированные изменения данных успешно выгружены в сообщение обмена. // // Параметры: - // Получатель – ПланОбменаОбъект. Объект узла плана обмена, для которого формируется сообщение обмена. - // Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, + // Получатель - ПланОбменаОбъект. Объект узла плана обмена, для которого формируется сообщение обмена. + // Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение не будет считаться сформированным и отправленным. // // Синтаксис: @@ -3244,8 +3613,8 @@ // Вызывается в момент завершения записи сообщения обмена, когда все зарегистрированные изменения данных успешно выгружены в сообщение обмена. // // Параметры: - // Получатель – ПланОбменаОбъект. Объект узла плана обмена, для которого формируется сообщение обмена. - // Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, + // Получатель - ПланОбменаОбъект. Объект узла плана обмена, для которого формируется сообщение обмена. + // Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение не будет считаться сформированным и отправленным. // // Синтаксис: @@ -3326,10 +3695,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: - // Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. - // РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. - // Истина – требуется получить список объектов плана обмена РИБ; - // Ложь – требуется получить список для плана обмена НЕ РИБ. + // Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. + // РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. + // Истина - требуется получить список объектов плана обмена РИБ; + // Ложь - требуется получить список для плана обмена НЕ РИБ. // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"); @@ -3338,10 +3707,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: - // Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. - // РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. - // Истина – требуется получить список объектов-исключений плана обмена РИБ; - // Ложь – требуется получить список для плана обмена НЕ РИБ. + // Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. + // РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. + // Истина - требуется получить список объектов-исключений плана обмена РИБ; + // Ложь - требуется получить список для плана обмена НЕ РИБ. // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"); @@ -3353,7 +3722,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: - // Объекты – Массив. Массив объектов метаданных конфигурации. + // Объекты - Массив. Массив объектов метаданных конфигурации. // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); @@ -3386,6 +3755,9 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( "СтандартныеПодсистемыСервер"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "СтандартныеПодсистемыСервер"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"].Добавить( @@ -3557,7 +3929,7 @@ //////////////////////////////////////////////////////////////////////////////// // Для функции ОбновитьВсеПараметрыРаботыПрограммы -Процедура ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений = Неопределено) +Процедура ПроверитьОбновитьВсеПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений = Неопределено, ВФоне = Ложь) Если ТипЗнч(БезИзменений) <> Тип("Структура") Тогда БезИзменений = Новый Структура; @@ -3568,46 +3940,81 @@ Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + Возврат; + КонецЕсли; Иначе БезИзменений.Вставить("БазоваяФункциональностьСлужебныеСобытия"); КонецЕсли; - КонецЕсли; - - Если НЕ СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда - Если ТолькоПроверка И НЕ ЕстьИзменения Тогда - // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, ЕстьИзменения, ТолькоПроверка, ЕстьИзменения, ЕстьИзменения); - ИначеЕсли НЕ ТолькоПроверка Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьИзменения); + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=20"); КонецЕсли; КонецЕсли; - Если НЕ БезИзменений.Свойство("ПользователиПараметрыРаботы") - И НЕ (ТолькоПроверка И ЕстьИзменения) Тогда + Если НЕ БезИзменений.Свойство("БазоваяФункциональностьИдентификаторыОбъектовМетаданных") Тогда + + Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + БезИзменений.Вставить("БазоваяФункциональностьИдентификаторыОбъектовМетаданных"); + Иначе + ЕстьТекущиеИзменения = Ложь; + Если ТолькоПроверка Тогда + // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, ЕстьТекущиеИзменения, ТолькоПроверка, ЕстьТекущиеИзменения, ЕстьТекущиеИзменения); + Иначе + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьТекущиеИзменения); + КонецЕсли; + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + Возврат; + КонецЕсли; + Иначе + БезИзменений.Вставить("БазоваяФункциональностьИдентификаторыОбъектовМетаданных"); + КонецЕсли; + КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=50"); + КонецЕсли; + КонецЕсли; + + Если НЕ БезИзменений.Свойство("ПользователиПараметрыРаботы") Тогда ЕстьТекущиеИзменения = Ложь; ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + Возврат; + КонецЕсли; Иначе БезИзменений.Вставить("ПользователиПараметрыРаботы"); КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=80"); + КонецЕсли; КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + Если НЕ БезИзменений.Свойство("УправлениеДоступомПараметрыОграниченияДоступа") Тогда - Если НЕ БезИзменений.Свойство("УправлениеДоступомПараметрыОграниченияДоступа") - И НЕ (ТолькоПроверка И ЕстьИзменения) Тогда + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + БезИзменений.Вставить("УправлениеДоступомПараметрыОграниченияДоступа"); + Иначе + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); ЕстьТекущиеИзменения = Ложь; МодульУправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + Возврат; + КонецЕсли; Иначе БезИзменений.Вставить("УправлениеДоступомПараметрыОграниченияДоступа"); КонецЕсли; КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=100"); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -3624,3 +4031,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 645d4a30d..5054a162f 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. // @@ -18,7 +17,7 @@ // - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в // случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а // при других разделителях результатом функции будет пустой массив. -// +// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. // // Возвращаемое значение: // Массив - массив строк. @@ -31,7 +30,7 @@ // РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); // РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); // -Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт Результат = Новый Массив; @@ -51,14 +50,22 @@ Пока Позиция > 0 Цикл Подстрока = Лев(Строка, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда - Результат.Добавить(Подстрока); + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; КонецЕсли; Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); Позиция = Найти(Строка, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда - Результат.Добавить(Строка); + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Строка)); + Иначе + Результат.Добавить(Строка); + КонецЕсли; КонецЕсли; Возврат Результат; @@ -120,6 +127,8 @@ Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё" + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё" Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_" Для Каждого Диапазон Из Диапазоны Цикл @@ -175,11 +184,11 @@ // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр - Строка - подставляемый параметр. // // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами. +// Строка - текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". @@ -223,11 +232,11 @@ // начинается с единицы. // // Параметры -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%1"); +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%1"); // МассивПараметров - Массив - массив строк, которые соответствуют параметрам в строке подстановки. // // Возвращаемое значение: -// Строка – строка с подставленными параметрами. +// Строка - строка с подставленными параметрами. // // Пример: // МассивПараметров = Новый Массив; @@ -280,8 +289,8 @@ // Параметры: // СтрокаПараметров - Строка - строка, содержащая параметры, каждый из которых представляет собой // фрагмент вида <Имя параметра>=<Значение>, где: -// Имя параметра — имя параметра; -// Значение — его значение. +// Имя параметра - имя параметра; +// Значение - его значение. // Фрагменты отделяются друг от друга символами ';'. // Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки ("). // Например: @@ -329,13 +338,12 @@ // Проверяет, содержит ли строка только цифры. // // Параметры: -// СтрокаПроверки - Строка - строка для проверки. -// УчитыватьЛидирующиеНули - Булево - нужно ли учитывать лидирующие нули. -// УчитыватьПробелы - Булево - нужно ли учитывать пробелы. +// СтрокаПроверки - Строка - Строка для проверки +// УчитыватьЛидирующиеНули - Булево - Флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются +// УчитыватьПробелы - Булево - Флаг учета пробелов, если Истина, то пробелы при проверке игнорируются // // Возвращаемое значение: -// Истина - строка содержит только цифры или пустая; -// Ложь - строка содержит не только цифры. +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит не только цифры. // Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт @@ -343,34 +351,30 @@ Возврат Ложь; КонецЕсли; - Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Если Не УчитыватьПробелы Тогда + СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", ""); + КонецЕсли; + + Если ПустаяСтрока(СтрокаПроверки) Тогда Возврат Истина; КонецЕсли; - Если НЕ УчитыватьПробелы Тогда - СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", ""); - КонецЕсли; - - Если НЕ УчитыватьЛидирующиеНули Тогда - НомерПервойЦифры = 0; - Для а = 1 По СтрДлина(СтрокаПроверки) Цикл - НомерПервойЦифры = НомерПервойЦифры + 1; - КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); - Если КодСимвола <> 48 Тогда - Прервать; - КонецЕсли; + Если Не УчитыватьЛидирующиеНули Тогда + Позиция = 1; + // Взятие символа за границей строки возвращает пустую строку + Пока Сред(СтрокаПроверки, Позиция, 1) = "0" Цикл + Позиция = Позиция + 1; КонецЦикла; - СтрокаПроверки = Сред(СтрокаПроверки, НомерПервойЦифры); + СтрокаПроверки = Сред(СтрокаПроверки, Позиция); КонецЕсли; - Для а = 1 По СтрДлина(СтрокаПроверки) Цикл - КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); - Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; + // Если содержит только цифры, то в результате замен должна быть получена пустая строка + // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы + Возврат СтрДлина( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "") + ) = 0; КонецФункции @@ -482,7 +486,7 @@ // Текст - Строка - строка, в которой необходимо удалить последние символы; // ЧислоСимволов - Число - количество удаляемых символов. // -Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов) Экспорт +Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов = 1) Экспорт Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов); @@ -492,7 +496,7 @@ // // Параметры: // Строка - Строка - строка, в которой осуществляется поиск; -// Символ - Строка - искомый символ. +// Символ - Строка - искомый символ. Допускается искать строку, содержащую более одного символа. // // Возвращаемое значение: // Число - позиция символа в строке. @@ -501,7 +505,7 @@ Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт Для Позиция = -СтрДлина(Строка) По -1 Цикл - Если Сред(Строка, -Позиция, 1) = Символ Тогда + Если Сред(Строка, -Позиция, СтрДлина(Символ)) = Символ Тогда Возврат -Позиция; КонецЕсли; КонецЦикла; @@ -920,8 +924,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Выполняет преобразование цифры в римскую нотацию. // @@ -1079,3 +1084,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 61322bc6d..79d635c30 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -4,8 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует массив реквизитов документа. // @@ -64,3 +63,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl index 95eda9859..ffd6f5381 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Функция выполняет трансляцию произвольного XDTO-объекта // между версиями по зарегистрированным в системе обработчикам трансляции, @@ -70,3 +69,5 @@ ОписаниеРезультирующейВерсии); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl index e809ad24d..da07c33d7 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет переданный массив обработчиками трансляции сообщений между версиями // @@ -13,6 +12,6 @@ // Процедура ЗаполнитьОбработчикиТрансляцииСообщений(МассивОбработчиков) Экспорт - - -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl index da1a026fc..dba5e2191 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Возвращает описание версии сообщения. Возвращаемое значение используется для передачи // в качестве параметров ОписаниеИсходнойВерсии и ОписаниеРезультирующейВерсии @@ -122,9 +121,9 @@ Иначе ТаблицаТрансляцииИнтерфейса = Новый ТаблицаЗначений(); - ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("Ключ"); - ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("Значение"); - ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("ВерсияЧислом"); + ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); + ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("Значение", Новый ОписаниеТипов("ОбщийМодуль")); + ТаблицаТрансляцииИнтерфейса.Колонки.Добавить("ВерсияЧислом", Новый ОписаниеТипов("Число")); Для Каждого ЭтапТрансляцииИнтерфейса Из ЦепочкаТрансляцииИнтерфейса Цикл @@ -132,11 +131,11 @@ ЗаполнитьЗначенияСвойств(ЭтапТаблицы, ЭтапТрансляцииИнтерфейса); Версия = ЭтапТрансляцииИнтерфейса.Значение.РезультирующаяВерсия(); Разряды = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); - Итератор = 1; + Итератор = 0; ВерсияЧислом = 0; Для Каждого Разряд Из Разряды Цикл - ВерсияЧислом = ВерсияЧислом + Число(Разряд) * ((Разряды.Количество() - Итератор) * 1000); + ВерсияЧислом = ВерсияЧислом + (Число(Разряд) * Pow(1000, Разряды.Количество() - Итератор)); Итератор = Итератор + 1; КонецЦикла; @@ -144,7 +143,7 @@ КонецЦикла; - ТаблицаТрансляцииИнтерфейса.Сортировать("ВерсияЧислом Возр"); + ТаблицаТрансляцииИнтерфейса.Сортировать("ВерсияЧислом Убыв"); КонецЕсли; @@ -237,8 +236,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования Функция ТранслироватьОбъект(Знач Объект, Знач ПравилаТрансляцииИнтерфейсов) @@ -382,7 +382,6 @@ ЗависимостиПакетаКорреспондента = ПолучитьЗависимостиПакета(ОбработчикТрансляцииИнтерфейса.ПакетРезультирующейВерсии()); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПакетыРезультирующегоСообщения, ЗависимостиПакетаКорреспондента, Истина); - ПравилоТрансляцииИнтерфейса = Новый Соответствие(); ПравилоТрансляцииИнтерфейса.Вставить(ИтерацияТрансляцииИнтерфейса.Ключ, ИтерацияТрансляцииИнтерфейса.Значение); @@ -606,3 +605,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl b/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl index d7151e142..3c5da7395 100644 --- a/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -22,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -81,3 +81,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index e8ce83237..7cc28b460 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые для проверки прав @@ -1349,7 +1348,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые для обновления вспомогательных данных +// Процедуры и функции, используемые для обновления служебных данных // Обновляет список ролей пользователей информационной базы // по их текущим принадлежностям к группам доступа. @@ -1370,6 +1369,15 @@ КонецПроцедуры +// Обновляет содержание регистров ЗначенияГруппДоступа и ЗначенияГруппДоступаПоУмолчанию, +// которые заполняются на основании настроек в группах доступа и использования видов доступа. +// +Процедура ОбновитьРазрешенныеЗначенияПриИзмененииИспользованияВидовДоступа() Экспорт + + РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(); + +КонецПроцедуры + // Выполняет последовательное заполнение и обновление данных, необходимых для работы // подсистемы УправленияДоступом в режиме ограничения доступа на уровне записей. // @@ -1851,3 +1859,5 @@ Возврат СвойстваГрупп; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index d14475a4c..35fbf1467 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет виды доступа, используемые в ограничениях прав доступа. // Виды доступа Пользователи и ВнешниеПользователи уже заполнены. @@ -94,8 +93,6 @@ // Процедура ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава) Экспорт - - КонецПроцедуры // Определяет вид используемого интерфейса пользователя для настройки доступа. @@ -110,8 +107,6 @@ // Процедура ПриОпределенииИнтерфейсаНастройкиДоступа(УпрощенныйИнтерфейс) Экспорт - - КонецПроцедуры // Заполняет использование видов доступа в зависимости от функциональных опций конфигурации, @@ -186,3 +181,5 @@ КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 1ff92875e..bebd62995 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Объявление служебных событий, к которым можно добавлять обработчики. @@ -224,13 +223,16 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( "УправлениеДоступомСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "УправлениеДоступомСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииЗапретаРедактированияРолей"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОбнаруженииНеУникальностиПредопределенного"].Добавить( "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"].Добавить( + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( "УправлениеДоступомСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( @@ -242,30 +244,35 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеПолученияДанныхОтГлавного"].Добавить( "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( - "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( "УправлениеДоступомСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "УправлениеДоступомСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииЗапретаРедактированияРолей"].Добавить( + "УправлениеДоступомСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"].Добавить( + "УправлениеДоступомСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора"].Добавить( + "УправлениеДоступомСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"].Добавить( + "УправлениеДоступомСлужебный"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "УправлениеДоступомСлужебный"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке"].Добавить( "УправлениеДоступомСлужебный"); КонецЕсли; - // Добавление обработчиков событий подсистемы Пользователи. - - СерверныеОбработчики[ - "СтандартныеПодсистемы.Пользователи\ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"].Добавить( - "УправлениеДоступомСлужебный"); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -490,111 +497,6 @@ КонецПроцедуры -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - // Обработчики обновления неразделенных данных. - Обработчик = Обработчики.Добавить(); - Обработчик.ОбщиеДанные = Истина; - Обработчик.УправлениеОбработчиками = Истина; - Обработчик.Приоритет = 1; - Обработчик.Версия = "*"; - Обработчик.МонопольныйРежим = Истина; - Обработчик.Процедура = "УправлениеДоступомСлужебный.ЗаполнитьОбработчикиРазделенныхДанных"; - - // Обработчики обновления разделенных данных. - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.МонопольныйРежим = Истина; - Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.8"; - Обработчик.Процедура = "РегистрыСведений.УдалитьПраваПоЗначениямДоступа.ПереместитьДанныеВНовыйРегистр"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.8"; - Обработчик.Процедура = "УправлениеДоступомСлужебный.ПреобразоватьИменаРолейВИдентификаторы"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.8"; - Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.16"; - Обработчик.Процедура = "РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.16"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьРолиПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.5"; - Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.4.15"; - Обработчик.Процедура = "Справочники.ПрофилиГруппДоступа.ЗаполнитьИдентификаторыПоставляемыхДанных"; - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.Приоритет = 1; - - // Должен выполнятся после обработчика ЗаполнитьИдентификаторыПоставляемыхДанных. - Обработчик = Обработчики.Добавить(); - Обработчик.НачальноеЗаполнение = Истина; - Обработчик.Процедура = "Справочники.ГруппыДоступа.ЗаполнитьПрофильГруппыДоступаАдминистраторы"; - Обработчик.РежимВыполнения = "Монопольно"; - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.Приоритет = 1; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "Справочники.ПрофилиГруппДоступа.ПреобразоватьИдентификаторыВидовДоступа"; - Обработчик.РежимВыполнения = "Монопольно"; - Обработчик.ВыполнятьВГруппеОбязательных = Истина; - Обработчик.Приоритет = 1; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РегистрыСведений.УдалитьГруппыЗначенийДоступа.ПереместитьДанныеВНовыйРегистр"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РегистрыСведений.НаследованиеНастроекПравОбъектов.ОбновитьДанныеРегистра"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РегистрыСведений.НастройкиПравОбъектов.ОбновитьВспомогательныеДанныеРегистра"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "УправлениеДоступомСлужебный.ВключитьЗаполнениеДанныхДляОграниченияДоступа"; - Обработчик.РежимВыполнения = "Монопольно"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.35"; - Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыПустыхЗначенийДоступа"; - Обработчик.РежимВыполнения = "Оперативно"; - -КонецПроцедуры - // Переопределяет поведение после получения данных в распределенной ИБ. Процедура ПослеПолученияДанных(Отправитель, Отказ, ОтПодчиненного) Экспорт @@ -700,112 +602,14 @@ Если Запрос.Выполнить().Пустой() Тогда Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); Объект.Пользователи.Добавить().Пользователь = Администратор; - Объект.ДополнительныеСвойства.Вставить("НезависимоеИзменениеОбъекта"); - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; КонецПроцедуры -// Содержит настройки размещения вариантов отчетов в панели отчетов. -// -// Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() -// -// Описание: -// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов -// будут регистрироваться в программе и показываться в панели отчетов. -// -// Вспомогательные методы: -// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// -// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: -// * Включен - Булево - -// Если Ложь, то вариант отчета не регистрируется в подсистеме. -// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. -// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи -// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). -// * ВидимостьПоУмолчанию - Булево - -// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// Пользователь может "включить" его в режиме настройки панели отчетов -// или открыть через форму "Все отчеты". -// * Описание - Строка - Дополнительная информация по варианту отчета. -// В панели отчетов выводится в качестве подсказки. -// Должно расшифровывать для пользователя содержимое варианта отчета -// и не должно дублировать наименование варианта отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета -// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. -// "" - Выводить отчет в своей группе обычным шрифтом. -// "Важный" - Выводить отчет в своей группе жирным шрифтом. -// "СмТакже" - Выводить отчет в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - -// Имена функциональных опций варианта отчета. -// -// Например: -// -// (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Варианта). -// Функциональные опции отчетов не зачитываются из метаданных, -// они применяются на этапе использования подсистемы пользователем. -// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, -// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. -// Для пользовательских вариантов отчета действуют только функциональные опции отчета -// - они отключаются только с отключением всего отчета. -// -Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт - - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - - Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ПраваДоступа); - Отчет.Включен = Ложь; - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Обновляет список ролей пользователей информационной базы // по их текущим принадлежностям к группам доступа. @@ -1021,24 +825,29 @@ // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. УстановитьПривилегированныйРежим(Истина); - НайденПользовательИБ = Ложь; + НайденДействующийАдминистратор = Ложь; Для каждого ОписаниеПользователя ИЗ ПользователиГруппы Цикл - Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) Тогда - НайденПользовательИБ = Истина; - Прервать; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено + И Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + + НайденДействующийАдминистратор = Истина; + Прервать; + КонецЕсли; КонецЕсли; КонецЦикла; - Если НЕ НайденПользовательИБ Тогда + Если НЕ НайденДействующийАдминистратор Тогда ОписаниеОшибки = НСтр("ru = 'В группе доступа Администраторы |должен быть хотя бы один пользователь, - |которому разрешен доступ к информационной базе.'"); + |которому разрешен вход в программу.'"); КонецЕсли; КонецПроцедуры @@ -1046,6 +855,116 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + // Обработчики обновления неразделенных данных. + Обработчик = Обработчики.Добавить(); + Обработчик.ОбщиеДанные = Истина; + Обработчик.УправлениеОбработчиками = Истина; + Обработчик.Приоритет = 1; + Обработчик.Версия = "*"; + Обработчик.МонопольныйРежим = Истина; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ЗаполнитьОбработчикиРазделенныхДанных"; + + // Обработчики обновления разделенных данных. + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.МонопольныйРежим = Истина; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.8"; + Обработчик.Процедура = "РегистрыСведений.УдалитьПраваПоЗначениямДоступа.ПереместитьДанныеВНовыйРегистр"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.8"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ПреобразоватьИменаРолейВИдентификаторы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.8"; + Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.16"; + Обработчик.Процедура = "РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.2.16"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьРолиПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.3.5"; + Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.15"; + Обработчик.Процедура = "Справочники.ПрофилиГруппДоступа.ЗаполнитьИдентификаторыПоставляемыхДанных"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + + // Должен выполнятся после обработчика ЗаполнитьИдентификаторыПоставляемыхДанных. + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "Справочники.ГруппыДоступа.ЗаполнитьПрофильГруппыДоступаАдминистраторы"; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "Справочники.ПрофилиГруппДоступа.ПреобразоватьИдентификаторыВидовДоступа"; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "РегистрыСведений.УдалитьГруппыЗначенийДоступа.ПереместитьДанныеВНовыйРегистр"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "РегистрыСведений.НаследованиеНастроекПравОбъектов.ОбновитьДанныеРегистра"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "РегистрыСведений.НастройкиПравОбъектов.ОбновитьВспомогательныеДанныеРегистра"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.15"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ВключитьЗаполнениеДанныхДляОграниченияДоступа"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.1.35"; + Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыПустыхЗначенийДоступа"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.2.2.48"; + Обработчик.Процедура = "РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра"; + Обработчик.РежимВыполнения = "Оперативно"; + +КонецПроцедуры + // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт @@ -1070,6 +989,18 @@ КонецПроцедуры +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт + + ДобавитьПараметрыРаботыКлиента(Параметры); + +КонецПроцедуры + // Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // @@ -1090,6 +1021,114 @@ КонецПроцедуры +// Вызывается при загрузке ссылок предопределенных элементов в процессе загрузки важных данных. +// Позволяет выполнить действия по исправлению или регистрации сведений о не уникальности +// предопределенных элементов, а также позволяет отказаться от продолжения, если это недопустимо. +// +// Параметры: +// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект - +// объект предопределенного элемента после записи которого обнаружено наличие не уникальности. +// ЗаписатьВЖурнал - Булево - возвращаемое значение. Если указать Ложь, тогда сведения о не уникальности не будут +// добавлены в журнал регистрации в общем сообщении. +// Нужно установить Ложь, если не уникальность была устранена автоматически. +// Отказ - Булево - возвращаемое значение. Если указать Истина, будет вызвано общее исключение, +// содержащее все причины отказа. +// ОписаниеОтказа - Строка - возвращаемое значение. Если Отказ установлен в Истина, то описание будет добавлено +// в список причин невозможности продолжения. +// +Процедура ПриОбнаруженииНеУникальностиПредопределенного(Объект, ЗаписатьВЖурнал, Отказ, ОписаниеОтказа) Экспорт + + Если ТипЗнч(Объект) = Тип("СправочникОбъект.ПрофилиГруппДоступа") + И Объект.ИмяПредопределенныхДанных = "Администратор" Тогда + + ЗаписатьВЖурнал = Ложь; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); + Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администратор"); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Ссылка <> &Ссылка + | И ПрофилиГруппДоступа.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ТекущийОбъект.ИмяПредопределенныхДанных = ""; + ТекущийОбъект.ИдентификаторПоставляемыхДанных = ""; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущийОбъект); + КонецЦикла; + + ИначеЕсли ТипЗнч(Объект) = Тип("СправочникОбъект.ГруппыДоступа") + И Объект.ИмяПредопределенныхДанных = "Администраторы" Тогда + + ЗаписатьВЖурнал = Ложь; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администраторы"); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступаПользователи.Пользователь + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | ГруппыДоступаПользователи.Ссылка.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; + ВсеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); + + Записать = Ложь; + Для каждого Пользователь Из ВсеПользователи Цикл + Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда + Объект.Пользователи.Добавить().Пользователь = Пользователь; + Записать = Истина; + КонецЕсли; + КонецЦикла; + + Если Записать Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли; + + Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Ссылка <> &Ссылка + | И ГруппыДоступа.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ТекущийОбъект.ИмяПредопределенныхДанных = ""; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущийОбъект); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + // Стандартная обработка не переопределяется. + Иначе + // Администраторы назначаются во всех подчиненных РИБ-узлах независимо. + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") Тогда + Справочники.ГруппыДоступа.ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. // // Параметры: @@ -1098,29 +1137,29 @@ Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - // Стандартная обработка не переопределяется. - ИначеЕсли ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ИначеЕсли Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ОграничиватьДоступНаУровнеЗаписей") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ПрофилиГруппДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ГруппыЗначенийДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НастройкиПравОбъектов") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьПраваПоЗначениямДоступа") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ТаблицыГруппДоступа") Тогда - - - // Получение данных из автономного рабочего места пропускается, а для соответствия - // данных в узлах, текущие данные отправляются обратно в автономное рабочее место. - ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - ОтправкаНазад = Истина; - + // Администраторы назначаются во всех подчиненных РИБ-узлах независимо. + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") Тогда + Справочники.ГруппыДоступа.ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных); КонецЕсли; + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ОграничиватьДоступНаУровнеЗаписей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ПрофилиГруппДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ГруппыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НастройкиПравОбъектов") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьПраваПоЗначениямДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ТаблицыГруппДоступа") Тогда + + // Получение данных из автономного рабочего места пропускается, а для соответствия + // данных в узлах, текущие данные отправляются обратно в автономное рабочее место. + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + ОтправкаНазад = Истина; КонецЕсли; КонецПроцедуры @@ -1129,8 +1168,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: -// Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. -// Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, +// Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. +// Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -1145,8 +1184,8 @@ // Вызывается в момент завершения чтения сообщения обмена, когда все данные из сообщения обмена успешно прочитаны и записаны в ИБ. // // Параметры: -// Отправитель – ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. -// Отказ – Булево. Флаг отказа. Если установить данному параметру значение Истина, +// Отправитель - ПланОбменаОбъект. Объект узла плана обмена, от которого получены данные. +// Отказ - Булево. Флаг отказа. Если установить данному параметру значение Истина, // то сообщение будет считаться не принятым. Также произойдет отмена транзакции загрузки данных, // если все данные были загружены в одной транзакции или отмена последней транзакции загрузки данных, // если данные были загружены порциями. @@ -1157,27 +1196,15 @@ КонецПроцедуры -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт - - ДобавитьПараметрыРаботыКлиента(Параметры); - -КонецПроцедуры - // Используется для получения объектов метаданных обязательных для плана обмена. // Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -1199,7 +1226,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1209,22 +1236,6 @@ КонецПроцедуры -// Заполняет массив типов неразделенных данных, для которых не требуется сопоставление ссылок -// при загрузке данных в другую информационную базу, т.к. корректное сопоставление ссылок -// гарантируется с помощью других механизмов. -// -// Параметры: -// Типы - Массив(ОбъектМетаданных) -// -Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт - - // В разделенных данных используются ссылки только на предопределенные элементы - // плана видов характеристик УдалитьВидыДоступа. - Типы.Добавить(Метаданные.ПланыВидовХарактеристик.УдалитьВидыДоступа); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистемы Пользователи. // Переопределяет стандартный способ установки ролей пользователям ИБ. @@ -1291,13 +1302,126 @@ Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда Объект.Пользователи.Добавить().Пользователь = Пользователь; - Объект.ДополнительныеСвойства.Вставить("НезависимоеИзменениеОбъекта"); - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; КонецЕсли; КонецПроцедуры +// Обработчики событий подсистемы ВариантыОтчетов. + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + Отчеты.ПраваДоступа.НастроитьВариантыОтчета(Настройки); + +КонецПроцедуры + +// Обработчики событий библиотеки ТехнологияСервиса. + +// Заполняет массив типов неразделенных данных, для которых не требуется сопоставление ссылок +// при загрузке данных в другую информационную базу, т.к. корректное сопоставление ссылок +// гарантируется с помощью других механизмов. +// +// Параметры: +// Типы - Массив(ОбъектМетаданных) +// +Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт + + // В разделенных данных используются ссылки только на предопределенные элементы + // плана видов характеристик УдалитьВидыДоступа. + Типы.Добавить(Метаданные.ПланыВидовХарактеристик.УдалитьВидыДоступа); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события @@ -1368,6 +1492,8 @@ // Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ЗаполнениеДанныхДляОграниченияДоступа(); КонецПроцедуры @@ -4750,7 +4876,7 @@ // Ограничение на максимальную длину комбинации, чтобы не допустить // перегрузку параметров сеанса и препроцессора шаблонов ОДД. - МаксимальнаяДлинаКомбинации = 7; + МаксимальнаяДлинаКомбинации = 4; Список = Новый СписокЗначений; Если ТипЗнч(НеупорядоченныйМассивИмен) = Тип("ФиксированныйМассив") Тогда @@ -4867,3 +4993,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index 2c9d549c1..e822fcb38 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -129,7 +128,6 @@ ГруппаАдминистраторы = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); ГруппаАдминистраторыДанных = ГруппаДоступаАдминистраторыДанныхСсылка.ПолучитьОбъект(); - Если ГруппаАдминистраторыДанных.Пользователи.Количество() > 0 Тогда Для каждого Строка Из ГруппаАдминистраторыДанных.Пользователи Цикл Если ГруппаАдминистраторы.Пользователи.Найти(Строка.Пользователь, "Пользователь") = Неопределено Тогда @@ -175,8 +173,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Вызывается после окончания загрузки данных из локальной версии // в область данных сервиса или наоборот. @@ -223,3 +222,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl index 5499f6d12..22b3ef83f 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования @@ -128,3 +127,5 @@ Возврат ДанныеВыбора; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index 56f753f97..07e848019 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования @@ -373,7 +372,6 @@ КонецПроцедуры - // Только для внутреннего использования Процедура ВидыДоступаВсеРазрешеныПредставлениеПриИзменении(Форма, Элемент) Экспорт @@ -451,3 +449,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index a908c2964..d4b7cea0a 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования @@ -428,3 +427,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index b5486a8e7..06d6db0b7 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Содержит сохраненные параметры, используемые подсистемой. Функция Параметры() Экспорт @@ -510,3 +509,5 @@ Возврат Новый Структура("ДатаОбновления, Таблица", '00010101'); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиВызовСервера/Module.bsl index 9673a6c7e..ef49c1565 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Сдвиг границы рассчитанных итогов. Процедура УстановкаПериодаРассчитанныхИтогов() Экспорт @@ -15,7 +14,8 @@ УстановитьПривилегированныйРежим(Истина); - УправлениеИтогамиИАгрегатамиСлужебный.УстановкаПериодаРассчитанныхИтогов(); + УправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl index 171f57fe7..1044c08d8 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий @@ -31,7 +30,6 @@ // Процедура ПриПолученииСпискаПредупрежденийЗавершенияРаботы(Предупреждения) Экспорт - Параметры = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении(); Если Параметры.Свойство("УправлениеИтогамиИАгрегатами") И Параметры.УправлениеИтогамиИАгрегатами.СдвинутьГраницуИтогов Тогда @@ -50,5 +48,6 @@ КонецЕсли; - КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 351fb5e85..3be3e6a47 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -3,8 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -133,45 +132,83 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Выполнение регламентных заданий // Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов". -Процедура УстановкаПериодаРассчитанныхИтогов() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; +Процедура УстановкаПериодаРассчитанныхИтоговОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + УстановитьПериодРассчитанныхИтогов(); + +КонецПроцедуры + +// Обработчик регламентного задания "ОбновлениеАгрегатов". +Процедура ОбновлениеАгрегатовОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + ОбновитьАгрегаты(); + +КонецПроцедуры + +// Обработчик регламентного задания "ПерестроениеАгрегатов". +Процедура ПерестроениеАгрегатовОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + + ПерестроитьАгрегаты(); + +КонецПроцедуры + +// Для внутреннего использования. +Процедура УстановитьПериодРассчитанныхИтогов() Экспорт ДатаСеанса = ТекущаяДатаСеанса(); РегистрНакопленияПериод = КонецМесяца(ДобавитьМесяц(ДатаСеанса, -1)); // Конец прошлого месяца. РегистрБухгалтерииПериод = КонецМесяца(ДатаСеанса); // Конец текущего месяца. + Кэш = КэшПроверкиРазделения(); + // Расчет итогов для регистров накопления. ВидОстатки = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки; Для Каждого РегистрМетаданные Из Метаданные.РегистрыНакопления Цикл - Если РегистрМетаданные.ВидРегистра = ВидОстатки Тогда - РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; - Если РегистрНакопленияМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() < РегистрНакопленияПериод Тогда - РегистрНакопленияМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрНакопленияПериод); - Если РегистрНакопленияМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда - РегистрНакопленияМенеджер.ПересчитатьТекущиеИтоги(); - КонецЕсли; - КонецЕсли; + Если РегистрМетаданные.ВидРегистра <> ВидОстатки Тогда + Продолжить; КонецЕсли; + Если Не ОбъектМетаданныхДоступенПоРазделению(Кэш, РегистрМетаданные) Тогда + Продолжить; + КонецЕсли; + РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; + Если РегистрНакопленияМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() >= РегистрНакопленияПериод Тогда + Продолжить; + КонецЕсли; + РегистрНакопленияМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрНакопленияПериод); + Если Не РегистрНакопленияМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда + Продолжить; + КонецЕсли; + РегистрНакопленияМенеджер.ПересчитатьТекущиеИтоги(); КонецЦикла; // Расчет итогов для регистров бухгалтерии. Для Каждого РегистрМетаданные Из Метаданные.РегистрыБухгалтерии Цикл - РегистрБухгалтерииМенеджер = РегистрыБухгалтерии[РегистрМетаданные.Имя]; - Если РегистрБухгалтерииМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() < РегистрБухгалтерииПериод Тогда - РегистрБухгалтерииМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрБухгалтерииПериод); - Если РегистрБухгалтерииМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда - РегистрБухгалтерииМенеджер.ПересчитатьТекущиеИтоги(); - КонецЕсли; + Если Не ОбъектМетаданныхДоступенПоРазделению(Кэш, РегистрМетаданные) Тогда + Продолжить; КонецЕсли; + РегистрБухгалтерииМенеджер = РегистрыБухгалтерии[РегистрМетаданные.Имя]; + Если РегистрБухгалтерииМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() >= РегистрБухгалтерииПериод Тогда + Продолжить; + КонецЕсли; + РегистрБухгалтерииМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрБухгалтерииПериод); + Если Не РегистрБухгалтерииМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда + Продолжить; + КонецЕсли; + РегистрБухгалтерииМенеджер.ПересчитатьТекущиеИтоги(); КонецЦикла; // Регистрация даты. @@ -182,41 +219,51 @@ КонецЕсли; КонецПроцедуры -// Обработчик регламентного задания "ОбновлениеАгрегатов". -Процедура ОбновлениеАгрегатов() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; +// Для внутреннего использования. +Процедура ОбновитьАгрегаты() Экспорт + + Кэш = КэшПроверкиРазделения(); // Обновление агрегатов для оборотных регистров накопления. ВидОбороты = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты; Для Каждого РегистрМетаданные Из Метаданные.РегистрыНакопления Цикл - Если РегистрМетаданные.ВидРегистра = ВидОбороты Тогда - РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; - Если РегистрНакопленияМенеджер.ПолучитьРежимАгрегатов() - И РегистрНакопленияМенеджер.ПолучитьИспользованиеАгрегатов() Тогда - РегистрНакопленияМенеджер.ОбновитьАгрегаты(); - КонецЕсли; + Если РегистрМетаданные.ВидРегистра <> ВидОбороты Тогда + Продолжить; КонецЕсли; + Если Не ОбъектМетаданныхДоступенПоРазделению(Кэш, РегистрМетаданные) Тогда + Продолжить; + КонецЕсли; + РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; + Если Не РегистрНакопленияМенеджер.ПолучитьРежимАгрегатов() + Или Не РегистрНакопленияМенеджер.ПолучитьИспользованиеАгрегатов() Тогда + Продолжить; + КонецЕсли; + // Обновление агрегатов. + РегистрНакопленияМенеджер.ОбновитьАгрегаты(); КонецЦикла; КонецПроцедуры -// Обработчик регламентного задания "ПерестроениеАгрегатов". -Процедура ПерестроениеАгрегатов() Экспорт - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; +// Для внутреннего использования. +Процедура ПерестроитьАгрегаты() Экспорт + + Кэш = КэшПроверкиРазделения(); // Перестроение агрегатов для оборотных регистров накопления. ВидОбороты = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты; Для Каждого РегистрМетаданные Из Метаданные.РегистрыНакопления Цикл - Если РегистрМетаданные.ВидРегистра = ВидОбороты Тогда - РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; - Если РегистрНакопленияМенеджер.ПолучитьРежимАгрегатов() - И РегистрНакопленияМенеджер.ПолучитьИспользованиеАгрегатов() Тогда - РегистрНакопленияМенеджер.ПерестроитьИспользованиеАгрегатов(); - КонецЕсли; + Если РегистрМетаданные.ВидРегистра <> ВидОбороты Тогда + Продолжить; КонецЕсли; + Если Не ОбъектМетаданныхДоступенПоРазделению(Кэш, РегистрМетаданные) Тогда + Продолжить; + КонецЕсли; + РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; + Если Не РегистрНакопленияМенеджер.ПолучитьРежимАгрегатов() + Или Не РегистрНакопленияМенеджер.ПолучитьИспользованиеАгрегатов() Тогда + Продолжить; + КонецЕсли; + // Перестроение агрегатов. + РегистрНакопленияМенеджер.ПерестроитьИспользованиеАгрегатов(); КонецЦикла; КонецПроцедуры @@ -358,3 +405,25 @@ Расписание.ДниНедели = ДниНедели; КонецПроцедуры +Функция КэшПроверкиРазделения() + Кэш = Новый Структура; + Кэш.Вставить("МодельСервиса", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Если Кэш.МодельСервиса Тогда + Кэш.Вставить("ВОбластиДанных", ОбщегоНазначения.ИспользованиеРазделителяСеанса()); + Кэш.Вставить("РазделительОсновныхДанных", ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + Кэш.Вставить("РазделительВспомогательныхДанных", ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); + КонецЕсли; + Возврат Кэш; +КонецФункции + +Функция ОбъектМетаданныхДоступенПоРазделению(Кэш, ОбъектМетаданных) Экспорт + Если Не Кэш.МодельСервиса Тогда + Возврат Истина; + КонецЕсли; + ОбъектМетаданныхРазделен = + ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, Кэш.РазделительОсновныхДанных) + Или ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, Кэш.РазделительВспомогательныхДанных); + Возврат Кэш.ВОбластиДанных = ОбъектМетаданныхРазделен; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index bc1124c74..b8724727f 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики событий формы и модуля объекта @@ -487,6 +486,7 @@ ТипИнформации = СтрокаТаблицы.Тип; Комментарий = СтрокаТаблицы.Комментарий; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; + ОбязательноеЗаполнение = ВидИнформации.ОбязательноеЗаполнение; Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда @@ -526,7 +526,12 @@ Представление = Форма[ИмяРеквизита]; - Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) Тогда + Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) + // И нет других строк с данными для видов КИ с множественными значениями + И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида( + Форма, СтрокаТаблицы, ВидИнформации + ) + Тогда ТекстСообщения = Нстр("ru = 'Поле ""%1"" не заполнено.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВидИнформации.Наименование); @@ -1119,10 +1124,10 @@ // Параметры: // МенеджерВременныхТаблиц // МассивОбъектов, массив владельцев контактной информации -// Тип – массив +// Тип - массив // Все элементы одного типа -// ТипыКИ – массив, необязательный, если не задан все типы -// ВидыКИ – массив, необязательный, если не задан все виды +// ТипыКИ - массив, необязательный, если не задан все типы +// ВидыКИ - массив, необязательный, если не задан все виды // // В менеджер создается временная таблица ВТКонтактнаяИнформация с полями: // Объект @@ -1168,10 +1173,10 @@ // // Параметры: // МассивОбъектов, массив владельцев контактной информации -// Тип – массив +// Тип - массив // Все элементы одного типа -// ТипыКИ – массив, необязательный, если не задан все типы -// ВидыКИ – массив, необязательный, если не задан все виды +// ТипыКИ - массив, необязательный, если не задан все типы +// ВидыКИ - массив, необязательный, если не задан все виды // // Возвращаемое значение // Таблица значений с полями: @@ -1204,19 +1209,18 @@ // Заполняет контактную информацию в объектах // Параметры: -// ДанныеЗаполнения - Таблица значений с колонками: -// Приемник - ссылка или объект, в котором нужно заполнить КИ -// ВидКИ - вид контактной информации, заполняемый в приемнике -// СтруктураКИ - заполненная структура контактной информации -// КлючСтроки - Структура отбора для поиска строки в табличной части, -// где Ключ - Имя колонки в табличной части, значение - значение отбора +// ДанныеЗаполнения - ТаблицаЗначений - описывает объекты для для заполнения. Содержит колонки: +// * Приемник - Ссылка или Объект, в котором нужно заполнить КИ +// * ВидКИ - СправочникСсылка.ВидыКонтактнойИнформации вид контактной информации, заполняемый в приемнике +// * СтруктураКИ - СписокЗначений, Строка, Структура - данные значений полей контактной информации +// * КлючСтроки - Структура - фильтр для поиска строки в табличной части, где Ключ - имя колонки в табличной части, Значение - значение отбора // Процедура ЗаполнитьКонтактнуюИнформациюОбъектов(ДанныеЗаполнения) Экспорт ПредыдущийПриемник = Неопределено; ДанныеЗаполнения.Сортировать("Приемник, ВидКИ"); - Для каждого СтрокаЗаполнения Из ДанныеЗаполнения Цикл + Для Каждого СтрокаЗаполнения Из ДанныеЗаполнения Цикл Приемник = СтрокаЗаполнения.Приемник; Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Приемник)) Тогда @@ -1293,8 +1297,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -1330,8 +1335,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обработчик подписки события "ОбработкаЗаполнения" // @@ -1389,6 +1395,28 @@ КонецПроцедуры +// Проверяет на наличие в форме заполненных строк КИ того же вида (за исключением текущей) +// +Функция ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Знач Форма, Знач ПроверяемаяСтрока, Знач ВидКонтактнойИнформации) + + ВсеСтрокиЭтогоВида = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки( + Новый Структура("Вид", ВидКонтактнойИнформации) + ); + + Для Каждого СтрокаВида Из ВсеСтрокиЭтогоВида Цикл + + Если СтрокаВида <> ПроверяемаяСтрока Тогда + Представление = Форма[СтрокаВида.ИмяРеквизита]; + Если Не ПустаяСтрока(Представление) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + // Определяет, есть ли у объекта реквизит с заданным именем // // Параметры: @@ -1407,7 +1435,6 @@ Возврат ПроверкаРеквизита.Наименование = Неопределено; КонецФункции - // Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника) // // Параметры: @@ -1890,7 +1917,6 @@ КонецЕсли; КонецЕсли; - КонецПроцедуры // Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. @@ -1963,11 +1989,11 @@ // Заполняет контактную информацию в табличной части "Контактная информация" приемника // // Параметры: -// Приемник - объект, в котором нужно заполнить КИ -// ВидКИ - вид контактной информации, заполняемый в приемнике -// СтруктураКИ - заполненная структура контактной информации -// СтрокаТабличнойЧасти - строка табличной части приемника, если контактная информация заполняется для строки -// Неопределено, если контактная информация заполняется для приемника +// * Приемник - Объект, в котором нужно заполнить КИ +// * ВидКИ - СправочникСсылка.ВидыКонтактнойИнформации вид контактной информации, заполняемый в приемнике +// * СтруктураКИ - СписокЗначений, Строка, Структура - данные значений полей контактной информации +// * СтрокаТабличнойЧасти - СтрокаТабличнойЧасти, Неопределено - данные приемника, если контактная информация заполняется для строки +// Неопределено, если контактная информация заполняется для приемника // Процедура ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтруктураКИ, СтрокаТабличнойЧасти = Неопределено) @@ -1990,15 +2016,16 @@ СтрокаКИ = НайденныеСтрокиКИ[0]; КонецЕсли; - СтрокаКИ.Тип = ВидКИ.Тип; - СтрокаКИ.Вид = ВидКИ; - СтрокаКИ.Представление = СтруктураКИ.Представление; + // Из любого понимаемого - в XML + ЗначенияПолей = КонтактнаяИнформацияВXML(СтруктураКИ, , ВидКИ); + Представление = ПредставлениеКонтактнойИнформации(ЗначенияПолей); - СтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.СтрокаПолей(СтруктураКИ); - - ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаКИ.ЗначенияПолей); - ЗаполнитьДополнительныеРеквизитыКонтактнойИнформации(СтрокаКИ, СтруктураКИ.Представление, ЗначенияПолей); + СтрокаКИ.Тип = ВидКИ.Тип; + СтрокаКИ.Вид = ВидКИ; + СтрокаКИ.Представление = Представление; + СтрокаКИ.ЗначенияПолей = ЗначенияПолей; + ЗаполнитьДополнительныеРеквизитыКонтактнойИнформации(СтрокаКИ, Представление, ЗначенияПолей); КонецПроцедуры // Проверяет контактную информацию электронной почты и сообщает об ошибках. @@ -2383,7 +2410,7 @@ // Штатное обновление классификатора без добавления новых стран Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.1.21"; + Обработчик.Версия = "2.2.2.13"; Обработчик.Процедура = "УправлениеКонтактнойИнформацией.ОбработчикОбновленияСуществующихСтранМира"; Обработчик.РежимВыполнения = "Монопольно"; Обработчик.ОбщиеДанные = Ложь; @@ -2393,7 +2420,6 @@ // Неразделенный монопольный обработчик для копирования стран мира из нулевой области // Сохраняет эталон и список областей данных - адресатов Процедура ПодготовкаЭталонаРазделенныхСтранМира() Экспорт - УстановитьПривилегированныйРежим(Истина); // Контроль версии базы ИмяРегистраЭталона = "УдалитьСтраныМира"; @@ -2401,6 +2427,13 @@ Возврат; КонецЕсли; + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + Если МодульРаботаВМоделиСервиса = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + // Запрашиваем данные из нулевой области, создаем эталон с точностью до ссылки ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, 0); Запрос = Новый Запрос(" @@ -2423,23 +2456,15 @@ Набор.Добавить().Значение = Новый ХранилищеЗначения(Эталон, Новый СжатиеДанных(9)); ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - // Адресаты обновления - Менеджер = РегистрыСведений[ИмяРегистраЭталона].СоздатьМенеджерЗаписи(); - Запрос.Текст = " - |ВЫБРАТЬ - | ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных - |ИЗ - | РегистрСведений.ОбластиДанных - |ГДЕ - | Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) - | И ОбластьДанныхВспомогательныеДанные <> 0 - |"; - Отбор = Набор.Отбор.ОбластьДанных; - Выборка = Запрос.Выполнить().Выбрать(); + // Пишем адресатов обновления + ИспользуемыеОбласти = МодульРаботаВМоделиСервиса.ИспользуемыеОбластиДанных(); + Выборка = ИспользуемыеОбласти.Выбрать(); Пока Выборка.Следующий() Цикл - Отбор.Установить(Выборка.ОбластьДанных); + + Набор.Отбор.ОбластьДанных.Установить(Выборка.ОбластьДанных); Набор.Очистить(); Набор.Добавить().ОбластьДанных = Выборка.ОбластьДанных; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); КонецЦикла; @@ -2552,9 +2577,9 @@ // порядка окажутся неуникальными в пределах группы, то настройка порядка пользователем будет невозможна. // В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением 0 (порядок будет назначен автоматически в подсистеме // "Настройка порядка элементов" при выполнении процедуры). -// Для размещения видов КИ в определённой последовательности относительно друг друга без явного размещения в начале списка достаточно вызывать данную процедуру +// Для размещения видов КИ в определенной последовательности относительно друг друга без явного размещения в начале списка достаточно вызывать данную процедуру // в нужной последовательности для каждого вида КИ с указанием порядка 0. -// Если добавляется предопределённый вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде. +// Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде. // Процедура ОбновитьВидКонтактнойИнформации(Вид, Тип, Подсказка, МожноИзменятьСпособРедактирования, РедактированиеТолькоВДиалоге, ОбязательноеЗаполнение, Порядок = Неопределено, РазрешитьВводНесколькихЗначений = Ложь, НастройкиПроверки = Неопределено) Экспорт @@ -2731,7 +2756,6 @@ КонецФункции - // Конструктор структуры, совместимой по полям сл справочникам видов КИ // Функция СтруктураВидаКонтактнойИнформации() Экспорт @@ -2856,7 +2880,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - МодульАдресныйКлассификатор.ПолучитьСтруктуруАдреса(КодАдресногоЭлемента, Дом, Корпус, Квартира); + МодульАдресныйКлассификатор.СтруктураАдреса(КодАдресногоЭлемента, Дом, Корпус, Квартира); КонецЕсли; КонецПроцедуры @@ -2880,7 +2904,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - Индекс = МодульАдресныйКлассификатор.ПолучитьИндекс(НазваниеРегиона, НазваниеРайона, НазваниеГорода, + Индекс = МодульАдресныйКлассификатор.ИндексАдреса(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома, НомерКорпуса, РодительИндекса); КонецЕсли; @@ -2983,7 +3007,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - ИмяИАдресноеСокращение = МодульАдресныйКлассификатор.ПолучитьИмяИАдресноеСокращение(СтрокаЭлемента, АдресноеСокращение); + ИмяИАдресноеСокращение = МодульАдресныйКлассификатор.ИмяИАдресноеСокращение(СтрокаЭлемента, АдресноеСокращение); КонецЕсли; КонецПроцедуры @@ -3025,7 +3049,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - НаименованиеРегиона = МодульАдресныйКлассификатор.ПолучитьНаименованиеРегионаПоКоду(КодРегиона); + НаименованиеРегиона = МодульАдресныйКлассификатор.НаименованиеРегионаПоКоду(КодРегиона); КонецЕсли; КонецПроцедуры @@ -3040,7 +3064,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); - КодРегиона = МодульАдресныйКлассификатор.ПолучитьКодРегионаПоНаименованию(Регион); + КодРегиона = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(Регион); КонецЕсли; КонецПроцедуры @@ -3088,3 +3112,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index a8216bb55..504b71b2b 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик события ПриИзменении поля формы контактной информации. // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация" @@ -291,6 +290,40 @@ Возврат ОткрытьФорму(ИмяОткрываемойФормы, Параметры, Владелец, Уникальность, Окно, , Оповещение); КонецФункции +// ИспользованиеМодальности + +// Устарело. Следует использовать ОткрытьФормуКонтактнойИнформации +// +// Модально открывает подходящую форму контактной информации для редактирования или просмотра +// +// Параметры: +// Параметры - результат функции ПараметрыФормыКонтактнойИнформации +// Владелец - параметр для открываемой формы +// Уникальность - параметр для открываемой формы +// Окно - параметр для открываемой формы +// +// Возвращаемое значение: отредактированный результат или Неопределено при отказе от редактирования +// +Функция ОткрытьФормуКонтактнойИнформацииМодально(Параметры, Владелец = Неопределено, Уникальность = Неопределено, Окно = Неопределено) Экспорт + + ВидИнформации = Параметры.ВидКонтактнойИнформации; + + ИмяОткрываемойФормы = КонтактнаяИнформацияКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации(ВидИнформации); + Если ИмяОткрываемойФормы=Неопределено Тогда + ВызватьИсключение НСтр("ru='Не обрабатываемый тип адреса: """ + ВидИнформации + """'"); + КонецЕсли; + + Если Не Параметры.Свойство("Заголовок") Тогда + Параметры.Вставить("Заголовок", Строка(КонтактнаяИнформацияСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации))); + КонецЕсли; + + Параметры.Вставить("ОткрытаПоСценарию", Истина); + + Возврат ОткрытьФормуМодально(ИмяОткрываемойФормы, Параметры, Владелец); +КонецФункции + +// Конец ИспользованиеМодальности + // Создает письмо по контактной информации // // Параметры: @@ -322,7 +355,9 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); - МодульРаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(, АдресПочты); + + ПараметрыОтправки = Новый Структура("Получатель", АдресПочты); + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки); Возврат; КонецЕсли; @@ -368,8 +403,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Завершение немодальных диалогов Процедура ПредставлениеНачалоВыбораЗавершение(Знач РезультатЗакрытия, Знач ДополнительныеПараметры) Экспорт @@ -383,7 +419,7 @@ Элемент = ДополнительныеПараметры.Элемент; Форма = ДополнительныеПараметры.Форма; - ТекстПредставления = СтрЗаменить(РезультатЗакрытия.Представление, Символы.ПС, " "); + ТекстПредставления = РезультатЗакрытия.Представление; Если ДополнительныеПараметры.ЭтоТабличнаяЧасть Тогда ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = РезультатЗакрытия.КонтактнаяИнформация; @@ -558,27 +594,49 @@ Процедура НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, Параметры = Неопределено) - ПараметрыФормы = ?(Параметры = Неопределено, Новый Структура, Параметры); - - ПараметрыФормы.Вставить("Регион", ЧастиАдреса.Регион.Значение); - ПараметрыФормы.Вставить("Район", ЧастиАдреса.Район.Значение); - ПараметрыФормы.Вставить("Город", ЧастиАдреса.Город.Значение); - ПараметрыФормы.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Значение); - КодРеквизита = ВРег(КодЧастиАдреса); Если КодРеквизита = "РЕГИОН" Тогда Уровень = 1; + ИначеЕсли КодРеквизита = "РАЙОН" Тогда Уровень = 2; + ИначеЕсли КодРеквизита = "ГОРОД" Тогда Уровень = 3; + ИначеЕсли КодРеквизита = "НАСЕЛЕННЫЙПУНКТ" Тогда Уровень = 4; + ИначеЕсли КодРеквизита = "УЛИЦА" Тогда Уровень = 5; + Иначе Возврат; + КонецЕсли; + + ПараметрыФормы = ?(Параметры = Неопределено, Новый Структура, Параметры); + + ПараметрыФормы.Вставить("Регион", ЧастиАдреса.Регион.Значение); + Если ЧастиАдреса.Регион.Свойство("КодКлассификатора") Тогда + ПараметрыФормы.Вставить("РегионКодКлассификатора", ЧастиАдреса.Регион.КодКлассификатора); + КонецЕсли; + + ПараметрыФормы.Вставить("Район", ЧастиАдреса.Район.Значение); + Если ЧастиАдреса.Район.Свойство("КодКлассификатора") Тогда + ПараметрыФормы.Вставить("РайонКодКлассификатора", ЧастиАдреса.Район.КодКлассификатора); + КонецЕсли; + + ПараметрыФормы.Вставить("Город", ЧастиАдреса.Город.Значение); + Если ЧастиАдреса.Город.Свойство("КодКлассификатора") Тогда + ПараметрыФормы.Вставить("ГородКодКлассификатора", ЧастиАдреса.Город.КодКлассификатора); + КонецЕсли; + + ПараметрыФормы.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Значение); + Если ЧастиАдреса.НаселенныйПункт.Свойство("КодКлассификатора") Тогда + ПараметрыФормы.Вставить("НаселенныйПунктКодКлассификатора", ЧастиАдреса.НаселенныйПункт.КодКлассификатора); + КонецЕсли; + ПараметрыФормы.Вставить("Уровень", Уровень); МодульКЛАДР = КлиентскийМодульКЛАДР(); @@ -602,8 +660,9 @@ Возврат ЧастьАдреса.Значение; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает строку дополнительных значений по имени реквизита. // @@ -681,6 +740,7 @@ Форма.ПоказатьВыборИзМеню(Оповещение, АдресаДляЗаполнения, Форма.Элементы["Команда" + ИмяРеквизита]); КонецПроцедуры +// Завершение немодального диалога Процедура ЗаполнитьАдресЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт Если ВыбранныйЭлемент = Неопределено Тогда Возврат; @@ -718,6 +778,7 @@ НСтр("ru = 'Комментарий'")); КонецПроцедуры +// Завершение немодального диалога Процедура ВвестиКомментарийЗавершение(Знач Комментарий, Знач ДополнительныеПараметры) Экспорт Если Комментарий = Неопределено Или Комментарий = ДополнительныеПараметры.ПредыдущийКомментарий Тогда // Отказ от ввода или нет изменений @@ -780,3 +841,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 9b1ad5ab0..3dea3d424 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Функция формирует представление с видом для формы ввода адреса. // @@ -105,8 +104,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Дополняет представление адреса строкой. // @@ -342,3 +342,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 8d2100b81..2e9e9e796 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Проверить, нужно ли печатать макет. // @@ -122,7 +121,7 @@ // Возвращает список команд печати для указанной формы. // // Параметры: -// Форма - УправляемаяФорма или Строка - форма или полное имя формы, для которой необходимо получить список команд печати. +// Форма - УправляемаяФорма, Строка - форма или полное имя формы, для которой необходимо получить список команд печати. // // Возвращаемое значение: // ТаблицаЗначений - описание см. в СоздатьКоллекциюКомандПечати(). @@ -186,9 +185,9 @@ // Создает пустую таблицу для размещения в нее команд печати. // // Возвращаемое значение: -// ТаблицаЗначений - описание команд печати. +// ТаблицаЗначений - описание команд печати: // -// Идентификатор - Строка или Массив - Идентификатор команды печати, по которому менеджер печати определяет печатную +// Идентификатор - Строка, Массив - Идентификатор команды печати, по которому менеджер печати определяет печатную // форму, которую необходимо сформировать. // Пример: "СчетЗаказ". // @@ -208,7 +207,7 @@ // например: "СчетЗаказ,Обработка.ПечатнаяФорма.ГарантийноеПисьмо". // // В этом примере ГарантийноеПисьмо формируется в менеджере печати -// Обработка._ДемоПечатнаяФорма, а СчетЗаказ – в менеджере печати, указанном в +// Обработка._ДемоПечатнаяФорма, а СчетЗаказ - в менеджере печати, указанном в // параметре МенеджерПечати. // // Представление - Строка - Представление команды в меню Печать. @@ -247,7 +246,7 @@ // формы «Печать документов». // Пример: "Настраиваемый комплект". // -// ФункциональныеОпции - Строка (необязательный) Имена функциональных опций через запятую, от которых зависит +// ФункциональныеОпции - Строка - (необязательный) Имена функциональных опций через запятую, от которых зависит // доступность команды печати. // // ПроверкаПроведенияПередПечатью - Булево - (необязательный) Признак необходимости проверки проведенности @@ -345,39 +344,52 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с шаблонами офисных документов -// Добавляет к параметру НаборОбластей новую запись об области -// Параметры -// НаборОбластей - массив - набор областей (массив структур) -// ИмяОбласти - строка - имя добавляемой области -// ТипОбласти - строка - тип области: +// Добавляет к параметру НаборОбластей новую запись об области. +// +// Параметры: +// МакетаОфисногоДокумента - Массив - набор областей (массив структур) макета офисного документа. +// ИмяОбласти - Строка - имя добавляемой области. +// ТипОбласти - Строка - тип области: // ВерхнийКолонтитул // НижнийКолонтитул // Общая // СтрокаТаблицы // Список // -Процедура ДобавитьОписаниеОбласти(НаборОбластей, Знач ИмяОбласти, Знач ТипОбласти) Экспорт +// Пример: +// Функция ОбластиМакетаОфисногоДокумента() +// +// Области = Новый Структура; +// +// УправлениеПечатью.ДобавитьОписаниеОбласти(Области, "ВерхнийКолонтитул", "ВерхнийКолонтитул"); +// УправлениеПечатью.ДобавитьОписаниеОбласти(Области, "НижнийКолонтитул", "НижнийКолонтитул"); +// УправлениеПечатью.ДобавитьОписаниеОбласти(Области, "Заголовок", "Общая"); +// +// Возврат Области; +// +// КонецФункции +// +Процедура ДобавитьОписаниеОбласти(ОбластиМакетаОфисногоДокумента, Знач ИмяОбласти, Знач ТипОбласти) Экспорт НоваяОбласть = Новый Структура; НоваяОбласть.Вставить("ИмяОбласти", ИмяОбласти); НоваяОбласть.Вставить("ТипОбласти", ТипОбласти); - НаборОбластей.Вставить(ИмяОбласти, НоваяОбласть); + ОбластиМакетаОфисногоДокумента.Вставить(ИмяОбласти, НоваяОбласть); КонецПроцедуры -// Интерфейс для вызова из клиентских модулей печати форм по макетам офисных документов. -// Получает за один вызов всю необходимую информацию: данные объектов по макетам, двоичные +// Получает за один вызов всю необходимую информацию для печати: данные объектов по макетам, двоичные // данные макетов, описание областей макетов. -// Параметры: -// ИмяМенеджераПечати - строка - имя для обращения к менеджеру объекта, например "Документ.<Имя документа>" -// ИменаМакетов - строка - имена макетов, по которым будут формироваться печатные формы -// СоставДокументов - массив ссылок - ссылки на объекты информационной базы (должны быть одного типа) +// Для вызова из клиентских модулей печати форм по макетам офисных документов. // -Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, - Знач ИменаМакетов, - Знач СоставДокументов) Экспорт +// Параметры: +// ИмяМенеджераПечати - Строка - имя для обращения к менеджеру объекта, например "Документ.<Имя документа>". +// ИменаМакетов - Строка - имена макетов, по которым будут формироваться печатные формы. +// СоставДокументов - Массив - ссылки на объекты информационной базы (должны быть одного типа). +// +Функция МакетыИДанныеОбъектовДляПечати(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт МассивИменМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(ИменаМакетов, " ", ""), ","); @@ -389,17 +401,18 @@ КонецФункции -// Возвращает макет по полному пути к макету. +// Возвращает макет печатной формы по полному пути к макету. +// // Параметры: -// ПолныйПутьКМакету - Строка - формат полного пути: +// ПолныйПутьКМакету - Строка - полный путь к макету в формате: // "Документ.<ИмяДокумента>.<ИмяМакета>" // "Обработка.<ИмяОбработки>.<ИмяМакета>" // "ОбщийМакет.<ИмяМакета>" // Возвращаемое значение: -// для макета типа MXL - табличный документ -// для макетов DOC и ODT - двоичные данные +// ТабличныйДокумент - для макета типа MXL +// ДвоичныеДанные - для макетов DOC и ODT // -Функция ПолучитьМакет(ПолныйПутьКМакету) Экспорт +Функция МакетПечатнойФормы(ПолныйПутьКМакету) Экспорт ЧастиПути = СтрЗаменить(ПолныйПутьКМакету, ".", Символы.ПС); @@ -452,12 +465,45 @@ КонецФункции -// Получает на входе двоичные данные табличного документа -// и на их основе создает объект - табличный документ. -// Параметры -// ДвоичныеДанные - двоичные данные табличного документа -// Возвращаемое значение -// Табличный документ +// Возвращает табличный документ по двоичным данным табличного документа. +// +// Параметры: +// ДвоичныеДанныеДокумента - ДвоичныеДанные - двоичные данные табличного документа. +// +// Возвращаемое значение: +// ТабличныйДокумент +// +Функция ТабличныйДокументПоДвоичнымДанным(ДвоичныеДанныеДокумента) Экспорт + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ДвоичныеДанныеДокумента.Записать(ИмяВременногоФайла); + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.Прочитать(ИмяВременногоФайла); + Если БезопасныйРежим() = Ложь Тогда + УдалитьФайлы(ИмяВременногоФайла); + КонецЕсли; + + Возврат ТабличныйДокумент; + +КонецФункции + +// Устарела. Следует использовать МакетыИДанныеОбъектовДляПечати. +// +Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт + + Возврат МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); + +КонецФункции + +// Устарела. Следует использовать МакетПечатнойФормы. +// +Функция ПолучитьМакет(ПолныйПутьКМакету) Экспорт + + Возврат МакетПечатнойФормы(ПолныйПутьКМакету); + +КонецФункции + +// Устарела. Следует использовать ТабличныйДокументПоДвоичнымДанным. // Функция ПолучитьТабличныйДокументПоДвоичнымДанным(ДвоичныеДанные) Экспорт @@ -473,8 +519,215 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Возвращает двоичные данные для формирования QR кода +// +// Параметры: +// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде. +// +// УровеньКоррекции - Число - уровень погрешности изображения при котором данный QR-код все еще возможно 100% распознать. +// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений: +// 0(7% погрешности), 1(15% погрешности), 2(25% погрешности), 3(35% погрешности). +// +// Размер - Число - определяет длину стороны выходного изображения в пикселях. +// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет. +// +// ТекстОшибки - Строка - в этот параметр помещается описание возникшей ошибки (если возникла). +// +// Возвращаемое значение: +// Двоичные данные - буфер, содержащий байты PNG-изображения QR-кода. +// +// Пример: +// +// //Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС +// +// QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа); +// ТекстОшибки = ""; +// ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки); +// Если Не ПустаяСтрока(ТекстОшибки) +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); +// КонецЕсли; +// +// КартинкаQRКода = Новый Картинка(ДанныеQRКода); +// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода; +// +Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт + + Отказ = Ложь; + + ГенераторQRКода = КомпонентаФормированияQRКода(Отказ); + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат ДвоичныеДанныеКартинки; + +КонецФункции + +// Формирует форматную строку согласно "Унифицированному формату электронных банковских сообщений" для ее отображения в виде QR-кода +// Параметры: +// ДанныеДокумента - Структура - содержит значения полей документа +// - Данные документа будут закодированы согласно стандарту +// "СТАНДАРТЫ ФИНАНСОВЫХ ОПЕРАЦИЙ Символы двумерного штрихового кода для осуществления платежей физических лиц" +// - ДанныеДокумента должны содержать информацию в полях, описанных ниже. +// +// - Обязательные поля структуры +// * ТекстПолучателя - Наименование получателя платежа - Макс. 160 символов; +// * НомерСчетаПолучателя - Номер счета получателя платежа - Макс. 20 символов; +// * НаименованиеБанкаПолучателя - Наименование банка получателя платежа - Макс. 45 символов; +// * БИКБанкаПолучателя - БИК - Макс. 9 символов; +// * СчетБанкаПолучателя - Номер кор./сч. банка получателя платежа - Макс. 20 символов; +// - Дополнительные поля структуры +// * СуммаЧислом - Сумма платежа, в рублях - Макс. 16 символов +// * НазначениеПлатежа - Наименование платежа (назначение) - Макс. 210 символов; +// * ИННПолучателя - ИНН получателя платежа - Макс. 12 символов; +// * ИННПлательщика - ИНН плательщика - Макс. 12 символов; +// * СтатусСоставителя - Статус составителя платежного документа - Макс. 2 символа; +// * КПППолучателя - КПП получателя платежа - Макс. 9 символов +// * КодБК - КБК - Макс. 20 символов; +// * КодОКТМО - Код КодОКТМО - Макс. 11 символов; +// * ПоказательОснования - Основание налогового платежа - Макс. 2 символа; +// * ПоказательПериода - Налоговый период - Макс. 10 символов; +// * ПоказательНомера - Номер документа - Макс. 15 символов; +// * ПоказательДаты - Дата документа - Макс. 10 символ +// * ПоказательТипа - Тип платежа - Макс. 2 символа +// - Прочие дополнительные поля +// * ФамилияПлательщика - Фамилия плательщика +// * ИмяПлательщика - Имя плательщика +// * ОтчествоПлательщика - Отчество плательщика +// * АдресПлательщика - Адрес плательщика +// * ЛицевойСчетБюджетногоПолучателя - Лицевой счет бюджетного получателя +// * ИндексПлатежногоДокумента - Индекс платежного документа +// * СНИЛС - № лицевого счета в системе персонифицированного учета в ПФР - СНИЛС +// * НомерДоговора - Номер договора +// * НомерЛицевогоСчетаПлательщика - Номер лицевого счета плательщика в организации (в системе учета ПУ) +// * НомерКвартиры - Номер квартиры +// * НомерТелефона - Номер телефона +// * ВидПлательщика - Вид ДУЛ плательщика +// * НомерПлательщик - Номер ДУЛ плательщика +// * ФИОРебенка - Ф.И.О. ребенка/учащегося +// * ДатаРождения - Дата рождения +// * СрокПлатежа - Срок платежа/дата выставления счета +// * ПериодОплаты - Период оплаты +// * ВидПлатежа - Вид платежа +// * КодУслуги - Код услуги/название прибора учета +// * НомерПрибораУчета - Номер прибора учета +// * ПоказаниеПрибораУчета - Показание прибора учета +// * НомерИзвещения - Номер извещения, начисления, счета +// * ДатаИзвещения - Дата извещения/начисления/счета/постановления (для ГИБДД) +// * НомерУчреждения - Номер учреждения (образовательного, медицинского) +// * НомерГруппы - Номер группы детсада/класса школы +// * ФИОПреподавателя - ФИО преподавателя, специалиста, оказывающего услугу +// * СуммаСтраховки - Сумма страховки/дополнительной услуги/Сумма пени (в копейках) +// * НомерПостановления - Номер постановления (для ГИБДД) +// * НомерИсполнительногоПроизводства - Номер исполнительного производства +// * КодВидаПлатежа - Код вида платежа (например, для платежей в адрес Росреестра) +// * ИдентификаторНачисления - Уникальный идентификатор начисления +// * ТехническийКод - Технический код, рекомендуемый для заполнения поставщиком услуг. +// Может использоваться принимающей организацией для вызова соответствующей обрабатывающей ИТ-системы. +// Перечень значений кода представлен ниже. +// +// Код назначения Наименование назначения платежа +// платежа +// +// 01 Мобильная связь, стационарный телефон +// 02 Коммунальные услуги, ЖКХ +// 03 ГИБДД, налоги, пошлины, бюджетные платежи +// 04 Охранные услуги +// 05 Услуги, оказываемые УФМС +// 06 ПФР +// 07 Погашение кредитов +// 08 Образовательные учреждения +// 09 Интернет и ТВ +// 10 Электронные деньги +// 11 Отдых и путешествия +// 12 Инвестиции и страхование +// 13 Спорт и здоровье +// 14 Благотворительные и общественные организации +// 15 Прочие услуги +// +// Возвращаемое значение: +// Строка - строка данных в формате УФЭБС +// +Функция ФорматнаяСтрокаУФЭБС(ДанныеДокумента) Экспорт + + ТекстОшибки = ""; + СтрокаОбязательныхРеквизитов = СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстОшибки); + + Если ПустаяСтрока(СтрокаОбязательныхРеквизитов) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , ,); + Возврат ""; + КонецЕсли; + + СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); + СтрокаДополнительныхРеквизитов = ""; + ДополнительныеРеквизиты = Новый Структура; + ДобавитьДополнительныеРеквизиты(ДополнительныеРеквизиты); + + Для Каждого Элемент Из ДополнительныеРеквизиты Цикл + + Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда + ДанныеДокумента.Вставить(Элемент.Ключ, ""); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + Если Элемент.Ключ = "СуммаЧислом" Тогда + ЗначениеСтрокой = Формат(ДанныеДокумента.СуммаЧислом * 100, "ЧГ="); + Иначе + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + КонецЕсли; + СтрокаДополнительныхРеквизитов = СтрокаДополнительныхРеквизитов + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + + "=" + ЗначениеСтрокой + "|"; + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(СтрокаДополнительныхРеквизитов) Тогда + ДлинаСтроки = СтрДлина(СтрокаДополнительныхРеквизитов); + СтрокаДополнительныхРеквизитов = Сред(СтрокаДополнительныхРеквизитов, 1, ДлинаСтроки - 1); + КонецЕсли; + + ПрочиеДополнительныеРеквизиты = Новый Структура; + ДобавитьПрочиеДополнительныеРеквизиты(ПрочиеДополнительныеРеквизиты); + СтрокаПрочихДополнительныхРеквизитов = ""; + + Для Каждого Элемент Из ПрочиеДополнительныеРеквизиты Цикл + + Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда + ДанныеДокумента.Вставить(Элемент.Ключ, ""); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + СтрокаПрочихДополнительныхРеквизитов = СтрокаПрочихДополнительныхРеквизитов + + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" + ЗначениеСтрокой + + "|"; + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов) Тогда + ДлинаСтроки = СтрДлина(СтрокаПрочихДополнительныхРеквизитов); + СтрокаПрочихДополнительныхРеквизитов = Сред(СтрокаПрочихДополнительныхРеквизитов, 1, ДлинаСтроки - 1); + КонецЕсли; + + ИтоговаяСтрока = СтрокаОбязательныхРеквизитов + + ?(ПустаяСтрока(СтрокаДополнительныхРеквизитов), "", "|" + СтрокаДополнительныхРеквизитов) + + ?(ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов), "", "|" + СтрокаПрочихДополнительныхРеквизитов); + + Возврат ИтоговаяСтрока; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -484,10 +737,14 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "УправлениеПечатью"); -КонецПроцедуры + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "УправлениеПечатью"); + + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // @@ -507,6 +764,36 @@ КонецПроцедуры +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + +КонецПроцедуры + +// Возвращает список разрешений для загрузки классификатора банков с сайта РБК. +// +// Возвращаемое значение: +// Массив. +// +Функция Разрешения() + + Разрешения = Новый Массив; + Разрешения.Добавить( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиQRКода", НСтр("ru = 'Печать QR кодов.'")) + ); + + Возврат Разрешения; + +КонецФункции + // Сбрасывает пользовательские настройки количества печатных форм и порядка. Процедура СброситьПользовательскиеНастройкиФормыПечатьДокументов() Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("НастройкиПечатныхФорм", Неопределено, Неопределено); @@ -650,6 +937,48 @@ Идентификатор = Сред(Идентификатор, Позиция + 1); КонецЕсли; + // определение внутреннего менеджера печати + ИспользуемыйМенеджерПечати = ИмяДополнительногоМенеджераПечати; + Если ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда + ИспользуемыйМенеджерПечати = ИмяМенеджераПечати; + КонецЕсли; + + // проверка соответствия печатаемых объектов выбранной печатной форме + ОжидаемыйТипОбъекта = Неопределено; + МетаданныеМенеджера = Метаданные.НайтиПоПолномуИмени(ИспользуемыйМенеджерПечати); + Если МетаданныеМенеджера <> Неопределено + И (Метаданные.Документы.Содержит(МетаданныеМенеджера) + Или Метаданные.Справочники.Содержит(МетаданныеМенеджера) + Или Метаданные.БизнесПроцессы.Содержит(МетаданныеМенеджера) + Или Метаданные.Задачи.Содержит(МетаданныеМенеджера) + Или Метаданные.ПланыВидовРасчета.Содержит(МетаданныеМенеджера) + Или Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеМенеджера) + Или Метаданные.ПланыОбмена.Содержит(МетаданныеМенеджера)) Тогда + ОжидаемыйТипОбъекта = Тип(СтрЗаменить(ИспользуемыйМенеджерПечати, ".", "Ссылка.")); + КонецЕсли; + + ОбъектыСоответствующиеПечатнойФорме = МассивОбъектов; + Если ОжидаемыйТипОбъекта <> Неопределено Тогда + Если ТипЗнч(МассивОбъектов) = Тип("Массив") Тогда + ОбъектыСоответствующиеПечатнойФорме = Новый Массив; + Для Каждого Объект Из МассивОбъектов Цикл + Если ТипЗнч(Объект) <> ОжидаемыйТипОбъекта Тогда + СообщитьПечатнаяФормаНедоступна(Объект); + Иначе + ОбъектыСоответствующиеПечатнойФорме.Добавить(Объект); + КонецЕсли; + КонецЦикла; + Если ОбъектыСоответствующиеПечатнойФорме.Количество() = 0 Тогда + ОбъектыСоответствующиеПечатнойФорме = Неопределено; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивОбъектов) Тогда + Если ТипЗнч(МассивОбъектов) <> ОжидаемыйТипОбъекта Тогда + СообщитьПечатнаяФормаНедоступна(МассивОбъектов); + ОбъектыСоответствующиеПечатнойФорме = Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ВременнаяКоллекцияДляОднойПечатнойФормы = ПодготовитьКоллекциюПечатныхФорм(Идентификатор); // вызов процедуры Печать из менеджера печати @@ -658,22 +987,19 @@ МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику( ВнешняяПечатнаяФорма(ВнешняяПечатнаяФорма.Значение, ИсточникВнешнихПечатныхФорм), - Новый Структура("ИдентификаторКоманды, ОбъектыНазначения", ВнешняяПечатнаяФорма.Значение, МассивОбъектов), + Новый Структура("ИдентификаторКоманды, ОбъектыНазначения", ВнешняяПечатнаяФорма.Значение, ОбъектыСоответствующиеПечатнойФорме), ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); Иначе - // определение внутреннего менеджера печати - ИспользуемыйМенеджерПечати = ИмяДополнительногоМенеджераПечати; - Если ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда - ИспользуемыйМенеджерПечати = ИмяМенеджераПечати; - КонецЕсли; - Если Не ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИспользуемыйМенеджерПечати); - - // печать из внутреннего менеджера печати - МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); + // печать внутренней печатной формы + Если ОбъектыСоответствующиеПечатнойФорме <> Неопределено Тогда + МенеджерПечати.Печать(ОбъектыСоответствующиеПечатнойФорме, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); + Иначе + ВременнаяКоллекцияДляОднойПечатнойФормы[0].ТабличныйДокумент = Новый ТабличныйДокумент; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -1045,6 +1371,220 @@ Запись.Записать(); КонецПроцедуры +Функция СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстСообщения) + + ОбязательныеРеквизиты = Новый Структура(); + СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); + ДобавитьОбязательныеРеквизиты(ОбязательныеРеквизиты); + + Если Не ЗначениеЗаполнено(ДанныеДокумента.СчетБанкаПолучателя) Тогда + ДанныеДокумента.СчетБанкаПолучателя = "0"; + КонецЕсли; + + СлужебныеДанные = "ST00012"; + ОбязательныеДанные = ""; + + Для Каждого Элемент Из ОбязательныеРеквизиты Цикл + Если Не ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + ТекстСообщения = Нстр("ru = 'Не заполнен обязательный реквизит: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Элемент.Ключ); + Возврат ""; + КонецЕсли; + + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + + ОбязательныеДанные = ОбязательныеДанные + "|" + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" + + ЗначениеСтрокой; + + КонецЦикла; + + Если СтрДлина(ОбязательныеДанные) > 300 Тогда + Шаблон = НСтр("ru = 'Невозможно создать QR-код для документа %1 + |Строка обязательных реквизитов должна быть меньше 300 символов: + |""%2""'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + ДанныеДокумента.Ссылка, + ОбязательныеДанные); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + Возврат ""; + КонецЕсли; + + Возврат СлужебныеДанные + ОбязательныеДанные; + +КонецФункции + +Функция СтруктураПредставленийИРеквизитов() + + СтруктураВозврата = Новый Структура(); + + СтруктураВозврата.Вставить("ТекстПолучателя", "Name"); + СтруктураВозврата.Вставить("НомерСчетаПолучателя", "PersonalAcc"); + СтруктураВозврата.Вставить("НаименованиеБанкаПолучателя", "BankName"); + СтруктураВозврата.Вставить("БИКБанкаПолучателя", "BIC"); + СтруктураВозврата.Вставить("СчетБанкаПолучателя", "CorrespAcc"); + + СтруктураВозврата.Вставить("СуммаЧислом", "Sum"); + СтруктураВозврата.Вставить("НазначениеПлатежа", "Purpose"); + СтруктураВозврата.Вставить("ИННПолучателя", "PayeeINN"); + СтруктураВозврата.Вставить("ИННПлательщика", "PayerINN"); + СтруктураВозврата.Вставить("СтатусСоставителя", "DrawerStatus"); + СтруктураВозврата.Вставить("КПППолучателя", "KPP"); + СтруктураВозврата.Вставить("КодБК", "CBC"); + СтруктураВозврата.Вставить("КодОКТМО", "OKTMO"); + СтруктураВозврата.Вставить("ПоказательОснования", "PaytReason"); + СтруктураВозврата.Вставить("ПоказательПериода", "TaxPeriod"); + СтруктураВозврата.Вставить("ПоказательНомера", "DocNo"); + СтруктураВозврата.Вставить("ПоказательДаты", "DocDate"); + СтруктураВозврата.Вставить("ПоказательТипа", "TaxPaytKind"); + + СтруктураВозврата.Вставить("ФамилияПлательщика", "lastName"); + СтруктураВозврата.Вставить("ИмяПлательщика", "firstName"); + СтруктураВозврата.Вставить("ОтчествоПлательщика", "middleName"); + СтруктураВозврата.Вставить("АдресПлательщика", "payerAddress"); + СтруктураВозврата.Вставить("ЛицевойСчетБюджетногоПолучателя", "personalAccount"); + СтруктураВозврата.Вставить("ИндексПлатежногоДокумента", "docIdx"); + СтруктураВозврата.Вставить("СНИЛС", "pensAcc"); + СтруктураВозврата.Вставить("НомерДоговора", "contract"); + СтруктураВозврата.Вставить("НомерЛицевогоСчетаПлательщика", "persAcc"); + СтруктураВозврата.Вставить("НомерКвартиры", "flat"); + СтруктураВозврата.Вставить("НомерТелефона", "phone"); + СтруктураВозврата.Вставить("ВидПлательщика", "payerIdType"); + СтруктураВозврата.Вставить("НомерПлательщика", "payerIdNum"); + СтруктураВозврата.Вставить("ФИОРебенка", "childFio"); + СтруктураВозврата.Вставить("ДатаРождения", "birthDate"); + СтруктураВозврата.Вставить("СрокПлатежа", "paymTerm"); + СтруктураВозврата.Вставить("ПериодОплаты", "paymPeriod"); + СтруктураВозврата.Вставить("ВидПлатежа", "category"); + СтруктураВозврата.Вставить("КодУслуги", "serviceName"); + СтруктураВозврата.Вставить("НомерПрибораУчета", "counterId"); + СтруктураВозврата.Вставить("ПоказаниеПрибораУчета", "counterVal"); + СтруктураВозврата.Вставить("НомерИзвещения", "quittId"); + СтруктураВозврата.Вставить("ДатаИзвещения", "quittDate"); + СтруктураВозврата.Вставить("НомерУчреждения", "instNum"); + СтруктураВозврата.Вставить("НомерГруппы", "classNum"); + СтруктураВозврата.Вставить("ФИОПреподавателя", "specFio"); + СтруктураВозврата.Вставить("СуммаСтраховки", "addAmount"); + СтруктураВозврата.Вставить("НомерПостановления", "ruleId"); + СтруктураВозврата.Вставить("НомерИсполнительногоПроизводства", "execId"); + СтруктураВозврата.Вставить("КодВидаПлатежа", "regType"); + СтруктураВозврата.Вставить("ИдентификаторНачисления", "uin"); + СтруктураВозврата.Вставить("ТехническийКод", "TechCode"); + + Возврат СтруктураВозврата; + +КонецФункции + +Функция КомпонентаФормированияQRКода(Отказ) + + СистемнаяИнформация = Новый СистемнаяИнформация; + Платформа = СистемнаяИнформация.ТипПлатформы; + + ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода'"); + + Попытка + Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиQRКода", "QR") Тогда + QRCodeGenerator = Новый("AddIn.QR.QRCodeExtension"); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , , Отказ); + КонецЕсли + Исключение + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки, , , , Отказ); + КонецПопытки; + + Возврат QRCodeGenerator; + +КонецФункции + +Процедура ДобавитьОбязательныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("ТекстПолучателя"); + СтруктураДанных.Вставить("НомерСчетаПолучателя"); + СтруктураДанных.Вставить("НаименованиеБанкаПолучателя"); + СтруктураДанных.Вставить("БИКБанкаПолучателя"); + СтруктураДанных.Вставить("СчетБанкаПолучателя"); + +КонецПроцедуры + +Процедура ДобавитьДополнительныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("СуммаЧислом"); + СтруктураДанных.Вставить("НазначениеПлатежа"); + СтруктураДанных.Вставить("ИННПолучателя"); + СтруктураДанных.Вставить("ИННПлательщика"); + СтруктураДанных.Вставить("СтатусСоставителя"); + СтруктураДанных.Вставить("КПППолучателя"); + СтруктураДанных.Вставить("КодБК"); + СтруктураДанных.Вставить("КодОКТМО"); + СтруктураДанных.Вставить("ПоказательОснования"); + СтруктураДанных.Вставить("ПоказательПериода"); + СтруктураДанных.Вставить("ПоказательНомера"); + СтруктураДанных.Вставить("ПоказательДаты"); + СтруктураДанных.Вставить("ПоказательТипа"); + +КонецПроцедуры + +Процедура ДобавитьПрочиеДополнительныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("ФамилияПлательщика"); + СтруктураДанных.Вставить("ИмяПлательщика"); + СтруктураДанных.Вставить("ОтчествоПлательщика"); + СтруктураДанных.Вставить("АдресПлательщика"); + СтруктураДанных.Вставить("ЛицевойСчетБюджетногоПолучателя"); + СтруктураДанных.Вставить("ИндексПлатежногоДокумента"); + СтруктураДанных.Вставить("СНИЛС"); + СтруктураДанных.Вставить("НомерДоговора"); + СтруктураДанных.Вставить("НомерЛицевогоСчетаПлательщика"); + СтруктураДанных.Вставить("НомерКвартиры"); + СтруктураДанных.Вставить("НомерТелефона"); + СтруктураДанных.Вставить("ВидПлательщика"); + СтруктураДанных.Вставить("НомерПлательщика"); + СтруктураДанных.Вставить("ФИОРебенка"); + СтруктураДанных.Вставить("ДатаРождения"); + СтруктураДанных.Вставить("СрокПлатежа"); + СтруктураДанных.Вставить("ПериодОплаты"); + СтруктураДанных.Вставить("ВидПлатежа"); + СтруктураДанных.Вставить("КодУслуги"); + СтруктураДанных.Вставить("НомерПрибораУчета"); + СтруктураДанных.Вставить("ПоказаниеПрибораУчета"); + СтруктураДанных.Вставить("НомерИзвещения"); + СтруктураДанных.Вставить("ДатаИзвещения"); + СтруктураДанных.Вставить("НомерУчреждения"); + СтруктураДанных.Вставить("НомерГруппы"); + СтруктураДанных.Вставить("ФИОПреподавателя"); + СтруктураДанных.Вставить("СуммаСтраховки"); + СтруктураДанных.Вставить("НомерПостановления"); + СтруктураДанных.Вставить("НомерИсполнительногоПроизводства"); + СтруктураДанных.Вставить("КодВидаПлатежа"); + СтруктураДанных.Вставить("ИдентификаторНачисления"); + СтруктураДанных.Вставить("ТехническийКод"); + +КонецПроцедуры + +// Возвращает истину, если есть право проведения хотя бы для одного документа. +Функция ДоступноПравоПроведения(СписокДокументов) Экспорт + ТипыДокументов = Новый Массив; + Для Каждого Документ Из СписокДокументов Цикл + ТипДокумента = ТипЗнч(Документ); + Если ТипыДокументов.Найти(ТипДокумента) <> Неопределено Тогда + Продолжить; + Иначе + ТипыДокументов.Добавить(ТипДокумента); + КонецЕсли; + Если ПравоДоступа("Проведение", Метаданные.НайтиПоТипу(ТипДокумента)) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + +Процедура СообщитьПечатнаяФормаНедоступна(Объект) + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Печать %1 не выполнена: выбранная печатная форма недоступна.'"), + Объект); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -1109,4 +1649,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 0f8e5e637..11a65ba8c 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -115,7 +115,7 @@ Параметры.SetValue(0, СвойствоЗначение(ServiceManager, "Hidden", Истина)); #КонецЕсли - Document = Desktop.LoadComponentFromURL("file:///" + ИмяВременногоФайла, "_blank", 0, Параметры); + Document = Desktop.LoadComponentFromURL("file:///" + СтрЗаменить(ИмяВременногоФайла, "\", "/"), "_blank", 0, Параметры); #Если ВебКлиент Тогда Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь); diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index e19cf9e23..e63c8d08d 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -3,24 +3,37 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Работа с шаблонами офисных документов -// Интерфейс для вызова из клиентских модулей печати форм по макетам офисных документов. +// Получает за один вызов всю необходимую информацию для печати: данные объектов по макетам, двоичные +// данные макетов, описание областей макетов. +// Для вызова из клиентских модулей печати форм по макетам офисных документов. // -// Подробнее - см. описание УправлениеПечатью.ПолучитьМакетыИДанныеОбъектов(). +// Параметры: +// ИмяМенеджераПечати - Строка - имя для обращения к менеджеру объекта, например "Документ.<Имя документа>". +// ИменаМакетов - Строка - имена макетов, по которым будут формироваться печатные формы. +// СоставДокументов - Массив - ссылки на объекты информационной базы (должны быть одного типа). // -Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт +Функция МакетыИДанныеОбъектовДляПечати(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт - Возврат УправлениеПечатью.ПолучитьМакетыИДанныеОбъектов(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); + Возврат УправлениеПечатью.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Устарела. Следует использовать МакетыИДанныеОбъектовДляПечати. +// +Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт + + Возврат УправлениеПечатью.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Сформировать печатные формы для непосредственного вывода на принтер // @@ -79,3 +92,9 @@ Возврат УправлениеПечатью.ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы); КонецФункции + +// Возвращает истину, если есть право проведения хотя бы для одного документа. +Функция ДоступноПравоПроведения(СписокДокументов) Экспорт + Возврат УправлениеПечатью.ДоступноПравоПроведения(СписокДокументов); +КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 9d7d7bfc8..636422aeb 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Выполнить команду печати, которая открывает результат в форме печати документов. // @@ -13,8 +12,6 @@ // настройки количества копий не будут восстановлены, и не запишутся. Процедура ВыполнитьКомандуПечати(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ВладелецФормы, ПараметрыПечати = Неопределено) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ВыполнитьКомандуПечати", "ПараметрКоманды", ПараметрКоманды, Тип("Массив")); - // Проверим количество объектов Если НЕ ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) Тогда Возврат; @@ -351,29 +348,30 @@ // Функции получения областей из макета, вывода в печатную форму областей макета // и заполнение параметров в них -// Получает область из макета. -// Параметры -// СсылкаМакет - СсылкаМакет - ссылка на макет -// ОписаниеОбласти - ОписаниеОбласти - описание области +// Получает область из макета печатной формы. +// +// Параметры: +// СсылкаНаМакет - Структура - ссылка на макет печатной формы. +// ОписаниеОбласти - Структура - описание области. // // Возвращаемое значение -// Область - область из макета +// Структура - область из макета. // -Функция ПолучитьОбласть(Знач СсылкаМакет, Знач ОписаниеОбласти) Экспорт +Функция ОбластьМакета(Знач СсылкаНаМакет, Знач ОписаниеОбласти) Экспорт Область = Неопределено; - Если СсылкаМакет.Тип = "DOC" Тогда + Если СсылкаНаМакет.Тип = "DOC" Тогда Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" Тогда - Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьВерхнегоКолонтитула(СсылкаМакет); + Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьВерхнегоКолонтитула(СсылкаНаМакет); ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" Тогда - Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьНижнегоКолонтитула(СсылкаМакет); + Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьНижнегоКолонтитула(СсылкаНаМакет); ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Тогда - Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаМакет, ОписаниеОбласти.ИмяОбласти, 1, 0); + Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти, 1, 0); ИначеЕсли ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда - Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаМакет, ОписаниеОбласти.ИмяОбласти); + Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" Тогда - Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаМакет, ОписаниеОбласти.ИмяОбласти, 1, 0); + Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти, 1, 0); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -383,16 +381,16 @@ Если Область <> Неопределено Тогда Область.Вставить("ОписаниеОбласти", ОписаниеОбласти); КонецЕсли; - ИначеЕсли СсылкаМакет.Тип = "ODT" Тогда + ИначеЕсли СсылкаНаМакет.Тип = "ODT" Тогда Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" Тогда - Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьВерхнегоКолонтитула(СсылкаМакет); + Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьВерхнегоКолонтитула(СсылкаНаМакет); ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" Тогда - Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьНижнегоКолонтитула(СсылкаМакет); + Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьНижнегоКолонтитула(СсылкаНаМакет); ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" ИЛИ ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" ИЛИ ОписаниеОбласти.ТипОбласти = "Список" Тогда - Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьМакета(СсылкаМакет, ОписаниеОбласти.ИмяОбласти); + Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -598,8 +596,17 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Устарела. Следует использовать ОбластьМакета. +// +Функция ПолучитьОбласть(Знач СсылкаМакет, Знач ОписаниеОбласти) Экспорт + + Возврат ОбластьМакета(СсылкаМакет, ОписаниеОбласти); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Перед выполнением команды печати проверить, был ли передан хотя бы один объект, так как // для команд с множественным режимом использования может быть передан пустой массив. @@ -853,3 +860,5 @@ КонецФункции // Конец ИспользованиеМодальности + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl index 43dd3b385..bbdbbec28 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает описание команды по имени элемента формы. // @@ -15,3 +14,5 @@ Возврат УправлениеПечатьюВызовСервера.ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 005a7ceb7..98b63b3d1 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Переопределяет таблицу возможных форматов для сохранения табличного документа. // Вызывается из ОбщегоНазначения.НастройкиФорматовСохраненияТабличногоДокумента() @@ -26,4 +25,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index cfeed5180..f16f6d7e2 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Продолжение процедуры УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати. Процедура ВыполнитьПодключаемуюКомандуПечатиПодтверждениеЗаписи(РезультатВопроса, ДополнительныеПараметры) Экспорт @@ -106,16 +105,24 @@ КонецПроцедуры - // Продолжение процедуры УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов. Процедура ПроверитьПроведенностьДокументовДиалогПроведения(Параметры) Экспорт - Если Параметры.НепроведенныеДокументы.Количество() = 1 Тогда - ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Выполнить проведение документа и продолжить?'"); + Если УправлениеПечатьюВызовСервера.ДоступноПравоПроведения(Параметры.НепроведенныеДокументы) Тогда + Если Параметры.НепроведенныеДокументы.Количество() = 1 Тогда + ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Выполнить проведение документа и продолжить?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документы, их необходимо предварительно провести. Выполнить проведение документов и продолжить?'"); + КонецЕсли; Иначе - ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документы, их необходимо предварительно провести. Выполнить проведение документов и продолжить?'"); + Если Параметры.НепроведенныеДокументы.Количество() = 1 Тогда + ТекстПредупреждения = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Недостаточно прав для проведения документа, печать невозможна.'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Для того чтобы распечатать документы, их необходимо предварительно провести. Недостаточно прав для проведения документов, печать невозможна.'"); + КонецЕсли; + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; КонецЕсли; - ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьПроведенностьДокументовПроведениеДокументов", ЭтотОбъект, Параметры); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); @@ -193,7 +200,6 @@ КонецПроцедуры - // Возвращает ссылки на объекты, выбранные в данный момент на форме. Функция ОбъектыПечати(Источник) @@ -235,3 +241,4 @@ ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 839503eec..683158e39 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для стандартной обработки дополнительных реквизитов. @@ -221,8 +220,9 @@ Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений; + КлючНазначения = Неопределено; НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( - ОписаниеОбъекта); + ОписаниеОбъекта, КлючНазначения); Для каждого Строка Из НаборыСвойствОбъекта Цикл Если УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Строка.Набор).ДополнительныеРеквизиты Тогда @@ -232,13 +232,15 @@ КонецЕсли; КонецЦикла; + ОбновитьКлючНазначенияИспользования(Форма, КлючНазначения); + ОписаниеСвойств = УправлениеСвойствамиСлужебный.ПолучитьТаблицуЗначенийСвойств( ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(), Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, Ложь); ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); - ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаСвойство"); + ОписаниеСвойств.Колонки.Добавить("ДополнительноеЗначение"); ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть"); ОписаниеСвойств.Колонки.Добавить("Булево"); @@ -248,7 +250,8 @@ ДобавляемыеРеквизиты = Новый Массив(); Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл - ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; + ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения, + ,,, Новый КвалификаторыСтроки(1024)); // Поддержка строк неограниченной длины. ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку( @@ -271,21 +274,12 @@ КонецЕсли; Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина); - ДобавляемыеРеквизиты.Добавить(Реквизит); - ОписаниеСвойства.ИмяРеквизитаСвойство = ""; - Если УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства) Тогда - - ОписаниеСвойства.ИмяРеквизитаСвойство = - "ДополнительныйРеквизитСвойство_" + ОписаниеСвойства.ИмяУникальнаяЧасть; - - Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаСвойство, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), , , Истина); - ДобавляемыеРеквизиты.Добавить(Реквизит); - КонецЕсли; + ОписаниеСвойства.ДополнительноеЗначение = + УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства); ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); - КонецЦикла; Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); @@ -449,12 +443,12 @@ КонецЕсли; КонецЕсли; - Если НЕ ПоляНадписей И ОписаниеСвойства.ИмяРеквизитаСвойство <> "" Тогда - Связь = Новый СвязьПараметраВыбора("Отбор.Владелец", ОписаниеСвойства.ИмяРеквизитаСвойство); - Связи = Новый Массив; - Связи.Добавить(Связь); - Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи); - Форма[ОписаниеСвойства.ИмяРеквизитаСвойство] = ОписаниеСвойства.Свойство; + Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение Тогда + ПараметрыВыбора = Новый Массив; + ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Владелец", + ?(ЗначениеЗаполнено(ОписаниеСвойства.ВладелецДополнительныхЗначений), + ОписаниеСвойства.ВладелецДополнительныхЗначений, ОписаниеСвойства.Свойство))); + Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); КонецЕсли; КонецЦикла; @@ -538,10 +532,6 @@ Для каждого ОписаниеСвойства Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение); - Если Не ПустаяСтрока(ОписаниеСвойства.ИмяРеквизитаСвойство) Тогда - УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаСвойство); - КонецЕсли; - Форма.Элементы.Удалить(Форма.Элементы[ОписаниеСвойства.ИмяРеквизитаЗначение]); КонецЦикла; @@ -981,9 +971,6 @@ Реквизиты.Добавить(Новый РеквизитФормы( "ИмяРеквизитаЗначение", Новый ОписаниеТипов("Строка"), ИмяОписания)); - Реквизиты.Добавить(Новый РеквизитФормы( - "ИмяРеквизитаСвойство", Новый ОписаниеТипов("Строка"), ИмяОписания)); - Реквизиты.Добавить(Новый РеквизитФормы( "Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), ИмяОписания)); @@ -992,7 +979,7 @@ "ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов"), ИмяОписания)); Реквизиты.Добавить(Новый РеквизитФормы( - "МногострочноеПолеВвода", Новый ОписаниеТипов("Булево"), ИмяОписания)); + "МногострочноеПолеВвода", Новый ОписаниеТипов("Число"), ИмяОписания)); Реквизиты.Добавить(Новый РеквизитФормы( "Удалено", Новый ОписаниеТипов("Булево"), ИмяОписания)); @@ -1040,3 +1027,53 @@ КонецЕсли; КонецПроцедуры + +Процедура ОбновитьКлючНазначенияИспользования(Форма, КлючНазначения) + + Если КлючНазначения = Неопределено Тогда + КлючНазначения = КлючНаборовСвойств(Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); + КонецЕсли; + + Если ПустаяСтрока(КлючНазначения) Тогда + Возврат; + КонецЕсли; + + НачалоКлюча = "КлючНаборовСвойств"; + КлючНаборовСвойств = НачалоКлюча + Лев(КлючНазначения + "00000000000000000000000000000000", 32); + + Позиция = Найти(Форма.КлючНазначенияИспользования, НачалоКлюча); + + Если Позиция = 0 Тогда + Форма.КлючНазначенияИспользования = Форма.КлючНазначенияИспользования + КлючНаборовСвойств; + + ИначеЕсли Найти(Форма.КлючНазначенияИспользования, КлючНаборовСвойств) = 0 Тогда + Форма.КлючНазначенияИспользования = + Лев(Форма.КлючНазначенияИспользования, Позиция - 1) + КлючНаборовСвойств + + Сред(Форма.КлючНазначенияИспользования, Позиция + СтрДлина(НачалоКлюча) + 32); + КонецЕсли; + +КонецПроцедуры + +Функция КлючНаборовСвойств(Наборы) + + ИдентификаторыНаборов = Новый СписокЗначений; + + Для каждого ЭлементСписка Из Наборы Цикл + ИдентификаторыНаборов.Добавить(Строка(ЭлементСписка.Значение.УникальныйИдентификатор())); + КонецЦикла; + + ИдентификаторыНаборов.СортироватьПоЗначению(); + СтрокаИдентификаторов = ""; + + Для каждого ЭлементСписка Из ИдентификаторыНаборов Цикл + СтрокаИдентификаторов = СтрокаИдентификаторов + СтрЗаменить(ЭлементСписка.Значение, "-", ""); + КонецЦикла; + + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(СтрокаИдентификаторов); + + Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 4037eb9b4..a064b7aac 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Открывает форму редактирования набора дополнительных реквизитов. // @@ -81,3 +80,5 @@ Возврат Ложь; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 2ed4a584b..d966e71d8 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Заполняет наборы свойств объекта. Обычно требуется, если наборов более одного. // @@ -49,7 +48,23 @@ // СтандартнаяОбработка - Булево - начальное значение Истина. Указывает получать ли // основной набор, когда НаборыСвойств.Количество() равно нулю. // -Процедура ЗаполнитьНаборыСвойствОбъекта(Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка) Экспорт +// КлючНазначения - Неопределено - (начальное значение) - указывает вычислить ключ +// назначения автоматически и добавить к значению свойства формы +// КлючНазначенияИспользования, чтобы изменения формы сохранялись +// отдельно для разного состава наборов. +// Например, для каждого вида номенклатуры - свой состав наборов. +// +// - Строка - (не более 32 символа) - использовать указанный ключ назначения +// для добавления к значению свойства формы КлючНазначенияИспользования. +// Пустая строка - не изменять КлючНазначенияИспользования, т.к. +// он устанавливается в форме и уже учитывает различия состава наборов. +// +// Добавка имеет формат "КлючНаборовСвойств<КлючНазначения>", чтобы +// <КлючНазначения> можно было обновлять без повторной добавки. +// При автоматическом вычислении <КлючНазначения> содержит хэш +// идентификаторов ссылок упорядоченных наборов свойств. +// +Процедура ЗаполнитьНаборыСвойствОбъекта(Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка, КлючНазначения) Экспорт @@ -78,3 +93,4 @@ +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index 45e9367ed..8a36b1f2c 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -48,12 +47,10 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Процедура = "УправлениеСвойствамиСлужебный.ЗаполнитьОбработчикиРазделенныхДанных"; - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Процедура = "УправлениеСвойствами.ОбновитьНаименованияНаборовИСвойств"; - КонецЕсли; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "УправлениеСвойствами.ОбновитьНаименованияНаборовИСвойств"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.6.7"; @@ -134,8 +131,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает таблицу наборов доступных свойств владельца. // @@ -144,7 +142,7 @@ // Объект владельца свойств. // ДанныеФормыСтруктура (по типу объекта владельца свойств). // -Функция ПолучитьНаборыСвойствОбъекта(Знач ВладелецСвойств) Экспорт +Функция ПолучитьНаборыСвойствОбъекта(Знач ВладелецСвойств, КлючНазначения = Неопределено) Экспорт Если ТипЗнч(ВладелецСвойств) = Тип("ДанныеФормыСтруктура") Тогда ТипСсылки = ТипЗнч(ВладелецСвойств.Ссылка) @@ -174,7 +172,8 @@ НаборыСвойств.Колонки.Добавить("Картинка"); НаборыСвойств.Колонки.Добавить("ОтображатьЗаголовок"); - УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта(ВладелецСвойств, ТипСсылки, НаборыСвойств, ПолучатьОсновнойНабор); + УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта( + ВладелецСвойств, ТипСсылки, НаборыСвойств, ПолучатьОсновнойНабор, КлючНазначения); Если НаборыСвойств.Количество() = 0 И ПолучатьОсновнойНабор = Истина Тогда @@ -282,6 +281,7 @@ |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВсеСвойства.Набор, | ВсеСвойства.Свойство, + | ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений, | ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно, | ДополнительныеРеквизитыИСведения.Заголовок КАК Наименование, | ДополнительныеРеквизитыИСведения.ТипЗначения, @@ -299,7 +299,6 @@ | ВсеСвойства.ПорядокСвойства"; Если ЭтоДополнительноеСведение Тогда - Запрос.Текст = СтрЗаменить( Запрос.Текст, "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", @@ -748,6 +747,8 @@ Описание = Описание + " + |Справочник.ЗначенияСвойствОбъектов.Чтение.ДополнительныеСведения + |Справочник.ЗначенияСвойствОбъектовИерархия.Чтение.ДополнительныеСведения |ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Чтение.ДополнительныеСведения |РегистрСведений.ДополнительныеСведения.Чтение.ДополнительныеСведения |РегистрСведений.ДополнительныеСведения.Изменение.ДополнительныеСведения @@ -784,10 +785,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -805,7 +806,7 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Объекты - Массив. Массив объектов метаданных конфигурации. // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт @@ -1203,3 +1204,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 6ffc42251..f5c3d31c8 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -40,6 +39,12 @@ //Выполняет процедуру отправки и получения электронных писем. Процедура ПолучениеИОтправкаЭлектронныхПисем() Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; КонецЕсли; @@ -65,7 +70,8 @@ | ПО (НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка) |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения - | И НЕ НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте"; + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)"; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -100,7 +106,8 @@ ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Попытка Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль); @@ -158,6 +165,7 @@ Взаимодействия.ЗаполнитьКонтактыМассиваВзаимодействий(МассивПисем); Взаимодействия.УстановитьПапкиДляМассиваПисем(МассивПисем); + Взаимодействия.РассчитатьРассмотреноПоПредметам(МассивПисем); Взаимодействия.РассчитатьРассмотреноПоКонтактам(МассивПисем); //отправим уведомления о прочтении @@ -193,7 +201,8 @@ ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Попытка Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль); @@ -249,7 +258,7 @@ | ПО (НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка) |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения - | И НЕ НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте"; + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)"; Выборка = Запрос.Выполнить().Выбрать(); @@ -271,6 +280,7 @@ ПолученоПисем = ПолученоПисем + Получено; Взаимодействия.ЗаполнитьКонтактыМассиваВзаимодействий(МассивПисем); Взаимодействия.УстановитьПапкиДляМассиваПисем(МассивПисем); + Взаимодействия.РассчитатьРассмотреноПоПредметам(МассивПисем); Взаимодействия.РассчитатьРассмотреноПоКонтактам(МассивПисем); КонецЦикла; @@ -306,7 +316,7 @@ | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) | И ЭлектронноеПисьмоИсходящее.Автор = &Пользователь | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | И НЕ НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) |ИТОГИ ПО | УчетнаяЗапись"; @@ -316,7 +326,8 @@ ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Попытка Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль); @@ -404,7 +415,8 @@ ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаУчетныеЗаписи.Следующий() Цикл - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); + Попытка Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль); @@ -442,10 +454,16 @@ //----------------------------------------------------------------- // Сформируем почтовый профиль и подключимся к почтовому серверу - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(УчетнаяЗапись); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина); + + Протокол = ПротоколИнтернетПочты.POP3; + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда + Протокол = ПротоколИнтернетПочты.IMAP; + КонецЕсли; + Почта = Новый ИнтернетПочта; Попытка - Почта.Подключиться(Профиль); + Почта.Подключиться(Профиль, Протокол); Исключение ЕстьОшибки = Истина; @@ -619,13 +637,12 @@ | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаИдентификаторов КАК ТаблицаИдентификаторов | ПО ТаблицаИдентификаторов.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) |ГДЕ - | ТаблицаИдентификаторов.Идентификатор ЕСТЬ NULL "; + | ТаблицаИдентификаторов.Идентификатор ЕСТЬ NULL + | И ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись"; МассивКУдалению = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); - // Удалим все ненужные идентификаторы Для Каждого Идентификатор Из МассивКУдалению Цикл Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); @@ -842,6 +859,11 @@ МассивИдентификаторов.Добавить(Письмо.ИдентификаторОснования); КонецЕсли; + Если МассивИдентификаторов.Найти(Письмо.ИдентификаторСообщения) = Неопределено + И НЕ ПустаяСтрока(Письмо.ИдентификаторСообщения) Тогда + МассивИдентификаторов.Добавить(Письмо.ИдентификаторСообщения); + КонецЕсли; + ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(МассивИдентификаторов); //----------------------------------------------------------------- @@ -905,11 +927,9 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка |ГДЕ - | ПредметыПапкиВзаимодействий.Взаимодействие = &ВзаимодействиеОснование - | И ПапкиЭлектронныхПисем.Владелец = &УчетнаяЗапись"; + | ПредметыПапкиВзаимодействий.Взаимодействие = &ВзаимодействиеОснование"; Запрос.УстановитьПараметр("ВзаимодействиеОснование", Письмо.ВзаимодействиеОснование ); - Запрос.УстановитьПараметр("УчетнаяЗапись", Письмо.УчетнаяЗапись ); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда @@ -1139,7 +1159,7 @@ Письмо.ОтправительАдрес = Сообщение.Отправитель; КонецЕсли; Письмо.ОтправительПредставление = - ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Сообщение.Отправитель.Адрес, Сообщение.ИмяОтправителя); + ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Письмо.ОтправительАдрес, Сообщение.ИмяОтправителя + " <"+ Письмо.ОтправительАдрес +">"); Письмо.Размер = Сообщение.Размер; Письмо.Тема = Сообщение.Тема; @@ -1260,7 +1280,6 @@ КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Работа с вложения электронных писем @@ -1525,7 +1544,7 @@ | ПО НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | И НЕ НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте"; + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда @@ -1560,7 +1579,7 @@ ПараметрыПисьма.Вставить("ОбрабатыватьТексты",Ложь); Попытка - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма, Соединение); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма, Соединение); Исключение Если ЭтоРегламентноеЗадание Тогда @@ -1701,7 +1720,6 @@ Возврат Формат(Дата,"ДЛФ=DT") + " GMT " + СтрокаЧасыСмещения + СтрокаМинутыСмещения; - КонецФункции Процедура СоздатьПредопределеннуюПапкуЭлектронныхПисем(Наименование,Владелец) @@ -1772,7 +1790,7 @@ | ПО (НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = УчетныеЗаписиЭлектроннойПочты.Ссылка) |ГДЕ | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | И НЕ НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте + | И НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) | |УПОРЯДОЧИТЬ ПО | ЗначениеУпорядочивания"; @@ -1858,3 +1876,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index aa8f1aaa1..6dbbbad65 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -4,9 +4,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - +#Область СлужебныеПроцедурыИФункции //Открывает вложенный файл электронного письма // @@ -113,3 +111,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl index b2228414d..1fea38011 100644 --- a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает максимальный размер файла. Функция МаксимальныйРазмерФайла() Экспорт @@ -80,3 +79,5 @@ Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl index 3aae850a4..b26d280f1 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Объявляет служебные события подсистемы ФайловыеФункции: // @@ -128,6 +127,10 @@ "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( "ФайловыеФункцииСлужебный"); + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "ФайловыеФункцииСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке"].Добавить( @@ -306,16 +309,15 @@ |ИЗ | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = &ПометкаУдаления + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ | |УПОРЯДОЧИТЬ ПО | ТомаХраненияФайлов.ПорядокЗаполнения"; - Запрос.УстановитьПараметр("ПометкаУдаления", Ложь); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() = 0 Тогда - ВызватьИсключение(НСтр("ru = 'Нет ни одного тома для размещения файла.'")); + ВызватьИсключение НСтр("ru = 'Нет ни одного тома для размещения файла.'"); КонецЕсли; Пока Выборка.Следующий() Цикл @@ -324,8 +326,7 @@ ПутьКТому = ПолныйПутьТома(СсылкаНаТом); // Добавляем слэш в конце, если его нет. - ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - ПутьКТому, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКТому); // Имя файла для хранения на диске формировать следующим образом // - имя файла.номер версии.расширение файла. @@ -370,7 +371,7 @@ ПутьКТому = ПутьКТому + ПутьДня; - ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла); ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда @@ -555,7 +556,6 @@ КонецФункции - // Получает строку из временного хранилища (передача с клиента на сервер, // делается через временное хранилище) // @@ -606,7 +606,6 @@ КонецПроцедуры - // Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, @@ -640,7 +639,6 @@ КонецПроцедуры - // Возвращает Истина, если есть хранимые файлы к объекту ВнешнийОбъект. Функция ЕстьХранимыеФайлы(ВнешнийОбъект) Экспорт @@ -691,8 +689,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -746,10 +745,10 @@ // то в параметр <Объект> необходимо добавить эти объекты метаданных. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. -// Истина – требуется получить список объектов-исключений плана обмена РИБ; -// Ложь – требуется получить список для плана обмена НЕ РИБ. +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт @@ -760,6 +759,21 @@ КонецПроцедуры +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Если ПолучитьФункциональнуюОпцию("ХранитьФайлыВТомахНаДиске") Тогда + Справочники.ТомаХраненияФайлов.ДобавитьЗапросыНаИспользованиеВнешнихРесурсовВсехТомов(ЗапросыРазрешений); + КонецЕсли; + +КонецПроцедуры + // Заполняет массив типов неразделенных данных, для которых не требуется сопоставление ссылок // при загрузке данных в другую информационную базу, т.к. корректное сопоставление ссылок // гарантируется с помощью других механизмов. @@ -1151,6 +1165,8 @@ // Процедура ИзвлечьТекстИзФайловНаСервере() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + УстановитьПривилегированныйРежим(Истина); ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); @@ -1380,3 +1396,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 55fe4cd66..746f52239 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -134,8 +133,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Извлечение текста @@ -149,6 +149,8 @@ Возврат; КонецЕсли; + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + УстановитьПривилегированныйРежим(Истина); ИмяРазделенногоМетода = "ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайловНаСервере"; @@ -266,3 +268,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl index 8ef0ac2ee..54bd4311c 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // См. эту процедуру в модуле ФайловыеФункцииСлужебный. Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, @@ -33,3 +32,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl index a7bee9806..a1340764a 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Показывает напоминание о порядке работы с файлом в веб-клиенте, // если включена настройка "Показывать подсказки при редактировании файлов". @@ -407,8 +406,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции #Если НЕ ВебКлиент Тогда // Извлекает текст из файла на диске на клиенте и помещает результат на сервер. @@ -528,3 +528,4 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl index b52ac3701..c5cc9df12 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает форму, которая используется для информирования // пользователей об особенностях заема и редактирования файлов @@ -88,3 +87,5 @@ Возврат ИмяКаталога; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl index 41de50e42..000333b54 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Персональные настройки состоят из настроек подсистемы ФайловыеФункции // (см. ФайловыеФункцииСлужебныйПовтИсп.НастройкиРаботыСФайлами), @@ -34,7 +33,6 @@ КонецФункции - // Извлечь текст из файла и возвратить его в виде строки. Функция ИзвлечьТекст(ПолноеИмяФайла, Отказ = Ложь, Кодировка = Неопределено) Экспорт @@ -118,11 +116,10 @@ КонецФункции - // Получить уникальное имя файла в рабочем каталоге. // Если есть совпадения - будет имя подобное "A1\Приказ.doc". // -Функция ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ТипПлатформыТекущий) Экспорт +Функция ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла) Экспорт ИтоговыйПуть = ""; @@ -168,8 +165,7 @@ ПодКаталог = ПодКаталог + ЦиклНомерСтрока; КонецЕсли; - ПодКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - ПодКаталог, ТипПлатформыТекущий); + ПодКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПодКаталог); КонецЕсли; ПолныйПодКаталог = ИмяКаталога + ПодКаталог; @@ -219,7 +215,6 @@ КонецФункции - // Проверяет расширение файла и размер. Функция ПроверитьВозможностьЗагрузкиФайла(Файл, ВызыватьИсключение = Истина, @@ -816,3 +811,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl index 12cacb24c..a6fdf70b4 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Общие и персональные настройки работы с файлами @@ -129,12 +128,11 @@ ПоказыватьПодсказкиПриРедактированииФайлов); // ОтпечатокЛичногоСертификатаДляШифрования. - ОтпечатокЛичногоСертификатаДляШифрования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ЭЦП", "ОтпечатокЛичногоСертификатаДляШифрования"); + НастройкиЭП = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); ПерсональныеНастройки.Вставить( "ОтпечатокЛичногоСертификатаДляШифрования", - ОтпечатокЛичногоСертификатаДляШифрования); + НастройкиЭП.ОтпечатокЛичногоСертификатаДляШифрования); // ПоказыватьИнформациюЧтоФайлНеБылИзменен. ПоказыватьИнформациюЧтоФайлНеБылИзменен = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -259,3 +257,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl deleted file mode 100644 index 4df866c1a..000000000 --- a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl +++ /dev/null @@ -1,424 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Физические лица" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Формирует фамилию и инициалы либо по наименованию элемента справочника ФизическиеЛица, -// либо по переданным строкам. -// Если передан Объект, то извлеченная из него строка считается совокупностью -// Фамилия + Имя + Отчество, разделенными пробелами. -// -// Параметры -// ОбъектИлиСтрока - строка, ссылка или объект элемента справочника ФизическиеЛица. -// Фамилия - фамилия физического лица. -// Имя - имя физического лица. -// Отчество - отчество физического лица. -// -// Возвращаемое значение -// Строка - фамилия и инициалы одной строкой. -// В параметрах Фамилия, Имя и Отчество записываются вычисленные части. -// -// Пример: -// Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И." -// -Функция ФамилияИнициалыФизЛица(ОбъектИлиСтрока = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт - - ТипОбъекта = ТипЗнч(ОбъектИлиСтрока); - Если ТипОбъекта = Тип("Строка") Тогда - ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока), " "); - ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") Или ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") Тогда - ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока.Наименование), " "); - Иначе - // используем возможно переданные отдельные строки - Возврат ?(Не ПустаяСтрока(Фамилия), - Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество,1) + ".", ""), ""), - "") - КонецЕсли; - - КоличествоПодстрок = ФИО.Количество(); - Фамилия = ?(КоличествоПодстрок > 0, ФИО[0], ""); - Имя = ?(КоличествоПодстрок > 1, ФИО[1], ""); - Отчество = ?(КоличествоПодстрок > 2, ФИО[2], ""); - - Возврат ?(Не ПустаяСтрока(Фамилия), - Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество, 1) + ".", ""), ""), - ""); - -КонецФункции - -// Функция склоняет переданную фразу -// Параметры: -// ФИО (обязательный), тип строка -// Параметр должен содержать фамилию имя отчества в именительном падеже, которые необходимо просклонять. -// -// Падеж (обязательный), тип число -// Падеж, в который необходимо поставить ФИО. -// 1 - Именительный -// 2 - Родительный -// 3 - Дательный -// 4 - Винительный -// 5 - Творительный -// 6 - Предложный -// -// Результат (обязательный), тип строка -// Переменная, в которую будет возвращен результат склонения. -// -// Пол (необязательный), тип Перечисление.ПолФизическогоЛица -// Пол физического лица -// -Функция Просклонять(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт - - ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО", "Decl"); - Компонента = Новый("AddIn.Decl.CNameDecl"); - - Результат = ""; - - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФИО, " "); - - // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов - НомерНесклоняемогоСимвола = 4; - Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл - Если Не ФизическиеЛицаКлиентСервер.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда - НомерНесклоняемогоСимвола = Номер; - Прервать; - КонецЕсли; - - Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; - КонецЦикла; - - Если ПустаяСтрока(Результат) Тогда - Результат = ФИО; - Возврат Ложь; - КонецЕсли; - - Попытка - Если Пол = Перечисления.ПолФизическогоЛица.Мужской Тогда - Результат = Компонента.Просклонять(Результат, Падеж, 1) + " "; - - ИначеЕсли Пол = Перечисления.ПолФизическогоЛица.Женский Тогда - Результат = Компонента.Просклонять(Результат, Падеж, 2) + " "; - - Иначе - Результат = Компонента.Просклонять(Результат, Падеж) + " "; - - КонецЕсли; - - Исключение - Результат = ФИО; - Возврат Ложь; - - КонецПопытки; - - // Остальные символы добавим без склонения - Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл - Результат = Результат + " " + МассивСтрок[Номер-1]; - КонецЦикла; - - Результат = СокрЛП(Результат); - - Возврат Истина; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ФизическиеЛица"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( - "ФизическиеЛица"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий подсистем БСП - -// Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, -// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. -// -// Параметры: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". -// -Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт - - Массив.Добавить(Метаданные.РегистрыСведений.ДокументыФизическихЛиц.ПолноеИмя()); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.8"; - Обработчик.Процедура = "ФизическиеЛица.ПреобразоватьУдостоверенияЛичностиВДокументы"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.5"; - Обработчик.Процедура = "ФизическиеЛица.ЗаменитьВидыДокументовНаПредопределенные"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.31"; - Обработчик.Процедура = "ФизическиеЛица.УстановитьРеквизитДопУпорядочиванияВидовДокументов"; - -КонецПроцедуры - -// Заполняет измерение ВидДокумента по ресурсу УдалитьВидДокумента, -// а также заполняет реквизит ЯвляетсяДокументомУдостоверяющимЛичность для существующих записей -// -Процедура ПреобразоватьУдостоверенияЛичностиВДокументы() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДокументыФизическихЛиц.Физлицо КАК Физлицо - |ПОМЕСТИТЬ ВТ_Физлица - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - |ГДЕ - | (НЕ ДокументыФизическихЛиц.УдалитьВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПустаяСсылка)) - | - |ИНДЕКСИРОВАТЬ ПО - | Физлицо - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДокументыФизическихЛиц.Период КАК Период, - | ДокументыФизическихЛиц.Физлицо КАК Физлицо, - | ДокументыФизическихЛиц.УдалитьВидДокумента КАК ВидДокумента, - | ДокументыФизическихЛиц.Серия, - | ДокументыФизическихЛиц.Номер, - | ДокументыФизическихЛиц.ДатаВыдачи, - | ДокументыФизическихЛиц.СрокДействия, - | ДокументыФизическихЛиц.КемВыдан, - | ДокументыФизическихЛиц.КодПодразделения, - | ВЫБОР - | КОГДА ДокументыФизическихЛиц.УдалитьВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПустаяСсылка) - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК ЯвляетсяДокументомУдостоверяющимЛичность, - | ДокументыФизическихЛиц.Представление - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - |ГДЕ - | ДокументыФизическихЛиц.Физлицо В - | (ВЫБРАТЬ - | Физлица.Физлицо - | ИЗ - | ВТ_Физлица КАК Физлица) - | - |УПОРЯДОЧИТЬ ПО - | Физлицо, - | Период"; - Выборка = Запрос.Выполнить().Выбрать(); - - НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей(); - НаборЗаписей.ОбменДанными.Загрузка = Истина; - - ТекстСерия = НСтр("ru = ', серия: %1'"); - ТекстНомер = НСтр("ru = ', № %1'"); - ТекстДатаВыдачи = НСтр("ru = ', выдан: %1 года'"); - ТекстСрокДействия = НСтр("ru = ', действует до: %1 года'"); - ТекстКодПодразделения = НСтр("ru = ', № подр. %1'"); - - Пока Выборка.СледующийПоЗначениюПоля("Физлицо") Цикл - НаборЗаписей.Отбор.Физлицо.Установить(Выборка.Физлицо); - - Пока Выборка.Следующий() Цикл - Запись = НаборЗаписей.Добавить(); - ЗаполнитьЗначенияСвойств(Запись, Выборка); - - Если ПустаяСтрока(Запись.Представление) И Не Запись.ВидДокумента.Пустая() Тогда - Запись.Представление = "" - + Запись.ВидДокумента - + ?(ЗначениеЗаполнено(Запись.Серия), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСерия, Запись.Серия), "") - + ?(ЗначениеЗаполнено(Запись.Номер), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНомер, Запись.Номер), "") - + ?(ЗначениеЗаполнено(Запись.ДатаВыдачи), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстДатаВыдачи, Формат(Запись.ДатаВыдачи,"ДФ='дд ММММ гггг'")), "") - + ?(ЗначениеЗаполнено(Запись.СрокДействия), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСрокДействия, Формат(Запись.СрокДействия,"ДФ='дд ММММ гггг'")), "") - + ?(ЗначениеЗаполнено(Запись.КемВыдан), ", " + Запись.КемВыдан, "") - + ?(ЗначениеЗаполнено(Запись.КодПодразделения) И Запись.ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстКодПодразделения, Запись.КодПодразделения), ""); - КонецЕсли; - КонецЦикла; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); - НаборЗаписей.Очистить(); - КонецЦикла; - -КонецПроцедуры - -// Заменяет ссылку на виды документов физических лиц в регистре сведений ДокументыФизическихЛиц -// на добавленные предопределенные документы -// -Процедура ЗаменитьВидыДокументовНаПредопределенные() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДокументыФизическихЛиц.Физлицо КАК Физлицо - |ПОМЕСТИТЬ ВТФизлица - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - |ГДЕ - | ДокументыФизическихЛиц.ВидДокумента.ПометкаУдаления - | - |ИНДЕКСИРОВАТЬ ПО - | Физлицо - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДокументыФизическихЛиц.Период КАК Период, - | ДокументыФизическихЛиц.Физлицо КАК Физлицо, - | ВЫБОР - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Военный билет"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилет) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Военный билет офицера запаса"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Дипломатический паспорт гражданина РФ"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Загранпаспорт гражданина РФ"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Загранпаспорт гражданина СССР"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Паспорт гражданина РФ"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Паспорт гражданина СССР"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортСССР) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Паспорт Минморфлота"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортМинморфлота) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Паспорт моряка"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортМоряка) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Свидетельство о рождении"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.СвидетельствоОРождении) - | КОГДА ДокументыФизическихЛиц.ВидДокумента.Наименование = ""Удостоверение личности офицера"" - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.УдостоверениеОфицера) - | ИНАЧЕ ДокументыФизическихЛиц.ВидДокумента - | КОНЕЦ КАК ВидДокумента, - | ДокументыФизическихЛиц.Серия, - | ДокументыФизическихЛиц.Номер, - | ДокументыФизическихЛиц.ДатаВыдачи, - | ДокументыФизическихЛиц.СрокДействия, - | ДокументыФизическихЛиц.КемВыдан, - | ДокументыФизическихЛиц.КодПодразделения, - | ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность, - | ДокументыФизическихЛиц.Представление, - | ДокументыФизическихЛиц.УдалитьВидДокумента - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - |ГДЕ - | ДокументыФизическихЛиц.Физлицо В - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | Физлица.Физлицо - | ИЗ - | ВТФизлица КАК Физлица) - | - |УПОРЯДОЧИТЬ ПО - | Физлицо, - | Период"; - Выборка = Запрос.Выполнить().Выбрать(); - - НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей(); - - Пока Выборка.СледующийПоЗначениюПоля("Физлицо") Цикл - НаборЗаписей.Отбор.Физлицо.Установить(Выборка.Физлицо); - - Пока Выборка.Следующий() Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); - КонецЦикла; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); - НаборЗаписей.Очистить(); - КонецЦикла; - - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДокументовФизическихЛиц.Ссылка - |ИЗ - | Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц - |ГДЕ - | (НЕ ВидыДокументовФизическихЛиц.Предопределенный) - | И (ВидыДокументовФизическихЛиц.Наименование = ""Военный билет"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Военный билет офицера запаса"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Дипломатический паспорт гражданина РФ"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Загранпаспорт гражданина РФ"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Загранпаспорт гражданина СССР"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Паспорт гражданина РФ"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Паспорт гражданина СССР"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Паспорт Минморфлота"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Паспорт моряка"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Свидетельство о рождении"" - | ИЛИ ВидыДокументовФизическихЛиц.Наименование = ""Удостоверение личности офицера"")"; - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - ОбновлениеИнформационнойБазы.УдалитьДанные(Выборка.Ссылка.ПолучитьОбъект()); - КонецЦикла; - -КонецПроцедуры - -// Устанавливает РеквизитДопУпорядочивания для элементов справочника ВидыДокументовФизическихЛиц -// -Процедура УстановитьРеквизитДопУпорядочиванияВидовДокументов() Экспорт - - Запрос = Новый Запрос; - - Запрос.УстановитьПараметр("ПаспортРФ", Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ); - Запрос.УстановитьПараметр("СвидетельствоОРождении", Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении); - Запрос.УстановитьПараметр("УдостоверениеОфицера", Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера); - Запрос.УстановитьПараметр("ПаспортМоряка", Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка); - - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДокументовФизическихЛиц.Ссылка КАК Ссылка, - | ВЫБОР - | КОГДА ВидыДокументовФизическихЛиц.Ссылка = &ПаспортРФ - | ТОГДА 1 - | КОГДА ВидыДокументовФизическихЛиц.Ссылка = &СвидетельствоОРождении - | ТОГДА 2 - | КОГДА ВидыДокументовФизическихЛиц.Ссылка = &УдостоверениеОфицера - | ТОГДА 3 - | КОГДА ВидыДокументовФизическихЛиц.Ссылка = &ПаспортМоряка - | ТОГДА 4 - | ИНАЧЕ 5 - | КОНЕЦ КАК Порядок - |ИЗ - | Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц - | - |УПОРЯДОЧИТЬ ПО - | Порядок, - | ВидыДокументовФизическихЛиц.Наименование"; - - Порядок = 1; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); - Объект.РеквизитДопУпорядочивания = Порядок; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - - Порядок = Порядок + 1; - - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl deleted file mode 100644 index 01aacd437..000000000 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl +++ /dev/null @@ -1,23 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Физические лица" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Функция определяет пол физлица по его отчеству -// Параметр: -// ОтчествоРаботника - отчество работника -// -Функция ОпределитьПолПоОтчеству(ОтчествоРаботника) Экспорт - - Если Прав(ОтчествоРаботника, 2) = "ич" Тогда - Возврат ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Мужской"); - ИначеЕсли Прав(ОтчествоРаботника, 2) = "на" Тогда - Возврат ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Женский"); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции // ОпределитьПолПоОтчеству() diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl index 0703793de..357a6bd74 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl @@ -3,216 +3,74 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс -// Возвращает тип серии документа удостоверяющего личность -// +// Функция склоняет переданную фразу // Параметры: -// ВидДокумента - Справочник.ВидыДокументовФизическихЛиц +// ФИО (обязательный), тип строка +// Параметр должен содержать фамилию имя отчества в именительном падеже, которые необходимо просклонять. // -// Возвращаемое значение: -// Число - тип серии для документа, 0 - требований к серии нет +// Падеж (обязательный), тип число +// Падеж, в который необходимо поставить ФИО. +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный // -Функция ТипСерииДокументаУдостоверяющегоЛичность(ВидДокумента) Экспорт +// Результат (обязательный), тип строка +// Переменная, в которую будет возвращен результат склонения. +// +// Пол (необязательный), тип число +// Пол физического лица, 1 - мужской, 2 - женский +// +Функция Просклонять(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт - ТипДокумента = 0; - Если ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортСССР") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.СвидетельствоОРождении") Тогда - ТипДокумента = 1; - - ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.УдостоверениеОфицера") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМинморфлота") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилет") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМоряка") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса") Тогда - ТипДокумента = 2; - - ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ") Тогда - ТипДокумента = 3; - - ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ") Тогда - ТипДокумента = 4; - - КонецЕсли; + ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО", "Decl"); + Компонента = Новый("AddIn.Decl.CNameDecl"); - Возврат ТипДокумента; + Результат = ""; -КонецФункции + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФИО, " "); + + // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов + НомерНесклоняемогоСимвола = 4; + Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл + Если Не ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда + НомерНесклоняемогоСимвола = Номер; + Прервать; + КонецЕсли; -// Возвращает тип номера документа удостоверяющего личность -// -// Параметры: -// ВидДокумента - Справочник.ВидыДокументовФизическихЛиц -// -// Возвращаемое значение: -// Число - тип номера для документа, 0 - требований к номеру нет -// -Функция ТипНомераДокументаУдостоверяющегоЛичность(ВидДокумента) Экспорт + Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; + КонецЦикла; - ТипДокумента = 0; - Если ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортСССР") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.СвидетельствоОРождении") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.УдостоверениеОфицера") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМинморфлота") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ") Тогда - ТипДокумента = 1; - - ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ") Тогда - ТипДокумента = 2; - - ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилет") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМоряка") - Или ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса") Тогда - ТипДокумента = 3; - - КонецЕсли; - - Возврат ТипДокумента; - -КонецФункции - -// Проверяет, что серия документа для переданного вида документа указана правильно. -// -// Параметры: -// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо -// проверить правильность серии -// Серия - Строка - серия документа -// ТекстОшибки - Строка - текст ошибки, если серия указана неправильно -// -// Возвращаемое значение: -// Булево - результат проверки, Истина - правильно, Ложь - нет. -// -Функция СерияДокументаУказанаПравильно(ВидДокумента, Знач Серия , ТекстОшибки) Экспорт - - ТипДокумента = ТипСерииДокументаУдостоверяющегоЛичность(ВидДокумента); - - Серия = СокрЛП(Серия); - - Если ТипДокумента = 1 Тогда // паспорт СССР и свидетельство о рождении - - Поз = Найти(Серия, "-"); - Если Поз = 0 Тогда - ТекстОшибки = НСтр("ru = 'Серия документа должна состоять из двух частей, разделенных символом ""-"".'"); - Возврат Ложь; - КонецЕсли; - - ЧастьСерии1 = Лев(Серия, Поз - 1); - ЧастьСерии2 = СокрЛП(Сред(Серия, Поз + 1)); - - Поз = Найти(ЧастьСерии2, "-"); - Если Поз <> 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы символов.'"); - Возврат Ложь; - КонецЕсли; - - Если ПустаяСтрока(ЧастьСерии1) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа отсутствует числовая часть.'"); - Возврат Ложь; - - ИначеЕсли ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC1УХЛС", ЧастьСерии1, " ")) = 0 Тогда - ТекстОшибки = НСтр("ru = 'Числовая часть серии документа должна указываться символами 1 У Х Л С или I V X L C.'"); - Возврат Ложь; - - ИначеЕсли СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС") <> СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВРимскуюНотацию(СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС"))) Тогда - ТекстОшибки = НСтр("ru = 'Числовая часть серии документа указана некорректно.'"); - Возврат Ложь; - - ИначеЕсли СтрДлина(ЧастьСерии2) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", ЧастьСерии2, " ")) Тогда - ТекстОшибки = НСтр("ru = 'После разделителя ""-"" в серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); - Возврат Ложь; - - КонецЕсли; - - ИначеЕсли ТипДокумента = 2 Тогда // серия - две буквы: военный билет, ... - Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Серия, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 3 Тогда // серия - две цифры: загранпаспорта - Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Серия, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть ДВЕ цифры.'"); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 4 Тогда // серия - две группы цифр: новый паспорт - Поз = Найти(Серия, " "); - Если Поз = 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть две группы цифр.'"); - Возврат Ложь; - КонецЕсли; - - ПерваяЧасть = Лев(Серия, Поз-1); - ВтораяЧасть = СокрЛП(Сред(Серия, Поз+1)); - - Поз = Найти(ВтораяЧасть, " "); - Если Поз <> 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы цифр.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ПерваяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ПерваяЧасть, " ")) Тогда - ТекстОшибки = НСтр("ru = 'Первая группа символов серии документа должна содержать две цифры.'"); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ВтораяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ВтораяЧасть, " ")) Тогда - ТекстОшибки = НСтр("ru = 'Вторая группа символов серии документа должна содержать две цифры.'"); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Проверяет, что номер документа для переданного вида документа указан правильно. -// -// Параметры: -// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо -// проверить правильность номера -// Номер - Строка - номер документа -// ТекстОшибки - Строка - текст ошибки, если номер указан неправильно -// -// Возвращаемое значение: -// Булево - результат проверки, Истина - правильно, Ложь - нет. -// -Функция НомерДокументаУказанПравильно(ВидДокумента, Знач Номер, ТекстОшибки) Экспорт - - Если Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Номер, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В номере документа присутствуют недопустимые символы.'"); + Если ПустаяСтрока(Результат) Тогда + Результат = ФИО; Возврат Ложь; КонецЕсли; - ТипДокумента = ТипНомераДокументаУдостоверяющегоЛичность(ВидДокумента); + Попытка + Если Пол = Неопределено Тогда + Результат = Компонента.Просклонять(Результат, Падеж) + " "; + + Иначе + Результат = Компонента.Просклонять(Результат, Падеж, Пол) + " "; + + КонецЕсли; + + Исключение + Результат = ФИО; + Возврат Ложь; + + КонецПопытки; - ДлинаНомера = СтрДлина(СокрЛП(Номер)); + // Остальные символы добавим без склонения + Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл + Результат = Результат + " " + МассивСтрок[Номер-1]; + КонецЦикла; - Если ТипДокумента = 1 Тогда - Если ДлинаНомера <> 6 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 символов.'"); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 2 Тогда - Если ДлинаНомера <> 7 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 7 символов.'"); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 3 Тогда - Если (ДлинаНомера < 6 ) Или ( ДлинаНомера > 7 ) Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 или 7 символов.'"); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; + Результат = СокрЛП(Результат); Возврат Истина; @@ -251,6 +109,45 @@ КонецФункции +// Формирует фамилию и инициалы либо по переданным строкам. +// +// Параметры +// ФИОСтрокой - строка +// Фамилия - фамилия физического лица. +// Имя - имя физического лица. +// Отчество - отчество физического лица. +// +// Возвращаемое значение +// Строка - фамилия и инициалы одной строкой. +// В параметрах Фамилия, Имя и Отчество записываются вычисленные части. +// +// Пример: +// Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И." +// +Функция ФамилияИнициалыФизЛица(ФИОСтрокой = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт + + ТипОбъекта = ТипЗнч(ФИОСтрокой); + Если ТипОбъекта = Тип("Строка") Тогда + ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ФИОСтрокой), " "); + + Иначе + // используем возможно переданные отдельные строки + Возврат ?(Не ПустаяСтрока(Фамилия), + Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество,1) + ".", ""), ""), + "") + КонецЕсли; + + КоличествоПодстрок = ФИО.Количество(); + Фамилия = ?(КоличествоПодстрок > 0, ФИО[0], ""); + Имя = ?(КоличествоПодстрок > 1, ФИО[1], ""); + Отчество = ?(КоличествоПодстрок > 2, ФИО[2], ""); + + Возврат ?(Не ПустаяСтрока(Фамилия), + Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество, 1) + ".", ""), ""), + ""); + +КонецФункции + // Проверяет верно ли написано ФИО // ФИО может быть написано либо только на кириллице, либо только на латинице // Также можно указать, что ФИО может быть верным только в кириллице @@ -272,3 +169,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl index fcbc2eb11..2b054585e 100644 --- a/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Обработчик расшифровки табличного документа формы отчета. // @@ -68,14 +67,16 @@ // Обработчик широковещательного оповещения формы отчета. // // Параметры: -// ЭтаФорма - УправляемаяФорма - Форма отчета. -// ИмяСобытия - Передается из параметров обработчика "как есть". -// Параметр - Передается из параметров обработчика "как есть". -// Источник - Передается из параметров обработчика "как есть". +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// ИмяСобытия - Передается из параметров обработчика "как есть". +// Параметр - Передается из параметров обработчика "как есть". +// Источник - Передается из параметров обработчика "как есть". // // См. также: // "УправляемаяФорма.ОбработкаОповещения" в синтакс-помощнике. // -Процедура ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник) Экспорт +Процедура ОбработкаОповещения(ФормаОтчета, ИмяСобытия, Параметр, Источник, ОповещениеОбработано) Экспорт КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl index 16075a5b1..cbb8c9cf0 100644 --- a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // В данной процедуре следует описать дополнительные зависимости объектов метаданных // конфигурации, которые будут использоваться для связи настроек отчетов. @@ -61,21 +60,6 @@ // Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт - -КонецПроцедуры - -// Вызывается в обработчике "ПриЗагрузкеПользовательскихНастроекНаСервере" формы отчета до выполнения кода формы. -// -// Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - -// Пользовательские настройки для загрузки в компоновщик настроек. -// -// См. также: -// "Расширение управляемой формы для отчета.ПриЗагрузкеПользовательскихНастроекНаСервере" в синтакс-помощнике. -// -Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт - КонецПроцедуры // Вызывается в одноименном обработчике формы отчета после выполнения кода формы. @@ -92,14 +76,25 @@ +КонецПроцедуры + +// Вызывается до перезаполнения панели быстрых настроек. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// ПараметрыЗаполнения - Структура - Параметры, которые будут загружены в отчет. +// +Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт + КонецПроцедуры // Вызывается после перезаполнения панели быстрых настроек. // // Параметры: // Форма - УправляемаяФорма - Форма отчета. +// ПараметрыЗаполнения - Структура - Параметры, которые будут загружены в отчет. // -Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма) Экспорт +Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт КонецПроцедуры @@ -120,3 +115,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl index 4c4be1818..85d887147 100644 --- a/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует настройки отчета по умолчанию. // @@ -33,8 +32,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс // Формирует краткое представление ошибки. // @@ -57,8 +57,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Находит доступную настройку для отбора или параметра. // @@ -1446,3 +1447,5 @@ Возврат СписокДоступныхПериодов; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index 9b6e69c07..9f4de72df 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет записи из табличной части ЭП // @@ -60,8 +59,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Добавление обработчиков служебных событий (подписок) @@ -143,8 +143,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Заносит информацию о подписи объекта // @@ -269,7 +270,7 @@ Возврат ПерсональныеНастройки; КонецЕсли; - КлючПодсистемы = "ЭЦП"; + КлючПодсистемы = КлючХраненияНастроек(); Для Каждого КлючИЗначение Из ПерсональныеНастройки Цикл СохраненноеЗначение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючПодсистемы, КлючИЗначение.Ключ); @@ -314,15 +315,23 @@ УстановитьПривилегированныйРежим(Истина); - ОбщиеНастройки.Вставить("ПровайдерЭП", Константы.ПровайдерЭП.Получить()); - ОбщиеНастройки.Вставить("ТипПровайдераЭП", Константы.ТипПровайдераЭП.Получить()); - ОбщиеНастройки.Вставить("ВыполнятьПроверкуЭПНаСервере", Константы.ВыполнятьПроверкуЭПНаСервере.Получить()); + ОбщиеНастройки.Вставить("ПровайдерЭП", Константы.ПровайдерЭП.Получить()); + ОбщиеНастройки.Вставить("ТипПровайдераЭП", Константы.ТипПровайдераЭП.Получить()); + ОбщиеНастройки.Вставить("ВыполнятьПроверкуЭПНаСервере", Константы.ВыполнятьПроверкуЭПНаСервере.Получить()); ОбщиеНастройки.Вставить("АлгоритмПодписи", Константы.АлгоритмПодписи.Получить()); ОбщиеНастройки.Вставить("АлгоритмХеширования", Константы.АлгоритмХеширования.Получить()); ОбщиеНастройки.Вставить("АлгоритмШифрования", Константы.АлгоритмШифрования.Получить()); + ОбщиеНастройки.Вставить("ИспользоватьЭлектронныеПодписи", Константы.ИспользоватьЭлектронныеПодписи.Получить()); + + ОбщиеНастройки.Вставить("ПутьМодуляКриптографииСервера", ""); + Если ОбщиеНастройки.ВыполнятьПроверкуЭПНаСервере Тогда + ОбщиеНастройки.ПутьМодуляКриптографииСервера = ЭлектроннаяПодписьПовтИсп.ПутьМодуляКриптографии(); + КонецЕсли; + Возврат ОбщиеНастройки; + КонецФункции // Преобразует назначения сертификатов в дружественный вид @@ -413,7 +422,7 @@ КонецФункции -// Возвращает структурe данных из файла подписи +// Возвращает структуру файла подписи // // Параметры // Подпись - ДвоичныеДанные - файл подписи. @@ -430,7 +439,7 @@ Функция ПрочитатьДанныеПодписи(Подпись) Экспорт Результат = Неопределено; - + МенеджерКриптографии = СоздатьМенеджерКриптографии(); Если МенеджерКриптографии = Неопределено Тогда Возврат Результат; @@ -441,10 +450,10 @@ Исключение Возврат Результат; КонецПопытки; - + Если Сертификаты.Количество() > 0 Тогда Сертификат = Сертификаты[0]; - + Результат = Новый Структура; Результат.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); Результат.Вставить("КомуВыданСертификат", ЭлектроннаяПодписьКлиентСервер.ПолучитьПредставлениеПользователя(Сертификат.Субъект)); @@ -454,7 +463,6 @@ КонецЕсли; Возврат Результат; - КонецФункции // Удаляет одну запись из табл части ЭП @@ -494,26 +502,41 @@ Попытка МенеджерКриптографии = Новый МенеджерКриптографии( ОбщиеНастройки.ПровайдерЭП, - ОбщиеНастройки.ПутьМодуляКриптографии, + ОбщиеНастройки.ПутьМодуляКриптографииСервера, ОбщиеНастройки.ТипПровайдераЭП); Исключение + ТекстОшибки = НСтр("ru = 'Ошибка при создании менеджера криптографии на сервере:'") + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + Символы.ПС + + НСтр("ru = 'Укажите настройки криптографии согласно инструкции фирмы-производителя криптопровайдера.'"); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Электронная подпись'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, + , + , + ТекстОшибки); Возврат Неопределено; КонецПопытки; ЗаполнитьЗначенияСвойств(МенеджерКриптографии, ОбщиеНастройки); Возврат МенеджерКриптографии; - КонецФункции // Сохраняет настройки текущего пользователя для работы с электронной подписью. Процедура СохранитьПерсональныеНастройки(ПерсональныеНастройки) Экспорт - КлючПодсистемы = "ЭЦП"; + КлючПодсистемы = КлючХраненияНастроек(); Для Каждого КлючИЗначение Из ПерсональныеНастройки Цикл ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючПодсистемы, КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; КонецПроцедуры +// Ключ, который используется для хранения настроек подсистемы. +Функция КлючХраненияНастроек() + Возврат "ЭЦП"; // Не заменять на "ЭП". Используется для обратной совместимости. +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -522,7 +545,7 @@ УстановитьПривилегированныйРежим(Истина); - МакетУдаленный = Справочники.НазначенияСертификатовЭП.ПолучитьМакет("УдаленныйНазначенияСертификатов"); + МакетУдаленный = Справочники.НазначенияСертификатовЭП.ПолучитьМакет("УдалитьНазначенияСертификатов"); ТабЗначенийУдаленный = ОбщегоНазначения.ПрочитатьXMLВТаблицу(МакетУдаленный.ПолучитьТекст()).Данные; Макет = Справочники.НазначенияСертификатовЭП.ПолучитьМакет("НазначенияСертификатов"); @@ -593,3 +616,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 4e58dbb5f..78ff72031 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует данные подписи объекта // @@ -112,8 +111,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает текущую настройку использования электронных подписей. +Функция ИспользоватьЭлектронныеПодписи() Экспорт + + Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьЭлектронныеПодписи; + +КонецФункции // По окончании подписания нотифицирует о подписании // @@ -121,15 +128,18 @@ // ОбъектСсылка - любая ссылка - объект, в табличную часть которого будет занесена информация о ЭП Процедура ИнформироватьОПодписанииОбъекта(ОбъектСсылка) Экспорт - ОповеститьОбИзменении(ОбъектСсылка); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Установлена подпись для ""%1""'"), ОбъектСсылка); + Состояние(ТекстСообщения); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Находит сертификат по строке отпечатка // // Параметры @@ -207,7 +217,7 @@ Возврат МассивСтруктурСертификатов; КонецЕсли; - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); // Используется для выявления истекших сертификатов, которые хранятся на клиентском компьютере. + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаУниверсальная(); // Используется для выявления истекших сертификатов, которые хранятся на клиентском компьютере. Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты); СертификатыХранилища = Хранилище.ПолучитьВсе(); @@ -253,7 +263,6 @@ КонецЦикла; КонецЕсли; - Возврат МассивСтруктурСертификатов; КонецФункции @@ -434,7 +443,7 @@ ИмяФайлаПодписи = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаПодписи); ПолныйПутьПодписи = Путь; - ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи); ПолныйПутьПодписи = ПолныйПутьПодписи + ИмяФайлаПодписи; ФайлПоИмени = Новый Файл(ПолныйПутьПодписи); @@ -448,7 +457,7 @@ ИмяФайлаПодписи = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаПодписи); ПолныйПутьПодписи = Путь; - ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи); ПолныйПутьПодписи = ПолныйПутьПодписи + ИмяФайлаПодписи; ФайлДляПроверки = Новый Файл(ПолныйПутьПодписи); @@ -462,7 +471,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу); // Сохраним Файл из БД на диск ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь); @@ -579,7 +588,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу); // Сохраним Файл из БД на диск ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь); @@ -613,3 +622,5 @@ Результат = ПодключитьРасширениеРаботыСКриптографией(); ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Результат); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl index 6e24a8297..082809711 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получает представление поля КомуВыдан или КемВыдан сертификата. // @@ -110,8 +109,9 @@ #КонецЕсли КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Получает назначение сертификата. // @@ -147,3 +147,4 @@ #КонецЕсли КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьПовтИсп/Module.bsl index 33948adb8..04975f024 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьПовтИсп/Module.bsl @@ -3,8 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Путь модуля криптографии для текущего компьютера. Функция ПутьМодуляКриптографии() Экспорт @@ -33,3 +32,5 @@ Возврат ПутьМодуля; КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl deleted file mode 100644 index 4f913d954..000000000 --- a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl +++ /dev/null @@ -1,32 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Работа с почтовыми сообщениями". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Возвращает указан ли в учетной записи пароль или нет -// -// см. описание функции ЭлектроннаяПочта.ПарольЗадан. -// -Функция ПарольЗадан(УчетнаяЗапись) Экспорт - - Возврат ЭлектроннаяПочта.ПарольЗадан(УчетнаяЗапись); - -КонецФункции - -// Проверка учетной записи электронной почты. -// -// см. описание процедуры ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. -// -Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт - - ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); - -КонецПроцедуры - -// Возвращает Истина, если текущему пользователю доступна по меньшей мере одна учетная запись для отправки. -Функция ЕстьДоступныеУчетныеЗаписиДляОтправки() Экспорт - Возврат ЭлектроннаяПочта.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0; -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/Picture.png b/SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e4782f63d32f1130ea73dc46e5c1c9323de7ed GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvfo=E{-7<{>cdvtcPt__B8&R&2nU?!yD(mct@%K&W0xxCNX*lpJAAg psKPv9v!j$FTjL&Mt_)Eo2Fr__>P|rtkw7yTJYD@<);T3K0RX)?Hy;21 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/ПримечаниеЖурналаРегистрации.mdo b/SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/ПримечаниеЖурналаРегистрации.mdo new file mode 100644 index 000000000..c07450358 --- /dev/null +++ b/SSL/src/CommonPictures/ПримечаниеЖурналаРегистрации/ПримечаниеЖурналаРегистрации.mdo @@ -0,0 +1,8 @@ + + + ПримечаниеЖурналаРегистрации + + ru + Примечание журнала регистрации + + diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html index 0745cfe88..eeb941bd9 100644 --- a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html @@ -1,4 +1,4 @@ - +

      Установка обновления конфигурации

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

      diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ea5f933742a8538e2e3eff1724c648607809e07 GIT binary patch literal 406366 zcmV)IK)kE9 zL$Hhy9KcKh05H`B02KfL05L;RQbTWKWmjo#HZ)%_Ff}e@Y;5HHdwf*Y)i3~`$;^-e z5>HSfQBb0e8VPDNsEGr1PBH^$U_uKCOMU z)mCkln^tBL$b~yWxri6MpK(A@6vFj20$i;chf zrC%;yOwWyr^WgWMdwUj_(C^O0N9p&A#R2-=wRkT5e!RGmem~KFKc(NBADCT-^_>a! zDz_lq``7^C!K?>vHqs6W7Z(oB8YBoVz=q#MX_2GwPaZusQwlz334#^>5t6?`;Q&J7 z>|YOn6sO53Wc>7h*B|{>VJX7%fK{lX)B!?sHvDY23ieU(`=(VWIS(@ftXBBB&mxTY z55^|(UyVg5GoShMRsQ=L{qTETg@przeYd3NDTG?CYPk1q|J{PHbf}5y6wZZTIX$Bj z{(lwECggeGpJo8~LioMQ+BaY1s(PN0`Urg$M#FDYzkJTC8s;|4#;US8ZUh_rypSp1 zeGfhY8Jhj`#gGJ98Mu~sdRR~qrKE}0##{q|+~=ni&F4lWXe!1-+VYMc!6(T_c%Ga|Dt^{lty zHS88-_K@IWouxf8+u}1vN{^`D9WV)UaeRfiYOow^&(b<-!`|Z4Y@4>Nwc9_SHs}xn zpUP~ey+mdY+RIpn%=~tz99&;GD+Smyz*~BRgUU|JtgW{ET7Q0RtvIrU`YQ(`Sz2dp zc}d`Vty3<)CU6nkrbGRa+!@v2KUs7}5%{S)GXk%cbI_qmmmvIK!>?E`nq`4@OtHJ) z5d_{J>IHnshA-HYWAIt6fX_$TO@5oqwyEFm0N7Y3Zy~i-=y6&D&S_LvupF}Q^-q)) zuf1d~@&onbUzr6j8(!MuDW7KZj}%8XBYr%r6404PKTNiH!jo*WV`D&-nVHJU;VPSY z6pCW2ceESzE7liBSg{F!^hle@Z&jxegzb8^zVP(Vf62eeKlp<5{D-$^%nvy~!kWWU z9z2fck2Wk%kEV3&BmMLxb(wt&w4>#JJOzfOH4@095lk6BpbZ?Q5-tBjFJxhRAeaA2 zne77l(DEIVEkG@MyyktuFT{C6JdS;HhiKcxRe-*km05wWA)&!i8j0tWMrzB=vgq1_ zy+}|>UpmP|-z+98x##@ODwOt=?o&tow^>l;nq+_+;Fu)0?hA}(8(d1|03ej8YN^#C z;;QXh{>8jM{vj^5L1x>LinP-}?Et@$yWttDz;>x0JZl!T4qjE@^%Q^%5c?5uf?na< zjev}I*)e~yyR;iHKF|UfSMq;swhEHs$&yxIIshk>%U-As0KO3HH3dwY0gCf*&H-Q- ziK}4DGV&q1+G|A zjijHwU*M>~X+8)Svap#GQsRO5VqfA))(3xuH<&alJFcyB9$Fs=$DE zL=xWrKF@%60RS^lW}XuD&scM3B?lV_uhLl?t}Kz2Nk!`Mw*+AY6nlc|szkQ(^)PzG z%3h;Kb4m~T@R!yeIXtxhD3yO$y*)c^y=@bOO!O68P=EyMzXqTykX9EWJus72WowD} z^I=jQ%!f&}I**b!sS|oN?G+QJwrkU=F2O$vkbe~3DovMWNViCQg<;3trJ9$0B(dFq z*4px6{v28#+iG3qWr6RM29r*jM3wA=6p|bR2=gkI>v2`=^0GtfC7+oDAN#;t{9!Hr zm!v-t7QbL8QlQsyTH8wW=PLhE;4?S-x^{)czVTB`y^jGU>q zyi5nFlY@lZs2UdT)+2#S&$w_uy$R8B2w6?FzHo2Fg}eDvT(}SSfzOQVcWu~p;c3}3~=sPXSLErq6>xA6A9f%YD(m4c0<&kfw`VR@8a zhQTXIw6E42!R|J}Ti`sP+5bKV*Mr=NLy>eR0E<-r@C3*atO;l9beulj8Z3$=Q+gFi zlaR6jVSxPtzclBMrUori#Jc#se$b`p1IAU9C%Ln;~rptp-k_VLsOhizg&J9RS z?0q125M(zXNx8d`++9}+I=$~#OFu?>e=ifgZ%Co{EkID#+VUF$pS#)nF1FRH}Gr2j`ssqUM06@5mc8_pXooT zFHh_61f#a#X;Z@%pu_ke7yF8J#LW_4=$%NDGSXxf(PWYyasBeLZY0ZWTHuO^WhY17 z4IREz(z^U0;24Y=@+cSl{1c#t*=;g=rv2&PScUl6khVCP7Wxe`(k5JrkPKvYf>VO5 zEYLjVQi1;}kZk-{cz}pqit9&NM9B%BIK-t)FmW1WJJlNwqg>;{7pyP=1;Ah0y&4zi z)*jIvrS}L7lr%a)M)2XOND4_^8%d`xFMBVQht^=ft8mrvgztcrcn++@a|=8y<^%qN zlSFL&BhXa&Q}$PIFj{^IFTU1pv1K_tNa8AKG;rWxuT5+*n@}V=S8Q#-Ea8Q(z~2k* z@WN-|_h|`m;$?1OP3#m182LYPTLkay{lG5OmpXtjnTl+)4F4%{h3~Z&k(6Z=D(%sW z*`OH6b-5n4MIE|P5MtR`TuSNIJnYoBet?$>Op_Fs zU2Baj{*ezvP1fa7hHfC1vtli-pege~5?2c1%8fm}c9W$fWEm-Io!Z6)F^?AUXx)Jw zp4n}#(AWZmXcRM({gwQ z0V;Hj35i@;j?D&-QK4g4=qJ2TR_r{;;3{8Kv*fI`^+uW%)1aLi=n7&@_OP$z;9@7p zCSFzxEYPde7U2h{7ih`}@-r^8g@duwN|j~^5Zxs(({wW2r2Z2HAErudTR8XfUt2j} ziw|JA=i>{I?l756vZ>E>@g;lAdgw~->0em|cgw**DFLB%`*Q&)Bb2ERxD=@_K5*@Q zde4Cs_NqUF(OOa3t>xEMT7>vynN2PL`iBM1!*=mmFv5$%5iFx;sYAa7+=mz2RuAJV z!T8ajov0T=>#vyNL)Xqpt+)&-zBb}jX4(NCca(V8oH7ra>-4Zs`Yc8?e`0I4rN}H? zz9~$|H_mCuZp#b-1~e(Lg-h7TOK@@b0)f`7Lo<%fZPz2W^#aQ-k&k`>40k;;+_&3F zT6mLJrGMhOY(dC34>=^qdrH%UbG#O^U zI_o_Xja#*cy)75-6h}Hyzeo86B?RyJhWLWoJ;(>Xg0%;MnfS07;JO>a)9r;Y5J=3g zcOWa?tp1IrCv?rr?&XU-GSsp=)8w4UGykm(1-(wH{bxtBzrJPCa(-e$z%*lCe~#rnM^7`X-zJU%8m{5 z=R=OgkV739Gz&=g{tvuNDwLI}HV<&{2CK}n;-Cn$$&Nz}?MBidOxg(26^LFrlI++z z?*;kq< zAiEXXxY(sEqy|N7a2qyA@(P+IpkdYW70No0*&Ci+fUW-sR=$d`<$e;bkUGosHNV|Z zxJlSb=vU6PF$PlJTMAF*%9K2H^>(gK=c6JNE|bHJHZ&K7fjzayucb-PsSN0FIq~FcdML7}SK3e}26ZpE1dy%FB0LX9Ja3w)3D*fGPP(#Zv1l&)s>olk}GYD6^rw*;kD$M$&$wh6&r-b}p%xYTPh_wkn|TVRHC3Amm=^iwFAxl3#83yndNUzJaL*sGg2UhmoIliy=WL z$KQu@=on%?xGCGS#(>o0*gFsK@^1VZoEB&x-Vu{mzxY@FAF7T!zLXss=bi0gQ5X!b zBQjALVVVakK4|KbOzzT8CH9@%+U>tpUac9ucXZ9qlg-`gjICUy1MvmKoagKz?5y&X z{)?2e^DTU`zU|@c0?DdZGRW%4^FUVd3!n|edcBvuWN+5d)hM&qs2U&4vkPhH5Kp(# znBQuf!Y9#Iwf#$dV9{bQ#iq`E6Wf~r<6I(#XBB#3xaHspn=Dp#)Q%66F6X4B^R6@t z5MWXUt_t$`&-M4c9wYh?A&L9SS{! z%Gb+%6r_ZHs8+m1#s4Yeyc?dubgIJ_v&H6rrD@6cyx9H8caom_?ibJ+Pzn-+_2)pN zD0kurD6$z=R+L1w{D0kG5lXw2DvkAO`LEoVFq__6+5@F#>ZO#4W|-tfdYLekadi46 zZcY5HjjV|$vkhzFJd0sXT)ob)Cc=!=@;y*}X`0zE$=5FV1KIyoLN{quuRoNQFb zp-0##sB%BD@i8rNqYVn0hOsZhd9B`ud{@a|{3D*B3b0}GWg0JK?sQtMlb z49aI%F02h#<;}RIpQhyG>qoT>RG&SiT5Y)T8TfnJtH|)@d`A6h5FgVrq>XZ~xb9wi ziH{usEKPq$)5eRd-mIxFLIQw!C$2jru516z(bI^i*2t0}oz@o_-;TXD5;Mauikz%N ze7QrOy$5CP<~1mcal4S0wFft9C?`@``(EWP;Bg>Sba=#<+b1ex zfJyFK468%OBqirsA8Yd!w|n6WptN>{)B$AJVG=;jgU5k_tVLw=CRy7U_{^iVd4jPl z+5Ejn+vEuzw=}JSZtte?Q-`8F%)Y`n} zc3F!`j-IA36V3f}E0+zuE3eaiwLjM~jX%1*~KMmqK|`Xy_nl5StAi8_@KwtaW(J zJ7sN4U|p>X*Ktt3y!J8hZ;Sl}oe`IzP)E4w{X5r@>faEAHE82hZ|UN6AtPO!3&mWx zVk3)$0qoAk?7cE;v7`3_NFW~I*QIZusw1;!?9XybeoaD|x$DmM6naN8ogpthfZO{r zv!1vGrda8EIox8e!Iaroc-faQAJ_)n%81KPqY1_S{o>0Tyyk7P)}_5PXL)5^SzcZ07s`GQ5~Eb94%CWAX);058|>1ACsu4sW@bg_ws=KCv5^nSr6 z-gF6X0<<)0<@4tRS~UN@27hs|*m91}(#`65ufy-s^@wljP8f{z^)cOk$1OtQx-Ve@ z&^iz}DJzRkdD;8Me&uYzr%bhYl-p0pb0UL1W~Z&9!)3F;2T;VEHo)Y@4wq>#W&{Dv z0rcFFnn{3!F3hNBN)+;#H$l=#%0d;l8^s_kcr05~-lOKJ0EmI2-jc;cHOvM<(HpW< z08cQbgEGj(L21S`_?4l~ffgf^oT!CB>rBAfCj-^uQ6`xQezR;#t0mciQ#@Zz(8zPD ze;#uJBE>SvXz)h8_C;~!+~rByJB7)|#<_&_~Fq+bR(r3UE0>9h{?$uv;Ul$9}4 zvInOrNwF~5oXB>nf3_?=+otqvXj(mH6PLdN>Ll@Bmoo8Gg1%DW8PI1GvQyt-l6tgm zNVS;)UE;b8E~WZ}QhnMpd#B5>Z_#8IEGaN+-Nl+X~Hf=_BYeS7B50#MuvXbhPuvVA)Va2Y3^>+u(x$Ay? z#3D>qM!Z7|iX9IxC+T^zl5>}bwW0i3Kw?v^R6fvuksRG`k<-}jhnSAaKkE`V|SMx;p-tR zXUDCJi&4+X_q84oTke7Kiln(5y<*EP#&aYvkUqMRZ;R_L0vb36xXRG+^6YGoFI-9m zNLLdrN`uJ-Y7H^pDKLj4Kp+=cOfE;qlDi~v-FqOXSd=-MOPOX$@@r7wcSw$nONs~{ zx1&8^acuJELCrvTQQ15JSWBKo(4xr19UB+FFQM%-3Y9Ky^RgT}4o03^nRZ$Vwr6=} zZu?pfLk&=q{|d`Xmf6 z#rpzdB2wxKtOd$Pv0&5UXA_Wk;hzFnVW->cT}&S!1_Q+S-~ly+zk?YVjAnVX4oU08 z(eOGBi_058w)2u%3i=6xN!sW-c8bd-%0Siz98ZQL%kD*!1B^B-&{e1^aeJ69IFd&O z$a!A&5s)40012{&jD9a?g-zni5nZl(;bmM=b$QOqR1Yk>HudLSCc!)V26yQ`82ZHl zq^YXXgKqSh01AX858C&9vvcef3fdoLZ<3#8yFjq(@|m}!tjF0P$eMiHys^KZ@|Pdf8cZMYWg3K)^7gF=lG!M*VwBn4_l8&ttK^J7e4y>6Oi~3 zJWwXCI!f{xIPCrPZfx$}XUrBNHbwJ|s=X9D-7z>Tjk;r9=W(pTnVZ}TgaQIwR8u*O@SYmqUo^8r0=(`w4kODa*3x~B7twxvXlLOrRA)Y z??xw2>-$;PXeg#;zl?O3=sx^|eFut|y#tf^&Y0GHB%1BNN;dCIZ6CjPWR(EKRJbEc zNXZ@eD5X~Fyk0Nc@v6zO-QQT;_M70x+2*!ruQ}LjYN~Uw2<2|+MhkuZPiI*L4ghwh zIYWQ1?T%js86Qr`_=EU))r5Tiw={yF7@#=*#9v4~a*|@y-yW1f9yg4zdtqh-H*0*G z<=ej-yDZqjqaPWYEQ9|F#0nb1AYc~i>A%pnNQcvgbfhDuRMQJZV`lH{kAP9!n6iJk z+D2T0?EULN0wHe>+{9BQvp?fSrJTY;9kUmeBnZ#dUAWkqfQJlr0*R=8l&L}Cty0Ymhb=loBnO}aEG+|H0Pa!iNR@*)vfZ<17x0H)~ClOOble3 z;FN|$SY*%|aK(Gt(BzlXRT=?N09gHV6NN%6!1LxrBsa9vSJmQXf1$XlD}^6H;aZS2 z=R|I*b(KGt=e)=&1iq}*x``e=ot;R+xQbs)>vi}UdoRZo5NRjk>W=?`L0xwgmm4RD z%ulY#B1U~cX1(l#+7&u#KQpqA{vSkbCoI{U%M}oaRP3R=HOr8qr@i^m4hY{xY;_AJfE^6||uX$oMTE9~a;r7-EgAG}&w1Y!{A| zTpXROJX2V45&H7fruk2-%W=3B%Rp&quLkdn2GmOC?s(zqrOnOF66=zVs*-to^msOF zi>f2d+aKt`T*Vt}!y?gDuoL9;jew^XSG^r74^KE9criW{;8`pZ01~X^&^_oIdk1L0 zP+15JeVb#qf1tQZ0+Khy&9&hxK%E4x;n>;qIhHJ@l8{YeyFA5Oy8n}y^WAczhvi&_6AVUy=2#%+LLo11rM%FNdf)RT zm;$w<-cTh6Hvq-K0;Ur*E>J~c>$+2XzuJjbu~&$ibovJEg{B&;cmMTAGC$#5gz4JX z9+wD0w> z!^l%gfJRYXa>MdAVj^>G5F`d`x`3K-Qx>8ZiLg8HHLyFMqrGW&g<=^cf!Yz>Z$^1( z{U4EpLI3fxJunYiBa45Gvc9uabFuxU`(!}wB;;4n{r3@5L$hmv?>Am8t>F$i344RM z4#Db%znfWu#$TC^lqaM8vck@AgYmNAGWzeSPf>PH7{K^KHqf-s#vp{KZ zeW+egYZmnFqOuI9HIne0hh7x7>J6Y&RHpunTB+>UN~I0(##>p4t(;I-Va`^~f40oB zQJ&eR<)JZk`|G-GHg!KmvBti#Bu_3R&O_|P)RglOpZp>7c?d4Q`3JqbF#1Ur%*|K4tX+Ku zK;h72K2q^R^6UZ|S^AMUl`;P!FdRSOaCsH`DVjd)ZFSArI$YlH>;!@a#NlxP`aOgn zEIFAGf{gq9eaA;1m#KO4uHoZyHjc^ov;SX>N#^lbU=vq7%7r^8Z4j`c82E=<>F zu7#YaA-V=>vSW9{!MJE?$5Z@8|@ z%f4}!YPBnT>@p8K5d17VaGk8&Ws)7U^5y~7MXxe?xCch_q-YXc47awSD`$K4nFSMx z9qw=yU>}Cjx*pjH2-@P&I_;*O{WjONnn!Wj0qy}_N0Ys=;b~kC3UP5L(nlO!cEa;* zI1VMGPJ$>r>u@{u=WVp9qhm=*Pp}Y)fYcYLjP|^t7F^bfeCS|u96E(^ZljM~1xrw- zPT7a!jJzB=g^OdO-l_ZhcM3+lQyK-DL`0D_>_1gZolN!+2WEiJ(b@3if7-ni`%NMH z$q1mPQcW3sed#{71?`P;^rI{ly|`f2rZI1g1kO?>Oyg{T^zGJz{t>LBv|AY};Cfoo zX*o|@f)h7tA^8b$Q(bxx$+8A*;B~D>{EK~PyN6}Cc13AVW%cKYu!}7!aIr5W zWr~S*^W8RI>k;-1tN;qOzIqx`o9Nn)PBz13W$5>qTH39ea%lpKE#C@!!x%6*#0$N^ z71$HqpQXg3B3yW`pYSfFMw7d1wz?Fsjt@UrcoNiX*%7ccyo?l7 zO+vrESpY2`7W3Q%hsEkj_-9CE0r@KGrYqfF&^Yg8kdv3iyzFBy+jwoaXWfR$2iD{N zrMGC=LYE_-W9xid3$UsHsF0JCoG@zjX0&5L8Ba8pb|*(X+PjSrC4 z3>MH4;Js_ROEq8dUJve=E`N^p;6Z1I`jlxW<)eFmwyfyob`*rodXQA=%%13%S(B9M zMFl`WRyq0^{C#5eKu)b~qB52QBi-HyT^$5}mUG0bqw^}EyIJs;bB@d^4tbb2?~o_# z%7ZyD5%iOaUQFr5lwL@oH{fp-xE}%!;fX3t{;g2i#KOapnCHqX#5%`AeHEB6#G8kX zm3de!4~qaAC+2ZiOK)BQrT|VS(i;qMg$+|+>Q1y7)#A8V&c#YySg8{sJr{D8V388c z4hsK7;P@3~m{Nu*un0_~H(<0CMVL|qDMdz=HCW}SM3psI?kEc)p9@}(OY(;6aXSg6D+fbs$0>yCb6A;v9Mu7Qbb$rtRmWlRt}f`}BpCiu^xaYHuj{kehBDEl zUJxg~=hOHd^)K0c8V~h`=h)D`21*bhp|m301oJr9UWhi@4Hn6vHMELFey+mP4o*Ek z^@fY9zNdw&>Yb@9$VIMk=}xI>hT29%!+!G7`NqYL;%t^(Od}43!o3fc+_RMl=yuPv-ds@m-JX zrq0)@1%`EwM+Y3Ca{&GeYZU8@^_T%m!1e=^*ft*y)9a8Rl`j$k!_eMV)V7LFmZm|zhA}oK&-UTmn z?{uMSH$d-GW@#=&KfrIzLOE&^9(XBVV8hj9ckK!fGf7$m9V?hO>m2(Zf_(G!Lk%7(0=IQnl^_*T973i%L+>j*)JDe^@ zTwL}r?su@~>=B&&4AH_~A}2cvYVjHkmgB3rm*Bp?EYYxom}bSpI_7O^)d@{=nSqbd zX*9MA4S6%68EpfOwc{)Cv4?^C61k(Sa-pnS?XV?h>?AQopaIGdA4Jb_Gf@UoJkaA+ zGW))^wvYWdIX=zLrHs#3K0Zb2kDuezf052?lliNj%P^kmjgSh{FP`IKAF*iMO7bPQ z_~R}@AHH&?^QRTTrYBB<@aB5rB!~jUu8sxH0s3|9nU^C6RS=jrp@{c2?rDc_8v$ed zJM2&R0U!fU9uBpX#dlxB6Y@}xuqxxH#Yg$rdOE(O{^@yC?6!DWJ59W;Y8y;5$VLa} zfAt;5<(bcQp3xrh&6;M5AgK0lb*VQJI7g|R)>r5D(DnlUtr?hRZ}f)Y|4vwUoOwY0 zPT&vlxCj3B!=DO&hv2U_ut!#y6ZZ;MV{!cB2MJf;>3#Ii=J5rf{6=`(1Am|hOR$tm zfDZ}E)26tryn(Tc))b)N^rAN$#6U&xQ^$Ym@mn*0Zp2Pa`347kypGPsY4MrlgDP9r zm0)ef+mT-kf;B8!AZy#g(x>pILbLF5AS@k#pF;ou{CpRdzJs4$1Z4{#zjOSELYUT_ z;|p-ZULAHA=2kCq!-M~wvNc%-^Yje%nG}1;8k7Uo=ME(fK%4^u-_P{JdRJqxqcw%p zbwysNHed;iS73B*DxC#_&e?e9IKScj%cK6Cp-1}w^3KW;SaoM5?~(gk-lMJR@E`8c zndXCs_5KTEJ4m|e=v`2qy~>pjJ+EnQw#UWZ(dFMMO3wM79kEK*qP&7}CLC?^2l$lR zOz|O@^b${+H`u34)qIY3=WUN$Jjw$a+wj%}Sb6a?tyqffO3>p(B_~VX5tFdK;aIqH z{s6BcL4BC?5>J{pScdw%Q1Ny=1@aS(btu0ykyyW3Dt@ySORE2f0}6Jcm&yzHv`V1ecz{dEp_Ks5RzUaJ>XVc>^GZA; ziRNr1u}8l$+HGO9-||LK@cZ1c%4#r&`rNS)H(HW1UvtfXbb^40iWcCha=9m3Da?+Z(=gi>qQDb`^5^4$slUK6aPQH+zGNZ6wiiLU=TT z^`%wNKtpAd@xZ^Ul}5r-5uV;kTMZN3tp@`Y6P2NtO;RjlW#tL%xfc&BcFE#|F4?ie ze>TbsQgfLQuz|SXbwmT-df51aT32yftt)J)rY&cgJw;gbv3Yr3)?(jIZ1*v&&CO1g zYS6a#UjiPqa%=~vhfbEoiZ&FcY9=aU1b6x9--@l*n)u+IK>wjtJ7mYsx#!lp96RRa zlGBx=U3?4=XhZtEVTqK(NL-Lfd_0CEutD44aM{O*!F`0ZRc+}1Dz19hRovxu?3-tE znK_ZT(f;@cfo}os!IDw7!(-kq6~ib+yk@-zK^S1cUyeu`GogI+9|Bk5ae^)?=PbYo z3e_krR@FMXY5`s1s;E()*Bp_}+hxZtf4;Z4ZH2fpODePE!Lkdwgkx9WYXeDA@%G{! zj@|RlWyjs@Bga#;FFChx>2XAzzo1fFWw{Ibx809O*ys{hZIA8O9VTl?&zh(4NXd~e@?>1o%-B1CImWi zE?tjvltd!hT1D}#MAEi;v@PsJMW^duf^puv5ZwY0fOxKMZ{@E>bJV$?;Zc3Zb2OOZ z;~Km<-n1XWmt}XEC{G|)T6z*=7mAO2i451Hy0JxFdW;LN+X*y2`9TpAAFDHQa=_tz z%S;VE0Ic&oPw{u!Hh1YhkG25>a5vlJb9~)kb+h*Pq$$euO9g!fE0$}Mvv`At?ZjDp zsfTT%`IB+}8m$3^Mv+5w_-1#>NByX&_KXj^ekoK0$1=@-7K(bfBhGO0POS(JW#00c z_A>vipx_5?p7cYr_Z;1SrK}(^eGlW*mC(R>^fkg?Dox{*u7XwH08MPoqG91fK*JNS zFwlnsf2j~Z-xwL33x&qV3UTGoLPYqppCVC+Enl2M#B+pujcLMwmtqhT4Iui)8`e{i z!vbTSJI1SP6FP6#kEqPF%cTcnFMuSwdMc#GehxLSz6GB`@KhR!ErlPpp&!j9*HkH4>?hDWDLTfy&U1hQ(Dl4;0lK9jHkK==R zBRy=4T~+p-K_=Lyt)jUud9;CynXq7ofula0WYR#uYGq2LHV88sIe9!aer{s^u zZHXeYObGw*6xd(={tU1;U6?WdQa%5$l>AckYnxHV#rOb}9!&Lr0g2MlLU@>4OJs)x z%a8reGP%T+V{O!qm$!pGInRL0*B>sU4OzpQaGrM><1QmDf!v_T+(ifnPm6FWfTgBH zTvkH-SQlZc^{`Ex^?Atc7&T-c%I;{ic9Kb}4u~>+zZV4>L!LpyIxK|WkOk{Fo@6ht zvx$%4nnrOBa2nR3U|1t77fgKy{fiiO2>9DJ7aRQotj~GlSq}c%#xu(cssd9`T6zi> zig^n$ucRmx0+)IdZ9df?TwNVAQ+E$K~}82zeO#4d8h=XUxsJE=6%8) zY3d=XmsRHh!?3xSWwo2-yg|K0rShUrvDj7@YMcm=>cmpY1%H9+0JR>+gLa#^Y?8*2 zR>!v*65jB9uHKo+U!b4p$8CMegZ5WI0<0qL{X1?b_%nB@Q;;c@9`Ue~fK1SGick31 zb~zjX^)V2FzgOh&jAr;<4Sz7CfkOC$xg98hKgv%>jP!-(*+SLyJ@B$UXq-BUQYKpzir*|N7Ve0E#!9a;miA6cy8+?qwcqOI zylyKp(nTvUsAJd--CPv%INqCkuI^8{(o!mG?P1q{orKheuh$;3(SFw9Zw!TAYn@e$KLD9lQw#A8TYw*Ye3xFc_f!A@=B~CcX z7LD~dPI|)ur$?M{60jtrN_3f*-Ip5QjkQCCPfKiQi@M`|q~msAFAXs~91NWu4oG&F zuuW`e2(zhw=UHUOhYg=YYtMSw=XB1fik9a^Pp^G~1O}Jg#7=u09doaS;!ndweRiTU z{aFjj3$F64Kpq;%+bk0m@8!TWw>HERMJrj(^R3;1+k;wG!whswfyo)v2F<^C?GWtl z)zG|h>nVP2^J09NqIu09#omCAj^pBl<7>~xY&OdFJj+)JW!+t7yJ6? z7wlbh$bh`jc$Q+h!yIuHtLl0vhAvN+(3iDzD)$vkqgM(j```GgZ3?_E1y7k9>?s)^ zhcA*cLkDyLys=KNd4K#|srVFs%F&xtXTnF1ww`+Lb9^o?drN1!Re8Qto0ryD>1DTCi7hMRp@r8;ieg)n z-!6x563$2z&Sf-^Y*o*}G?*C{nVojA{TPnN%l^iD)?}|U@aJZhbyKx)P>SZ@#18@Il}6)In|+NRLME9x5luv&eE zKSb2$`9q=ld;Uh#lXcfh%kFStk=sv zX5T|LSfcA-U9Ec-{$QD|gC)8yq6T8fTDYL6s$YVjA+Bt(7npQ1*sR*$)k&M)&V5%W zdwR3Ii_*(-d!C6CQ)Br97O};Le%iPqFDE_P%i8s28HPb$mg$UOVr}-)a}g>{HvLd) z4c7;7$4$NYAh3!*adkaN1NqLe4ImPPvd5X9Oa-H7m zw!PTv7OumvcYxSeF(Ay({y10zB3&f$`!wv;|P5z;B^egjfQsROgHra6qqf(XjOjKM0h~+!wqemn*)#hdU z$sX=&{nRVE_NyPjG+-(c7x^rq`xj`gt)Gf5{}i|(5~F97?rS|Lw*Cg6dQjNFV$6ZRL36D}eNtgj8?5)4&<6-k2cj-RIX|`LOu&elZ@OV~Ju}hhF zTG|nlv}o-LaV5nM47QzinIqy#NpqXG!;{;*2YsqOYVGmoKo&@mfUvb_rD8e9yl3@K znzNgwqxcZKM+Y_#&qsdFHHEW$c+j>Ngw_t%O2;4^bFEQj_N8NpFrrVI|DBlH(*CI(=*dDl*}dNFQVjGwP#596S&Z`iO!MBDOwH zbMYOV``NT@Ob&b#xS|d{gcV}+6@9yz+pn9h(1Q+x&y_SpUHa}eRijRR3|aMD3sy5! zR)%6VYWJtSjsd&^iFLX{O%5%p7KB`mlkgf<^Wfipf84hk9LM zaP`4>)((~YFo3|Nu-OxAw@6$aYuM3gWflAoIR-Gi6!bN5WzP8$i+Hp)xwK1M8I@QU zFzUynF`KJ2>UH!qyst-#0FWTxzw_@m_V=J(rwRTkf~7wC88Eglz3ijG==bEzf_MI8 zrYD(Y1vlid_hn^F5m0o)R1Bc#MGthgOZ9$2&a=3QIY3e>r^U;>#rw#r18TX~{6XtM z{{^1n6UqH6(050AaAnyfg(|hc*R%uW6Z-E!{oww0zy1J_5gy(>N@!U+r_D|w8(y2FbwhN&PIgPz$`_8sd0GIECI zn?u?7m=~I0!e3ixLKa$*?V$-4_yzqjG{H&_S)mC7=)oMCkPY-d5`#0;$jTI(T)dmk zW4i|Rl9ID2Bx!*|;>rmoapg$JV2OTW8@vbJvy2BbJt)&G>SL!g?dW#a1;jfz8Y>8S z9X8e#jpf0^Kzy*3M&NPKe}Ku>ZvVBxSeAdR*6kPJZwyA`y?XUXDApc4Zi4sY@E$yF z@sA1~xA`w!eW~%~eEgD+U-IzF;NbB*{{a5EG)Z>-{Sz>zAs(B6maVF?43|SWd>7=o zD-T`3!vpB#Pk20Jnvh4k{cHko-0?6UCx9q7z7P-p`0Li7(4mgoK^_5kh9__ye8}@> z@^+w_qWiOuD_q^z{{(koC)+@{fuS&KA=h9nk=?PU;lpHIrI9n7SLk;>Be=kZ8wYe`qe=PWp)holJW=SdDrp4=4=)qDCe+x zE%qWj`YCmmA*EF*l`39e|(MlFI5KkZ9{v zpSC{eRg3hzS0vi{fZ9TO!RAI$w$$d3X;yo*4zHs@7MEeLRZcc%yo&+1x2{=?c-yL8 zu~gg-PBD}l5(7o`$eO~We&k=3dH zy@-gcUVWNBG^#(PhoADo>6GVR#3@fduacmzA`D0HEnPA7lREgThdgDgs`~b&^awKSR~?kH$A{E=IZ-b>pbeSSqI`p%bI??vOfkvf zN9s!tdX$-4Ky;o`qs%asc6-B*)Oo}ALpO`%@Z(sw`q{g>jOPp$(Mg2qXms18j_XDf z&MfHbg!+lf%sssZp@xgqSNoS~#4-buWg7dIS=6`8Q+D3BO=?e%laP(GKmr!QC8P`s;{O^m?5) z{Lj@?>Yow*!;PeG6R7{(&eQl7^gq$Kpd}XLh=Zdob9Jq-}JIFK_4WZqm;ElGX*Q`9}98QFv+X35erEmV%_D z-9Fxy_L{z47_Ncq_ys_NaWHb#k4VoRtcDjPm)no~UfY$FpRf}J;z~cdK<@=*LtObT zK-B9NS9Yi0->{MGWSu+JonHp`n}Q#kl%Z9ibnH~&&81kXSO+~;C>EzYyUWK$Z1T14 z!y7=_BoO18*5TVQi3OW=!I6&8Y_NGm27u(PW-1P}?CH$6z*Q1Qx=qi%gC}fF3=Qg;Xh#Y!qi&~=P`dnDA~C_oc6czn03Q5BOHT`_h)zqe z*A_S*<+GZQWk^D*F=E`e2Yd4Z7xK@psiu%+YX2;NEw8=C#Ui93j_Q(j##k2-V9$P- z2d6>Zi?}Z7Qj1O*>tA{US%HV8V57xGtpti?C1+~LG6>)5U?nx-Lp?lX^)CxqZw|R8 z0a%mt?32v!m!%h(WQ9LVrY6mSM=?($fnM*T!s5#5Xh_=_LYw+nn%@iZSKpjeM3Nn5 z<1G^6Ek9&&WWWcS-SH%Xdi}}FJ+=gD4AftuqkbyEgE-DO24d@f5!KN+{0ut$Gd=&$ zpu<1QfSO?MfWVJa&|0Dwsl(zretwpfsHA@dA=eIQW`|y82Q;(8!0Qgc>kf-vc1Je+ z4M>(Q?RQrm{)dp{!E6FmYX+)XK#=HSEQzb4u8?=CsTP${Brc+dN?93tGk(Kl`i=-% z<+T?<8i?aJoAIRtzv7!!3b}61(zD~Uh3c^cuF&iMnO^_Tuvi(dw#6&H3{`s^2j*7NdGs`X9;I*{_Uutz7%fhV z;_`$(TqQjq7jKcZEzKW8^KCo#yUY=&qG2<7tVJG(XtdOQPoRg)2&>qFw{sxUAa&hkNMxC15<8sG|vu8>)5`4dg32uIzo zbeQ3-P;3qHH~eM~ET-lV(fUZxg-@u@Dnp&HEO@KPhEfIf!f#WRC1i4j9R3Lseo9Ah zDVkKO%}HY3rFLjjFGzz0-|VN7GZj;M7jB7!woa5RFaZGj@F+OEIUwZIJ ze#-cC`EY!&XpzLaJ&uWa4MVVbN&IC*Qk+-C+ECAC6}AdxsG^(4a$A^`!Ed zF0U#;AKjHE$>AI!u{OVTHO`EXl!bH2yb+IdcE>8Aj^MGpK%EB~!b-2DN{`CQt)}$& zPAe_9g(^&;tWX6ta5*(_9;G9t-e%%t%GxA{Ji=(KA`5rV%)9V5**9am@JJz@4)n1v zrJbKk+E!{4om>0)L)2L$Q23NPK@)y|E)xER6n?P5lcYBr@`FvXw#lG3^C2kGu%)zz zbr{^>NN7SVmFfgA0&BqgoS`_eu zfo1#PM>-9-hu^7MXbAkA7rM=at&OJEE+lT?91+L|5aFRPkRz^ahX;H5&;+Aq*}N6O z_*?9G^4@@Ee~%oMeJCqaF+-N_zYFbEoThQFz-FbaP!_f~h1!!K#e-iZO=k-7h`?xg zABbrtBdst{fbYmrJXt)E2GE`uKohh$KsN70ke-MQ&C>bEdwdXmFhmI9NmEi7%&rty zjyWq1?5$d(o5sGC9ed_VedC4wACD&k&C!`R7ZfU|E&4gg5;+4xBEBe-AzzLuG{wZ< zviKWe<1C(J=1FFWb$YZ8+1%@M92S>N1nD>?8Dk8yu1!)Zu8Lhl%+eyZE)$I5cTg|S zHSr0jMOWZ$0#j2b+`vlWGc>*0V0!r+I~(4O;o3q)$^D;-a{ELjv6;T*f0os!{By+M z28gY{O@K0<>SH9YN3)<#B#9L|{qYg!bO?20#WosnXv%{}Vfeh?5uc3vDxPEwmcH{3 z3Z2yJJKev&EMA|@sE_l$BK`ItG(h9o$dq&8XX1b4I}PFs$Sx8FqXF?HFayOJa{npA zb)X9VnO(#VnrMA&#g$5|ul9mi3Fqo1D^l8*e@;YrPBXtxabrjKMUTFua zbosWwD{V|(dH@X{E;eJni`}`Tbf1JKe4rLk#*ayCppV6%#luKeP9HnuVxKs6h^+(Y zgoR{rmyd^u+)J}>e1YVU3dGhg1@wyWkCK=)LMk5*q_T&;ONHM_pUVX%)Do&)3@RFZHooY(93Ut?znyj#OqjTWoE_tXiALv7;eo^a6@q zirY`;Y2E%2@HZ%UEGtl;+?EwT=M4-F8P9nG_a@@jH|T`E_;R}&h6euHB}LB02()NR zIp15XrJTq55jrzy-JuCu;1H0Hk5-LygU8K*MG~8A;U=Bcn0@Ddv?)NR(CuHW=)%x& zzWZgx_qb|)&?I!av+3*{J1m#qdH=i{Wwz*k51VWQ6c@o@zlzht`)U?Wl2>8A41E<# zlG^*(S7hRo9Y-6sLaAH1928t+0o1J|7Pc54UnJ~7?RYu*V-FJthCH?5J0F3+`{8d1 z{LK$6Bxeq<;+yYP+)HF-2EzCV4mI6+S*ZRQk8Yz^p4eJM+`&EHC9d*4;$s~cG`s{7 zmdI=uK7%6WzF%e-xe*G!^i87R*EBu=Gk_{Cn~Q4#u5QwsNVu^boOEbqnTv_&0F1R8a`_&IUINz3;1xQ#GlczJNqr1qcUQU}p)tAUE2E%| zhfQpF3ZOFwu9THUkH3YcIdLS6#z=IV%|ok$^8h!Es`n-BpdV5=o@eM}mb`R5&d4;! zfK2;=pbUa=o!22{2_WZ}LY-g2vVnRkaCv_=ur}5iuo79eMx3Dq7Wm77oFU0v{%Aqq znj=}3z-XD>j6nx+xf&reH%37<1H8>;T0##})v+&4#0^0$zt2p>&mVczS(SI@g<>9Wc zh3$@?zZU&NuDq>hgH&oFLRUE@AI^*ZB=2fib zRjlS!tk!2b#&tKL6M@qdzd%B320mxShpa|!P4^5*D4n>XVS?Nldg~v*Hy9tN7uQJL)(TmO-zZ-U%t#XdFJkv04r zou%nGAkK2!XC${CnJ&0RPcAR|iY6BWooHwcc%*C*!589n;aHSSo9~J1lXUtz&i>ESS23A^HBK~u09Sa8pF0OUV zu?0rdI_3@voZAu!jO?him}IIFBjYnhA<7PeN?wp<>j*Wp!SKnPzQ-kSN zJ)OvKPR|U-Msj@?U0v}Uvc$%%Ylu98NLh|9aY8gqk9b96b^-vz8Q=k(^krpI0W1nz z;ctUeT)Ep7LY8-pN~X|ImXgjDAc;fY8{iiqL2Q zZ2+M$@M9hiZ(3y@)QE@sa27a%_;14yeGKC^;{&49f3Xgx|2!OA|2fSIO@cpHN1oV< zbD4HoUn6%YG58mxO!gGHX2$Np$S~_@G5DE5v7szoV@=xM`;n{*N!E)bE0Y^p2gqFl z{NuuZWcb&t(MoNTSUa=KJa7fLk zH2>{*OS3GloMdSMrUNx~);cN&1g?jt4tTN!Mx)^do(2UjZs`sbV-8M}l>;bGxY9;B z!j&0m^9F1sa1GIBaiaQ*64eh&RG*nn7h)M_i{`Id!)Z0@AJ4k}e@CiY;IAV|g^zvK zmsGdtq?(e+^!dLd)iIn@NB?g~wZI@%kw|r*fw}VxdQ2tMWvxh?#5vJ^TBS!Yq$`}8 z_))fcJPS+560ZW(URb4YaqMRy~IS*<2ic?Dq*KBew&MZf!_v5Z{nxm zX;a`FW&+*Bp9AZfKO02XYt2~XCA*W{x*wWP^9RpN{t~!87C74(^4lw&p}=tXI|pAR zna!950`gJH>t-E3wne?=7*1VWGEo?GE3;^#{V0pKdW*BH31`pM`0g0Mwn=Ygktprj z8Xk<_Tw=>Pc(7)Y1#j{j&vxznI6SvN+jvP^xN-z0$@o-=PZROU9{Usk4lgXg!cPC) zuJA$&wc$Sxe=2C*UxS;)qB|Nk$5xv7mQ2NwJ;S?$A7v$4{T<1&&}3(20Ud?cn==~2 zrWW9Vb39mrF^LNF!<6&IO1ucx4eZAxIXW85F1DLmm4c_T<_~Zw^{3*)Tn=@14iP?$(~b-FU#e))l_Pf**!ZUs`&2 zZ_w6(gLUNH;gR6}tgu<{3~pklc1B#;g`G}z29))cUExXg*#8LpO7R;c$JY7R;@wW; z!;bJIi(XL>J`+%SMLYLvT{IL>6JR7>iwbQW zi|jAr%JFE>KMVfGYvRgVPJ_Tp(()yHHI3iY8OV{e^-#d#c6`>bt<#JWlPf&ef_?NV z_hKyYF?JN)^U&L7@JA>#Z&m+!JH}C4Z}Vu|0w2iCm#zNy?MPncz&H9&9|jjK0qpWA;UB^(EyVYLzljymaHR!9pCKP9 zp@R<3*kvxK3;GF|KBr$cZ|;;z$h)>v8biJt5jiXs83ByK5(srtVW)(lj)YFhMM#%q z44l*{dCl}z)l5IrsT%I{RRe!@osyqtZ{$DqbQ42(X*2)9t&z^9D|A^E68K%1OJAXM zWN_q6vGf^%$7zC3&+;Gcp1kxB|4}K|_C)@-llk}XpZz#-mUi)%2>&5_Pk3oBf8)nx zmge!F0{&CTe~S1|3I8eMKZyMBQknj}mnSvypJx6O;y)|+&(r(|Pa}0MeZj=LoaW!q zKi)V7x9*^L-gcRl%gX5M_3OUBT*)14&P&9%o=b6^v5cd`b%Pd`*<2eHo|{Jp+KrO0 z=q1lFN-_r)#xhlBD${i4GLz3#Mm}?y31=!Z^vq>)&s1jr>t`%8=uBl^I&+!x&s3(d zUl}tmQ-baMkoT#6UmE&?&>@H#^uhjyEh9o?;thWsZgX_(z_W9baK&0Sc0^4VTHcUgNb5 z^sw*gG{E~P8PuZ=ugoz)U9Ql*BQ>lLlJpwsDYd$L_3GYMAJMDJr;E{g@rWDEX7)a0 z*RaZdMaJqy&hqF78s2w>nnv<_^)eP1+^;|f)GcJp`{6$`=H-{I=>_sZ1g8S(t9tIU zbgTyki{H#IuzhR(vm1LD&c(-NJ%b5`H`Z~6V3Jj5%@q5x0STM9D; zR1W>5XyDMow_bLPc8wO1h;UDykFCe(Uc)gw??lD>thS=LTnprQG`z>%g7+4EU3!EZ zC0{~GXrvP@ur?f8z)I6AfR=;v&QA>R_E$Ml^7JW?pf++g{H~#$f)mB=rt^=1vhv#t z#1>q(Si=aVDyy_R`jt&xZqy)`N z)yoe_lqbtAR)Q7qqfOtZo%uQM)x=mH;74|7x=ZZgLd+gLXzN?zi&rw2fEEffwXo_8 z`PswvGqlip<`(Qm3yA|q)q3W^DLH}M7CeFEb}OGz+xU#~Z9#G)V!$g?In6zoq`3(| za}#KS&7GQ{xmhU_EO|ddT4-JLO)K38d=#b@%mNi?t?YcU1(h5MLZ6VY#)~V*-r!Yc zn|zMX<`qm*hT2hB`_;?52jUcEG$b7Iu=jXa7_GCSdF%~Bpo@otS0-q3uy?ZfILRQ& zLcqf*!rPB1mdo3!@8wjyffn>(hwDO3Xa<7!kE8er;>!C{OOD|scd6$jOMb;m0&hkL zHelgEC-EV`YH8R4;(ogf^BBEf&rw2-zM;lmwMyo z(vsxeo~iNch;yZRTUYb@2|cX$+rI-!fzce@;bQw?n6+*ms5fjJe8VFU%SnAL%Mx2w z&~$YXzDJkJ%6#bWci7*t*AoZZtzPo?M1Q{^4t5$i*j0GQ7BF5a1Uh7;Qb%?rZO&nU zp7(IJj~R{~2bAsqn_dN;(ZDKBbhwJOj9FhlLsqt&4uj$`!WZbbMZbqhB7Bhjri@>P z1Enq6_PA9&)`5q&^|&3hHOxN59gMPh65cmYSG~_i1~sNY@APQi>37tt{+8(UXGW*} z)M?oP6*NRqbVo542Kwg5aiBZV%@`)eX3nm2H|isuOX~x)jF-peQRG)I4|0!J`&>Vn zJf~@~QLmVsN(aI9)oG5_>F#x0zbAS)!x_&ijFd&Px_-bx!+H1Z-*Msrb@*U8L)rj% zq%wiWZceq2xdAOjUgdt1*YWwhLO%aCspr1LaZeIH&cjIx#z5NRVJF9j{FmS?kebI9 z34w^LxOJ-7k2W~vku<3QU9{Ei7gMEzJu*9`lSPKSzti&;@Vr4DS_!_M!un$(|)~@UFyZjN{;YKV8Rz`7|e}k{DzE8ANXtL&VfdVgi8>(QrZVH zd`K|xef|_eD>eV8zos=$n11k*6n>Mb^@lUJZlFzUX(#0IL$T;;SmG}I)XS<0P$DSP zFJQQrbBsbC>%{5hw)?8n|9q48kp{32fXEwf8NC8c{SiQ*dG@W67SS# z-l=!gt$#_t_kB9~;PF{!Llgr&;f28wk7{9ACqGI-6 z`l15(7Y<)177lb$OWfiHlUWJUWKM8xJa{g382ucKY}?IFa?ZU;oj;KRi6vOKeil8r zzN+6LTrYdikiM!x*aUeCBuh_tj?EXIok!y3F;95mYEO7>mnVEj1Z~z+bhnn4@m!ek zk3yT&Cmbv6KX@^eYs5K64>#%bB7lBulJ1 zLkVccb;f3vow1pF?JnKQ%KIO`G7T-N{QQ~GaW6+lx@I!$`BVW4+PU{?6rh|-`wLJx z>v@n!uDrZN`d5G9>3Ufgo~qM?rwsOn6wY44{=wJ4w*^*|?75|e^N)OP?ISqJuo}VK{Gj+6>@;d7I^@6QR`?VGT*AZhIRBflgO$HmQRq zaOtQ9?i#gcv&}ENUJ<-kC(lRaTZ^Ml}_vCQJ(O(UjLnIqTkl% z=oW*0V#^W2AYQK4s`*R3tj&Xmf;V}K+vVcJcu7EC{}G$4MMp`%#WsdqXK8^0cz`=N z!_3)M5%~*viud`7H{m1$X~p8;qCoL(pEA09JPINeAchSGG&|g^6A;O^6mKwhyV=&? zxG=8leqc7m8(gIyyNW;l4Lek+SWKng7JvJj(zfEZTFJ3~k+s&*(S%;fUrV^dBRRek zy?7$t;_ztg&QTjY+Q!O|>jDki4m{~K?iDLb+?-KFvIe4AM)!g%sMp=-I8z+W*k9}{ zo(K0h-W7unWN{~(;!PeUXSjUyU2pNu#QoAH#ExqaaNdpln)?I1Ekt!F71hNuJM6)G zbvix8hdsq{-Ts?%t++Bv*4nnmMnys647o;Wff%9qThtzk_jv)a&@T@=EEgXIr1pi^ zhMrRcJX*vYtpu7V(0)_gwxf4c7a_%K(*pa_J3k_|^H|o@x4#Q$yQ7`@J9N0`=$>SM z$ssxwVC?iDE%1fWY5x^I^b5Q`0Xt%JI7pbIDiK9e$aS6;h*NILn2Sddi}xD+L4U-- z9*lbmSplH0jd}@u{{z@Ualg^~H{7pFDE<45$bf3B}@-D&slouPgd zIEF&UGj}-2FM|gP#9I%FMf(qndDiQjEP{B&7`u4&{&^QeLheP70KfV9_yOTNEZ+9< zVX-;}Ip!b6B1acej_cy^i^Yaxv3KF6*2w>PBEMMlo>=rYB;~(OrEY`Qjraq9n-7b3 zUGRIJyj3h3V?Qj;+zTb&h2IO7@$?Jk(QozpVi7X`0_cWw#%qUbCO#-A$% zkDLA0;BnjBEY{iD9k40V$k;{MXiR_2ZX3Y26JN2SlzT;sy_r8eWv{W4foB%QhwdD} zg~k$8`f({&8clL>Cuy(ZNZfrd5=aTA(4m`P^~5vT>QFisN}DNOJX+J~F`x9BPoN9b z=F&*)(E%trnZ(w0G*va!x?JoFj3>Ds)J}}R{(S`h*^d8oabl*BuVk0K><_yCz;@!| z4`Mdg_YvG@3eWt$OA4N}HoQ*YUriPayx4~YA^ZKzi=o#x`pHEUO_X5K2Q(>+J(N@QRHb)Ka#{akk>lVN6KI|1o0ewUk3_R=-t8>3=gcNKpk| zz49RskI6dI>PK>rw06za>Xbl&1au#)&|FtKC9w#DPddp}I5qyLsaE{@2wur`=&&T- zg>KseAa5i-1paLYp4FkQfvE({sYAb_0r*pIpbI_72e`zmchAcP#m6NU?FQoa1Um}w ziYcUjaoI(E$i*GHF+nb)(KVqT#kl^D>E&-2nMo|-;{gwRgv25~WMYvqj0Q!mNTsLk zWBbw5Jz4tE^jLKkciL_sqL4^}fhK+Ia|*UBD-9;EvJhC&E}1|{?*BSriO&vs?M0!S zbGdnrGcGg7=A&NoVZ8jh9RT>qIN-I@M3o5~Zsbo$4Ry4?3lW_S+4Gtkna5InD-KnGjp@J(`fF`!|wO^rQ{ z@tR@e0ECaIw-$9IJN+X0c)`wr!-`JPFU@fgCqfQZD?obnag%)$Z z9>NE{{K-tgH68DdzuitA0J!FJjb_#zeeRFv=SgqD)y`eo0~(E|crWQBU*bu7wh_4; zd1_-A0UpNePA}^)=3A!onc~W!cqd|8&zJP^;^-*jAb0b}unPACa^&cj<|ErH3N7cy zZTMVavz+hI+HlY3Ma1saAOHhCuoB3xH-Q-;Q=&3n0hZYLdz)JV1M5N-DQ3AXut`bc;dI-PO&^H(BstCJ=mPxEjDqcRSkn)^Ic|dh^b>hcr zj2=`GZW>yK_txTRnm_3gObI5hev6BX?ZQV22@1bxX!9X|*vZ#}@ywM|hQ2eyE0{N@ zy0zPXHn}3Vn?ZXvYw!dj7IJoT%TO#!x#VCQOe~&&vDJW48zmsW1o9eY=gtx>L+SX< z%bOG_8%J6;yM{J`@Qhy&KCyKH-OKQtJ!Im}TPx`IH9LAi1W(w+Wy3H*d5yXQGaWfa z9twase}YY8s{w|6JSM4&-8&ZKst3nbC*$kFD*Guvbn9VPG5=UnG7H`8Jr}dvL8jb? z0X~%co#QZIZaZrkhQq^_55tl0L3h074S2i-dSG5Y3`YXqHk+g7mSH$_cmrZ>=g88ZI5Ji>dmg^8ZZt>+E(5TD29cHK>6?8Ej8s1~(>{!Hu9$V@S)t6Zo{~A#woG z<`Ztmdt91yAx?46n{a}eid^PH+6L(jT5Ax)6^;i-SBuLIP*`r<<^ozr83UL`;@YMn zvGsZS&WV)ldM3_Y$&rUGC*FYEG-srcj3}I81I0PxmgK3Wm+W;KDO^u;UNdE#&THKD zF7_{SU}CL&CcDsIvkifPZv3*Btj71`p>qJP783Nl^a$Q9TH?aHi7;OkE^YD|4i|L% zkSgW|tbs1}jGenDy-A$}>N-^3VB;q`C3XyE#c5?$HgF4Nk_le6dBQez>oS3d0|Z_* zl+KRH<=6W4c!8JUsovme+g!g(8T~#HgX5I{ekl7P+ob+t8TOVggd40>Pm@_!>?>U; zs&=t$ZVaB<Rii?T(az`+do#5J8zzfW-{8uOs=h*P3v+HE$1jBaatC-^uylqYL>ii;E!z)+w zO9CN2fXoN^2C0Xe5i9rA!2q!j)=eY!x*5k>bbYAqqK~~i!YO)0qSrIUzDr7DEoeeBq9d!&ghBEdui{)V(+Dg)PUXqiW*yJS!%kH z!&kv(j;@<%o_=Ww+lE$L?2Zfi<6_-XaDOjeC0TZq>*`Ld@Dtw*^mUi_7w~lo;t4u=RH(JT&>6I%Co2AoJBDb9woEVlGdc zl837L`fHN?-d)-)vv=KWhnww{@ZTs(On2k@2@6-iKEBMm)Eu~AJh0uR@XySp7(Ze9 z(kxG~OOwb!K0dmlxoN3c3tWdQ-AJ?oEOj}y2lDX{=Tei)u_rKy9;4XN`G9JwM5XIX$%zI?k?kQd`J2o_|>>mk|48Iu5DCI&M=ZtCmc0T0J zWt=;Aaqj%;8p9m+EREOi$n_Jt9QLiim}WDcb+eD;F!XLvn7u%((~FlWgC+)9_QT&E z`0Ikd?P1?)_<05XV4CCn^1<`?e1IAsV8#dfl@C-LUrE?k7WPetCs1R662iVl zIjl63xTS>n58Yv){31d>zE^N50A217E*!8L-1&5;J3{`i?)B*Ws($tlpvXlLFAHoB zYG(hy;2T(v;6InH``8C8(8Ghbi;r*3M$h(ol++?Li~ok6uRs-7Q|xRd_%v@b;$~au zI)q)E=)Wb;vA}j{CLBa`F!~prBBn!?OBc!lbYb4mPD%zg%*T?G{^U7mFVkaqr;}`e#<<YVGZ4}`zo(tmy zd9wmTgNybE{*)43SYnaN(_Z0eWAR%mCg&GAfnT;YoPp zsXyyEb7=vT*eO07%$uxNU3Y~bglX*2m7*2M&{h6WnSYToC0qSPBW;Ca+Yd3{SZHRc z(M&XEllXneI9MTI{=Tsx*#tk%kemfSu8?eoA2}pj#FcJ3_~{Hyu)=dyXu<%s_c?Ce zscMbLqKk|^6w7Fvdes#q)bx7UA|7vZDa}jV06yv~K1%kMbGajv%#QO&ty;GnJT_&1 z6(*-Ani{V5G0XMTe0dN#vVX8wndDSg?ZIVUt=Wxt0c}9*5ym-sE`BbbOO-ee^?6l6 z^J+Pf(}dCp%27qB`jdx^=>*Ai(cKn-4t5;=AAg|?nvi3C!>3-w`q15ov;4d02Pxse zE}SF;r+Al-8yl<9_*CaDJ_7ysvH^x8S8rPX z7bG12Qu<%*Q*xmHmCgiZlz5nB2>S&sPdK$b%ru4N4BMt~2 z<8i!0LZY~AA&N+6Koo%Ah{Qh}h<`pznA- zjy_UBe6T?aI6r_pQ@~!7AO~EIi_1fxDm=6uhvX`B$noIukj!#!Qa`y2vy8q8 z1B33S=d1BdJQ_Ve#2EkWmysN2Q`cU`muU58FQDChQ5{8az+%th7dl733FC?4?H~%3 zLaQoS?tRb7?9Qjc#-=#roNV27xo9kOCAM5GeuCA{z0q-mWkbPpzp8ZCBI z6>a6nhf@5oUcZ|$;q$3!K^<}C(oZ>3}Z{9WoZxQD^Es?*OB=!}1f+*wI?)5+n51syJjP2e72#<><=7eFh47NEdC{p5cy zkN4_C@+u_q!kZxhlu~#qSEl5tWh1%EPClJpDwD&FHab#M0NsyYE0cjkp<4oAEm!|4 zqPTIvi~nU7NT~<*x9#Vg{S~QOdTCFFU()CV2ovp>q_tng+b=KoPf%_()6RhUGZ-c> z8}2DzX!92)`EMm4sf>P@Z1aRC*<{DIfJy*1+IY$5p(GO0$Xsrqr%2p9SS9ESX(%Cl z$>FI54FeHp9hN+yy~8!cW++bNnWUfk!icJJ@c8L@NJ;It0wqn}29(4}2LtdQk%7zx zBh{(vabhoaw?zDRLXo_=x6&OeGJBvv2G%N8d`VPw1&%qnIeOVeGDvq&cmw)i{rN^7 zQu)ptfsV_-Je^Zu481etFSbz#r}zk9zky+L_$LKa-vF82hKJ2y@;F1KdVnW#Yth7C zX1X2#{U>0=a^JrNdQ*?R>GNNotJ6t2gEDer^n4(jlFldxH;Hoa#OZlJeDB7u11tcE zcgZ_qGF=6T|H(%`k#~FvLiW6K<<54_+S=vfsMishZ<(l!Fv-d!6JQY-$rM=6wE4N} zOCu6ysj+xl5(#?5y!3e0L}r)aKr7bEpEe7+0GmH)g+YU!BS3?A*KiYF`}3TggiF9m zBkszCXi5ImKZ2$&BJfs3AZWcl)TOqn!^@Ew;Wr?VDK>S}AZ%&^k0TG_@~lE{_oB#vHEtxFGfn`LA;Jbk7Qu5yNA;R3tXQNvkDLG)|u;yw82FMqYDok0giG!aEMP_aE=p?m!L< zdfp5e^f{ZdFk_LP%_XjjitF0&f}*ASP3W*Z2t!K;yG~15#0}EyFVnAV5!Y>8`Vr;J z*1Ch;r?qHncWNH2Z}lxRX3UU|s(Nq$#d5RDVN`@|K^AE5hjJzVqs-7~BKJm#MWeBi z=8fdlW$yYxXp-%TFDDwr(AtSMi@P%PTQYYUwft|(p9w6EZ{8gj>vp5>&Cys24vM=f z6pQIny>u5;s6||6XyqfLm2L^Dl(eY3Z(nJ=+4@>nST2Nrcm$X}rv;KiM!4GMWyeYn zN^h0~K#e^mE7$$uCJP2pd5v7xjr)PJ(Z~qhmuK%mLR)A<4yBSD;zdW;TS;R3^g5Vy zP<9)})hLt1RlCGh{FX1Zo26tyAgk48ZZcUk@u>(D5?gwJ zIyCf1s0g`C76Tr|r$N=3>%~g(Jjd)VXo1{A{(ZdwaFgGt+yELF)9fuR5vT=#gNhS% z;fYQ27OE~_2~F=0R%uU51VF$t=}`15iD41yL7W<*ZEC#8s3!L2X?}|#zG&?ZAUU!1 zg_Jb3hufhGPqhUPX3+(sID(*~{j}jUKY7`x-!_dN$oyzl>J?i*7%x^_^^uS5ahG<3 z!XvJF7br9422?2HYRe7(LQnAc0RI?|xbAHa(Ps_}rWx|g=@vcauCk%!9%Z5h172!T z-t9_IX(G_y9Ndf#9v|5BFW>AP679d!`ODz30e(=rB2e9CUggjzREfS2Bs9(GfrVkJbsT11rQWXafdle0<0|#0vE;`3E!v7?}?B zD${y>vv+xCZ*;t~!~<1sfxq>*d*W3rUA{RH(PwV+nmdcXbSX0o|1;0*!B}N!k5rZi zXu?fN@#SvrFN#>g*bYAw@RFn&ev%HC6))Q>uIj?jb9FFU5qzi*TkL4gwIP3f^8PG7 zg{yGP={7p_CFBQIN^n{i;g)eB&g}v>`^d$5)BS6Fvx|LfuFa!7VgW!8vR-uS@v`lb zB55A;SMX+$*f;UBlIMd~0SJ=#*340s;0aS;P%W${wa8uS5#m)qSKHxd5BzmG#@fYJ zRP@*h+=GAe1k%L1Hb;l3;9e$RGcr-}mSMwNJm#$x;#;mE7DsQug^Uc{$SrnBKEo>l8I%|z>;i|vUIAZYd^3Iexnlg%5jJQmKg@LHOnmOTL{LA9u$ zR%@#z!lt}DpJR{zBdGnDwds6}xn5U`&aAbPxf|Pok%6T6VERHWb|nkX%(Lhn5tm!> zx>1y2+zVv8H!zPrwd&U8AhQpnDL@~DLgXw( zDBhRIe22@Qxbgug3}k_B?9gwdqsM}3)||+-+~MCGsWnIO>pFmEo6@T#gt@Vh*J?FK+NOb;%hWjQJT>hPEGn?M)kaXVKbR#1qi zlQZ4NN)L{U%V72l2$$PV4^2>BTq8 zsTJ^OwsJ5+(cA&$QFz#{?pZ>68iP=!!ZC~6@CkV=#@|WrMFx2AG(tak?EeWo2_#Hz z){%g(olYB34!(3a^Z1cInejuc>OzzLiC64O*AHbL6(RT3l0=1sS|~hF4$C~js1%J8 znc;bB$q&Lq+u{h!Swb2x8T(fzmqP{&D}*IR>)@A(E1h{{KEcWYkqA5i+E#|0k0+LMz z(WUoKN7`9BexT5ULyQsVH%!#;KD4Uf0f$tC@L7?&sNEuH`A6sL3C1#aDa)-aF+-?Z0YCjx`WsVMd+o*Ds(rp3PcVvH|rF>x!(D}{(u zE&qvmW;EE3_bS$5%gn-Bi*C5Z?KM1G--k zxn#FcNrdug-AGJZzHtmj5$tt}kNqMw`R!MdFEChAbE2S8k@2y(3-|nY^sXTQ^|$>J zg*fvv>u-OF`rYCe_HhP|vHT<;7~R)V~}uvR0)eU{*Ow4U@dkV<{g_HW%^jHx0z>D^om{)CSZoVOOmCN6(bBcF5o!}jG}?2WJ0nT z%&INqUkZ(^6PuC=^6VBGHdsS$z$)2OoEE~ym3~k0u@2L5&JmBm3!~=vy!~_1jk$Aw5 z1>}xrgZu?);}9sLn#c>(pUB13AN(-~hOR-NRQGcrG~*tYI_dX`ua-bIvEDdc+qIl? z>(b3?9iEq1x*pkjdj@`w>j$iVP9cyLza+7c6q5TMuG`hgTX58eF3YrjxQzH9Y1R3M z;-U}2kkg-ss}Ma6zy&{kIk^`knxVS~>iA92xM-;ZE~E9&*?+-JLcR0=5eJ~RUeF(8 ziRFSN z>BQ2d#!(Q4{?`lsYXDh5roXVEQ34J9Yl|@>>K!Ci@ZH|4uj1N+%;l;8hB&>%l7vu8 z#-Tyc0atMlN7fAM1LJ58<3%Yje!n;g~u=MGaF_z7#W7!B}x#b^yx^)Zh z){I5TZe5YWoVGmLw_6KO_8H46bi16?Q`PSp>R5hLlc9dM0ar?>-)E?1LjMoUWvW4qSUV&} zZCW>rf(%)hnk|6{$m=!Ls2i{2XsBb&=t>yep9LizV%DBtSOijG&(OX9N6k;V&Y%rC zF*XoXwf>co_x^NK20-XiUiehS$M5}zd2Nm877PjPNqY(n{kUm{J%TivKrK(6x0jq_ zZedo-3r4RmXV#<7!%LSbZ2jta-1W=d20!YJoC0UxVHVVf_t2oNdfwREeCS&Ap~$~$ zu8}YkYK{jD>xbN)R23C#!9tw?c*tPfeB`}SuRo-FXhTCEKbp|JGw}QL&{Nn^=vcLh z-`Jx*9H)Na9Q+F|(oeol?>Xv*I8A}4FtPhf0d&36A7eAtw|k(A6Jm%Zs|~w*2cc%s z5cOhEcvOX#n~CMV`53=64ORE-r-#8XU$6WXnNH4CKm8DLeEmA^pYkGCKoPQ2t1%x; zOzWTi2QQ`X(C%(iP3x#1Go)sK7@@G)SZ&m&9Esp)h+l(**4%MF}wmyj<%zKT?9q;nR=lKPR z#iuLF0P`Q0b5be6%1cP82ce7QzO@2X-a3xCQ>rkDrBrnPH5&Rc*B%s5z0ubz@`L$0eRu_a|$qHwEQ`cjI_%w z1H;lktM{FvXwdvC)!nYM_LNLD!xEXQO#wI0dlO~iXodMYj2}ZvB;=ez@nPJ7`3Th6 zsh_m`J&;Jf;^3S41yCssZlkpzU^CWH4*SJW-!tL_TY2=O7>h=LCJrrApT8$4AY?xIDHVzfU z*6#&fFUE2xBa6W`dJ^^?RONAaCBovX)I0)i6amNA3A&Ams(dY*7s1rnSUtvt6U8_> z*J>uS1)2}A%9R5{wv_sfbiDNqgEm%kS4umt0+7q2TVgXly%|i2y<;_+;YL7bY>Z~` z^{^f|kxC8IOJPdv4^S#*wiw?W*&G+E@y2@--%m==!n_L*qcyr?Ai|{%&*lPYO#;ow zsJHY|h4hzVLR(JRNRBcvLHdgR!K>q-w1>$SE&qjD7}=+}ha=Zurg0h1n*o{PTTabz ze+C3}@nS~bS10;Dd;sq|ro{e);TAkkrVe8yZ5R()d2URN1t529ZlU-@CcO^P-yABej#6C6?SApDvwS4s+;77fW`ma*wDXCrBp4O%F z_41e+`=hxZvA>-d$Pz2>AQ~DIiNmdD>NTmjxEB%5F*>hs5nJ!PN$5Ak8}22B=Y>9a zIU5DJ_bPSe@>KZuq``l?g@e3@`kzJp_X;=rqi|)gQj5Cu@ z>7=_uW*fzoEfz#m$dr+;)93!71SnH=P%wp*i`b(YcWmIyBa(&r@i}(h=@dTDo2Wt5 zYrvG)uQ6jNG0vst6rR|oW74oQCmPX>wDF;sLi)en?9+NK?pA}M%Z!v)gM)5;B6XZ_ zJxPvJLl&V>d1(Ph~*yy)c({*fzpVQNtu*e}JjT;KqmtnZ&&BJkLDQwf0Z1Zq``Apy3?7Lq_n|?()W3X{0jW+r4jW1a?95);4{>)hm!2t1)-%TXQP>iw#k# zgQp_Un!iq7sy}Ml694VS2h+SMh75&cS8gp|Xc6YZU|CBR@^cy0@x0U=-0Y@HZ(4** zxob}o(RQh0dU=!25+I@>I?A01eoNJqb5UfTm`Fj}T|C#2QMf73*m5kBmp0KM+9mS` z8F7RN^K}Bpd|hJgCCp#_U@GRl9P_u&F);t^$7z`NBIfai)qa@wa?BUbAj_76Y14J(k@S~o}0eZpQ@kyx^??m2HC8TIo z)ISoKI-FX{Ov+2lB<==bBQuF^tUHswjO%DZ7)am0PlUnZf}Hx^apIH-D_LKE7~Fgr zHyQPez~x4Vaf_uY;emlRx4(xhK=0Vi!uW+}$X42I*jrLfa<0t$nI@8cT!Npoc#87} zIv>+{RMS=$s_^!SBDcjR7j$nwW_Sjp(H zhv2?Qf68haq(9jgV_%-q!Kc1FrFV?+N1XMvS44d&sY~t4EZ!GZXY}P~@2B;p9{X}? zNrt}6;(eLQ$@^N~m!0=RUoPZ*X-xK|=_vK3F=kCs^T;e{ux;HDM+oWqZHdl!N_Yhe zG1vx34G#YLAjRG=)cM7i^3+=(6~iMty)3ep0up?8ip(}7%#T60Gbg+~lK|^dC?KuI zoIoOUfPV)vkgX>ZrHmN!{tM3tVC;6FMDZ<14)$Id7_IAIAjF0F(-{lKFVRaCvbSO$_PGH&~MAx+(q_;r# zZuI9SU#bH}wmgH}@Wm!1iS++{m3e`QMwJ2Q8Ed&Lop8>C($b#QsK6Y3jjD!}u?A&4 zn?Tm!?~yVroHCwGP{wP=$uNHw2SzPHX(T@1DE?fc_~!4hxYram^8KPHNs2jrKIh3Hk=}TQuy@6V^#{R$)u>-IImo->p3Qys*XVYm9x;+-Y*EJLx zPl3_t-DhoBe*U>AHi<9u8qJV`+pF;l6BSwvVm1gakQM)dDe+>$Pm?d!B}PU2Z6MiS znk3uYjLabR)0EEaw?L7b5^uPvG&k{gDsqWbw5B8$McFa`C5rR#Au zOWTG@xzCsF^$m{rLG#&oq%GTD^h8!mBxD&PwtRv`DPEyJ8@>cSkLP$;dpqb*Lnt^C z%kl(O+q}y>YqZn!-(s)1%geTVg5PSs(jA^Pf{FfH>TBKM@Ad>EHnD|4oqF{x$?6+h zJ`LH2_yhXu19DW&qg?)b^rTyOj%oVqgk%nW_J&T-xKo!=LUW(QN-9jC?l)vc$iE{uMTyCx?f~;i)$GqhqdeFj|No=6(TP!Y5n9 zK+F=1+OR~#21%xd?9dRXCw>@P*qq_NH2llOJH%zbH{n^9UR%T62*veBq9*^~CoF?7 zU^@o*J`&CHi?s|Af@)T6*o3C-BT`4iNUZ?I z0eNW*bF6j}esXwwUa@^3{7toi7&#~plM3L~lZR;-8Dvl)rh&R1bz=H{Ojj|T1EzIh z>LE<+4gA%!RK*rNOMCH03?h(+nse+zY|Uu`w@?4!Z-vL))pvkot=kwQ8Xy^uS|kUF z1_&>DOAL}RKvl^B3dU@RQ$n06IY8NbfP|DL{=@Nc4eG@nAA*{3fC{`wxsVEo8_JuJ zY~JvYz&kWNbG1JGrSUnWY4iE`z*sb=4ig`rXv+9__4W|Iy@=mKn5JSH4uVI;wEdX2 z2h+9#Tr@&Bd{gr`EM*Jw4Db|jmx8s!EJB1!$LRE^ z<=+P|Q6enrTK*J-Fnzx`%~cH}U*yrQigo=%iJeM}TLDW-;Q-W&b3jbMC-stJ)wuVA=VhDEaWrzGp0Hflo*)i-uy_%>Aw6)D!xIlpUz8^34sxOg5;}{8w7qijp~9Y za-^{F10e+Ec zmN@#B4}HJSaP30T*lE(00tEe~c~g_;!FemQ`?kWpf@Y>Pl(cG{WmvU1RmA?9)fWPb z|5n|N!sPe$1#YbV$?U%tT7LDmWM8eBq1g3Z>d`zM@L*(&Zf=G-tyX>~r1@c9cxGr% zA`i0;xR(>k>Dd;6@1xc5tr)}PP0z_gMfj4JcK{j#lNrg3 z7aKFo8%&+&9|3W1aYM`e2)Q9FgjXS=eMhW_z;~_ ztPdtWGW{%q;vG_w$hCmy@}yKzV$4zaeEWw6<0i2HFUj?#s7z#Ha@>SGTY#0B$r7I(50U)IABRwtNsrbQzE_>&y&YBldT-*7P4 z_7K{lF+A>m{(;V>&#*qp|HlhdikyY#l{2nTFU>Jls6Wohv_fSN4Kr+GbI*(PCMyPJ zT6E9UA3kPJR>Jy$_3Jx#eLJKiYPTCpATRiOWhUgEslBBKkYW=D2n^Q(CL}gkh|LEs z!zJMreMune&r?ZTzxtD-nijj+M)D0EzxH3kH|zt$6Z!aDQm-FKKBJdn=5g;e>8s=0 zO?-8Hwux59pPZdo9aqjsT^)PKB`E)z8OG{3zcY1pyt65}I?ia~OwZSZtD|`qt&VlU zah6&7>Ui=lS{>{7>iD;MS{>W?>i9~^iuOXv>R4y2j?e1DO#UUOc zvvFst4mvlmy8n9j&R2aF$Tx3IE*jgX^)K*TN&&#^CUU(4Xb%DI9B zusohX6)g-HAb?~fS@#o`1wXm?RV{6#RX#9S&sW4xGR&Wr+Tta=#eYmSTI_94wis(Q z7S5Ew1c4Fhqi6~Y)*U#rlFO{K5SH>^;`VAk)UC@rFt5Z@P-EjI7<;?9Qfd`r=z}$XK1o`a&DSNZ z3+9ugb$T8zR&B@{HOUrm|9#&0looM6nA#Ip<}SYt3)1R!b0MviUUQoVP>u&Iy)1&e z666ukr9QEX#GPAjvj~YJAvN5QFCh}u?$YTvFj{X=-=WrpwrYLd(uFoWabBkjW!3sd zwOnWrOu&_R(nUp7pJ*a%osv2c7@r7#nQTmiuOq2bFHtg^Pq9I?wH+(b9T)&-WrBa0 z4g(j7jOYh(uU_1`JYeB-@SL=!pW#hkm1x@Er|D`Q-oWY&Bt{4W5uBU+#@ibRLND(1 z^VY66T6<`6YHQE))*?QmwE_KGLvlFkC&Bw`zae;k?$>3#q~HyY)>VE3D3;sqPYB-C zse(7=dtT31BQIT#5=#3S?P1kP0We_{O6cT4+=ZEUd73C&hx4X>?%C=acc-jLztS78 zCuz1WA)MBbix8?^GqZKmhOXlo1|}4~T_pFi>D)qCqZS@Xb*K^i*K>&sx3%Vu;zA|u z)9^{iqhFwZ0?{^1g3=yU*=hJ(=<#RLjDTF$d!QVI#H26T`9dOi%gYo?G0py$S{~$} znz_2{RXvx>UiP^pdwp+9EH^iLQ%S)_PW<_=Pclg1#J^Hyua6p%ve(`Q&gFJASOk6| zG+>R118Al;n($~ABD(J~T0es?qn8i_erLj9iVMN%%nQNupQS7WU(PZXg4iF)UN~-d zEz;uysT7hpnJft0@uLy#j)25^I#sOYKUYg4+!$!|?i3MW#>D=j*A*$P$F8<=akyS> zJ1c?0&NLK`;wWsGXrOTQo9VNuK7G0F7yhRz8UClLU-+M@MEIYj<*BWf@K#THj8-dB zT4mNxr&;)hrr3H_%4tqrH-&N8J&lhG8^D9CA4sg+!NxoR#Il6SiK`~_j9B^+!X?k{ zhE{(ioB4%yZssgN?SoG4RQZ@Q&l}c-$TGb@MO>V-Y&39QUX^js|M5wRSa$ahHa|=@ z3qRPz_$e8inDR-g8OD%ONat2urji71-ng0L<`L`v0ymFN_`kr-`@W2T|LWua7&j-z z{~O$V>CMBoI=LsI2}9}*)A)26`#oFL~+FbMM1HGNl4#5RaxATQi8)gtI(0iEaE zD(I$cFUWwgwfd5ZFk}Tp&R~tSRUiB+?s&pcdPrug3Ef~ zAxnb7jAgybSk|lhF6*<5)=qm;TU)_fi@A-~uI}F&F6)Jf#*zcFaZ1{Ne74ybkT+s@ zn~q@?6lj82pP7W8t}kQhi#}hP(I>){@U_Jd z?`SK*spRDL2kiPjIkoG1c-Oyj8C@T<>jQoK6JY&rW$Nl0oReH# z7tYaj2>9iz{oU74_&Ah2#wVBWN#j!+IKUe?QfV|Wc4hjI*BEOL@q@B{Yfo8n?J4WG z_LL>o9&2f8tKafgn-i^eyq?}_Sz_YW@rhe!Ox!Y}xujw1y^^G1tJ<)~g;K+z6(9-< z@P>vk{(=l)M>i-sWnmLn4n*>^;oS>BN;XHAACG=!$2ZV^>fv_X7RIbQy~b{W9?uE+ z1c#ybYCyDl?H2;yY5}cK6I*UF@w2t3#g@iXS~ellro_VWoD+7iPu1; zos*IUZp~1jIJE#;sv1%XT$Z80@qNhxFw!%Tpkp}}631rpNpJmo9p7rNisvTzP-3q` zYMx+c8e;2P>8t+izRPX_(4(9|O=am*B}b3%XYz4>kmx+kRB`OjR@{p0&r zH22-KVW<%j&}Wu$c6)UB@8tiNdV99JKagAZ{x5o4?&@Dr>)tc;7AQdwTi-}_M(+TI z(}!MvBJ*DV@&xbo&(nMD%hc<#v|bxGJX!ydVKl$mlhVIy()x!*zRoaiZ|v#c6IurK zQ-ew1?)y)MM1L#fC-eH@@`4Nyl&1piNpIu_s`_h&@%?Id23{}-D2y}OuSXFhotaes zHzyn%tk+H;V}1#;1kHawg289`{x025lFR@k6O`%uC+Ivn1`3SfGQqkDsjJk2Y+9w> z9c!#og)gVc1W;(Kx_oK|nE*?IOz`Yjk_n^|R6*3Ta)VT;gXMh!B~sqqtQdPniZTFN7_8UHKYjNDZ-wQ(AJ0@erA5f%6=B>OFDUN=% zPCAH8;-+;`5gt6IsZ|e+MY+)-Es3mL@lN!+x|^?bGGFOreWlYQVi^aPAi-FtfD0{W zLZ8H7uXWLav=ms*s4)hOq4P6FtxD7U(AEJhZM2=K7)@wdHcN$PE?g2@W`M$Zjz_Pp zz~Im_9dI?6fpJl&^vr5Bd+JCiHp= z?o85**kjvg$LlOfxB(CDSr=1Ooon<~3UnM?o?&=*?nt4AaVZ7#ZAYD~u=t(~3;t6((#;c2E-7I4-(|>t zU;pe0fl_S!i;%>f!H)GfSzMiU;x-0Fa3lbEEC#EPp`nx8Q-^lk<~z|enTS(eq9d$J z%m1X1!oyyW_@r-sOf96(PeH-BsJHF4*QuA_(fe%%peX$Ys`{4YYjZ-pD67mM|EI#2 ztQ|FuxW6B9-1EP{%FiqMxBB_EjICn)x!8rL3~_*hZi0MQk(@mn#`Lf3H>s7SP0sZB zx%5CU*EYH;627ndDdi~&f`HL9ki1nJ==7Pmy%F&s*jSjiXsGc9;zu;9|Zkxs9A zNz>H7OyH4Dv7@$FF0L%tw~iL-6L}a_@fA(sdq4&;u5k7z#+)rF#Ax6=dmRp=e$!v+ zX0`JVZ;R!FsVXL8V4yA*cGUBRtw>odBGI%R2eYI&7@Yu>EenY3&~e z;9cWP&Ku>L{-EByImLyfTm86K)6&AJzM?~W9*4Gzpf#jQWR<48%Mh<4+yYrzA%Ao^Z`53t0<&k2qzgy*4)26bA8;scSGH5VRnpjx+WvL?n%B|H>u97p2Cc@8 zwb)4^8Hj;+K?(5!l;cZ=a>=hmo&y|L$$j<4#6J3L#mNSa-&ZLZBeE2Va*X zrc5L7M00E!{6h>iJw6(!1}X+u6W_8n-iLc;eyf`OP9j)pt^*{0b^Iqre2b($0rREY zLdWz=8mi!J8NOLp;8ruH%^wSC50`Vhv9U+`n>D0u96c6{R|EK5{amZ)%YqQcbvM9Nb8^N+H= z{YgN2C;=(td!pG>+=m1 z+x6wW$%{HDeepKwxR=)UJH2<|t7>>{@Qm;M#gF13+KUTiVk zm+1b4BC?Z!U|k%A3hdA$yReu-iWaGr8}!Sp^o&yxw|DIm1P7$?1HV*pGw<*@$<`^J zO%YPn@I+!)p^<3xwGR;7L!wA`kYFz3ni6sYpbfdRg?^j;Nqb2G9md`_FLTv-+`rVG z;6--gMRsQW(_(Urw2R6KeRYSP=01dbV8O9bko-SPNxtP_e#sklI4E#Tu1ooTJ$)Y< zh3?qZ1t&2Yg8pShzmk5mnLAB@LOshd+J4H3s?VN6y#BW8QDA@hBwvJjSN1vRgahwO2Bq+0=9c~*zN^DT+ob*!}im%RM>9du>GUV zfNjrj(_nKUY_3eO-N0dMB%tzdaA26 znhijg{Ym1oK8iGVsal@a6pst4o2pj-a+Hou+Dlx9TO`x(V%7bQ)L(xo7<>4* zUs`vJvyUg!IYSOdlR$DOc5Gra#_FRn z){t)aXza~IEz=XD@z>v^jRq9DNj-P$nW^P`PAw<+Xfz?U+|U7{D|rCXK`L%pBuBtT zT#M_(;8YWL;H=}P4Qf>T-xC=J8K;Nh2^$}-A?c=Le;P@R{A@T7p-^06H$-C@= z%GD3su|x4PZk@R1dsxT3nNIOuE*KnuGVb|4c{f;}>x|A6@9hPBf#4p@gN+DQ95G+$ z$6&h>9J)S%n|d8Lcv9qE=;pl~H?7yE;^rqDH_g`>xVipUX}Gx;$>EP>8F2Fxj+^n< z5pKSqpWGs-Ty1Y74me4NEg65#pMcG;!{*2RRIaolY&+7%t%1Y#=@9*@A}{4fpAzukr9_dWbiQ*w&bUwNZz)F`O1|>0e_~ zVV%oiEla@q)l+@LEjiTNZ^!`aTn_8$QiAml1afW-{HP0Q((nMmDG|7;jTpKz#zKkc zsdBmN~WWOk=Qb(Ps$>H z+8g3#>NTmjY2mmTQEK3(=NIYc67)7n^yPtpP#`l(8VJ9?9@ZLFq`_%H!0{)RjTThhDY2ob=r!fN$6}$Kkr9% zm`%xmMkb@CYQu3JMl5!1mVS#1f+{Zig((xV(FV_}QJsg$YCiG@kZ^!|nK%XibzHA8 zj^^rR^s|UZzmZv6O3(BF;qk$QF8-2qU{3T&eRwrjYAE7bH7GR7R(?_l8KxE}``?UP zIroOa>u<{D<`@YMd_ruYBqME{>m z>;G63`et5}q5rq({lAL(@8SKwb~yI`4ZZ)dCw0=SNseKPjy#)->t}sUH!SGF`=Pj? zdrbb%Yh*w9gT;iF@j*skxnCw=1wC?&n_8%Lxk&xvHbY9$k8snAj&W`+0zoeIz$gH{ zr4sk`M-D)vymhrpkHbnaJQ9~#z1o_U>b>Qc(&BdLtCx~;l(4aq*Fz^=s}fgm)s%Lt zv!Jf{#fAzfhpjGb)3Cz_Bj_8uqmqs+jUs5Qzs1d+#CbC7GnME=(Ey19EkdNz`d|h3 zwSWTAB8%bbW&M}_T(9MivYLgk^*zYPEdl4h#_w+&WTjzy@k%pb;CqW%2##A>L6%~k z@7sUkIfA$0!`gvHK$f@QEybDT-^hQ7)e2pH^|+!u!HX|wmeS!(WGs_)?rz8q%xMYk zuSM4-OIEr>QI;CR)|uo_G#;sTX#?9#pmi*`(xf|@%!%a5`e}EDH{6qIwe07aKihQ8 zYi@?m!6p;#C0A$ulw%4EG7c-oOEXlRBb)UD=kemaT4+z_xR2c)V&W)vg@ z{jiw$M<4$>YPL zuTz}x4Cb7SxJ!pRwJ%bJWHy~Pm*;fn8Tvg2u9D3()=%jJe6v%(4KR^Vgb6THy1Yh3 zxI4C-8q)G#&jR?npqbd{)4)`$S*c`2H9HG+GOA9AKAUurOQE7dlnh@LGVg!%C6cgk zW+JI>c;HL~QayiiM&bxukZIg?=_g*0X&7)lk6UB6>0u=PL*oAA2jB+cUYGf^LEO&@ zx-%a6qxAy`GS&DmPuTq~%G9TF-lu>ien)(IW?YQp;3wrA`3EOOl|gr}nqWp$#kAA< z#$G?+g74>~+KT%bhS3IY7nPq1hH)2LRdRoM37%v%*-U}Cm|O_SxZAq8B6SPQPQ0Q|l?Hks-#OO*KFWZx3WfFXD{yLzWa z60vbGNNkC6*=B}h#I94UlKxy4AH;V7leTLAqX}JyA6hE61uoQ&VbB(~aXCA7^P{Ig zqV(_rhPz)0HA}+sJ(s2m%hj|f=Wnqa!g6~sC1`+O-|(uUJI+H-8E^V_7w_9gbhBuG z65gB|A5$*g;bj{! z$C_BX^mwm0f0N8i6WP##vZF1q&a*ZdsxjAfYcEEG7p}I!}BoxS%l}o{L#{KB*37AQMkY8$0b=KvR1xq1bUu_LXbD1 zqId;PpWgIsB5xYj&*oTPmB6}hS>J70qDz47qxMG(WxVmU*-)*a#ROONkxH^a9 zYU(9~t5Nimd*Wii)!+YS;HoJriJXLa;AtTtitE-JgkHa%48@VRbk6`S${qLg9Q4i~ zK`tG}Cn!gd9?)oBR{TZ&B(~cBZ^vc(FnwG)hw*W#={GJlea59GF)o{)LbO`fUu34Z zN_iLq<3HQAn|e{|@Lb4;=fFkA@GM)>|6Y=>F3PZlaUma`e_TYv!{{gXyFwTq@g;o= zBlfdbl46UwcN&ec)sKi9YpN zC|7d&XEdUeDK3*K{ql^7zrfWsUF%HYmr(ZTUimM`82w`HiYM}*P2f|rUdRp{_N+D- zV3J|VEYHWfP}TODH_AtQJf%B4m+bVbGOOx^a#MlTP0-n1IXqvjKVO9GkUtIr7Ptlh z)!Omj)Aa8t`u8OLdxHKwPX8XGe|uB?#mW+6%dB?}*H7vB2k})K8KipuXg;rWK?A{MR-L>;_7_% z%Ib2k_mE&smMQ&5`LKb*-eXjk`V4-u69#H;@zRv5jxqeJ+WBPy#I z2d&$dJf0C~y{S%dLj0p&5~D}a?R{U8lRo%-HI!x)F=qSjd=l7v686Xf4}T$BE$N#j z`e0JV6a&~Dip3XEdl*rBn9j5-J;@qSJ%Mi63r`q>f%ta1rZ!F+T&16TSLADRm9w#y zRaxD;KNgye__G=IoNs}>Um@OM2+a=PF2r71nHD&6LY5LsWD8q;v7cf@H1{2s01$02 z#z3}|v>cMyIN_~0t!j6s(@-d}P=v2dSO%ip%BV0$7c%sYC7Zot85yPbLdhCD!;diE z+gRX)@;4Nqg8k!oC+t0LtizALyy_)Q^&T1aL0k^n2Z2P`MT>oo5dKQ`d>X)EmPO5> z=ajYfIy0%xOsezvc&u}0KGr#^j_hio1Imd)T#eWqnBu!@qhzA_W+B~FA&aJ!|A*+b z&IFOEAMeEyB6>nO3KFaRsV||$-FlUmowhZ07&Z2$@z~fhYHU*;Hg+XjzgXhNuVtOf z&;F2c`J0nAA|r@ME)hAMk3^myheRgaLFeZd2@-38M4O$&NFwo%d?c}pNPIpPNqllU z7=ZhO4oGVri>u?0fJ%8DaRO#K*!_;KM!R271!n)U#&Bk1EF?rNx=}ShVgp-F*5!2)ejkBLu_=tEFnIRmCOiNanhCSAl}5B)C0g(U0c`Mmv_+H*MCjlg@5SSFD`M`# zq0D;1q7~V*ApE?4j_=W_Mt4%D7_l~q8q&=h@(XInWBEx9>3STd1v+IqxZP(79FtMY zPm5p>uC-zjS^wikB7)IF9AppbFm}Wkfk5;czo$#=G@uKR$-l zax2^6f^*=W0VNwf6WdkyE;2LSKu4Ui30}4WCpb)ATRe_9#mk>@Nm9K0B`pUnDYp2c z7-fD}PbJvjfYvSSVQS$zpRN|VD=98~P@nNtMRdv5#RwWgv)+onD@eT$j?mi^Jy9Qv;@?B_R(Yy&e072YmvFF4+9UH$9*dLc z)k2&^>k4ra&0PbIhu+Hy;oH(^RmOLdQ_w^Rs}{pcbOd3)st@9Az~ejtzfe?y7##gX z25sI`0A$|An+@0~EpU*sIxy>5cB2%Z(=__HMO0dE67U%pFajNU_h*?fFP>{>8_ihT$m|YeRv8SxUOY} z3?H8D1%?mL9EKmPK0M26HBI>_133?EYx3yiuV9S+JyX=yhOGINFqb|u6KG@}8iOM< ziD1nu1TprmM)igQQL|F#Pc)4ULTf$^!Y(l?D@+OSc?N!sy4g4=XOG+JE~dK2Qr*uG zVpvV8wQMyY29jednE_6la9vDf-pfTYtBFiEVTP|)8C~$*`3Js?z%Ao#&IRzcQcv$x zz^{$toVLpDm2H(>N|oJ8m8DW;8C2PZRfuw~&$m;VZKpDcs1y>F=Lw^%BaCvzD%kqt zQ@|Gsk}TE=S^O%E%i>y)#YCDei_N4&$b=+@6Op#-#T1%`LZpR2^=oDk1^uG@<015Q zt0fVw)wL(N|brF^FoVJF%uG++8 z8Zql!5Sg`^R^Y8;kXb_+b#+FV_uWdU*-of}2>mw^x|#@mm5YSBqfnT=>Q(C6xshMu zI|?4w%qa_{HwRSj27E-RD?;|cGZuc$M1Hx;gN8raYvY{yXe35k-SRdd1?4}ZD7M&w z=;f@j<)d{rfz8J?K^sc>33cu5QP{QWaoDvfLG0Q;0n0X&{-zW@bzH!%8sN$oLwv#d z*{b(57HZ+wyWu!U<@8b9VR!$m)P-{!O7i2lQTM{PdVUT2N!Z$}A=)jc0^_o^lGX=c z9IU^Uq&A_jRtbk759bRZM~P6riBvOtW!%W<;wo8l8*9glQ>Yy+dOKQ7?P%fcz&=E; zVq~|O+Oe&Y51FYEE&VlOo23!IC2q_-ii3j9@!k18T3eU?UCmZgx3iWa>_7yB$wvx|5qn*%eTNYkcJd!=ck z5G48WO0a)x7tKTq3FOP*E-g_1foyKT2@h|8jOIzaDlM?mTI@wp%q5&+1hQdWlW^^r z`E9tN&}Y+=50Y3rN1#}5p-t!MH1$W`io-!<(+%|(3w42b3IMzLR=KX`>6^IcF z^8mpG-Y1NhT`viY2$#UZ_BxJ6-XG`G6JVs^R|~w;gFx`V#sQg^ddwKHow9y|S$}3X z$^|D0Bl)qQrHvFc7fYF~9{{gSP^2U7?bMg%a7h*kILk7Zj!q+zxdWq?fk zT|;p=X3>iBb_j>#_qX8GLn$C&h)h9Xcu$Bp-zA1(t|6#5N;W7oh}B{Vt zrBh|sQDvj4vTsIXW!1|O7?y7~bs25;ejIf2scOI|Kln=wAz(-%TFXT=GSDWXIV7Uj4KYMC zCuE3d>xXs`eez}|qT>e=FcczMtBa`bL)q4l`9o~X8cEFhC<~eOB&`mYuqBBxOS-vl zU+FFOMet`&Z<3xb~ z>nB4hG6+MVVkMIKlYS9C^j5 zL=&l66F36orNh75StAY>QzIJnMl_ll(a0Nt9Y7em#ngx`5st|GC~%@3jh1$7>8~9d zi5pkFYes+(Gzlo3Pz(rgD!^V-eOqmv)&c{H3I4??Gr1mva+cGgj-r}VS4Y0sNrxr# zCe29@&=-5#nllq};)6Tby7v}t40hMirYif9qq2IlJ|X^`0S|JnGzT)_L5M_BXM>E} zA_ipi69cgfLdIXd1^aMOcVaef%eB1;ThIg8{pDQBcGR6`3T+DQh|n~JqRPHH+g!Sh z=F&gYjk&aYlrfinH`G3tuDS{5(k|*Z{7BI%epMNrYxF-|k`DElIFNphIMDMQIMAbW zAk4a~UWXoGP}M3t4ID1faDZPLXJ5p5Il&Daz!PuC<|h}Ob=u)Lpp?LAYq2S! z7{c)m$qXdn7)D&P`vc?%()Og=K-#^eWmcx4mYF;fwaka4Wttb`>i{Xgp3s3(M}QnwCO&nPX$x@}VY=w30|5D)Gfn}>{RHy>LIWVb@p=U0fVCGU z*|U`>X!sfql{I-V0t3WKfp#eOQ+lw;gP+6C_q};Sbsk^cqR8F8th=aex0sp2O1nBJkt1hUW|BvP@c%!Tf>+>RE)^Tn_9eDxN@ z;TzLIPcGsBP(ZK07J6mE@H0rEH{)e~9us_Ng|pnFyOLDt0WpevJIkCQpKm9a<&4u) z+7%Zjf_XqIMWN6guk!WK6v2v#A~8tzlV|7J0^%9rKuRmXUMxBc_O;oSvi@}n?m^$R zFNCBO0sIKr`v$&u9AH1nUN^}h8FCDO!BMYbnHSGtli=kt)J&~Ze*EjK{1iI!VOt?A zKtYyzKf6-0s4hQ5s)J7^@a1_u%Sa9&BF0z5w8KwRZ#eWZHO}6}m`VE_lGP|fJg;QD zr)l``9(F+%99uP;bG@)h(2 z>qD~fajlrh3>2;Gbf3(jOJy^J;c0Srk4HzI159P_hP4r2r4PWXbPWWWuK${8+DqMk zWZBVCqS7twPI==#cr|ucL4hWB(^>RRT7MQaqur>-avn0oAyt;icxLOIl9@n&0sLm3uc2N!zDQPWcq%ciEkBn z0;l&^%g<>{FF0QPt%E&OznA?~I6Jf+I5#ibWlR_m#2$Q^E6{4JBC&+Ngj{>RazCbW zmz=L$7L^-vzH*;}K;6KlMx24lw=-{$bw$y#RYJrGj8N8Nm=_ueE8)abEI)A{Vrg#N z+jq#Id90#&WZe5|hS|9H1Wo>*WC-KlKg_lm_s#?3-n1_@Ey?!!1n!W!0~v_ApTQsR zYWAZP*9m))dmJR^Y~HzFlufaD92ia`f@?UM=%kW~;8$O<+VRXb5A0vOWGEI-G?QNq zil*`_SIw22Uv=oVX(;nfOppvkB)lo&bvsD55Db=d;_U`=xvS&u`Vbx@A2!<=#@#Dm zyV1Lt{dIQ50bPgJ1`4!6wyhyUD8H~e$SW__ZEGN%=Vy;`uh5Kv^7R=A=C6=-eCn1OF4?kiwx ziStIF*h^iZYFRzNa`XGi4VXyQc;H5L@qlyLHvGo4r1y83us}Z2mE_QqeAF&^fVyWN zbBd1~e6+~rQn@dK?@Lw)&jt3o+=>AjN-xiZ-72z+YW7}{21`}Z0TS*AKWz_E*C_vp|XoINS7Be=yxr<_QgaT zKS-I0DdYg{Ey;jEN$;dOYgx*_VTyz);#742anb9IXlz$ANv}2gtN#$b6yY%j!SdbU zR2Bwjb^UyzN{tTbhC`!4#TrM@FUK7$2m=!x!cFabdz1h--qv_DX z1^cOm!WW2Qu?^NX>G5XyX{6E11cl3i!bOb2B&3kTDYS43El42^J@U0px*H0d!1#3< zJfOZn547?J(B~+cKP@io0)^M`rjWo5KnRNQnIW80CLUD2tiZhn5cTg8?+D^QHS=Ts ziga7>d}AZ1uOLe|o<{7}Pke`L4y;Kx_}XC8h>cB$T+uW*#D+>%kMegMmaLokYF+mE z{r~Nsb;jF=f7X!CWWMe_5l;5c8v0ou>mK*ddiPU+%YnPRxb8j3ew0aT^tfSG|15|Q zPQwIEU()0-Jb{*5Jb@M%o*?civX|CJ#|6i3yDHgB>*(=5IL5uS9y^X4n==?W_EUDJcxna58o!5^R$I!F zChn%yM(~2f%j~Cx3FmXv+AbWm3jXf{H1-G|pqwMl{#~`;Pd@{cvk(zv;F$b<-L)Q8 z&Ev$~wMvhPaeC#-WOuF0j=?zf?XKlKhU4^jDvr~1MqH^{CET@oOiD`g#W3u>#a(Nk zq=VRg-L>xRzl_~o>!lvf))#u5|B|~_1o@5NY!lCiQ0L;@_=@K6zZ+xFIzQQC%lgmc zztwQeA8yKIYGz)@GjrlQ;pRD^>~LZCOyAU37Kh_GV_{Qr=HyqZvzCX07eHLsjr3+s_I}BKj@;oCF7Kd3#-&aMp?vRrB3;2Nrw(TRYjLAx|0z*|G2^}a{(@8K0jn$FLfrUf` zQWG^Y3QI2u3x>i`xW2AZ`JpMqA9#&l3P3_Tz&f)OKL6asH9!>`4W{OPMf4wCNLwXU zcvxV!@~DL2U#{gP%K+Y$Dh)^bZElODxx;vKAvLj|NxH3BiEDX;5^Oi_^i#|>1|W$- z_QG!+7C63mxjrfmF)FEhZKF~%S$XN>ejD9tY4qX+)Fwzxq&bA7iI){DQ_jmkN&?KD z67T7G^gPapnu~;BEBC;0IgG}3z1-RPL<3S1aLfvBBT(LGq9H!DnI>@GVmS0K_6|=_ z-u*~)7{9h!`dH8FhE%mk4Vh(Dk0GS|jF-Z2Z>f|vV?M&$H~Ub}{pe4C&Sv$A?k_ci z3}rb+PmLO>t3f};xJpF*7?X4($ru-TBao)#HtWaFNk9HCZO*QlgbCD z(W=WsfIo^8yqa5_{bE1#0yOBOF&O`e62>Y@2-6}Yx)p^Q5$VZY;>TR3G!x%E*2<*)J zHO{)+EHYfT&yWNQS(iC`*&fRdD8>zY-SY60K1D60#J0j;;$d)aQhAuFY1FrN1SbZD zY{wBI995bgv_?!<+;7GZA-TPuOcAmAiX=rBXDWqD444fIF~C|KPS`3<+0a(;+2d;| zmK9BO%gHZ>Q-|-Vl%$98w*QKA2UN zB-rLUeMTRSq1Htz96;U&+T(2-yT|TAypphBw^2b)@hJ@>qe zY*5qFx)w7gya!PP$FcvJNP)E+%cbuGXcL@0|DDl=kKztpT;c#cp2~dr(Ca+z`RZK| z3Xa-{u7CyBWmMg8ig;dP-3a*VD}-^tyI?}wg83OGnwB%#4qh`-wi>Dq4~Tn~V;irr zO4^JDcm^fil8v^es=Gc3E|&QOPT#R5%^dzEZNVbVem=t`pX+yUl*ZTX^$<*Y0)IX# zpTQpNU91sy=~gf$v98|4BOx)qxE_)_GdyQC%RxDwHBu>q8qg(4(Uci&foCmp3eWe< z`v_aGOT_Wnnr>>^{Z!wjo4Tp!VE!|{7uM?-oiy&Leg^<{-v*%v=12c!d|64OqPJ+m zpZ_k$gqyWA;r#3HR1DxB_vB&Sm#s&evtpX(fORL_-s2m(p5{3qT!8sJrw2+G+<>*_ z*NSx+DNMe_?s*&8C}3eaY|M^ z(ty?P*D`AQ0@ImoT3_60XIDA1tE@Ma>>6iwjrFvWUF*!QwSJ>yFK}iruwfZ3xrqOS|c=O>TgA;Tg zDu0r_1jcQU1|UFWuK1NBW|t%d(XuIffQVeodG)?=PX#3S=B?u@x>391o{KT*wx>9e zvi|J6pMqb#6zM=)5RlV^M^aC&0($`9r#f&`+Q71`&nCfmjYrut6-umk)+g!Jv}-`v z%XxsuVBv*lqv#SJuf-kOMNA_kg(rdt+i%9Z%=kvkX@xsozF5nX=|eN#DU###onT6r z;+s`if!i0fJM((S{Z3VO;9PN*Ko!oyzVKtz^(=r^#B@8qQF+c`q#pYEnArJ8{HXg~ zD68Ji!E+9yAR&J_hCBat-=NvXt?b8Yy%8P#V=$b*enXTZXq_^NkUkhknjYPODz{*) zfgg?h7n2#~yT^1jegQ(u>h()UfSHp4zBq$(*KvFfn(_OS67fop1MXvq$JbGm=Mo+c z5AXem^N=bf7CIO!w7Bs>-1+d{iNS1Wlir~PTw^u=55{Nj-DVu@a^tQ<4OmafE*MG9 zzrej(R-Gxj(=;J_^kAhL86G#Tc*9Nci%8NV$B^*2_c44O&nmDcYI1e$V=bk9ROKZT zMCD5=`0d29_9F^x1@$JIJhrSKe;)=^UyS26CUl^6)JjSWQerPktYeAsdbmv>X1H0> zR;~|GPqtW1+-Q7Fsxu*G1zRT=j3+z`mJ9~g4iAGPJ3O)@M!-cl57ze9k~}(B!Ko~L zHW=$-_S~dj6k%gc6$ z3%a6R6TD4L*@=3zYo@oUR!Nk>ClbEcKXfU>v(^rEky$TqnB<#d>_`t>wkLz`bZYkL zg0r_!0DCtUrKweJ98NnQS-MDs>quq?12O8Ri#Q+*W&`2=n6GtI*kKzC+SG$WmonXB{ljgG3-E!Qc|chewg{%s7g!E$0U47!P%AugD9Mj+PC* zT~iQkFia$9HF)F|gyb6>r8?DVlF^&@YxY5lZk$q%Yss7?yiFb7p;-kYB4~Yh^Y!_J zKQNtS`i&FIzt>y>rNN*uPKzK*4T=<-05pZJjs=Xg3JNtXi#YajNyO1kh&bM5QTt5` zhZVF?mfjS$^l(O+pG5jsmJ_yHHG*wFCv5RB`nKAatnAdxj1n-WzpU@-llZ98Kgj{g z(I*io^Cc+r6;S32P{KWj{0q0JPs-YXPJyy|;sq$p146d7JAI>gP{!I%A{Y#5s`56Y$qqsN0mIjVPp{;Uq&OGo0i^BL)4zlW2l&1-559Bmyy6r}suU zBZVmHrJ-*FR3he#h!vl+kag$@JawLxyBMRYshx(#{iiygf{ik12plbMJxZJW)xix zeCNRtQgEM`nHMJv!mv$35dassG5`d0M6gbExpj)=)=4M_-*Ou7O>EK#h_iq z&)YJlJTEd)?owmblCoJPKvK8tmDnRQ)_-$)a@x%Kx!6@s@U5-Yp%JErWl+|mj-;u# zi((GCGzDhC{z5Y*kc6)_5qZpC-dd+2lFvJ$6U#a3Wo!Fcuupm$SI~L|^C$^UctLQY z(bP@+H`-MPo-g#~eX+3u8aOw@5dsot#~LdkG5uV53&rO2T?0fV!3osjGjVV3EB2DM zAVvzOi;Z}KmMcN!F>sU<^T05nQ3le(xnzk;@?A2HqASv`8)D@vcnWMmJ6c{W9ct>? zxB>5(DLULQeRJ-mPEoMf*~Mi_x&bT5Dw_*|7#xd#B`*Bfl!ij3OR$s~t}}{45rB*> zue$NDg~6{Hw`e_+nJUK-+1s>IBiq!-@a)a>T2$fsj!J8i3(r?BsZy$!qo6h_T~*e+ zIm%FS6{)r+JBrBMwh9+F7X`?-W;6&m@+;;10!hw%dl_&IVhU z^M2kMVS1Bwrj#boLGcih4^!Q+BZQGw8lw*@k?up*?bq;Q9>4V$HiEfaKOID}DePxL zNS4X1fF*6`WoXoJszsbvFKFO_(EW6Y_S}~lX8L}V*6|ouJ276NnIecx=V!Wbo-6EK z-r~mYN$;!`z3{kPVt5maX~k~?{I&~hZgnu64YV)pP2;{WhfJ+TeTMtO#tZ3&A;tr) zQhVp;_a9EtO|tulSLU16>_?Dul2%Tsi8^+siqWmpxEQRK1XYrT0G^P7hG;J+k)`&g~ISt7iW@a9TqxJ(3bF z?H$@9oGzOE{cvgvR;e$h0>OGzks7I2zeOolP0#i_blx`hy(qa@Ao4kne@n zqzi#d!3CoXZ^hEA58g^?odYIEc~7cM1A|fGss?frV0__idW6<*#UTn98{)zQsMGpWvxB>Pg;wz?7Ovti)3}QNkj7Q~ z+4*GAgOo6QKB=JKWp>P^zLe`(Z+Y+y-q=iZyIPUsHDWhXF22Fx3GKIQi9FVTqPPa2 zGrtr%j(}&#ZCXEF0|dg`Nb_Xp1g+sb2ST{QNn@Zm=kRlcrYT<}xUa@Eoo-oYFkRpx z=lgn24MVa}-+{<*K%uKS4GMXmA#c-?m`nXAK)qa+mo-1Eg$wKv4OT@Y19^otLLh`; zPfF*yHT7_WCol*YkCzuwD!1=t=l>@hVLr&8B->Utkq5P1a0_Zdx3|5mZ|>uz7Ix-yryfDMGWLwSEGpLDWa1H`J-?WAbe zMUgOnfpyH7N5l{?ngpG0!)8FYattd0if+^?RX*nE{RPzfijT1OPm?w8TZgdsgNG5| ztGCyKLJhR6J6%28SC#NRc!;zLHP+FSUAa7=mT@Ewa0hB`x3`20x=Xakbyz+)f2#Kd zNb9;N{Buwu2T;QNY>;nV)z&?aItCG-LDYSSgXknv*K(ps)7i$9I-n7=;)>kB+xP`< zV`g}=AjQFMjj{8iv#GJvRDWu!iJIzl5Su!}cBb^5(2gGYCAL#Ee-^d_Vs75xh{%_ms|PT#FGtXq2sQETIk~?5$2W?JfgFW(;3a;!WzafRRAC){$)RGE{Ja_W zG#>(G**PnPZaMC`8&ir_N>5(y&S}mYBoUimYKk-@+Lb>amhBvs^$J+`%o6N zRoNl6CyN7yKW9~qR8=TfRZ&M(?4+5#z1#RUcezP}f-44n&#geWq@ii) zvGn)~qAMm3w`~gYjPq?~d`sw))Iqmk{A~|p+du_p{xIk};Vvl=9|l!>$ZR?k?TWnt zl-NZ>pPG`|H1Ozag)gm^kQh4Y_`8;4e{R737}F1;*Zj}nhd^^u3)}%pp#w^|6&)@` zb8EK$ZO8j=r$MAL9#8Upz{bVPvmL5ECU=?kvvI;K80t-KS^C)Mp#`ung1yH^3xLe_ zxzAgH^pQSQ@oKW&HmX5>>KAtT*2uo1`8fByud&^ohKmm&JV!qFd19e~abA?9|ijjI`wJRLR*HG?_%JNzOaN zuiTQZ?M0juX2y(%K5=Vp#{KL+d`j`3=(}W0}9cGzhI`u7Q`YD=)ntD zjG(Tfoo8~b32&s0EDxn74qi|U2oJoLF-F11Zq1t*M@)ymg{Im3B*!$5x+2#!_lq0b zKXQvUQ(y4G;AAB{Pk{-NaKMZ8-yAnqvlK@CV#fXKp@;dmzrPK?XOzr=3-|p0;ldA@ z^6`M-4^tR&;W(ZCF}H+7SPRogoK#Z3t>Z~MXxRB;mc^9NN8Ut%ODz}3cpLwo^=06= zw{gExJus{kTBBn!Ramn7_eo7N(H#YTfVMBmqOa$0TSiwJ(%%)Y0* zGK%q64n)lL9f)J#x3x6VwN&H@$1ITP6@<}(0_OsA6YbLBDtM0XF9h?WJAyXC=ck8f z7j{PmWf#s@3g@20qPTi%!~C9R5M0lC>V>j$kISncL{aav)=5g)l$#Zad#3G&UAdIC zjXr0vTV>lX%BUUAYf6LO#GjxoynHm_>ARnz?lEvKQ<9H$aH0cJT4ExKi9W#tFZ5mf=~{Y|_;z)NTQIAIo2_?&uj4s&P-|P>X6Sq>n8~)} zmE)_5mfi9J+f*Wkb^TfPy;W@A{PZQas#zDy>otBZEFl@lCE_{SRTfqb>13SqyA|Y3 z1XrB9=u+177Aj<}0?0-*+$4s4kj1IN!K&zTh3#g{wDIZR0K#P*e{@#U+n*?S*?j$|E~@_tKHgxXSIA7+jOCs zFp|67YM2(B=>(6UNxAb^^Plks*Bh+hho)`Fe;?&o>ohN#X9{>lbHaW*NZPIEyBo7-^TKIH% z1g$p7d%H>?PnGHs;K!wKPUKRwyv5^}a?PB^M-}5yt^6bvDxo6y;6Fr(Ypyu$ah%9{m~(@{9mp-t3p=O5FDkqNe7-A(xP4d z@X7qCz}s~2I8SH0lb6?kzU2ONU*2c|$=!k(%?U;k$&f(m4}0vF0$CgNC%wo1C}O0p z)rsr>o_WLh7GS7}xmX8AaBX5~_I%EWoR-xddoD%tSDJoDo%R11wHvZfeRK5l_!ici zE64=4rp_aT009aikdsNRw4Rv=6VW_oe8YTFO8+lEc+UaMfmX zn?-fz(=RH}KAV~!+#}G9)N9nq5p1houMv=0TXRGqhGX0MB94vur*WwpGM?bWbcxc^ zbZY6$@2$=GZm+c7$H~H1ftPkdc%^23M_(}18bsJ+(~h1oE4M$)0vWp}CdMlWxjL_0vAy~+;o(2rH;KMfEbC0J)Q0JoT))xB}pUj4rmn}vv z*Y-Q9w$7VKyMDFClUNha)$4o?AykyIKg<}K50W6p-<`Q<7TC{}wZqTYj`;(;gV`r; zutL-`?PhdqK1-c<*o@DBEo_^A=2pk|kJ9(eKjeGP4@2i6Mkt6iVN@gPQHJ)_PUO%I z?*z61gju6Az50VgZDhY6PWNlb-JbszjoR2r7-_B zmd}`(r8_w@lPlgH?1eJSUdtuF@3?R^T)Z~MIPkDr3lCsS$X@nf9&Km6-NT+zyEPI| z`7^#{bp&%1ixp>lchq6eF*KHp^vcrrEXtjJY0mOo_BDuCUeYbUh4>ko`eJj4l4JLu zy)yJ`86^?~k`+VTzlVvlD5ha)@XD8}>OWE3z}T3Z=HK$aq&*3AR7JMELW7Cji9~`1 z3DS;n*jhntG-wAKc+tSb1Lv60`TjU4M&XPBx(Og#?11TMA_&oOTyaJP7Z5i{92X)E z1VjfNWpH$k(f{XInbtG--GWN@uX}G*y?VXGWjH{;S9R-F)ve{-x^aBw*<5?5Lk(mx)|;OiVVU8os7K`GHlkE`gB-KrsTmiWGf z+@LKDKqB5f&Vk;+GTSbB{XV;@TDh7Fhy=KyBDZUZDz?Ps@vgZGG>P58!?@mqmK#L( z&vyYUxZw_+aad&hG=8-2mxDW3AS~jIQxFHju z82}EO0JmoXfaJdSITK)0CIIlTz3nDI8vqn(0HEVT0)3vlJ~J0QKP2l!?#9gA-$L#M zBKJ8*MlM)9C(A_cvyki6a&HrDs<1lJ3sD;1+QgPel4yECLoD2HE@RWW7N_IC9D}vw4D8Q z3LOq%_q_FCWgN@o@6Xsh%+}+II@`w~MDV{cw8S3umo<`04zYPxS)%BTBy7~*sklqV67RQ_~PhEfM2NRt^!z%^VOVBK{xAGm$)gRc-D10Dua(Vy*e|LGNy$D~V2 znjG|nLHNH7MP*APxh(l>06q@Dw<+MB#RyzOz>g7dO>#!^Tmb$qI&Po)8Uaio`-YN3 z9aIOerL;vBe4u*tcRbPt2)!0l2)KN5S z0d+lgw+j_hPIlpb;aBs*kMqJ0Pe!cI?TsCINN0-&2T#O_`5NFL1= zU~*tuE;=b83|*kwye_*9W00I~;)**EB;5}YdkdGz<7M-KfW7Y#YJzy@^2$X!A zFkEx1;^A6f@+PfIB`ySB)tl4t8hqmR#!L&`mg4Ey{<@lM~xZ`g|a!S*+<46tA4rzOlmG*7&P$DmO@8M^CwXHPIlzu;A-O@yHQ^xJ@p&q3 zJ^iZvwG?XN3|@1k{~XKkS5up~5zu7%0Qn(hi-OM{?HT7&7PeTWf53`jKn3*TtBHu! zlegLtB81GA-|=-g2b>n70Mli!Y7P6!l815?#P93rqTo$;Wfg4k!5239x<&!1Fum1{ zyyCWvN@02f+R3&1m$=1suv_>YThK@=@nZ)?$adpLjV@N<1us_Nfv9ho@aKK{c8&l`iYtsKBz;cz_#?D>@{ zL%Yxpx7vk#2^wa(5kVGgM52Vql{uXEa{)zKTL!}f?Tuws2SKiWnZLU7A77nQRhJx^ zkTZpl?rpITM~MXE-?83P>_3K5pAZuS2~`WP7Ef0;&Hl-xitR4XXufRrDuMkPRnM~i z>iHfT#aO<2@{;FsJnOBaor3S*M?X!0$~SB!7JntN$;W~7jSlHN4u{3g&p3PS{`eK` zF0vwfKbD78ar*2)-T#QVfk>=|S1q^PnpJ8(u)%^2 zR9oS2*qxElpH$;8B0pDI$lk@4+v`9?Z%G7$J*YhsveuTPczv$o^}KlRb!mArPppPB zqv5U>-Lgn6OnQp=Jd?!fmebbLFKs>j($>>2Z9V+8bH948Tg}$`8|8Y0T32Kc=&1A^=kxgFH3c3q-&X`2BkAW28c@2(6AShwV z2_|}`k~#3yRy1&WJs|Y5c>>hO*1c__DYc?0&4~t5+1gAr?;KDH(v%AAWd9vd+6NkJ zwJI#e-`mon^)Mi+T_h9G252mp2&;RT0cQQH4a{DxXMa52%&yJO?jE1fEVMU%8Va?! zZ{B2%2#jr{QeuL)SO=QRM9-8((Uj)v7c+W~sn?80kAGPw5i+`5KT9Yu1jKayzl}7V zYiT-PX69jQXg;5tkqQ$Uh&5cLn^ve~miyi~(*Lods)ehMtkim2^vYbY(VVamaG!MW zW!-(!3plGwroSw0{XYF9rP&YXXhn{0*5~YIeSh7oXJ3rvpW?exnzOB1)-yK4+19}f zdz~QNN=7{55&|T<3t$XGB9u=#-7}&vb(Y9L?G6tafc@qeU7MEMB7;fH`ouRX<#f7u z;LR@Og!-RNQYtGTKl)Z$MOorEf&6&OQ&#!$`3Z~s*lUp=N6#Z)NDJpG*|G4tRPvX0 zCr8vViLUBcpJ(AL@6NZXJMH36wfD(4 zd2(psX~x&@#y%Vv8BjC2%ZU37XZMUmcXh1i;_9y60nthHGLXMGBSmxP&fT!Vh!+{L zE>CrOfAotPpm5$=WTd;Q)7{ap_IO8xYyianRyQBBmGNUk0N~@7d-y*eFBjs!NBF-U zUY`Fj{_iON*B3pKZ0Ah|Ut-=pMf@Kx!T+No{NV`vhlThrga3}ge|^zIM^_j4ZN0NO z0jcMC^li}5Hf%CYCfIdYIAtx{r zEp)oj+V^F1J@#XAq+oWRPoNAwJxD!TjOvVV(9Sn`2v9d(G!RQ&Q zFw9(e(v`el3)7h+o+_xF1<)G+%)$mzDF`2zJ~CxmBkTE+Vu>OTg(;_{t@pd2vJ*lj zw*qyqz*9hlA!Mx~$QBO5n0Z!nw0_o0n4$`WSmzUTOrW9X)0@VFJ@^DsjaO0~6obIl zS%HIm);MYSGG=PF`bR?QzSW5GHF9y0`zRp5jIZb>SM19Td-AlujyXl^;FdXPm-;od zjza98kINA^+pe6kWVftE#WBLht;WXT@T?{608Yild^=#?2MB(Nw8KChM|jM?`hGz&THMpt3GCVy+TQ{U ztn_IMFt7?7z->mXk?}tcYfx&!iT1(%IR@Iy@s9DvWW=t15L%i@Zf?&IM-aaF64kCr zo|VOVf@hN9TIon`pdQ$GMGeaXTIU*8A%D^s3#P$sDd>aoYVd!uX95N<(kYya0d?!OoDHr~?wpe=; zg&95hUa&vh@`Gv?)!l{4)k90@NSfldDC!_5-}H?CuWY~EZ!&xZMsh@>{bQXHNL!N~`{J=a5Nju39#M9KL zj*7pmeJN*Cu$ur|-d-3EvrO6O~pg27;VdAJ#Vc;2cD2ON{}Tm)ktIMJRs-{n)-sJGSl?C+5x*ampMDlM-l6jFTb%q0R>0JN_1RjSufzD@dfc`P~BZ8w;#K&Hu z_j-Jf7Q!rGmlmKKo54ivCwyj0&hQ`}Z_8BiJ=A*0ryxI}ui3o<26xM|`rvM+!7YAH z4sPjt*1^q0BTu3{iL(R5Oaz5Z6mN$=-7R|WK|7k2<>7=`qSlAK@DIgF66yt8T!>?s zj!b}`R0Q~@u(T%Kw$*9l`(rqVDJkg3fK}1pWlq!EgMlW37%=^8vfi5T7S`7ebc*$* zqo?E>)a2EwPu`vUNY&~|j*vI-)B(;P*CVp)Po~C0DtxXZ`H>C+<{ozzV%tpynS!mt z32Y)>yL+Vl1}`yD$`NTX?uzQ;bry}+N6*OdYIxW34Zz4(Z{M85hdGq2X>)IV2Cd3& z$DhJ0Idb-;TLh0z;!3DZgvyAI3tRaKXg%^ma({<}eeQ1_As z%>JR0^T@U|(ct9svD#s*?y7Ve!!WWGJi%bGiOnSE3)v#3Zx6|i0s-(^9d+41yBBoT z=Uwi|#UR#L&qsRr*CnP%M+pNP#Tk*GJHrVX{}qLuqi7!w>Xrw=OzCI7`hseY)(jOe z{!2I^oyQ<;$Ii(x8m-AO{=s5SphdTF$k9EZU%F7SloiFqw_&VUn{pyR)8GYvJw$Ph z4kmT)g?N?df40bG+8A=aK-d?QU5@HN)A)2<%IE3xl)n!1*{)d`R+E)@+g-S7Hd;-V z)BJwwX|$UBhJUJn&4rRG;IH(K@hLcRjP-@QYuohX!&i_L0%6<2_T8$WM3m6OUUp*Z z@UaRbs@EjkSFHls>>-8nj~8aNc`CK}wOQEa`A=h;+pfSiPlGmtdoLhZO3)SL(m6Mq5X@Zpjf51N-2X;h@_|{VJ6j_va7YUzb zt50*P1XP_UmcGx5bS) zFA$)RUIx-rPo|&-+Tt|DrzF*)T(6Al% zfc5e8OR(F`Rbj&+a1Z5BxZzLpq^RZ1{5i0fQZgjarO4n2_s= z4#X{2MlHu(njeHi2k{^b+j)+7F!Df9PfSW!F)3m3^$DxH3}jMn*{(Aw1~Dnew@D^t z&!JRCr0)ya_(eIG6oZ(QJ=>5N?f6r821m|nkEbBe%JYJ$Xy{p7%syFY@&Ub@WsWV1 zAL<7Ap{~adwQ&c0sBbiczc4e(x^V4QcqRfoTJ5lSK`=1fp)F*yHH{<|5yWdvB`k#J z8sZP|lNv~trAuC!j>ETSK{}0M)=PN{(GG@!XJ?4eh5xERT2~!6t>psP@b&G`u3^;} z=&FeP*X3ax`@Ih}NQfsd0BVJSV;!6J6+hJcQ&6wY2IfD&b9_K#J*W>5Li9A9Eg;F+ z8PQpWlfyQ@w+Y((UxL`>#Jtt9_n+m=+xZJL=52vs-Uh`czp)7zvayOawj)!qs&{X~s{E{;s`B%;>Gq6>8cYL(cZ0&+8v)(FrXq)f z{>{E45qA!LHA9q_!(XOiAW;;im_{1GZ4EZ7Q_H;m1lk1isWYUKCgw`fP(M8{1GS~U zP>iCtJwF|cA2@wrTe4{WyT@;Hg5cWkZQBl%p99+GiNa&|D!(clwd9ZPC6_61(2dc` z^UJ)wm{-un3M;|)a5`dDRrU{AewhTlN1(xDHYlEN3_GX}X-u+IB3oTZsufV|+IuzE zDq!?Potr#8W8jp0Pi~=jJ2!2B?r<|5t!5K{BSj(TQyDf;`{VisdLwP1Wsk`X^p@Am z4V0u158KGrxsgvSbx)Tru}^i#dzC;sT97UYTtfEGxKo6X1;m4m4_W?y&6h{NIv8Pj z@}BT}JbBk^CvQ$Q?@M7HKVKh*UUeOF8*}#aHhMTHo>r=2JtJn!**ybYClwr+(i*mV zGWNWT^Do8myFnJ3l6z<0%u_-%5xM<5hYXB%a>Cv8J6u!si|}q& zeIP>O0|CbBWax&ZAG=j2{R|>~>!XtNC+@d=w0WV+*kkilQ*P3lqCQ=Nt9SM@-R#0MVQwCzlDDjqy0h~Uy*o3hJDpo)cP{R> zbf*%!^WKfBJDYFJ(Vdypoyb<~&J6r1oXP89U0;~pdB!FTqbvDQaD(2l*9%Y`1P@m$4ge$lA*8d`NH5t<<2iRfBfz)dY-!f}7=L25iqn=~0JoXXk|epS5cN zkE*)XXC@g*LdJ=ZK#D*k1REfjaDiJw3=9x;Xa|izZBSZy1c-_lVFJ-c3}leRNq9(9 zR4y+;1B##m;_I3yLJ+J_->-YIik@-2t=3PaQZsk2wf5d;pEGBY@YQ_Z^JRH{f8SYMRNH1E)>a5YnaDOx;cyxe7-{IvHh8e48+94Q52p-=-^CUZ{ z9I}gEAQ8MKO5p*`QVQqZ(+QTb7;jTMF0Mo~UN6GV8EZVhEhP0rjN%N+eCQxf(KpW% zol(7Po}f9Vbk=WGIdBhoxlJW_A`v`7itL{+Ta|8-e(zjK$hC8Aq&JbI_qXjRy*KdU-pd%H|LN~SdUsg# z@5!}4hyFdh#b*6qxFpXt4V2TOMMFhr4UVD<`C9LiM6 zq>3M`=>*m;Oxx)j- zrCSz#29wVW66)%QRfIPa!gbpO!r!-;ggOI+`t58f)Pu8arX6l3q58L>P~8usP%mZ| z{r#_mP!rRTp0!1WyVKOwxJwycSp<5ZIBoQaQzy>Uv0e%|doQj%;|!e7?;M_$2M8Q6 zgib^S7W7qF(AQu=Ut+;ba!Uj(m}n}bmBfP8TLlZIy<}p+Okly+vm^`l&$3|wd1iD? z+KMblK~A_oghKjGM6kf&iD5x}j+PQzkcx?GHFz<_$w4>)ax_f>zVWy?caOxn8} zI!b#`jYcuSfr)-~P@Fn~Jr=TjuB}QZ@2goVXR{2>W)WvgEg6rr&A7fPJEusa@nhq( z>@u89!xyPZ(TwI_V^cAW@p~E@yuRS#XC4LID0Ltd_C`fBmO?->2w>c=0Hi=$zve}y z3a;poyNGJiYCByoMAkTk|qI~`1Bc(N;R=j+iG=G(-14 zOG*EZ8f6(5eDDfW;zLjRLa)KfJ43c?xZ#w)LS}I6Um}B5+|hRh_u^I&S!@BZxjqgE zR1okx=TGxn;@lK34gh!X${A-$ykQrkATnS)8M~RN93-jy#A&5+uBg-K2o0#`=m?Dp z&ogieAf^CY{oyLKbEK-BBMt2wX=o?q!Z+VnNL_!@p_vbHleV@ljTY#HiEGw)oTLHs zu%M`Xpv*-xo*0QGwVD;rYOOLQoC;nGw!~`9C3SIXfzhHCkW*xh{_HAfxT~cKvD`+> zx?$vh;N)$-O_7G#G;m49EefhxN3H4(7an93@kBEg4JX$i;rR}n??=!5p5P8%c>u!0 zgxPJOzG77z>b+f~-YcnJG90NNq>%SMsZI&1PKlvJK=MoZoaB8hP#AnoOBE3fpwqMR z9#jjiVAyd$P+fETio(U%{-mvblUq5k-Y9ufZKD%yD}~F@!OeA1XhJ(!`0u%Dk}k4rin%D9wArq|#gg zJH?w5rJ^(SKJ75e_CyZJy(PyYcLoo?nMJad%ef_;qC+(K3{K5+3^})>oS*7E(KS2> zeBzaJTaNKccv_&(^bI7P2a=|uSb{}O5HJsnzBp|>ZVOMZC5K948wN|V3l`4hB9Fyn z75R=8aYbIzk;q%P`jtqLKbG5x$SFz_C&nW3(?g}mF9nhBcUlT?9tnAEo=xG-vy{WU z82QX2ml|ojJp|sI%AwehqI?GS)A*$EGjKd7hO2hCJhy5DtB&Zy^6{DRjt{ z3w^B;VJ%N&Z5|1IL!K16HJB{tu|OUe`tr#$_D%cm+|(!A3xUZZw$0BI8S$5A!JQB* zkGa^b2JW#Y0-0Eu9?cj>tau9vOyx#*D@3MwbI_866OQC{qToGlo|zyHv=I*ZHkK zGFAKw8y@wk0aa|^s`v?0#iNsNI?7bBA-j~lniNVu0d4HeB4unPRWfuEO zzff-1U+@>p9&eM(saztOI2aN25N#nK!=^kXnz1>Du+T=xm0L9&DEYL&aJaZCGxdzA za-w6*RIz>@NybgN1yjU=)zZj(3xqqCbvzaYbK+itH8@!6Q+eKqmdLP3KYi;I$g?lx zd3cH#DN{!0M^e!$lGPWeBH$?lkd8R6pWTH<6fiOJO04~zaIb@-E!U%!35Z*4t72C_ zzv6<1PuP#(c=c?1I`HsN&Z(6N1jlNIab73|_mXpNoA~Pwq;@FBRUV5h5=I~ znzT4*QZd|LMLeuvj8NSvF)s#skq6@J^@bnkMc<(rQ>SK4u9liy%{95&JQ3<%qiXU| z(&W-LLX)q2%sLTTs6RK^Mw5?{Cih>1n!I^6&Cj!o{^7f*$zQR)ZMc9n9AKo+6tptI zq@eNZ0C6rk9SH?~FdA8^uX-G)@>>L2m=k~|NzMt>XtIHZTl3^+uhlB-j|ujy)pGuK zmv!>9P=Cd51N&ow{VT+q(cFlzp9KOxdk0~Er@&;rm;{@W+lA_nA2VYD8&tst4X{B1 zTgK=vBd~)TRj^+Y*g&HId*e>YBw3QU0F(F> zKpyNyN$ggWI2fBmH%k&!+)VUtoA0_uYo_fU4xuXzgvG~aRVn#UIw8dNk52AT#!vw#t{fY982w~D4a zp>atxXCE=4SpaC}PqIPNozNV+8`1dj;_k;Tdfl6d<^ihqvT7U}cBo;=tQfaig!ot; zcNFf5V$};9ac>N{wqHl)KO3)0KvoDJ)1zqz4)ha!rcGC5v1x2-X7}DS^+7rhK>zsl zzP|KFfHVO{Ob+ zm6CT~Oe7th%IeoAh_lN=?u3}!1O3IfF9J%WA6cYu@2C;;Xh1n|4V&Wdd#Hiaslt1| zPMCzjqNM)Zn`9D}FXGo@d@wkvPj4lgUr(?}0bU+3Oa_h9>!$QY69Gy_*bWv2xb0x^ z>2^tAPQb7oj9ez(_6S%E5yKZcWtQJ9RxqJ!jw9YojPD9x$WMRC(a2{}jt~gCu;vzO zIg0w{s4AbMl!Y8s{aK8@QEAv%)?YZ&j{?e|IE_hgoX`ru5_PxAz&A=gq5Z><0&~5;fMO zZRYKaUPZ-bh!=GH?PTfYi&a9tG=15p?NJ%!hqK({0B5mR;iOk(vDYy7i}4p=vFBL+ z75H0&5luUd;$gcXDQ6J(nQ=ppQN@P+-$b*a$9=tVx&t?*Rrd|KmfVs6^8oO?7;63& zwdQXzYJRxoD=lI|9l6=3M&;%T;^w_~$@+hbQvZv1lk}#ElECQ`ZEPl1P+6RO7q$lH zufo<~&z-C_xczmpwtT!7t;jl*_1}d!o=1;&@$4l4M!m#H9Y z3FO|D0%R{U$c-H2o(U3UV1fl$ z)VCSbw`nmOS7`hiRH+XV_5TP8>Pt79sNce=|7N_T{=j&f2AfU~ckK!y^*131_X75$ zzk5tjKR5$t&uTc0wFE>9jI_w@y9FJ~4aTBi1oD15&3d5MM3m%ll^4eiUK}T0sK=Nh zFCH@SqLFynzIUL1Q(@Sd0WXd~Pk!h01YznwyueAT^$yiM}s9=uP6Bk?w z06+Mx_DtepapEm(aEbJ`hN!2HA$j_3zC&_h{Ik0$-&eP*8|sv0?O$wAcVIEw-S)sV{bT!yjul zviV4r%}0i8KGNiw+O_;7ZrU$ps)C*+*$i7QWV8MulWZR6vdJAQW%EsujclGJ9-Xd1 z**vlwWz!p~pdM{PHf0wmi#UW9KgoDEd9uihU zZo7cic5sQK`T{(_mIc5Fg{@0wM>E!VoN|K8RXIrSJw~p6Tsj6m+w|(KON;R>fm@v1aaxLu}PN&i$w;vX{ zgZsOQrJGw+`?J}Wv_CKFu+C^pv{u3U%i>nSXpSG5X~`kjaSo@>T637%Ne1VWxgG$S}Emt{BebB?`@GW2!HP@*ka|bTzdi)^})x@&KVn-A?ws;m#6AqS5fvGv% zQ9`y}T=ucEICb$o6`Y* zc5$6QEje;Cl>yl8TzOGvnR+>Mj=YTi8hQ6>_c5@^CG#|q0=d|WWyhv}abJYwc9Yht zNqdZTXk3DE$do5IoEN)tem*mmRi>%Dx~lA9&Y~yTSM23oH41$Ix=8y9;T)z!=**2` z=|hObJBJz!SoBL%J|Rj38y`I0aG#P^IZumy+eZ!HKJ2|^>SISj#Xdx%AwSm7_mZXA zK1{8UQUgEObVsa^etOHpSI6p1{qq1fm zc1a~vT9bPIkDVtq#$5DGyc#Nb70KaJ`r$p_24U2CLTF~sqlRY2(Kx6N+1P5FNdY(z1XPgLc986Xv zo~pt_!BYLA1Qnb+F#Md7_|&fHZb!Z?zL6*Eb%NFm6)_Vr=D`#mqZG}=)GW>s#Z2Du zFkZ!J#Otq((}(-e@yQ}wG8_S zz*A!hurjLy=F#cFjkw>PR=qkP$3jVYJW2rnK^$c9x}LA6(ID$!EUWu>Eu{iWv@c3K z8hb@_~3^dsgXll$vUPS=lqXD(Fy$ z3jN~;+ra|D+g_O_3=@KQ>>8PR@P`mxe9I5P?7nFUz-||3X|9~p>6dGs-0!3A;@tTA zbJ@i?rQBv!#`{L+Z}*j=1&43&g54Yiryz68sVtL_%EcfyPN%lS@C-@ji>E`iUT zkh=fq4uV4h!yU^e2#UCHv%^?d@&LmJ=3 zIrord7iW5Busj$Kb``>MPUH%Gf+Qkl!{+?CD!KwfH(;SaSGUTtVe^?oaW`yA-^H*i z{*6{#K#B$yg3da?Sip7N@1S#v=MU4|9nGCj`Pq#bh5CRB!ehUd#aPiO6kc-}!S|JHnmB~d( zmVQN!u=sQ;M>j`>yEVLqf0L1 zA<^h9jnxmCzIr-l91>z~6IyQz5ta-8>*Xsf2Y)ArM&onyJ`99&5Axn2z4w8UK!}wx!_8^9| z23k^kmmLuZEKV^H?qGzmHw#cAi+(j;oXe8ok`TC%_2^yW3ebi&9|O9Ev#0PQ5YKfn z|6sPD>$IAT1Z>LQynrZssX=QsS*TZCY%}p*K-EcZ0IQRq7Grg?nmy?c?B&%-B#{?d zWkKEQiivy37Rz>QtSlC0mZS)yM}$+Na7*#R)=;d%=|OOQkZ_7>tzOv1>N^M7!0AD7 zUL-j8;l-WD64zhb!{9*Z@CX-C3S%tIvvQyVPxIr>wxO-%q(=h_e9QT5Ghyvee(Ta8^K9J z1(+#0Hj{H~W!paNa3gOV5n5#Tsg+YFXZ zxMSbTar)}%o`LFZk^&c+Gtw-iG2-8s#+ALfG%o8+(x{4&Miq^X;z;ANCX~k5i%1$h zyJ}+z2-3{ z76=^<^EwY%;|apzugWP;@USK(bh%L{Z%?iCEd z>m`*5Gm|$%g_??@BV+<98L?1x2tdQW@hN1HyS^QQ7g z&k42C%qbkF$(g1;I{n%_%5*G6Yq;;Mz4ku)oPF0tl=|=eBc657_ndv!UVHu8d#{}q zc`DB0@6{H6zlg)ar!Z@S@#!Ve;%<9J3VI+LOO)bWe9M?x!Z=#>%J#>=>9cF^A2|}H z9^cBZD;*4hbfB#CTGH9H7u~@6iB9beM;X{S`$ujpvh9(VEk<6p+gQv@cXn|+cJVaZ ztBx%TH5SWz5+g4jyEp;k0uROoUhCoPKVFn0uOQO#MgG;*h8!dt)F7!11* z#vCnknX!L!25DA|Kq#f zdN@0}RrY1ASST(x+9%r|hZ<3g+>#l#s@>cQRV$SksM^gftJ(%w@WM9yrP*>=i!<%F zr=coX#OtG6=j2Bphu|i-!jCEOmhrqh5e~7?-Si|kj``2E! z^`CyNv!BwjpZ+pW_S3r3Q0w1xEn#NTQEs1|$K|$+|M4|EckEa_2SSZ3?gRS`)XB|M4CEh1Gv$ z&&mE<+e(`<&8@BFLV#rdAB3_F?sMyExW1G@d8q+(0n4aw!JzyzjxZ>FXG>;$wm6(Y zxy&YBku|ANgBjn&dfh4n4|$M;$nOIYjwQyP*_+=k>x zh#`@ux3^?So@~7#N$((7I=I7?84~?Q+4nVB9uGf>)b4t;Alooif+r_PB(ZVZ&Z@O~8_Hj! zK@@Kc#(l^Ahks&%2M}>+rbBO!<>}uk(ENu;MeV2cKcB0AcgWk&i43F|^fZaw7 zP@KhHuAfQQ!H@(YtB_R`CHEn}ZhdzH|L&~D+d}ao?<5y8NZp!1JZ8Ok3|4wKalB|7hXHtUEGtb zvw!$RGaN6F#C0FvCsFO#mi1HTkAL(N`Qx2=l9~UyH`HaD>kpqlF3aOuG%ufP(M{IF z+1jV2$-mZ}KbG#%W@UJ`DZ^uD&8DfW*?4!>EIvYLNq&YH zgJ5N*fscjLw3<@tc7w-o_P0RDv;(PKwu&pY2U@8ZXrCh4Wy(mPQe5zet=zyR&7~s5^UbrQk*)p#&)?z_RyLO}nG-37(qQpaI3cZ+Td8rJ z*>9U;bmw7CBJNu29{ z{tf5)%hn&3QzN;)#hF-bA$?sY?jzIJru{{x_#)FSNA;7OU(_AHsJs0|XJ&@V(F`x~ zMcwg>PEO=senA5*c6DgvH!8K$Zy!;$jINVP;adN>eo>VFQPMLPu z#s_honkVqR@Rs$YH_xk4Y>leJhAWHptf6PI)*6mRsnpft60ISwT-9Uegcw(y^NPgz z_2KV#rO}mF6yFZFxSCm^F{JmiA z&EI>SA#ST?0FoEc3Y89Y9Z7+wa-9QV1P+AGxpE+|J42HKlY-5m3UveygyT7UAY91h z1K}3y4=bs1p5cT4t8c+uRbxo6|T`ZuX|_RxLmA|9y8&*#Pix^KPcKA@X8pWV5f z66%dbm-OYiwz3=H$oRN2l(qx~w%*hc=x*9m0o>NPT?|80aL z(%`nB&~9F#XkKBJJjsJMFEPj2ygAss@pkjRnCfcYBxqhP)x0^_yf|#$x$(StaQ-h_ z^ssDRj94YOO=*c8N=wL~1GU5sr6qRQTEc%uNP7D-*y z4-U4wuGA}e!^1_aIGTn}TN1uXrK8^JQ{$Y>n~TirJYF(yTR^Y3n$EiZKVS`u81i|}QLjp9vchNQCe~C+5kGh>@dbq(^7})d2MZF+< zIlRehtnlAn#VtMiLAmQxS!T#m-yN3pfIzCEZVFFsReD@+|Ij=>)#4((YPdz-`Rn3Vl*@F~2Ho!}V!R&vZcDc8yP=aqYlCiWB7|){_TBt! zT(_8w>lUqtvqKLFVQVa~=UR~qhtzBV);!JoAj*HeKZY~&sWF)UiG%#lN@@A$d)t)%F`X@4 zjV;X^W9NS+5&55UL`zp=OB1oB-;Bom&nU?Ml*^Xx^N0*dYm+(-y`7;Yi`3v~hpCpT z;a8jk>ScSH>rTsN{fv2_x{}a5kURNQ>3C_S{nE-7Ub^m5FCBv~U577SXQ<>;zZ8{# zwHO9G<*VdcnR)uT)|YU zg%r@2TNxj(Zc}_*lT_@QZ#oiht4F{KI@Oo>^X*{GyM^ z_!w&Fu!es&w>>_NIBGp<(?wT&{71tTfbdxZR{+8@K16(6+ERSH=qurz&Hbv?@v*ju zSuHNlRm=Y-6j&khCuf>P6nf11pEC-5214YGaO3VX&20&h|Mr3PjFJn;sW1yuiTHS= z-Lf>TWro*|kJZ+RD_+XlYOy0aDBY5++T32j> z-Mkwjq?XvGw8RdjCF}?}PesTR-4XIPCxw)MezJuK8U8^nu}#+!pXdGLQS!nJB1--` zL$dIpJ3^!6Q;p%H{>M)dC0Dw(4~ZywsNLYBW@wZ=tTB9) z?7;><#Jk?t2euF8mB>CHaOo&H6;BtJJ1MG(jgvn^tlZNXD~G(dv4=BSZn;@u>dJbh?qCrN<_?yhsl2IFe)@+E@=oKF{cgV{kSKc_hX9naQ5V488P4M*z1C< zV2Ty68^&HBg`+YX+`LPGE=gpoY5vNf*mdm&1|)|IP@LSImde zjdvB~@ny)FdPxo0y?kYCGOIyOt6p_27|p3DO)zj?0%RLsbf4wi$L%13=i zYhXXZykfDS6)(d7!ACLERtBs)if3b3QC$vKW+VXlLg3T>eNn-8tM{$0D;ep$rD7NN zfFA^nG22yTK%6jta-`H4AB}MDg}|>dt11KN-#b>}y1cxA+)Bi~O8?Hx5pqn!MV4e& zKCp{Bzf(Jldoj0V=fAj9#t(|&>zfA{c(RDOhnr@r!&6zxVIGBK$Kd&o*%A{gFarrp z@Ld`cFEA+t=DjeO1c4buV4eztNfMaB1ZGwkOtQfIn!xlYF?jzF>iZAT@5mIG-qiPp z!I%Qmhx-07m>hw*nfm@Pn1I0arM^E5M)IH^f%)MejVTnE{siV=7)+|bBomm&!(fU8 zCX2w#41*~ZnA-?U9}*K;E^X8B-M15{@82O&l?pYAK)p$$HYk)ypsHw;WBJ_R#fx4eYZC0pc0yUCG9apF<0_CGoClu;70`<{e+A1m3?F8yM8g*KsMiHp_ zG^$CVOae8SM!{4}h)<$o zxio5nLX9L)DKx59p^^yHzjo2OSD|_lsDm_Wn?fm{N}(R5Q9BeWfj~{CQM(jM`BVyZ zgNCXGB%}gWei!p}kqs$V*;zQAem0}nl!eVf7b%uy>7;lzKqn=z>vd8Ri_uBRtf|ON zieg`C6f=_@(@7?)(@8n(Wt|jY&*-FlwnirvvSOW-%I?xhMQof-DrG}8Qf0aIe|CdT zh0Fo->r}`LunYgLQTamu&vfc$p#D*(LgdbN>Qso#*>gG-B5zi$Q|o|QqEjJqW;1mv zM8@n6oeGgJOVOz(fZ9W+LgdP>(y0)cvNQK-RERv;$2t`vOZK)-g~*X@*QpR0vZr+_ zM1HJ7r}7Hx3v?<(ZfuH9r{xmSRb7Vkrj*6sSr7_-~x@B!`J)hRES&HF`Wu= z3EQhvA?{#Xbt=Ra>`|QxaRXbXQz0&3_vlpc``LJ%3VuCH)2ZOMvtQ{{@XMJ`r-I+j z&flv`A5c%~RPdYGdpZ^TV)mL&1;3YV(y8FrvMQYlek)t7Q^7A~GjuBWootj&1;3IF z(5c`zvhF$+{6ZF~Q^D_J-_F-%5~zRGso=M<13DG_GWN1g1;2|urBlJLVk>nj_)ToS zP6fY+{YIyP-@`I=D)=?5mre!0g>})X;Fqv}&C{hCs9)(+@GIC+oeF*fdqby!U%>^n?y@2Cn&qq+x2Ka~#WHB5gIS3I1MYUt?8_7q zFM(q^sTHNy!4gLMD&Fv~`q7J%ZTA>_vhBy-_GBBF37l-(nTL~Y`S$D)pEf(&&hf(P za-M{;yn#Zq`hr<~dN<(Dz5q+7Ey{A3Je0KIyBG4eMXv8Hj~0*M_FxLWM^*spCRhPA z`%~u1*}CQ8WR@Ixe6;#F|EkwKFq2+}kMHk(ydfShYDknMIUfJ#LYwih4(aVe`L<5- zWIFfT{5vz#tHkuVobKpk=*gx`)^R&`i~_UoWe3eF`_$x)OfwC&J*7d4fC`0 zI6s?ji+9B?uWHO$zSmU-f|uB+i930tobUZA(K+91<74?7Cpg|1 zOT2NQV6nUjosx*zHt+2pxUbQ8PjgVw`08-(usCTs7A;nzSwg`dz*mKU?wOf)z%hTX z{QI3sd-<;a!20gAsN&9U_j?X+1K!e(-(p4;chQ1^5ssU_e4pPGtKAgKdN^+CfKLi& zHw9Qzfx78yd{Vx4Q$9OZ&>W=Jn+Sbd@pY-AQkg0M;G8r^DyUUdvUmkrDbOC3>_k+u zYi=Zz?1ZVPodPDVP7_LY{8gaPrlLX{ccV+8^`C$cQOU?-r=_y`7rCy<5xOQvV&v3+R|4~F7>u0y{{?|541*xG`+U3Y7D(XQKw zU|?5eO=ZjTokL*TwE>bHvDNXZKyocqgT{7h?k@=@&{c)qvmvCdQWuCJ|MJV88Rb z-Bg$#uX078#|bFn1B#f3B%rMX6!QVa%qJzFuMtq(2NXBANI)wHsL}^iX|9%l{)&JS zJ|MQ=kbo)(NcREh<}?ZDWCCjT0X3T+UgH8C8$_TMA5e?=ngsN(1k~ySYBl#rKrbT@ zDrHksv-PwaCD88>Xm>U!DsNXvpz8^ATQ(?abWgv=s}ImSev8&YM&W`VvW$xc!F66g zvIM%Xr10mR((@kaxzBl)MBF3DpZO)!12mE3Z<*FG6Ci&)K~4!O=?k2^5YyDyiqF~$ zwL+Q-;_<-%ERuAo)ifVQx8a2&B@;jxyHlLm9aKFwkKIBYY)Zuh~esQ+E=2+#ad zXllOeR`yiR%BQ-wm`a?h#4BGR5rgiP{(TpW9y6ga{^)@E*2jENf}`W2%?s5DuX)%=&!eNe^8BB|6=WQu5_ZQ zm)N9>duM{KjM^YxP$kj=NW4&n@?O9jAFE?baT~Wk zvB^O}JY#x$yO_Iu?yEDjUmw@d*2_bC$@qr$RQN!0<@Oih&VaamyQZh~B5TanIHHSp|%=4DgdcVgZhN`|zE({(}P316sxnb~N>cjI1hFDV{9I-I=^`^}1jP`i8 ze4=$h7ooT8Go8yiC3n9B?*bZ=-?>Cvl8=AJrMi?Y7ats=a`sNdQV5f^Kne^e5_RExzz6csH^f6 z@O`Y4rw(`T*Y8eV$k7=-><e!g=%?oGC5&=920@tEC&`-!{^IN-oRtWkK~7`M5h1HmY?#tJbhm+^;SG;@A5vav*O3P$(W1S=HlHvk(V22(4Z z2Sy9XIU{>1%DgiX8TuRV8V9xKS*DT!@oC_b0=;RtyQUQ7_Yhy}Le`VKS_U4i$PB67 zaDf=qzM^a_2lb!63g*BNPZP*u9&y3Y`Y~XQ_oSh-s)|tx^G6Vdzcp*LS#)J^Icrr~ zKl5sr)=I8_eUB;fLv*&62S!2&7^cd_smhRT2!Ok__|Md9( z%kdV2%L=_{`~#iBSihCl6z@1cOP4HhlvjmvjIukvY-npUqoH-PVNAnow%wzi7c5Sn z#fFs)DN9R#u-q7`9T+J{&jM1==zA%BPyY^jdwM?%(KZGYNPUG3v%Z8utkR9DkiMj* zIFwGZ$1->MTr@UK4~7_C~Wjb&B%>kv*V9IcxO2YMzn>8IiaP{<1auj zQiO9BAczD0*dTyrH%Aj14jvLX=63miY{u{&+&K+6f_Y!zB0?3WwVek7ZKeL=Q5*j@ zv5vlT9;JzZD0^>}0-}8UAjN~Oqkt%mioA~I8Tq?_iqNSLmUH+>(&%TqC?HhxTeHwz zEvVQrhykgT{f$7{cUo}@wSv4or_g1|Hih(Xe+hRe6RhM`yL@&hg2kz#4G((#;%2*= zXfQ*E7Z#uo=7p2U+XkwVQgb0TjCq_*km>L=0#8$5BN&I+^!qw+ zs|Xb>R5>YO{e~W~%O`DizJ@s(%}VMVS{9J`zEB(Cch8-K=$alqfGKb_J0?q(&lm`6Jqor#$X6Zaey_v3wx6c}_z1>U2-hl%HG zhAo;rW?S>f+LRnNs%3Hus;PYtTm35H9gG?Uc>hZQ7dUE{Pj!J~1dLr>^J%xxKd;N5mQoakjRRQ77Q5!-#K&d z;Zd00bkUy2)L}CxtP;yGLgsVdqd-NNJw4M0*;}KA_&Kj?%|w`urJ#7Uhu}0(y4N2a zS!<)~nHaf|J4+R8^DK_*S+chnS3g-vT!^7^@Efpzjuv44h?74e<|nY3NRM8@Gw306 zyPPBH8%HjE>K{dp4kme)Vlgqx&8{Ozn{Gni2C70&8oj&uK(D^6V(4^L00`CGlK+s+=m6yzx0W6~nw1h6`9$hI9H;;^>err51+`_Tl%h8!!r;x!k5ks%PfF{Fd?kPhY?(m{Dh=WIB^kYdb3fA^iUizw<0)iWg8OJ-4yRv=;*df`Gj;UY?| zt{i#AH^!;;GBPz8?_m5*l7AF35%&4@6S2?F`_s{|{*1gMJ&Jdr(sz3rv^J}YfA$Dc zXuW96qSr-B9+>dww!}l3L5RM_2nEcxRY5iI0)GZQLfLq=neCe9etH}f3BU!t+vDu@ z;fanfus%2(KI-G}gA z>Dj^@{JX;C-_B%vIp<{a@bBkaPcYd~c=l7m;KN7>Ydz#MGbfSX6-3flIv#%NVLm~L zdPcVTX|>Hmt1Vd=&L#}6&Zbqf;7dR#C%N{^0aPImO&>t$0v*d^Bhj4h8i$VQ? z`hPvBj~vS}sNV5JDT5naBv^e+4ou^2HzEyWRC$VYq9DMXKT@jUaHa|yZr2ws#sT8m$I^MaLTHp zvSM;sOoo)o(%iDbaI6Eleslve$_R+~{>J>&@z+!V`#!c|tBD4)6ndxx1y5h60#HzI zDvdI{3W@`Y_Co2hB?DOBMC*{)^?3YEIr|^cWl%<9t__093;k?~DrW!DX`X0R6edyx z`rj^Jy3T1)g0&#ZHcE-qIcWWuI>XuhfC(yz`>@9`ip-1eMq8rTk|E4mC{T0#k5%wy zlI;fi9uI1-K=Ytt9-uJ7#&ad6W=2qna~5PhC+e2Q zpAi+Dx8+Hu_9PI? z5)kmVm3<1$oI~~oY>bmmq_X)0TZOO+fJ%PI<~W`e>)e=DbbSE$bG;(?b3Lws?EfCe zY1z|L9H(U>$WyNP$>hG;b<7IJ?9nn(f!3K%OhFYWNIncY!5I+OhW68AT%1RtJ7rf( z>i7w+;fHP92{5PxXH%LcTk5&cucaNYBc7CYwWz8#PcE zF+!mv46fVAUmUYCM=>c>NvsOsu1dPxIV=0VJUYp-ZT9)T}bw6DYRQ$nIGy z4^Gg!)T*^E$r(31Z_j6ySq4}=2i zBQ@zwi3&2pET{@WOk99WeIFhFlPCfD#VF|)0aMU+-cjYtYt)7)ViauV^xh!)6vm;B z=}n4TKFeIUF<=F(CmC8%Hcj!05x9i+qXGrl!^W^t!(>b$`FNU!#aAW`S4SQ}0oq!A4H7FD0WYsVdFg~%3yZ1qeQ4TtvS zgJ*-3?8Vi^>)iW>2{2qleZ;h{-otNMN6iK=o1&piIh zTg`pXjoFz#aQLZcU7ICl&{5fR$J!&Qb?!UcV6~?s;+<_qHPUAw>*#20j1=B~3Y-cH z_<0N-j%fIjtITD?Gi&K=2DNU6lbVR4J}$+t;lvAE3`9J7t@CdsI~g#3)H=b+LL4+| zT^FgoToK6C?P(2QlWrB3%1NUg9ilmc0Jn8XeTD%8&|SX0;ba$07`DVlm|{~Nw{74l ziKMd_yM>^k<^Pn4J=|(oi@u>`W0y+%`t@d+3G1}Cz^gnM$UO^{8boEw9zvxi8x<@> zkC{ylF8{33(wP(G^C$4*laYUb1?W*vhnFhp2LCXg#)eVbyukw(QBu>*cZ0U=oJ2R( zM)U&oz~4w~ej~DMJU!DoFHrsDrgaHJF-~Fy+UC9TFt$d3ezYx5$;+0Jh~shIEVGMO zPRX@#hCqlT&`b!RUwFrif(sp~)!OqUQ;?B`8(|`DkO7uhRd$M1CFwg~*PR1)s@<-~ zaIX*nwZXd1S}7M==@uFn6?cEp3QV{yBsN&B{{2Fp_%Lvxa6kC&-w)y!6dB`IPiWD$ zk^+k~0;_3;iphG-g+iAL?W%3({aF2}ZG)uSRt<#Nm<0zVn{9t2y3PJ9irLB_tkd#- z{uM_Q2#L=PfTOw5h;!rC-Qa5=8|7&cJ}jzJCK&FI zvVP|0zgsEW%KK3Yh2|NL`kR-&N^TmH)P2pG?Qhl;U$fF-Pm|Jx<~&x3`N-4QCLkS! z4)e`>pGNeBo5xmjBP1Na1e#yM5Odhkyg;s4|dQCuYssBO8KAMXe! zka4}22cJUb(Ce~q6geAVubJS)8<&Zh0hty! z(Ys!CY0$gw)~GUdvUT@V^VZ|kDOkN&cRQnSG(@{SQ{j`7^(H=RoyV1|V&>#7=BQK5 zQBe$Q%~6>-^@RDH*1C4{a>+L0OezPs2owC<4S`1+egU2xbZlR~9S3UO4~eBrT%;M$C5J-UN&)XSf6 zIcgf1`71jx&Ko2+_Q0O4Pp`92s($AHOw0@z=F%weIB%icZi zyM*uCX#o(}W24~{$>)^#=D&;T{q=bZaPXZY;d{f!dGXC7uk7K31hcK9vH%3-!jW^? z|7OYK*oQ}mkbxzcqkHHoP>cD&?lIiQx9E#I03vmVTgdXutB<6b-1imL>>b1I2ye_F z^Bs|7zC*G|mOI`dX&TL`$N3Gb`}tY{S%I=}$$snaX}uDf3DzYw(cAdy!39!Oa)FAX z#t_Ew4-f)EtGMtuzwl&%9-2^Is?QK6b4 zj|NI8p|#F$LL(pgykZHHq?sBWbJkMxmT@A(7eoi2Z4N%$9OlN|DZG*>W4z!jv-I!!%PaTRtM1IMrIBD!bV>7hdOp^Z#RCDQHoGgFB zM4*wMA4eVoGiqN>ds3tc*j=Y8%$XAQLB4^C&;}|(satc|5gBF5|`=WmHlbs4p~Ed&*$4N*Ni$W(L^9 zA#=qloWrPw=2$ly3K}@2CiA(JIRZ+)>rrr~;DvaatThQ|j-sU;qyk!P>1V314 zNQIvOgpC~GUVQOfWDQURVsGsQB7pS7%WO zL?KbcFyn)V4;1zzio$JLXB8j7I?3HSkE&a@(@Ffyk91YtdYn3Ss?MoX=Twz-xO*M& z74G12tpEO=){;ES?`khV3QvO`R}EB~KytRPDq^BM3?kP^IBHu7=N$NL@tJbkk_?=K z`@q?&MaQoDo}?NCg>?e(P*OA%EHU$~VI6$0EN>P>b%m9|K!&W84swd6r8$*#pz1|T z-O3yl4Zf=94bpPwcZivr;{xDy-*pa9`FDJajdf=SITb+D9DsBs%((g#mQyOQb#U97 zyNp74)(lZ=9N%MvL5fwtlD6h4ojM+PN*}FKo+m^dr94{UKH5kv_F5l3Li_%l4m*F# zaa05UJbeZnfJWhr6A%G9i{ke6!fx~ZZ`74P(lK~Y5v!=2mqSa)Gj@Sh(H-dX1fg{e zp*3Bg)wh|}+2yz}GZVqJS)yMaLBb*%?V&to`2|S1zeDd}fa~Nb^m!@O?4j5_8V>^B zCbovuqhCHjOJUFTnhHUzZPw{0H9Z54h};te@ce9nmJkYQyG>5Rqn$D>Az!f?PN3dc zwNFavs+w;6T*3)rAn3Bs+ci+4#d&nJy7osJg@CHDvTT|WK8L#rWMy4O1?AfZ`O*!z z1lBg7%boYpms#V@CW4srog6VrLDbWuL z$mnos7B0=KPnnDnRHlR|oz(~D$QbGlddnEb$=@O1o&<0I@LUJEQ z-gr*%GxC&HQ!4U9Q88&#)992R#5~2slkfwU_bVF((KTZ@7!738(p{WNziD>XyJGY1 zlE6E7$~53QTW~z&a~MVFshoo-qU$(ZD9Ul6C`Y1b5S^Rx@lzgLe-Y`$4VVcH%yt^M z@n<(Mj2b{C*16Va>m+%|%DEksL70an+UIn%-Z%zmQbnB#O7E|~Zgcd`$z>P1NQAsz zwUV2Xm((Q|JS`)^2~3`3@iZgSUmYtLL&X0Ib`5#e;{d3>gwxepnHN7>qp~!X&P_Gl zsT>J8^OOe)5%vDXsDiwPlVMIaQqtvgXow2~3@dE(lqxF?UBvNwnsqpZi-KQ-*J^yw zwqrl&DlHPCd{t`=%>#zopG=LFY3&Cn=~mSo+nH0D;ylWAQ(LR8=Ll7vN~3FI^1yQ` zoZAt!m$;$r1JGWrL5tR>1FW83xpZyWJdiGzAUayVJE2Pze?s`DXF#{dUZ7I{bLT(_xo}O3p}in z;W50}!$F!@mVTq60-dSs_B7GYf+R=t>^-9W{ZVS)pU97Ng9+W7AV-R$WGj~k4VDKv z2Q`+5ax5|ZR8MG5D!9_-CX}Ph?qtWnE`e(3`c&8sOpbzpiS|uitDlJM0=x_4!?O=$ zGEs;+l|m$~D2T3wz8c&|pKsC76(?xAVe`@}@f+y4fh<8wLk?d#yx25S5!^yAo?`7i zMkVv4DjPN=>o{?m?uJE4!G_@-w@(8qpEhb+n@wfL{^>>9uA-^?HHLblX z3?++dyic{j@m1D+_>*y$sN5R!Q>!hu%NGEin@)K{Ys80p)_K7AuDJ5^L7_SOLi6^C zRU);?w>_8%iloFD9c-r>B@K`FncpkR_4S6fQLv8J%9mT^MMmOxzQK8TPda)PXexcn zPGF}q9$je~c2>nzgpUQ}C5j@&T=YE3ngX2yo?~Z?=UnpEQpgoxCN#^=8Z`l*7cN+Z z&Y=TWs&YM{9C*5(O*#5gjw3ZHhc$t7oD5QuT)R{AvM-2{12RvzhnUW9#BkMZIQDUV|c?I1Iji-?^yJ4kJc9a6?(Oew|` zmZJm`%8c-IrN|6VvP($Xk~RjHIZEDfThk3Px(+DbTWr%#TucG53JsB)8j$ULlW2Rs z5k8Cce!gv17W+EJmTGXn`;f;7UnC&h`4B+(UssyW)naO6ly29lvn;*^7d*nKhE-6* zC8CB0u!i|uLoL^U3Q{;Z7E6;|r>^G}w3{&z3yk6dYq$Vi$(0vm)7>Je|5nDbR1sv0 zr=l<}ZAXT`V_mfiT?>HJJAEIz%lDh{!S1f!Z}x2ooPu1wEvfC_Z>Cp&{cyx2SCXy0 zV4mF&ME3xG>36$FrvG6=n_Vl{I$Uk@aka&TCm_~Ym@9MWVB~giKdCHi5;XVkrjvXl zB#T9XuCr^V!oI*F7`s3c%);4UxZ->2fGtp19F6KOh^D$%CAyZy42Ni6EmEFp*TW!rW z)>pODaK>oUqaK4AukPCv^{y9DvH7m{t`>oghHS~B?S|~Gi)4=ty~mu`qbCO54x}S7 zz33pq4|_w&QqF%AS&HAyQg#WBVuFIfx*Cm`aZN!&76`eu)wYRV`(KHc?|xD>>+hBO zsoN_+V-odle*}4}AhK=5O#`y|7aqap1McPpU3+ZbvKm;!Mi-WQ3^OtrO2IlvrwEzw zV}=L7k0(4dj<;fjw*CkpW{nbr0S~)F$`6?GYe>nYl zV0?fz{r8fGTZ=IWe>jUf_Scc9IDx3xR3}mKc>*dPuS*62Gk4tDzMN2EUeXeTysAn> zo_!A>@0z5@%O>RI#4jAak1=Nk1fI?jQ9|2^u_BrwqJ*;}W8FB5uS(kf+o>MN&L|sN zs!(=qX{RV_FRu-@vQ-i5e{OT+r$$^jpEEW2?WR?l{N`8ko1f)3zgvFG+@Q;EqfC@k z8V*SL?c1G+^4qmm&20*l8*WP?%0VSUlv{WJMY-$oC*y@@geZ5{w_-71m`@NmN~8lh zqC=6+P{hdr?6Vy4ujoU`?TJjLh8;}AIt6xc6Ub<3R&Cds_sdx~Y zV|Oa>C*u;)jM_Z{S8jZu@!DCz#C? z;u_<|Fbks8%j7OeV?irNnR4O69$^;6fbtXrnmPs>Qq>1Wi`#USWSLM)f~9OQL4^$ww|MB-tIBl#BMWm2a4RqB5I@kyr6>-j=f4v z5$L-SMKvX`kIXn9a%MGML3h4T0WUc66}Q{)cVIsu1wWF)da3gdl-56IH6eVYi;)L8 zB3=ebVi1`NXMM3(JS4TDNd~}bE&sIDrcm!gpj$I4>+!m~aF9|@9n?}iVW4gAM>=g^ zja6k;d?;!AswRiFsg75;j-@PUv83p64tYdYo3EJg&3$iGo68jTSOy6 ztv}3$h2a8{cS>;0#tQm;idZU%?N`u_{Z#8FO81y-eS$fs#a|8bv$_{eK6 zh>HQ@>t`l`_z8k|I6>T(AbwTEtOYR%@i9Z$BCy@qath`}mAfn&1D6$%(%o@w4O(02 zJGhzzMSsEfhV-=al^KH}Sv`5ovFBlosWc3rp+a{R0@B}ja zmS!`Kae-h1(IJ2+xb;b-mvN~;W;_F;CP&fs8*RMiET9_HWn`b@IAuilm@r&bG!>?Z zpJ=o7oZu(26}S^w(9lQ~4|K;?!G$~E+lDUVfq4I=tR<-c9_aeU1uI)ps_AkEL94G3 zH{y^PKAS_Ha4>#7FAf#4?xyN29jf(LKo|%_PtMwigbkrUY#;RxlVflNvUOmFl=5JB z@Lf8CgmZ8+?Bd1-*5Sx?3a84+z4}z?L6YY9_vKWn->OX&S#FGV?u;a}r3Xov-uDsx zZF_OHtQJ4k_@i>Rl=VSqKnkp;yO2b!@RJ!H#-W^WK8Nzd!#NZPk620}Ae8Wk_!POY z#xhLeW@t>t_m`Id?6L0%dnIriOzf!mx3ruFBa&o+CiLF@+b+=C*`++9Lv_@lI)&b8 zdvx?(MCd*8u0-$jdKY@@7`<=YlmxvO5qh6{7t#CV9z^dcfo$u@7ZSZ^pW#d?xP?T3 z^bU0VHT(ew<|P3w5}r}Xk?;*NSriRVkr7a$mdc30V|ZTtZW;B8XrYXB6Opkp(j8Q< z@nW{^MD&BAh2wD9LF@-Z#c|-ibmCr!f9S+LYIF`x?_zZJ=%cg88J#^eI_$f!Mvcz@ zy{C`PBpRIw@5s?<*z6jeH9R`G)02$OBpRKxcW`t}oC6t;iTbSxN95?->!W8RD-3Ov z(9%4d8}-)Q?J-X7VH@)Enxjp;DB_j}nY3Czz{d1EVANt=>R(MBWD|HTmO-gSU|dY}hFm3}*tZ;hIk ze0;1EH^K*4_^o3i7&T%GdQ&Exuw;~>e7M=^Ut^!>i-sK&a#>K?)7x1W{6;^2uzkxO zHnDsV&W0P|Irc{1vLAHJq2A>PwIVR~%^<+oFKPOvixZlz*1GL5?KSri)5g?Jm^OZQ znD)*05z~g`4w$x`m3k2}xDTha*;egTKr6^?u`@CRsU?S|=P!e1|I(iU&B6;2nyUdC zj{{9*x;hR5c$Ez7Th>TZd>v2I_R!8)`ir0)@^heVzQBYP0U8%Iz>if^!bZb(*24l) zG2s!kNH1&n6d>OW$dorl_3Xu7D6EA%5xkQoP}v+n@!?EJOo^m(V%l=vPs~z1OtYR6 zvxvW&(x=7U`I!}+bbfPDZeV#)W?K7Vd7TyuX8Ln0lA!FwlCDtZCumzjaEbuhIE?cO z<*OR1OE+*0WEEUZ%UX0&VynI{`?Adzs9!;gG5pw(ODubGo4wQzO3v^gE%Sk2i{)d} zWQFvCo`SgHENBWfLj0DTdWOXE{jRFoR6GNu~g%heYVxgb6a_Y3i%5(*RU)`Wi%FMRRD z)9D9erdx*gRb_i|O?iRW6cOCu1UGV!NjU(d{Fcrz_%5BLeANz!ox`0-MYx|65p97_ zdTg1gszy16Ez>JV;5bB-aR^(ze}xnCEL@~QWgJRfn9d<@czS#`O&%A$^#Y3w!I4KL z5+d4PBvSC>Lk0Df6)WmH-HipK4HDR9LkG6SaIO*Z-M`U^d3^V;a>Z($7y;daK;IF+ zCkfC~j}p*VB?3J<8PL`c0rZ>KE1-kjT=;dt?}`X0aD07L-{Q)X!mEPx9^?A+df7Ic zNk~2D;)x=J)kMbP4LdMjzIoH7^Pu^1;Tv+kJhjo8FB*|WsbikFkS zUj@0sn&DgydBUFf#he-X%T=J|Vn0rYA>s5C8hB`MB&GOP)>3oz4qd=!_QisGe?oIs zU{a`NMLJzd)`+H@4nB_}66y&F_3e!PpF)1uJ3U zr$wF17{wKzEn%UdXHycfp+cwv_!Y2vQsT3w>TUCT&QNzy0I zHC-DRZKwT9_A*D#P1wt<26D^VFbF03$i%iJw6i1fi-hy#kuEWz5%~ixg2-Q;D2Y5i zGJbh`NG|IH684=;_lQmxg_iCF-Q=4t{biz2o%Tuq8DU8E?W`c$g5s$hJbe4lV~Ho; z9h|>OQz!K8tN|O0$veRHnptgRfb#3XkM}py`9Z=y3yGL-B|~!uX5y`pjIenN-3{aH~yjie2308#v*K4HQOcE zc;;D`{#+Eg-tvW#C`F)TQH^)c2*t^*z*z(06h0)Bjh3-B2L_|&VD03IN~AA21EpNBsg zMdHU=v=;%N?*RVcb_9HW>|4HNq=g3sf9>6&Y7W9A-okm%fN!%gx0-K{Ku2D=F$qOPK>s$pk?JA(;X)yHBKK|X;S@!5R>=hzZ|#w7ox8UskjZ`pqngXF zl^Iv4jGLT{eMH6;m~qKq`uM2xu`j-D0(=jFh~Fuzs#R5$I=TDtS&3+KqRd#QGLCgJ zW{Zq<)MgHS9PE7TpU~!P%3-J+;;Sv#{cae9b1GXhD^F!caw*fn*R)K&%~fdwO{J%d zr%RaD@UX1mVaeA<4Tnj_8QBL^AMSn4p`QYser|Hn507a<>{(MIV7oa~EooV`=TJa_ zqJRRXfCD-OBm)XFv(kkC{ItPE0qZmhD3Hd?nDK87E(%!hqJX*vHw6^P(I_AafT}jA zs^&JhC}4v|0R?>33}qbM;G%#RTojPg;HChrO{RdhZO-5pbVLE4=$SMM*r+I=fMY-b z8|B1A(!esKn!@As*y0S9O4WJ^5j?=7U^QQJ>$e7O!*y#xybvo8Lz^uYwy?vA{gc1)xGuVtGX9eOdDRZo)#CY|A(kz7T7B0 zu{PG_S2MjWir(b9TvLhL_a)Kg^I9dnzkjy7O1von1*^o@rAnO2ahhE!vDua$wjgL}O`#Io9lge>5+851Rboq0mAKZS5?ho? zT+1VGtx|~tJq~L5n?|YBak@@ymJ*SbYm!>&`nE_bTglKCJH9QNezh;DU=P*U9LQiX zop?y`pCr08k=5d;K)s^^Qlz(N6{y$JX#_z9>Mv3*HR^Jy(Uwb%B$pObdJ&9#BHiE$Cz~nH2}JP*i+#oh~X&vbr~Ms}vQlJneu(DP4t?J2i>4 zfW$&t{ACMDiwECCY4Hn@zcul&kQSoGCN;mRQPUf^PXof^vjs)|7ZjtB#Q-s!(}w4-qXm0w?eG(-pchyg>&TbPI~@wtnPa0If4O&gf?+sO`*;Tx&n9 zs3}knRzCK-&-ZvlK|W7yM*xiKnR4HX&E+G+H(%bPPyM&LZgs&*&S9UwTuD9bnYR99S)c(h(9PRiOw`0qsB<(nl z+OcsHw&VFd)Q;j}9X*Kc*ywJ@p?k0$Aw2#^+L8oyf*P7sLvcw9Z20YEqM-Q{D)Jot z$~lp2-L5Lr2$~1GI+S>p`DW~aBdm?wp2w_=a@ts&?Ewm@vw$ow#~wiOtp5Fybqg87 zx)xt@^D@Ve>l{CBbNo1QypuTIsW?97MV;dth~sxRN{;{b=MIi{GRG%QOv3RE#PLCm z$nn@~$nlSM3y$C2jvU|Y=J=jhk>d~^UvgOw+~_5mBYtNN4k&#}yFyOId0}&|Qlo4< zl}_bhd&F~d$YvzuDEN88#ASZC@1u^BZ)YW}7mL;y_g*10D6dM09 z+ri0?iIZ@-CA66Dssqu59u>Yg)Q|6$2coc5H$LB^b@2Uyz{TOANxC<)F;iz_4zh8W zN4*U+u!UBY*~IWf`?=Ip+gThQp>nTn_qwvj4B~GYE|MmMCpdE%A0C!Emou14;xR`S z3qnr97KKV3&r3o@j^{9VJ=LC9gmN6u6=828M^h*9O=4M<6YBGtM>QpQ0EBZ|^-Cz_); ze364MLURR~=cLw?U2pE8uC6NBfhbp!O9|`z0&#|ScVGcT!4{UomhZ1HmJtqR66*uY><0+fU*OIbQ=t31In-xBkh@d>ST~2 z{%JaOvZOrcA>4)EY^O-Z)+DlR5dRdl`6*HXd8S_fTgdZHsn&3TC^$Z5n>3lC?k$tK z?vio_L81lulrv-rJ5HeNqYZQ;jlDpWKr1|6E+6I4f%`-|n-poJSA}R1f*6%pt`RYK zvT6V>Jg3LP(QFSyk#6Alk!1_qCJw5yb5z;L?Y<7(;Q1z zx|XeUE#i0)4KcWo(tRExb_N~K%T=uoAw2%I7z^?By{L21u1{ptNNlu5RK`^e>50o^V2r{V)JUYw z7`)`9v`u?HPgqDUm7;vsN1>ejdNmCs*Iar5C#TBb@E}`~kXwgAx#c->W4i((x3OV48%w8&0t|ZczQ^KxcW)Bs@nxo?&w?pI zSmud8N$P|i;6x7hfE>d)hu{?*eYkdRiM>=GsR9nP(`{K((hDp2B;Tf#EY0pY$qK9+8Bb2)i^DL+u+#~ z5V71;JjeD-CM+-JWG#@?%K2L!Ox z)S{2<7JVc~w<`w;Ca)RD{Y^xH0NxLTnc;ZZN8$D9JW7txq-ip05Ux`p85*c|3?yPR zeTYsFQnXsy6~iG|L?TsXNcJlXIE~Gg%F#|vpsw7j_k!7!tB1~k!FU;~j{1$KXdd~d zP`$~cH()k73*O|*H&7bbm4VGxg>XPnOsrL}%M|_NDsV;s3a*S78pVew#Mql}&G!+D zmXh%}cf2{^U9YTQjurFC3}L&_D7y9aly{Mp=EGg%Wuh0r!35-9py_iGGb?yLq2@i6 zL~=DK51Im1lV+}#Q=n>-=5f0X(i@dD2ZL!cz-Bn_hMO5}y$qUnFJ*PI80I+D<5AVE zFzwWG%2r8z326%V7I%yBE{oT^@Z)hp4{X|o37{k>(fTQfpDB=NWRJY9CNVwEw3odi zHfuvYG}|j)n#u~Lp2zAQ3>yF4A#JHV9y#6B#Vc4wXaL`(;nc3!N8Cqg4iCJj3b%qE z5uzxfrgo>F(WiEQPRFTT+A2AfwWD-*TAvjpnc6{OF;V&837pzZc^0R3jUs<5 zZ4XZEn%z^o`=7z79fT)_#i&UD=ho*6Qz*_ZmJu|9!4$92VE>?=g)}?>CK~{lqlB5MiH+u;<0|%lDebDA7}n zi2FN4oOi_awD=92FAB}}WERek4ok+Sd##BRb}Q$OZuF)CDpM6ogY(;EwSlH=f?jhHqs|dD<>l{2NZDC6Rvv z*wUeiMG3hnIJl8HSV?EPn0rAaEGP)8U^N0>Sqgy23Lvr^h%B&fU?R2I7p!)b;4W6M z)L$|>+|N$5_XaCVq)0$@wsQo7ECN?zlco2>Kc{~)H1+In8l>>IPC6BEoX7Wf#NYCJ zX+vxC4jq5%J50^77!kPp+C)Z@>EqKdQ~EJRU%ZC zkEtpjtEyB_PlD1U!m=v!Ry(TlF<0e-A*oTC*TPtpNjtGB=^}qC@e)?0!d;b{c3@Q? zJpPA%gwoh;uTUBeN`=xu_?478C%7sw}JD2eeB3-%YsDsLa zQ3v(RsDpZD)ImKn>Y$z(bx_X=bzt!rKX9&R)M0Iwqp`O6ahSq|P={^QdT^N(*l?Ip zhix=cPc#wgaH0lLhi7V%pbmYsvemM*>}tQimO%#fEd~o4D}f*g!pU5HwBVEvkBt78 z&(M_ky<2F7X{TQc{P7ltF(oh*<%h40qhL;6d_JA>QRH@r-0&vgyQ^)mB1aYsG_@Np zKtiGv@%9X@3ZZLhfyVNY*0peN1OgKjB!LNYm;;#j`0V*qz=Y*jfdjS_#`Y)X4{W>k}QDXJF);)S%lWJ`^h8>9h~76TUSt`DPHTOaA|%j+{B=o z168mD>*McsxRJOCMA2{)!*5F{xYuwKe5K3B|`f-Q$r*svT_wv;6#b*zp_FvM3+P_{rS;L!A`&YWP z|Ef)>{UJQw7Y=?mbcZj}{S06DH24AnV-%*r7q{y0h16T^`Er8ygWwlR9sZE`Md5=Q zezE%>egOPpWG@?)z;4|`3&?}w@$X;_h=dQ zE4UanS-dKQ-=n3;Rt7NXEH8bplyNu3e3jQ&c#0P%12vqSWl-Y-uf0YTu^AicvDt1; z4r?_1T8A}m{U3rg@Y7)c-w~{FhG%&weC5QHay8}4jV6ILiXMq9!~ipQ9A!y3+I2g0%DnokHFQ7OfZV_1B z1z6+C1qf@v^6&ebH$H3{Z;Ibn;um?uG>(hkDe;@W#5591O=DZwG^Rdk8vpi~X*{>W zG=_-l9uYQ2gv}Svi$bRHg}By>UqZZFC9bcC->0j-JFa0bRZGjz*l9}Cf;{>SETIK? zcCcW(K21!-Ln?Sy)H;Y~FWaYqO%B2xN_E^pPiMRMbK(Pvh8_V2EbXSQq=3T@jW;wI zJ>v~?NjkTpOw<8~RsbA+sQ?H3bkY%rp$c)xwNq8SeS={wl9)UU1}b#1owCe{hV~2xt6@uK;Cxnz+G=v1<{nD=1e!Cp-$Zkd|xEN{>49 zvX;R-2(|8MydcJ67dRB;kRXO!2+dX@6GaG}Lur7{wJFPA?8RAhsfyAM5_Jp_QP2*< z9GYsD1Wn%ukSLhQ6k=hvpT2O>{aR2v15?}S4McYs8d>kh++^*IxygDirjaE+xUwFZ zKx9>@D3O?pEOOi?$*M%MT76#W21xvIkmU)~{k_IR^a@vNVc)1$j0H!v2nSXhk=ZJ0 zjJ_#R|E9xSA8yeCPE`YYQRR5p+nC~Dg9nbREsZZ1y(DpkOb0pz%Q|8$8YE=(PsH1J zn@3~V){VrlMJiXS!30VRjfh<)yJxK2vp8bGASQt|j?+Y@A(B&9`nnB^!40p|-Z82Wsn7_-Vf z7LoIXW%Ifph(2j1nJhp`Fir&MO-48^MPe$)`MDJ&-klq7$$?CiyvbbZD`vCXeC-?yO z7mCxLJYjn^xE2~=Cy!%by@eKQ*-=1=_1F`9o*EAC#y4>vfrxNS8N~rai(!_>V6?!bqA#_mJvBEn$JZCwqP!{cru*sjXqAc!HeN&Y#}*W z;&Z(3uB3Ck%J_bFe~|e=g0BD+BKqNilW*YQymLk*P&>8Yo|+8t3S23%zel3jCvMrP zASD$)a`m^x^>b>(w`pS{=X9YQ`buB{~~kCjGga-b%2`q zeuHSMFfPuI%%XETZS#q?Vny2@?sNN*nPUAo8Ex~4wy#$pZS#q?Op&>@a3j-}7@_%A zy$t46{S$p}1`i@CbQK+~mR?IP#{NSfdb>$7$~OMce;LWBW;N!&)o6pq!G|fthjS~` z`PaGKWz_Vp^WFI{h4}Cu@!=PE$=dY|?8jE0OXHt_oNZ-U*=*<*lGy%Bn8alxhFL@V+tRk#mYB_)gKbd4 zwtn9!>u|XGbv3N1|5%S1kc_0ej zUij-pFdmWNzk>WGf0VQUSH!;4`=Ln zXe(8;l`?ImP9Y!tvrbzr(KbZU_P=+#h5U4DUNYKhiMIda?CIm9Dz3d7c3~5O3{RIsg6-cTSVg-q^(fCL(m>}f031YP^`dY<4Ej;?F{M7mq z`r+pBN)n(?r1aHlwXF)Bxbg!PMKsBMbIzH$ckb>@pv@oI`!RRs%$YOiduC2hdd`gm z+az8&d!$jq2Ejyqb8UVVG6p=e!UQiWz=JLI;E=p9fp^0Ol^@U)3e<0q;N4;eFAOs1 zzt1~>*GS+kBJf_qAK#h#;rxRJDT8K+GggGht%8MmA$cJ=Qf&00zN$Nq(x}Xw0yfGQ zM!SxQqSdLUJK6jHKw0Z=^=khWjmSOG0R-VJpwV!YToyz1csqOK6)r!IvY+uEJ>Drc zCmBkc>$2~>BAgF8w9w=-8(7`Xfh>Cj!@%80tEa+c0xlm2T5RM}$z;g)GCR?Ijay|i z%6s(JZKgU*@sPH)ix3aZY2x9v`&Dwdp2%V5{gNCOFH02<3)m~?9LV8%B8PMLAvwH- zKfc?59FA``4_pwsgWOUt!rod(8%IUh%Jrsv@NcPciI6ZaSP1syrdv#m#l~3}8wr90 zE+KZ&jPKc&yZa25gCN2wRm{UL(ft*phJJA`aoz4y8Ok{L8xMt4c-U3PR$?RT7CAr8Xq40vUVn7XaZnI}%qA5?`)DBtC&ZzP0>^Jywr0 zwq~4(x>M_D$FJ@QVt0a8O)T5jF#O^~D=y7SsiRtUQ!TaKe}N>eqb@6rgWh+nBfmZ@ z34oUZ~0K2BNrO+C)V^?XO29n4%(B}pgl>0Rz>G$!=UvnQU`4#4cgrGa?ozL$u?;G zqnlXUS%*Q}NQ2gUFAmy!_~Uz)SI*wvM0@M-0@k=)wU##40T|b@HD^siU49k`)lzFB zER)K@gJhAzh;qicw#lpP7e${PyN9+#fzPt&(d+l1?*VwvfdTmwc#LJ=qTtFcD@Hdl zq}Wr`B>!v2<5?d4Z}5ES%12hRc<4{4g>_Epcvtugx`GeqfN0#1(Pp<_2T^(iL^8?mu+ zuXI^px+tLI0U1VhHv8qLFhJd-Gf3Ogb)hVZ3?NG@@^8P&1>`*I5H7IK;k|}PJf29o zsY_E&`K}(zR(%R2kS$=%mc)g}nKHy!y&3yuyGcO~gU~O4nrpK#=#&FOAM`We?%;~y zzae{}RklK_VE^1zXbsA`|7ANap9pclLPqsu_Vp)x282D;!&v(#z2d|T01rr;<1}SA>;y6HgXatdTtj4*Ekkn8gs1FcZy62@mWg~(hPzZy%qj!GtW-X(4zcbtsr@nng$IdMu^#@CCYWd} zPngdU*=W{Qv1NWHdlm|7LfNf3AoUlil7Mn9cb^(Q2G1-FI&9L6zFwh{o8>hbK@oJb z{Z-EG1HAtIXNG{KVeTg#=4FAff=)Y0cMndfIcuPrnZ4%s@&>3`t@Iap{h}+s-d1IN zfGWe?x4G=Vu5hl`5!jg*3#@k_V6$DeO8-1+AaM6;c5q)Db@AXnGC<8XaBp+2RDhdd zt91H6;DT|a93>vU3dz`I(g{bdM0 z*c_oDQJ~M`Z(=!YJKa~{eYKC*8D)77(HWq^aqM%%{OMqwfkZa3R+x0Dp zIvCss$Ex(Viw5`ov2t+PV*B8xRzprKd>+Z6=o7q$lim=JdtmG15f#IMPmK8 zlWDbMKP^?Ak22g(kvmYBE7*eaUPD;bU{ClP{$jp*rJ@&)&?%(b=PT5+sW(lcr`!3{ z;&@`eOEXO+Hf4<&-b_xUVrzIYQcdGx3#ND{8@f6*464Phq4IMpM4nZ%C|wWn5&vs$ zuUM=@#g3MnMn?B=$%(W`No&H!Dt1l8YBvqpoq1b9S%RYKMXF}2sv(psPsof{6CoV zB`?8=8e!*q6jRRO=nd=04bHxzrX48Ozg|bY%XNgRuy5rHvsG;2J3i8Dkngy~Hy3ix zNCp(7r0m!~$1f)nCkT_2$)blJ7Ru`E-=}=r8|k$t1*O1eZ81Ddf$xVE{laJIA9(5r zADtk}C5B$q?$YSNgP}edQ|q_A-;2~JXz!Z-+jGFjpPcYuL{}&BNW@~g7)ezw!PyX zwY`Ix*q(#`B?UcET$d3RxM&Ew>&6mR?$SiX8*LT0WRfOhqRn2HQw86$Rj@YG=8j1l zPfga};@iAJ8KoBAop`IKj2eB_zgdkyL0(^u z00QdHl|XwBq?b3@XB^ES9T;Me7MPUe(v;#z8-hL$9L!YK3#S^vc~j)FKz@zqfn#V7 z)~a-}B`80|G9vV+lm8$@Umw!YMHsre6OY)QW*SS=H2jcXD1?-r4-x`pIGCO>$<+;q zSc;?k05EPQRe>P<0ijLE`Ql{Ac{cZxzhV;My%YI&KxZ4Wh!B4~nE>YW39qKY zph!{(0^yfINpRF!1OmoJ^;{}Jxv$h$PY`nHC5aE4NPQ?FDu}QQ{vdgW=((863qrEz z*Af)(0u+M;6d@|qC29&%c%CNx@h1o&qM|=c>NT9iPpZ7cV6H@S6*LBx?)`c6pnM`> zqd*_TEoqLY@PmVAB_MpiPo}J=(9?>qEUDXGX5;5impSqC0p=$-bX?UFIKk~MBZAXe zT@Pjw*k))ll$?kYX;*^t$ZP%%n%nGnuyKTl1Bv5t%F-}AFBs((HsrGIu&sGP^ahNd&0BT767xF(+p zs4w1n&Mi|I7>G2R$shmp!xtreY_%Y*KIf0t9Ti8zVW_G%i6FA_K)cW)cRh3AAa1O0`s1i;2v_EJTJU2aBl=MelE2S zOr?mq4bF9v`%HaBWbsh`#wnrSRdi?-@{-f~qs1IWg4QdrB)I{JJ5+Q;aEmzAb9if(scyOHR7(Y4x3QIPZ3Tr}&o zfV;Ui+?^oYeb2<*o|(4zMOqbp^gp&WYg&TAadoudmu5w#-r{bz>Hl{ApUTuz%$f$S zO%ytrunGXdx{TyWVFh{FJ4I4cp{ypnR)PlnI$N{sAthV_2SafR!#FbXx?TT~E^#Dy z($_^i>znYC9UBQhBVuFVXB=i}21{aj$-K5pwITIv>3uy$GPmtkxLyd?*~zRnPeiL{ zbNQW1f@%8Gm(RQ z_|WA^>m`9JlnP)GuDVPxSJ|2MJ!wj+ouBz%i+C*=yw5?SQ2bF4d!X_#M-DGl=Lnw5 z+!DBPshlH?SK4DNB|wWa2uO+))(r*-lDO2cg!jmm7Q1u8SL~;DeA%%?@FD-Z&IaFN zg73u=lmAV(;6tAI75;BC=glxVKLFVl0@LLG3n}n$P`GKb@EsSYENsdMwC=V`^bzPy zFakSw3&(;Hn6O*Sz!dwJoPfTQpL3xw^K!~UK^v{bcMP6gKANf)nIG8m?h>`sKAwO71=l`XT^3hS z$5RoIW$0P)unw18@2QKWOt?c-wR?6V8HET@rArEy`I*H3pU)JwNOOJ#e@XHH7NeUb zZ^|U$6%kPeta|nl_SHo6?L*t?{vTxL*zPQ~gSZ%2^z!zz5P$v#ZI8;b`v_C{gsJrW zEY-dU9q8}8?K0AIFvv^^z!3O5{TYp9nB*G560s~1EzdUi{>E*Zx$Ywhp++s113xZg z#LQ_xo?#8^z;<_Oa}*ORg+f^ zf0-R4#SZhUjUC)x}y>_6MvLAxK5+5vdL zv4S-JDCFvitqk^v4J&uRRtC%6!iC~*oJ)HdV-5ahSm?P~+(DTZH&T-Co=@StzCQ4u z)n7xZT4Oi#d)yI`IS6Ofu;E7_v<82z@cC4N%;?m2w&8sX-k;N+!j^I;4g0(g)Z0Sl)W8@NLPd`3H_$nGX#hmlg+VFaFu9Y#vrDvAcDqUdvt za>v3N;e?}W{wJ_sb1$N6fk4;)0=hmsB+vy%IIf7b4>apG@~dUOz0u7G62q~X{l z=K5k}v5zjXWkqKoi+xU)EOzb$mBor+xST%1JQBApzWt~84BT>__7jxS1RBY-HBwKF z%r_f3mT%|dRb1YHwd%VYDtvWlx}pJD5XzbxsxY}&R=7DoRnhP_23-={7H zMz(nFW8UJpVbmg}0`qS_BsmaqkuU%k5@#}nw1?mvikG#Hfr(g+`A>QSC(-KBl%-M+ z8^6z^Bsq&30?VEyleQx?UL0QU0+pTjORF?2y38|OQlK>JIjAfID6p|Z~ znU=LIM-x&bxO%_OmCTrxP_kxJ{h=NXxp35v@x5i=c@_K4EA2b!KTHc);?8#Hg>G`O z+BneeWfh4xh>@|{kp!P=eH~$I=SAC`= z-*}a6TNrD(gN+^PxVQteNp-U`y6B8<&n9iUR%J5}lK%N*RI-`8pra-CI#rNG{)H12 z!Zr3NrhsB`kFu-7GK<0Yc; zk|x`V!6%B;#vh`_pSeypp5K4tVYBhm<)ZNhV(21;UZ3ZUtrLug4{Ob)A{fdV$|e*O zxe6xoOUrtdhIaN_SRz6a)jKiMnwDj^(7i8mq7ZaghC8ojAV4Iw(jU(TOa zRGxnLMS&@e$XQVbov0T~0tAgnZHtI%b0E(h%4FN5&5{1>TY@h= ze}Bz#fMh^Dt5MV9TKOz8cVP|3XM2lUi7qj?-<)5W0mS^l_vnMh{BMdSi50lSGT~j) z(GCz7gJnz<&8OS^ANK+CU-%Jp#VQN0zWqDe5gMPhM2m21+ek{K`aF8}z$Emoz&i5( ziu5&nxtz9b#^Pc(Ah=E*FhBMHCW_jwK@muA_iF;GpZ*A;dZ}B1O7u`~+D515(PI^Mk`O7oed%w>aJjvOl~Z=zWvu~=siHyPnAKUUD9rR&ZsZQ%`!5`1!g80cfU&AG# zU%AyabjH7DJ85PNDGN&%NM+&N2z#)vfaGB3W3ar2LruBx`v;RqHUhV9SC;L@rV2N~ zcq4G-cGN*f3Fr6v9g2&td#|!28l4F;dt1WAd-DIRJ%4yq)s=6OnK0xB6CgoUECB)x zL}d7(3&?6Y>~8+Zym#OIan8N>oO|xM=bqzbm=RmD z%X>Ewl_M%03&Kt;eW}}#zm40-rD(y;NiFgEXd|HdC1Ell_hDy!rlXr!eT8{^QMb#l z--H+N!rcW>Mx{oA%A1_5C}{nXGqiSO zeyv1``?bnUYn&gKFP{t)E}NO1myr<7b08Yj>#@t1{nQm32AFB4(uVX-5lg`B{CS{1 zdTroa`5XBQuM9h zbAmMYkY*kEikw=b{e7{i-TK$DAT@y*M4%m5@!r%%fVf73mdsGA?l42*b#El%;gkAX zXe&449lQMY1WvRjbw{j!j!soEqN=avNcn%bt}sD@`0fVPW?*|H!un^KlUm0*d+}AR z029ni2iiafjsk3w53F|-2jd&MJ1LkqPpjZemL z8l7RnxD1++Oo3-ixItp$n+TRyi%7(YbAhjGxb751!+@=`^%-%1W<)A1X2eg2X1LI5 zo-K;6p319c^V5e@6Pem_Fm=2)8RGUQVX|$M4t&hFH2Z~?y6oXNH-0-D81)*s1B>FP zF2|?s{8RIl*d4g0d=b`h9ZGwZGqVJ)|5oa`Af^xjxSz46zp zL~lG9P`v@20hQu5FtC=p_lQ9Mpv6W6m01xI`$nC$Z7^^RY}iHp2Svc`CLQx}h^{(g zYiM2#J5I$lc!b|!l(G+6~d&@}Y1V=R}`?Mr;g<+dIyS%dFfvN5P-sO~ppcJ3R@00dWtS^g9GV#<${gD?N=~srStk zptJ3jaPaTB$`O!`7*X;{G57@~&cTns$aR>-+4{bWs}{&(@~c@IY+pNCvsg}sDvx_A zln&x_ntCM^h1QUYWeLXPX=G?V{nhCpU^u|g)(b=_rOQg!kOe5yR} zk<%UICm>`tHO~?)nsWA-ID5!A%i8u8(xMsIaLABF_7N?bvdPDJleKgs9x*sIQ^(*1 z!k~A$z~G@Gr=(D89byE{NH7W{7-b~53}LQLv{dp#>urK@TKhgHa;!xeBQdzcEF*BA zWppa8KpZ-w_J-;vR?>US77EpHs)R@skoufRwEmcnT8UUsd`a{j5m$@gv8oleW1xkH z%hes^e|f8g{}L zD?Wp0wuvtB$FLKctWn2oDQ1%N*utg9^iz^@Bi7qMxu>%?!$0K9V1(}-kzMIt0W~+Y0pLMILHmce4UPD$sJ;L44%TzCv|wDMO6$ zK9eS9q)Z%gRM5=yQ{6R{!45iqvi<}fQ#&(i*~bzkdt@?!JwC#Q*dBi^{*U4RA+3hN z@#Tj~*0|rDaV+9sPxEU=k*VJpVp+m{=8dqgBtL2;i>HGI7)X{ZI3dK2HF>^Jg40@t zbJ`4Z{ssDwC@Yq}Gd+Z7h=j3I@O%f(yWxCf9iNFI>sM_QvO+p)x|!NuKFtHZF6K@{ zUl(sPmdJ4btVCJGM|JzdFt*-&k@X&UcLCWgvbvBj#ue!z>s3sK7Yj7)=5oBg=IwE} z$5KW}OURnG!g^&i`G~8q=8U0>_p|7=YK-He`WQ+rA43=Ky|me?vtF4f{h&u*)<4P+@yxmu-!C}k4+p@h+tFp~YG zA9sPztlD>K_n_G5$Mf2~L)*YQ)85Sz8vmLuUX*x??FhU>&G>FcGIKZN_jk zoek-jv}<_>=A5xzZ=w#_ zx1Qcs!t673WBy&QRWBI1qrtz_IA91UC^?}MvXAq?2c zUh>o#@MyRRSYLzEu67;L|MDS=xT*ae*H z{asAh=)VWztO5`eZmNzlY=;cv2GGq*pH^lwmT77nB2LWn9EIAUf3U6RMv*6qL`x8r zWh6I17LRLltmGK}%toW#4^r2dc5XEfjg#C#j(F=BRC}o%`_eN`@2LNW{#kyB>K}At z!kg0e7J72w&WIE0e@C48i5^a*!3 zT&IeJ8Uv0m>7yD3HH1OH9fO*ydni7Svs%X}p&fK!`(O%TCUBG9lo>90>367=doR&O z#VJpH5hyiQ2B!Mf)p(2ta>kr-?q?kI=~!N4<5Z*^TAhABhPu}z;5z*2(atPE>*{el z3m0rM7Tm0+g4`=_#1t1Tta@!F%i+%UFpjft>(AxEVUq8|`nVdU9*z$&7FV6-s&c{3 z5h!l(tMLt-4f(C=AgO7=_n~oqpPuAd1tNAsD(-=9KWS)tpyz21blEq>9_Ycd1A53T zDmUNyXtRsoFDT4pp}reY7V5^Ik}pp{Jjuzzt?dl%NcI>MLC>+BI>4O@;7$T~69KG@ z?m8}U*|h!OMgj2dGY)_^ae%Ab0Dgf0o=O0h62OyK{Z@?x_$M9(unnQD+VD}h(@C$w zi60M7Vf>GWTlL6I&GQ@`R=yv8*I=G)jy&6V9_c-u?O3q|Qm|EVrLlC$&Rc`7drj}U z*D~9J9B=43-cX$jIT#%;=e}s!&J|{mncr(B_JKL;8~C;l)}uPKE2BUw)|N5St&cQ{ zEW>Ea>}fAnjUIj$V<=nhkRh}e32CyIcUDNr0ce9sz&eM8H2E!RV%p0B=@+ zKTyVZsK68VP=v+e7yj~#s zi@!M#Wrc3B3cFm~70)F^hY+G~;y{%|*pF2;A5e8cZ9~4Yp z(5@@ngJ_K+mJUvLsZ$Bbu7ko|df_h76Hipq@c=AFiA#v1U@auBtM<$3gvOXcGCVEl zs)hOLm^`q3k*D47$VRAsILt+s3!yBhVT~cxId}-`W)3(Yx?cdxv0P4?Ix}B5#idEk znJ$Hq;*p^zNz@X`lWu~?n&N(SDJvVjwuK%;111m zlhf>BVYyZ`gAr}`>76TB`O|+3?4py)z^=h?@{7;y9z925x2#XEr%=>Wc;0#nbJY{r z#q}wf#e8?{@fhSC0QE&Y7%iD)L+Dy^YAs!Vw2wv-Y7=uG=hbzk(#@Xk$?aV3w{a8` znv*T<}N}9`hrJ$6ePV9${9$ zbw>r_@w@|%?Inl@B&H7fX==cDke~yj6i*h>A_W*Bc6)T}_9*Q35O$jhyUh~2pEwML zj}vy!TqCeM{)Gd(%^bU>Pr9sD#|gW-YY@9u9ITSD?8jP7qz1Rz$4cxD7bA9%m^wL# zE7XCLcUv>f@iwH)ga3iGJ3ML(IXgxZzz$-|=`xwZZ3ue|)mgwcm9_nP?6w-g(8-_# z$j!QV00SL6M9Znp9&e{U+$K>dClnwdHGPn3Gq5X?2Lb87p~_E@@KAK3enTJ6kjqyF zMJbGAtZ*+aR?)PdKQ+mQwy(zoSR=D4c>NxOmU4KpUMLVNF)4c%IO>N}{#vXbo*KA` z#(I2fmj^@nO7rIEkym7o`A#c+4${q!$^hjgvPc5D4mQ0FT;&RGU{~Nso6+teKPGF zeWJ%9%*G4(Ht0+!6C0v*B@N4qgR{h?^&$u&X}{dy4Xo?+@TDgJjRoGsv&SCNWgP57 z+X75vdDs7110t~T*_{0_4hz94`#}pAD+v4=jweIfOaJUOL-8q}hG8X%0b+P-D#Na0 zOMrD-UIkg)^5SaA879U~g@;r%z$9Q#eO+k#{eg|II0in%y%k^~L z6~dXLWe2~Md~ET~%v@DucH=1V!bT0cV?(vy!^NKTQ1OkzRzuP^TmezvOEWt|4BMKD zb5HE_UTFsdio(WH39}nRp(f9Vi0Bwm=G3V&lNK z3#`g!*3-=-R>k{t;de55XuMvUS#_lx8h~a{5&GA=NQ_XD$yCKxp-i^S2dZ{)(H*h8@1svaJV91N<Bw+C{m^m2k0*Z_g3v~C`uP5;w}`DQI`I#Op->grP7rF_>%+ep2v zb^yR@(oF0^)^k1@Fh~I_mXQ4NAN{01H{`TPpF!VbO)jxx&#Mpeon0f>GhiGUOi&yL zq1?jNv9QWv@RN>(D}cfj#1X;Jmu;0@MrIFzUx$I_ z5)KAb(Yz2^68_ckI1gDugFMbF<;Qsfa1kQ}H6M2!we9rE^a@}TUBo6Tg@Tw2^T=Ev zg60B$Cd1CiSwn9W*Kto)2RYjLUO!nZqzSXb>%ASuQ?g>(_GDt!2OvBR97SVfBe)~Y zg}x-dS<42wxC_qm$1b-XH$N;{HE=r-+F9J>&?D;BTkGH?8J~*#$xJ!y7LyZx(cFV8 zEg`lN6pLDihM~xV&hC=D+Nfm@##9KoR2}cjXZ!STfnkcLaU9k#QbKFQK~Otfhh^XU% z+##fPaOA}|d?CJ0BI*Lj=w5v- zpM_wSkDV;m^6(Ldcprg%?+$jy91`QiEzfVV_~ zw}gYYq(eARMDXeyvE{=AUVM@~|N6iIUNwN{a|16-;4LEX#u9k>5LLhq|96UI0tzj+I5P0`b z)WMri;FU@6COg5a0q~xB#HG9E6L?1^B6u(3Pe~box5F#CdyXf^CP;St?P%3c=9HI; zXV{&RwLfJKBR(r=-+%`$HI*we%pLduqN)}txJw+rh_;#+i~8gJS2kapLkT@Qm)`lK zEd8*UNLX$f1O_BJ1qm$)gbyzr3%qG1AV7MLwJu6)sc^(&cMFGu{L*$g+Z=0AcXQfP zBER^~tx}`m8@OMxajbd66Y>-;YEiU55C`GaO!S+H&rxT2d<%N@gnR!(dF}@5*|EgE zUPC1Opv;^j-#u_55LTbPuyL9zH7MLH#=7k031+0*R6%k2 z`|PvdXq?7=%8W*bS6F&BGRCx^>Fx&^rg`36tHgqkTH{e z4bQ|X@ptzXu_@^->Pd97-?Hvhc@dd=u#sWk%h-2%B@F@K2K~ZT*jp*V;P1#nMoAVj zN`lFX^!6386j3cN*W1S{hU1>%m39wxKqtJG0&c||5^&p-EgxouXR0vym{hphDF2!A z5KUH?36>XJvd4ytB7t2H8>*XSJ(Q8uI0zH?)$fs+{(>+R3ETH#&>N{p&x}`)EkBXf zqc6US6CPfx<7YoRB8B5&QcQut>cHz++83B_VtL<$Y@-18uJSdHL?ltf=5id+hWuN2-jD@5^8*OOF^87Y=(ww{ZtSx zdqRbf0k0GWrE-i*HHk%jHZiKY*%$;@kET-h`jqr1n+vV z|I6OfMn_d-S)G0zIw7$$d^mw&q=A4a0b60*j0SBWi7h4=HHfnU27{4ZK8%odq9l;m zz$COmX4F}9b(T?&$6a+~9Tp>t+5r{}-(>EpIordS{f|vx=p6OQ1A(#=l`6I~0kEJ92JfGz( zP%0%quV4-)Fp)wwOvsi)pUqTNmq>447}(Z@dVZ)IXYAM_K&@TUM(4d{VX7f7935$P zR^>1ri)c1yNt>V7C?#+ZPmI_C`++>!-`8PFoc#v1#Bx?Ub&_5vT-_o!nU~0e3Ut@x zqp=T1dUtl7^vUd2JYwA=C+vJ>q?KQM{h)}>g#zVb&R_AN?lxqjMl2vJK|u=QTFaQ7 zxM~58DLl1Zspv|bLB`usmHIG`;uAkLe2TDWJMLp2`Y^tqjv2(Y`^R+REH^~XHf=pN zbgceKTUEg0n%<_tNQKX9?$uhT*1aF+C+KLN?r7gIvOUk5< zzdC@;Bcw?S$HDjzGtYRbItof7_B3KuzJXQE+jPDaEmqv3D8hi`?~RMZ^ZUFfMEiSo zehVy*KK$aN%Y{Z6g_z$EmC<;#!V3?m&pTvXSIPjsRD5$}Qbkqxt zoKS;p(Wt@<-047fP}_>km6KwOV7^9x`f3Gq1`}DzuvqFcSW=BMuwJ5mG>*eBR12&T zFlRJVpa;&T#kFQgD)~K&7o$j?Pj|iz$0Ij2I>sZ7UpY_Vrr8gn)!4Z2k9U}}0a}3N z%?{qB;7biRv%Kj&2xCTTuKif%2*zyEG?9hbn7|@|VS!Z=b*n_h*(p7JP5UOeuWK&k zAC@4p-z&Q|#s)p_oBY5&S^b5g$?8|bjmc`$KF2l$$GcMhWUR; za>)*?xyE>z7WeIpeGKPxb}P%|eU=G=fq|c8XYt0z`y`6o(;uAbjjw4rJV8Ty{N8R{ zx<^_tA8owYa{PGp52Z-FRzf_l?ZGSdjgUB+;a5YlBJnofUd#%-mIb5dJRtz1AJwx~ z@!kZ+Y2{7)<{bnk)Q^#`iS;4*3c+anDv3^of2}w&9D10%%;w#}voXQs3nse{_umX) zh4t8SaSoaP-MM8R+a+3WG~xh*AF&1_i0Ko=0}2em6+fMWh4m2^*7g5+su!f@$uHC( zMvK2t3e7H>tHqH?0&y@an1THZq$krUhzsq47@kfL$-B=&3b{5FNQQ0YuXFk9Qr5Zl z3^_TKg-qh~>P)NXk|X-73|1CGjaByiTmy~p++izlG&z?#in%6M4;dyRyih~NB5Za= zM^kK9MI~eBssaxtULg*Axf_QAI6zB|wR!f#e*@n`Rees?7&^muze66=m(UlU z?<6#PD|V8Fb~2?E^Y@?qdp%b6_p$}AI;RG$%+4uZ<&Gp4C$a;t@im<7CH@0#?Ax+~ zZH0%(@j`Um0FGov^5+tfR?E*i?SMV)jAU0@@jk>gj<%ZW@3wHFt(Fi^vk*^{=8clC zi6G9=-(AJ}DfZ{ST)zw3E5+ts{-pLd0fLK2fKJ0UTheCJ~fiqcC3`3k=!6u_!jmxgOw$yzGv`bp*@yzvH1^Imy$M2K;u z42pCqDMkIoXO)h}SVP0>?{Q_jytd76xIvu7ZIKL{^Om+qCQ%B!%qxTg>EtV7Yulz_ zAy%2jMU&sucfCx@XgG1(6&R`Vf|~M;($x8*HI;zB9GGh^9;>On@Rxg`rhYa~Q|kcs zj@Q%@`1=6D{u}%qguk!h4@P)iugBZ>Uq*(Drvtz7-7%W#g1^t<560pduKzq9cYh1N zaSHHyA^go6`#++SVh?1$AMxfnyjSk?%`sQst6|o7`BD!aapPMI%rld|9(;Vld{Z|l zO$=EuQd`sRo43pvaWh5Cot!X^0oAs73<7~QTctU|3)iYBija(T55RgXuFjKQ!y=4! z*E5nk_-&WPi5%YHFb&t}-XhQ#H5I2njaNs=91%C_>I)*T;AX_}r_qlNcUQ^|9(zN? z%cvo_i~}$=xml6Sv4aYayUUfM)u?o{{)JxqXt1`>`dpO`!hLqOxr(sStVbc+Qb1Us zVKL&kW*N6SFv1jL8_)2l!rCzfD^k_uPIL1uM80Eb>h2$|6@lE*@ zmcMiGyKw4XUWZm~HhzcXlsg#^H$&Gm&~mIccm+w(35AH?@UgvzKu+r0doI#28<@cB zS1YypQY*CI5!yBKQ7=cH0?q#{qEg#SA}uu82>Wr1fZm4`FM2mCXu67^A!nuBqPRWj zc|^!oL9``($aXl$mfKB(qgPp0&MJCtc?o*^TKw3bO~xf#U!eU`4|STsw`t8D8)l^4 zf%C`-;ElZ>#gd+od({neZ#*yd%7x@+J*nnvj%EAVZrV-D@$DsA7@ZARovNWap~f!? zyqpzyu~T-&ksY=Jx(K(f>*EiTH%4fP`}KF&POpyLsV+_~m*tS%4whRH$g)apDOh>Y#+^IT(ok>z!GsQWRw4;oeETiw~^gW#`A=Y@9g4$|%tG$-D_O0cuXHm#WRbTe;!P8H>`fQO#^nzamF@C}pyUK&;K@|< zYvoG733@%&w-&O#eTw#rdiG{YKB&G1)_w!Na%rW>M@u7ZK{Q9R4Myu%V84LMj<@R8 znx^K^$dVVBfRos` zEscm@k>OLM^Q6C44xfmIOD*i+c4BU)o{!EoipylPG{zC=$8lQKOzwx7z>E96sHZfLk8D1 z$Fav|GE>pqr*R~bE|DIrgs%fMLO*h%*AxwAs04Z!aN_9yM+^v*9CP@qsJ8Z}&}q`M0QWmtBRsTvWL0991|u!@)${ zdLhNiaO*U$87S~t*lYOjDe-7z%w#{jl>Ll(cnPM_&RehK;!(VEZ*0F6+b^;G z`n&JTMO@{nLo0k-Htu_*)Ld_=?3fkiVM)+1Rdha`Z5v#(lkH!|#JQ}gO1DY?Y|v#t zs99O}3kB9aq1b#OOf_^XQA%A82|H`AvF!2a2|jH`jt5R~?G2eeGtb!2OQl_=j)m;d zah+p|^mb(G;EbIEv3uxhbje<g>tmSp$dD%y7yU zjE!uAF`c@uU@~q|^V4tBRJCH4itWBX=g2)>~bw{Mc~V0pY9o0#(W zT5i-Ip*9_+1HXPXrR*K~jaO9bpLd^0Z8B2o%aIGx^50eg1CY`pX-~o+zNtQ(wq@-t zKyfk7_Fyk9GjZX17+=(s zCe)1Rt&l)nOHs{=rQOl%@jKR#uSHAAw;>qxJv0mr*~l>p9l7Ed4Gz4mue6TdpL^kT zAPBSMoR?tKRZ*vZ_V19k{@$IK7vMb7){2H1`X2GX$6rr6H-a%;vjnWEo zX$9Tu7w!e?zZ;RZexXH&{(>t$XvS|J;iga29yOJy`leV@Sk*5QAwyq$(iho;_X^#G zt^6b8IVkqw$Vkn>$l`-AEYvz-q@L%Gb)SiFHGrP|YhR>hAIysXw9JFG0)0#4YFey& zWJOJ)VsQeZG<`JkDTdSSDfXK?fV5A((5DY>v;=$)Ag6oUx!pZ^nA1F zbr^kfaqMczY<5GW4gPv}qP9k2o#XX49>fF8+*Y;wu6Zy;pcMb6*=)=W1m;1kmBGB_ zS&{g4etpto5Pa{9AYJ;mcLtgZs68|MYVtwoc&4o-rC*Pe-<~N3Kf>RTeXjgf0Dth; z+o?ZvE0Kd= zF~#>V^k`R#X80>H{2#wOl@i8@e=9xSi}>H9#~;TWZb*;+E#jBC;_+TGq`vW1%FRWX zo2r(6%OAtP)0{rMeoa$vZ>w*?LQmfpjF{fg z=q`MIE4K{EUbKqH9>kX`n^MX03nB?Tf1Mx;!!a18c9mg;Z{epiejwt@T=17Mp2}gI z3w|`?{{!)vF8JY$--Y;3n)>1gG5$Hk?{UFrGyWmOKjVVWVEjtNuXDkF@jBsa5MS$p z|CI69A->E7{~_ZiQ~q7>2O0kZ%D)SKC*!@8|Hi)f?Tk;}j`?@Nzr^@Mh=0Zf|0Lu8 z74hp_@V{XEQ;4s1!QapLIO5A(@XHy$0`cQq@V7JmR>Wtz;BRF748(u3vM+un<0nx5 zUGP^helX?V1%EN)Pc6XwyWod2{=X1k>w?c_{2PcbbHRV}8sUG7_;C(AwlC%2yCsp@ z`dIaUKDPgJ`o2JC#7BJSwzT-Mh|f!p|7;%M52VNc9OHMV$G0PX^Pkf4KlC=hCvHv~ z|4WP?T#y$3G10$0eg2Ssb6r~eJj8FjSMcip|NUS2w{?Y&;FAJ(3pD-(m$Ew~uuR}B z0v8Ev5V%3$(*j=-xLe>m0(F6>1?Defc)7rt0_O{C5cq(=O#+`4*dg$MKwaRM0x!5r z=nI@K@J4|P1>Prcy}(TZesUb1gg6wp1|<}iv-RRxJck~fvW_r7x=iqX9aE(_?Eyw2s|qAq`;iz3`Yo@ zB(PZEEP>Sm>jbV7__)C51?~{IU*KVZy1;J)o-cYjT3|?EvA}YH^93#wxJuy3B|=x= z8juh6L7KC*cGp1a=El5-%t)EO3j! zYN69CaI?UKz;1zRme3Ix7FaE?S>R@Y34z@L)%6lzU|3+az-ED)1ttV`3sjX7Utm~Z zwZLY9n+0}@9P>mDVM87%{}Lr04)+$rEr0g7hExA6_`maVdSz+Cx%^v_@i#Xj#D$94 z@Yhi6Qw;^I7q#jNHCHW!|8vznsz%kTyWsy4wF2BVYB{)XQ@4W~@hj9F@Kp;wm#Zo8 zyFe`kfBZJWVwmOdjTCQJcfv2mm;^p`@E`x(rlzZMb-kLQu7mF?^%GU8O5y8TbrbyF ztfm3>T2-RPL-+{9UH~*Es;ks8h_?hdt5J&~56H-}Ufr13W3Q1?o&Y{Awj=c8oFe(%F+p`Ey3@DREMVE|1Pe-X}D#Z7H>uNlN4ns z^nM68AI!4erl?JneTPkbNgjTsxqeuHsYtczp$dKvLupTOT$5^t0X2Ll{2zc`s1I)B z*UfMn&qF#Ww-fNLNI3~Aq=l(H0=H3zeC@o1`AVjx+ov>?CAIZi>J zSp+JwB&F*?;-rihssD-RC@SSTOfp1@BwB__!~6A+!_AEK=2+5z4@dRka}X5&h_0@teX1nHRAejuAYa3~WLi+TS*#tYKp`RoDT%1@-X z-j+5C*{!#s?*ZS-9GLR0AYaUwZJD{~pC9Kc(YysHyiMEz&o*egw$g9eu1rze9p`lY z$79J<)tKyPmmHrSTNWRmj+#j9o-GYMN{6^V zY+ou#Ao50Vf03oPN%~Z4I2(QKvG!Tv**PyfGIV=b=TW}^<>O3`p2y><{j&h8@AE|G z7dUP=d90*xX_~f#yorXB6h(bx7_3K%4xh%J$hGN^SM`)1onAgRpK+)+@~X;Dit?G} zk-kM~V4szSbn`T(FetZa8s(3Gd<=`bW94Q*NQby*P%JqrmSg@n-u2vC$rP~!r{RBr z#@80fl}VDBB8=<95=nFFD4#vx;ykz?{&xU80=~NMT}^lk@V`WJ%uH3>>$!bSG3Uz1 z4nlP1ZOaLS=$&+m9#o*t;ZZSA^a>^vXpd)6mD*O~^&NIMvU?M|tJv-KyrQ?=C|HG} zHxp^Owj0=zvG+Lm9yEd(*J^9#^67OBnRz?f))~Hi*xGKa?JXJOGlAvHplf{@Ueavj zip7J`I1{FwFL@g69N`QzFedE0WvtElM&5SdM^?tI?|eK*lHx`rSj|s6=^d_S^wSJN zj+atleM>_uoRN7{o_g&=$&d?jgH-7^I$j^uuGa;EGVP{gg~`Pt7+u|?-JPS|UE2+F zBCtH-x)h((jZnNwYTKHjb1|}3U}doUgB5U$=Vj(wPL}Y7AGi1XV9DV0ch;k*_#*<1)LL(lVn3 zBf}yOkuTXKyMOic%)z;?j{c6jySqdhab$7_Np5^&$_{cyiT8j!D=2x60UcS%TFn`( z6h4ia-P6%EG&&seVYYDH16?(R8yM{BZmS{PJ>7Tr4sbv<&KRLNu-x6~;TcWz!ufz2 zjoCC?#x@>f55p{@3w-b9Hhzd&e4HQmK)=zEm<5&Nk@Kc@nB%n5j2mz1_bQtI#8c>? zJ{I@+aQ@v*^P4V6$sqj6&|MG$X?TFBLF&3|iifM#-Mp8GDefm6BQ?kAWDZmh-3MVi zIINC`;gMTUyBcX|8Z{H4sW3ZXtHBfc%$K$#&L*ftexIi-tIXxk4#1>3nntMU7rtX@yfON z>~9!CwZq5)V>`n)_Tbo$M!7deUvxo+Y-iFaQvQ6Sb(dtl(Pakac4Nm{f0wb=Z>I5_ z#~hQq)Z;KUa-?+Iw%m`HyHp#-g_pO?gFZAO^I4}$<9L-9Mb&)W;@yn$S-URBN~<2Y zFR4}>)LUFnNQreY3vGx0YF!{1DxLa=A$EOV+zQlj*4y zkIJj5NQdTR^s1k{>Gb03i6xR1x#F3k^|uGP_rXDZfcI#0e+?ney0OSluskUyzwfOW^_SQgaa1MqGJ-l@G` ztzm>~QL>$rwQ+z~Wvj0j<9_v?SlzU##wqO(pR^Zn&1+3Kuh#4HwZ#;?M~CajSYGRS zFSnc~*`Acw+j`4Skl5#M5I)hZRF;t~6!=%S>E8OUVniU;DRY0wqOL8Q2 zZz&AcN8_?--5=k`wZ+2` z{gh_lhQcqkB$U>V#c3L$evnQ5oYu9etS8h)t3g31$pvaR5XO)PNuFke)~JzsK&VTE zVTv>($gs?-oJoxx#iv%v8}d?V)}gFyqBhDSxtJhH$Ox^4qxor8 zs3wz~qZqtzpx&6F&QgZj#Cpg_l5g!{J`_!gf0c5Ot-_BjVq1u(L?t}VT%C;@YIh}y zQ{lVgBFl4%ayomxtCZf>i%1WpHhYoj-5#drvc{VMHNvJ=U1_+L*CbUpHAaQ+wu_)Y zO<1viManm^WJ$=NnUgHVa{4!mJ7+C#H8;@pyU6dcRXjveX_d)R6n|WvEYe!Eh!?WW zQL04H!w>?sRwc|%^<;jR9r(dB&6@J~`Pf!`j+9rD} zy@p~?@8*U&#F`ozCtJp&1?(DcmHXsP44;0BgfC}!jA0eCh2a*4Prg~g%NQPF_$rkU z!&ftS;&BPDV7Q&(7cqS9n1oj{>@xgfg^%G?D*ZP}_Wo4aqrQd4O$QgCfq+TBG0!*@g zM_gAn`X1{~bbeSK;vtZ=heKUl-3DlVk@)(?rKJbwJ_mqH_((lmnZ6^U8ow?;ISQ|I zZ`Hgj9j2som1S6id!~43ou)i>Ay-gt73KPk@zmp3W~bxgHIS>NUvK^=W`o-g~?`g8NYMW_od<{;~tNZ8b`7Ebc z_p{FzK1K1;=K&vvR9aKjO005u)sDX>vO;2rmryP$oxN12xo~_f`#Xc(xk9gwak#_x zEicp;v$CtJ_^bWI%K59zl}jm+=}s@`8lN1t+@cq3H%0;vcQ>Jzpj}ebmFyjq+n{nz zvC-&5T{y9WbmLg_VV4jiR;K7=jn16uWGq8-p@+FZ+o`ek&?ZVv=7!clo4t-Fd9#_< z%<+tGH6C?{>gPk^?Vee43v{vV-u&CA@^<&vp?9l6Zdju;lQTUt6Ih;a*bWDr|9PWJ z(<|xg;?E<`-aoA+Tx%hJ>$&AYpGxzy+Ur1Hg&yF!e{(H2~Wa(KN;t&Qr^lqVf!nR>);twnIRrSiJpcCy8(kw6|81pj@|mrHf7US|T; zvGB!y9k0*ygN{sKAF_suZpjV(rJqD6`T?^!Y3(Ua%b5E>Lb`$LxI@+kWuW${Q?b3S z>iR6n`jWgZem{9XrH}e0mG+Y>ozuOP=O2@)E19Tv@-cq4QR$=j74usyf6;S{n!ozQ z<=iI`bsABr9XK_IIN@u&=*+xVKa058(d6 zf$q_c;Rh7lIr_j*xCDmqU|(OyXgB@t=3=rif9$=|zhS|`#>*BhZo0hriX}^5aAnJ~tFB&t&9yIF z@uHP4UUl8|HyEqe+<4R4o7bh*Z@6V+Yul#w&0B80?e?vAY`b&&T|0K}ddcpNJ)K?M zJ$LWzz2~KU{R4wT_YRMY?z?aQ{SQ3&(1C|vmL4<5Gg)h5GH1X1V7}lK-B);iP&za< zJ#+Y#kNn1~ezT6}Ipb?=7qi~Q$I0_357o|e_p!#Y)bH5A`jAPx1WH~jy^(Pg9({6H zaQ!V`pUm?}9Cz?5tq@1wS6(5GhKR2a%XLn90#){h3`H30=8M5Jh$?h4wERcIL`Vi<*&mbZ{ji0NA+4VHK}2dVYt$4u9xEIaI&m6N7BEz z{Hy_3?;FTHY^m28uScB~_?O&|lK#o`w2qfP8J(0Lm18+?lzl@yM4CpCC}r4|#Ls5W zj_c+MwJ#Y)t^OO4(MCH%FQHHy60xM;`bd6C-1mA^Haly`fl9fSaN8-xavClj1$w5P zj!8iI_^ncXP&;it>0siRA2qRYuY4#r$B$DocdW{7=iKq)Eo#zoh;Ccwmmj&$g?&ct zxzTavlNTLpJ~^3Be)^~#n4~@Q+RG;ytJXXvpqp*<9J(GONpvW)0gK_p`=7z^BKn#9Sf%Ha@P_+ zxDp+ItBdWE3jFd)h1VCAu3f|(Q<-i#A2$f8pQJ}1y61Fb?V%+C4(pcFQ%8F!*)UbT z!Z5G#bC9*1Lvp)#p7Bg?^3c5FnQ2HaaXtV)L3Bj~z7F8V2>iAL{04xVBJdj%@S76w zu>|~h0)BG>eoF%W=z=)>u>`zONFA=z@GO}pKMLa+vax_1QFeWX`r>wd?gv=SIPiVF z3jTvEqskZ8mtCGCMniUxCTEG-HN5U2 z{aLM-cMt2?iZHx9r>WMr`l)rsR$5*?!XoXyl8Ec~-9tT^_Lccj^ecK5or*3+kD^1S zHxtsK(pTxKbPx}gY>8IB%m^JlM7{Py&HNJeFY$2u1+J_+)GJ5djIz}Z<=4+^_A0~( z(HVv1Ok1X_(o^^qK7~ic2f5n2y-?WhhXR#_YopN*mw`WK;FA3B-;~X6lE4s%O9zWg zmzA*!<5nmT1I0rzco14j1V=14P%k=4lO-RBy{D8XeD{E`Ge#DJ95g+1$_%nzL@nC$6BSy@i)$EkYFL#@c+nTM@q^y2=CEvlUd#+|Y~!k|4ci>UUip4(M+6$UYa!e>~Swrv*jgUt@T$oHxGHmNzW{xN>=5&xj8lD zS-x)!TY)!&rbMz7J7H;r3a+`om@VZkrS>D5QSk+!W>lL&mlgB7r(Hxz7PBZ^b5GGT zY`wvTc29D}DPyKs@(fp!Xk<(W9yBupKTO54X0~Co(eN#csEY6)Tg;RSmJ@_XWi&r- zZo0y}WiETn7pDtdi#_HJ2)9FJ*)a=IJ)`*gqOL!es=bM(9^H?1V^+J$cj7AT*XkYg zEb$^keX1+uSwm@CK!tE=W{mBSI_IfRUn8z@@-qpS9cn47_9}X!2iqxq&KOtf5R0M( z_g{12nkQP3#P28!lxfJ+Z~h>ys~?PUS1?_=mDFS7@^)T^+)?E%?rP-1^=Y*hG5_+3 z^Ko8wIwq}PyfhJ;!Pc+6mwOrI?Y-u-O>r-E`N~xF{IFaOl|G0(+g({A(?Xv6Es%al z{ppXU7T3p!(_5>g#^cOSW@Y{_t-Xt+wF?{<<+)`U=T$*0ON4MoKWfK7wJp+a435TR z>vVHCB1>8+j_0r3%7nImQcY7NlkvsA(Vo_A4CC+3Tl>O&{Cxwxor7K7B5vGXR0T!LeIR``8>-k#24)9Ilh%T zTJaWdHfu<-{FF3SvhiK6A6hT^RWE%pdJMqjtm3lVPnWy5v(=Dvm|~^cCEM3aX>TTJ zZN}(i<6#C{6zfB?Wkqit(_wVxVL)r_wJi^4^D{8!_cNaDsvyQ56GqE2P>1K4GaNDM zucM&lu#|j1igv>i$lw|yO%b#`8Q2*ZYa`E%$&%@1Wr(qY>6nvN);I*j0>Vtuoq>N2 z)PWLt*a1+g5sq=VL*q!#T%mRNIq_y^VB`!WngMQ#z>Fmf2~!M1<5S^q3&S?^_F*d) zV$8}J^C2-3e%6plK1Jw@AuQ)-6?|^q%vdhy`WAv8L#UF8@Olq(K%VCx$Q{Zk-q#9v$sP|L(o=eJLBT!AO|a!uv9A zCFm#hwjo&p^B8z1<03jiDFoe)J=@)l`AnO+U?ckYzu>vsU6UAwq_l=4rqk8nC&a@ex1 zkg$g=vok#CPN&_#+X}6F+A_y&gfn>$Ss~Q>3DXa>M>-wkY(EP7K{giNHSx6w;Y`-b zzW?pxVC#_sFc zJ<9HD*geATBkWGI8?fuLn`bx2ZkF9Kb`P+7Kf9ys4zb(E?rwJ5*-f##Lh)7c`D@HS zc2BW;oZV@5?`L-#yDjWq_$u?8-6z;R!tNNmL+tKlcQ?E3>^8Cci?1+VcF(bUn%xuZ zPP042Zi?M!&v1U&J<0A-cJF65#ctD?xcpuCawF>nGe6ip&h9k3S|>7U6GF`{^i{w0 zF-%pZ7hR7ppC47CFn&rwU(%jl{2Yt4K&33FIJC2dCm*D~V}ZiS{m^WgjlGMZII~$jRo@jb;ipuq>>PwHZjEJ+Cws03$%3mkR8t&z~T$WLrJkrvl zE0jgOtWZ{?^qkTxlh33ct4^e00I zdR@}GWhJ|onpd;swzh9zMfnluM)Z8jY^R5+^HXDxYaf%eVlLO?qEwAWG@s?AzkDU_ zh}dE}%um!ufB8zuO=YYyx5-ngDQcn8v>u53Lw#aQ88v#9{`PG6^!cS}p-)|3iuOvS zr{t#cT7)W>sX67m-t;D^h_4^jF2Cicl;ZU{nNuZ!l3!C{`OHiIu@tx^)Jm*es#W+J`D{~X*lxetAFb?uYK&dkN(boc-`yY@WwYCd;HCBdF$`K z?e~tq{XhPvcf9jm?>_PSfAF67zV8qJ^Aqp?zz09{NB`x+C;#}re&nMc`}ikL{mGwx z@>75I>Cc@0^S}7)Uw-bt{neA7|H6O&>o0!k%V)mw)vrDEH-GzgXTSc9Z~py1eCyli zzVqGheg6ml_`~!6<46DVpPqi^#}|I`(|`V7Kl|VR^6dZlzd!%Qzy8}VpYs9I>IXz? zIzalX&i}7E{kk9Et^WSkg8%ilm!~WX>hB4c>szZZxF=SknIyg|*RGC^_vUMNFR%-w z$Y1aL%I{O?5m$MBi?mvk=8);zIezy2>dNsUQlcWZ;9FUS~EG@F_oOTo)N;%VR)>m z*29*WHyydMmn%AxK!&5fewHid>D?qG92n!C9hf$1UR%y2`DYGWq(iQdst{(uBGO7e zKEMZ{&7ZPE1$ckT%G!Reb;5QCkMEie!iOx!I$W~yieTkm@=B8>b0&mkK8-M+p}*yo zVzB9%6fuDh9J63**a2cGWFlOln6*470$bA%(g|VUSGMGteiA=m3ao-zmJcg$_-6i) znPtu1&_7cmKLvxZ*hmw8RnIMr=j}`!Po@YWW~kDS`sa&eb?+&e1YZ)131a9HLq0XK#4fXvU2dEazY=I1QK-6Im;lOZhMp9*0~ z--!?&l;sn`GC#Qx?vnI}a1X(|Ls+VYrb3v@BZQ?qiV&6u)Gj=uV40t@AuRdxWC%-s zpA2CsA16Xs^5%krKMVQG(QEQIePc!=SV`(%E)o{5*&ZWW&8Yexu6{M!<6JHz{! z-W0=k@8R-%M%6c&-xUgeQ1Y)O5nd$VXP;K}Q@&D*k5uku&&TFQt#PYam8vav++M{R zIveZJ*D)snABJrOzZu$h$Gxh95euf;etw$1EHAYNv__DbRwy6QDQk~F*`+)-BZ z$ANIXHxP~k2RnyE2RwMGbNIoaK8KHI{2u|BTM&Wok6gQu?o<$lp$> z_i?gOzBhg-&v&MIrzW8Jn!f6JzEY(Y-Jhvu7qWxjYkQB}euP>TeBQ<>?7l}m+S{l2%yD!7*_I5!WO&QyU?qA#_?r3k{KeQMaVo?2P8q1Br1r4M-4ObI{ z5Q{}q6F5z9FIJUE+9;XrOSa6%`Rup(6L?^c=Ji@yqEOu~{hH ziTbCtMI^8Km0$Gqg|w?_vi8C3-z&zD`qYR#Ve~4tW||hg^tJO2(IwRP$EC0SmW%pU zX#C6#_AQF0O8f7a>cpJXiO9L9HPBa}J`kQy+y^Q5kaeQ1LVo)ZTNZgn#-jQn`vsXF z6?&Uc8d~wMW?6j7Mq0X6=NRxLc0B#wP`^jn#*NxIR{1K@$!L@I_a!&eKzW*Ybw7Q9 zQ1TJ|_E+@XNBOG!W?Sf=v=FD#H!526m3kaX??6$A+H7)%-U!bxR*J9B9aW2|+pURE zn$Rx3hLl_cG08}t74bN&#`$HhO-+lZU3bcLEA)p_15LJ_sudWaGfx8`v%_@qsjp09ty1_= z@c^C4jP|3^@2PuKH#4-NJ(n&@Qu8Do(-6^mGI%bq@*5RTY3x*%xq8~u(y2zz+s5Ch zE4tcW>Eu~5KTee#)i*y*S&qu-5nQik*WpXk$U%MgL6=(n&a3LwqT`inbXF^aPN)-D zFR)L#sjmFCc(*F9KV7Mvmi5dfTRWA`j$$3!yGza^PP{KZk8s)loFjZ5gC}{nDl9cJ|#_-0{_AkG@iz9-KM+i7&kW^uvGf z=Egn87JmOr>1E$}Vm5vwdeTTKAAG zjH0=FczAHw*lz4|=p0^9j2vJzG9LV-<61B|MYAWiV{~=|c|7we?X!d*R*ld14rT7h z+vENLKWDoK%phNw$ViKWK^`9;|Ka(gwv6jmqa$C;9GnjYOvm%UPie0x5B&+Y2AZEX zwa*#CmuIc`G|4@_PxIb)R@_G;M|nBaG9sR7QEtm1{uZ^Q3p6HF7O62mCZ%oFJ%3tC zFkh>Ql5w5|9t=-xRQ7#-`9GIDBh~V|==gd0 z%MA5jTBjTFc8bc@>2U_u%y~|5!TFCNR>!;VYPYVHcgG@4Y}FzLuHzDe$32=aOa?0zgO_R za=AE!hpkB)ciPnaSNl(7iX|sBIimdK=T7W!LoZCH=mZ`#G0E_Ip&!7|3hvs|nYXQS zyj^=BZ-?xxvUsQbM;z0|tzQKX6ocM^tMkYFl#7ayc-@h;#;E_OU9e(wo0*&yO)s#V zjGd3b@_Swih7yb6+ZT|jJssZ4l%Q>#N#<{4#>qtC-jR->-Y6bl<~#~-Nx-)zV6H+G_Cgl1c+M%sz?LAJT*BkfisFFY|) zUjJ1~ooqF5JuDeoTL@1jte#fFEa!vT?)0T-Pvy6Jr4>=ln*yyM$sGtUJOk!Xeu`vw zDA~Ts_Od)r(JEl**y9xsT8`n`t_(5?5elX=W8`h;ppSUWY-`cU&lvQ9O*I`5>T8O=WgTSteHYp} zBX3OvXx1-l9kPKV^qtKJ6}`|uxL(oqY!evQyJ-*&C16ivNJ{{!2MFl^Z->(MtNG(t zwu~-Fjm!+HeD?xpjjSphq&J9pApNCGPLVC3)AEoa;sck1VNFBd>nHh75%x)ofFWb| zm_S1|i#8Q0{E+1pY_hKiF`Q8CMnvR}_^0R%@k6%UBJ}q*6hX;JNC)v9Rmrkwk`ad* z%qB{oN-P_ij3NK-X)9yM-7zf$aCLZ-kX1iO%2}K*_#Mq?u8`kuDcB@WdPNcTf^d6Y z$psNNCY0<)>?tU`Om+wp&1fG(7ZqKDN;;?lxya1`s}IDBW`lZGq)o5Y%PYFl-xv9E z{5~-Na|c{a=_23Njk_A}XuPely>U-tU*o+n5?u*Cw}qzKS2XTu9BjM^-rw1H7yMWL zchfqwMLhtv+89%PF99!QIZ@fJOkNpkKjUAG*Y*~%744^$Esu8CaBl!t=Ylt$Dxz!N=C!&d~upv7|EL)m-^)8HY`s;FC z>;k(j-{AE!cE{K~!R|Tr{+rUpH6E-ixazY=;GQ^c0LX6v;L-zrD*?ajiuR$G!E-e{ zFNEjC@Z12;jY8Ux!7(*{@(Z=7MyTEhs_(xA&wJqcEIi+XXF&tvZxPXNEX;N_B%TF{ zXJO)LOgxt*o=W%^h&Ue>bN-idp3xxoYIruo(*chO&!h1CxsXNjC>9nVX#gY*fTRH! z*#JyzSOQNAJS*Ta;DO57up6GSx$~RMUot<7gf1^tW~$s&*{SlwX9+(`h5lAMUM-x* zs~B#I0$(zotJG0?j z>)B1uZrQf=_?;_up4vU#)v~vxuYJfJJ-2`Cz!7myj5UY_CjsNRg=ZR1UUquXg~ctG zyUn>P-nAt4g0oj1Uv~WJ^UH^>byu8Qd2H408`@XzzH#r`5&(-w47-|S&7#`c@ftf9EkSmOfF)=R2dm+SHDOQQ=pnX{l?aNx2`KF+aX%(BG z21ci;`L&nhS*nvNBjJUB=QH9h;{D>|;xEK^;O%VJGLY@p z0i^@r{#d*ce*G=PT>3i`G~;sY@1{v>eXt>PEr zBS8JQ7!z-=8hbgUz5`-xfxN#5%KDR#|Bs4)0GdaDmUoEvil^ZIl=yVT*w>1$iVuo^ z5kD0Vi+_Zcpa3y%7f(V-G>H#E%0uFt;xTao`1d~X!?M^bKvrhNZ$n-D8jP5KE?yqyS^0ZR?k@yYB_W~H%e;o3?Ogt_=4>49jTDLo{%IKJyhVHw+MV-&=^7}F zpFzqS!1pOJ1$kTxt==ms_Vr>tr2aTidKTKbk3jlcAQcBB@5eytw}7q<@cz3n#yAI3 z_zsBqa|rniv^}RGC4I@(tBFp+?}onMI*_^mQvV`wj4SA4C>W#NO=g#;bHNoP!?Ym ze*%2^7Vszyc{V{p-wv(w%b=7kDE;4ox^O+n#I(2|{uN5?YakN`K_dTH{HFLfkc)4F zoIC_Meg)+3>*B*uV;=+FuYuP1C~$kFxD9xEM*JC+%9miAbpy22kBDcXF8vko_AV%= ze-fV)zXvsJLj1LOEwuA(Fi$!KlJgBH`9Ubp)zBWl2DrZgW=BsztNicGT@7?pMV7wR zf9Z60lJ123bO@mXL2y9rG!YR5I)4&Sv4w~ML7ET{c39{QQG+^8gV;V_ma+xJL{fpPEoI_ zZr!?d?{{xiSHJi20Cc?)IJ_LlUWV9mKE5}N(lL1JE@18r_}M0U6}DIc{Co*Sy$yTZ zK%dbk^cC#>FTm$T@S_HxaTsywJXq;nAmj@ADOQj@SQ%o77Dwm@h+V}%#e7P^X7ACX z!2bcP2>WRbJq470O230`U!ezqiq*h&8|?)eN~xaOX#l=+J)Htt{uAE%1$|7f!Jqx` zjycqci1Z!$oIax0v74TZHD^1Ja0uUQe+cV;^%ciJ7$}HAbFad>??W@c1>IKY>mp#I z8`2a*r$4~xH$%RcVZYOm*9&a?1#G()HaiDasfX3-fPlXQ-(SIUrI=eA@boiS_dCGF zOvwK{5cB|~?t@lGp~VBh(o2xE3$}O&)&pC&0N3ZkvP*%tCfIf=ysHKF z_&E^s2(UQ}JT3!5zY8DR2@GwAk1PcG&V;9N{Cxqh`yM>uMPPR^{PH!RV*@Pw5U@K4 zwD^I63fTX8`0E@X@lv4d7;OI`{OAz;x)*+Q3Z8rr-q;D>;k%P5u-goA|7rv5cRsY% z1j{WG`;p7Re?8{0S^T=o?~vaOYu*g)-T_41g?Zl($$kPYJqG?y3OrfY27A1=eyVNd zT3dOVt?U7ZGc4sQ@y=1RTuoC>}~pR)kd#naD$+r$a#X7$%J_g^YM9`<&*NC6? zmbJHv&B(<&yEi9RETveqVQ#ds;ao!w<9^Q0Hfi^v7HRK=k3YBMM~|Oe0tCl_3gpBS zzg~odTyBz#`#|sPu-*rH56Tf$*70M|KeXDU=U0!c&QH(JZ0E0ci!uSXwUYp3tuFrNG;)=Bw0*H6s<#0D$>?1qWyyOUP>?Mdr>xH>(T z<8PBz{rm#u_yqjdZMO37-khI5FT1u_=>sSyH2TD-(-K$s-J)B>s=3+n1j7IJ{U|AM z7Ye^ya+~U9#1ejWE!p1|I`;mYlu z*RA>d^JaX{jf#KrIp@u@qtR$i{`}8PjC~vMT#|psbe6gccM};;SV-B;+6831cbe0m zOXlA{9c#~+X3?)FPlMvysB&|BUYcilpS3aGM%(i`M*Wt&^}2j!{nZxwlz7r@{C7X= zpRYH+Sz;BuT0F0~%cg5PB4)YVS$JQsiGyS(d8x3jc^d`9b=f1Y;Yc(Fyvp+8S!Ji&Ce7@PNL&=B^`%V*y) zjVF!yF8vLb=bFc&d#pXBW#p62+&1#Bw>AKm4JsZr&~$viSwT%m#+w%!reC(AX~qAX zAAfS{LdC6N`mze;+;-DN9VuxV`T>*X&n+qq+1 z*EQR=^V>1Iw(U@DD>n9SyO!UYKCkiYRJS;?(${qAchl($+?2UsygMo6M|>AqWVS~Z z*=YOCGT*22JdSkQ##0}6a3A(qZEk9}^Rm%J?{U*U(4@wpGd_H;G^Dj3!SzV%SbEOO z;H}HK&&Ini4_(#b@nzuSN42(Wp7Hg0@i92R_HlSx^u*^6npB>#`G@b_hP3t!uJg%Y z@YJ6b<9Qru-{SoCI)XltC2szV;DmC_Ut+d*E}2-4BYEVAEXgm&Y4kaW_WmUk;~}lJ zzr(NNW9d)lvGYM2@94eb<9pUPJPmo{dRsjId^m5;Cov8$oh}KwLD2N&8Iynbyr0wB zGx71~&3TPC@4*S=+=o7qCO3aJG4J@o{!Nuy39Cq1}$$1Hk<8nT%Sft0@oSj2b=Tj#2CZ4H_8$p^T@_&`!$|_>{yX~ zvMp#Er@h76r(Mx`ZFFfH-D$|}97pc0&G~V{W#HpQTJp=u>62P}%0_F&FYF zC3g5^`DULiFYwFqC4O1{`+zLJ8Ia|spe!49Dj8Km_7KmH zn{#+L%&5MWQPR+98KW{zSH-AGo9hQt8HFOu)ID$C54s{oMa?Fi_gmnP6fx*{`(Z`5 z-=qu17@dr1{J5>|hOG)5RKP+xy4`aby*-~%T+xNRjJ%p$&z=tqEYSFH8% zdm*FQi_Ce3iWwDa@;rsM594Ngc)Ei^Y^u=T2rq}ZTwzfjGUVuz{l%KUoKfpV3~Qq7 z--2=%%0tF@T(6qmpS}d+uV7g7RJ%>z{g*NNE2ONhpOw&$%_kgd7zKH1R&)Ue1)x7R znd7b8A}6Q+RTram5Qb*WSQr_l=Aair=Pd81>x5D5c83Oc?zlLA_t!t&DE?9-~1;ciVRv zIrlP3tMaG)3WLC2C2y@BUxMpKXm6zv_jK7ll(%C9~JS)KvbR5^@TRL*7yyCHn2@+G32 za2RoHrYLil7crqr%}K-3`>!$jEfTdV8I{io9qv)_@3@SAO!)N_*|uNN7__hn^SQ{^ z=pkRslVWOqAr;?^@m~25KK8GWNsSjOa#0cF_N3fNgNA*?XzodqM)*w(eglknF&>Y< z2Vao!Hx8PClQMq3a8e@ueO3NMl>;Bka_z^m+@i{>RQXC(4%a~D<1*eR4a^}9g=@J# z{!G*lxW~@vt1lVV{$8^)shA0xLXJHRugjed>O)FGZk{t`kMKDzn!=u^id1=0#3wh8 z1B?P)Djsq@Pjb*CtbuZ^TOW$9RXeh%E|M)?U!$I&_5tin@i+Ot(C08K^4%Qj0uRX)jaN@T;rq~R!ZfF zTZJ|~zPH~&A0WlSi|6+C;)h|6hh;m@nOcunv5SfkQwvg_B=bATf1F<#IGQYQloqjA z((`hhtZ`b%ec0$TMbKo(%HxP(+b-p|e9er=e%wc*pGzM}LcT=SA+Gzg@|$A8C$cQ{ z5Rx(SxDhk!D6HX@_xLI1@oK<{J)leEt5ALu`B0m(xmdHxbM#9~oU{oki*}y#@}o$R z3zgkCe=XiWU+Sbe(M&vRjmJ<5moC=Bj5 z=X0pmN&k+NRq_}igs?5~- z%G7?6uW>Hb|2ePhA8f~d`AJE?_et6RMO7AZG#he+q;8h|3jHv8qgBV!sx{d=9=AMw#0|?ndweE-SW@upg`PQB|*ps=D1&)#0M5MkiHe zD$=aPLnXaV@^#BTb>NeRY;PfTu5wcy=Y=-Cj(MEqL4QxmSc4118qE6!n}{w&dXD!c zdHo{NBL=Tw@7TJdg_eG-)JvruekyJBQE9ArgzpA8uOwpomc{tK$oqL6kiVxO?M}Ip z&V(Z>e1+3<*?OVJHGWz%>Yx_oy`g+5pw|`l+_tN3|V=REvJKvFZ_l=ko$| zUay-f(Z3S?E789)TRu{j38m}!m)cWBM56(0uKg5WM)VV;_SKL#Fv#&xFYO<%mv~sO%3Z2_PrZqc zLay}lPcLx3(2A}6TrN8p) zxk!(6n(=Q;U5CfgkInJW9PY!7g~E>|e*8K7Brx~EV^X&CF)8bNs(f6PCuwnoZY8?q zHlkT;)Oe@dmO579qYC&-1^lG~cGm3}zXAS^)V;>UfnFzl*NlB)yxp+HZfhUCPWAyk zkDIE`KqJvdNWU=pboeZFEaasSbP$RajrcQ#X|dOpXLV7jpTb|PxsD~tG zR?4!Sc4)5j#Ua=*sQS!SefCtCIvg57*g(2{E##XOq*6{qw3y5ss@j0=&~BRsg6~og>LR8I)L;g zA3GAD$SC{`F)9cj5A+t1x4W2J9i!U!opSE+u*$=^4&rhL2_-Hq{IlBR&_AZ!5<}z(OO|l`gDGBhHi~A$deD27jbeoCjYU zM*UQB6zl6SbPav#?ab>UZ%nN#B1R!$FEL(>8o3bhVJT7TI`HM+p++S?y`GhMsSN$g z(7!BJk||2dy+|-dbT87Kyf5EZoB{^0)|DLfO1U~pEHo_OqQKqWR6!E^Gd>5z*^+MT zyE^2WW{-m-wm2xt(}9Veii{Bnje2_=tY1Gi4hGj-;~*^`8wb-W4jO0hMy`KP z)|)X?uVdxdYrucX;XmcrkCw+m!gofn_kDCa*72)kJm%NKNR3w+>$YcX-Ee`WpNLl- zYJU=w_K#K*U4nF@#z(JHvJ2Y&2Z=sKI(U`Zw;r8ksbfq1v~>6kn$mbCO<@rVWlKin z&XoJ8AHF$*pOKPv*D8HuU@g{?E8!y>j6FdKCK9yPm%FGO^&b=@!m6;-d)mb(7)4Wk>nG6Z<^G zE}e!|x~Q_JEE^grk#Qb=bqHyg_n+*e$^XsXnLtNXq}w;7GzNt17;Ki zCY=ok256E%LL4AX`X*^QR*%sf4Bp67Yb`SSa!Zf&==Temt@1%GkyZ$vmz@E-yHdN+nn z5u%ePp|)M1jXNfxiAcaWF%IR>Bs)y)zl}+<|F)oRnY+q*XyxzG-CgVZ@4yM9|0J@e z5b;uZe$xu$(iUp}qrYc}ZX%+yqXOEuLrmXhqHj{HFg>RA)N$_Cg|TXzG;`dAh`aK* zjH|^78TZr^(yV@WVayee`V)_I#}APGPfX8dqGwW^XuqXxZCoI>##r6b-J&pB4cE=# zx<|@(;|DFb$ncu>mf>&eBirL!eWdw=J{+Ig=e0zihp`!+tz&j@pJ&`8M0ZG`RkjDx zmq134xqpP{k9SMd;n-k%>Qnc`plpmm{teNQB6?L+EzPAyB+B|hlLG@FORd^iqeYON zfyx|xV+Yi)4%sNxn%31ZZll^xD%a4S*Fu~iza64P2Yhq2LcMK<_eCV0M}ObYG7{h9 z_{vjzR2g^GY9Y2jhD?#qM*2q((-cn2nO4Det(%C}-!zfo<9(#}&*9e~e2W(TX1v2+ zg`D8&IlDp|fq+=6kvVH?dm1k~AqL^9dO$fBBX;a{(zks+tMihkqifw7puEVMc%&W4LB^i3BGvahM6KKGE+%MQtY zXzXF#cSm2ed&nM6AL+%A&01Q{^lNOl=hh&9a-Jel;Q52*DQHeDrhByLZi~bCwKd+I zvBJ0|y0%$B&ikmpnR7o{g>)u%lIdE~MW%Ce7ipIBpY?O(a^AEZvlGvc>gGLF`_^n< zKTmGp`QwCMG?ypcR|)NRmezH@v-kzi=h2*McR7cumZ{*m^{(2SY&ZEkJe5PYa1nRf z=x$Y5|67rqqiiF8BO-IZ2+i;^`G49J({2 z^xE<43lUHCx)AX!Z|pAdvk>Wis$xOf%+ zCVON1YMtFuZ=^64Mu;k%-G{Ifu&Z{|+nphIMWJ_?d&w)^tzz!+Hu!(CY0{j?9LCIN zmNLtk4>MOYw=nlG4>Qj(e_+NtC2wbrWKLq1GnX)zGuJb>Gi#XVn15$>c5(R3RAx5Q z#+=Q3fVrHxky*_=%skD!z!YxDXl7ex59XcBEM_6o!)(d<@id!XVjg6kVP0U0>Fkf$ zi#d=vnpw*9Fy}HKU_Q%S&)mv9$UMgUf_ae{?UC%r?8h9!9L+3bx|xfZ&oVbKcQD^# z9%Y_me$Q;n^|UK9kvW8!#hk=+GUqZca{D;PT*&!(RM&3kY9it1*5lXga}C4nPMfy- zZJtOA&vIGo%xE`}d3KwUR%-R+x<-{beD>5?K1J+`$g$5>T*dY7#=~FH)Oxc$yv}v5 zOAA6g9yVO@<(7IBs}0Vr4n@2z(v>1w^XjtG4z}Vek>S*v+mjEu$v>_8rIP^igm~Kk z+q5!|M{#m+nKmKrHVkuka}?irtD{U2OH?q%= zB=?BO_BqDeJ-#xlW1Mp)a$krpWS8Y~O)Yb48&_vIeY6>GJl#pNx_xCH^$Y=}+$Tg_)n@S_eHW0QNJ$!>N0K9tBN1Y7c$Q+Fp)|7Z zPVvcPWt5BaVVQNOsx)w#;jDAfnU$Ef=nt2rhQ7Dy4|HW>yU-s^Ip@V}=Lq7ZXuxlziE{UD?)3Y&^A zMcX{NbA3IM34p6EhKzE1T`8xiH9yNf#bfo%!rcO@O~bX?lusu0Fa?ZvNgw7>6f~!t zpc?g7qk4&+FFf07_v#N^xRLVMQk3hWr$F)1p$>B>B$+aqrQ#l$UshBUx6Gh~#%%%l zQ(~Z`WH@KoJuWA0!7X#an{UP=ud7H;spwSyyEeyrVms%X?O^#S0AdT zbj9oQxMqnzgpVy#JhLo{NA>P3l8MH1Jgv5Hd(l*WioY~&PiU%s_1V-t#Oc6^6t7yI zbo7Li+^dJ^{+is3$rwd?xf+UvQY)g-rqudQE1N9V5=9(R(bB_2C?5FA z7HJNbmus4E%aWwbr#g%LZx&qlQHm|Kr{aDw){x;Wn`7l0rH(e>VqJPaw z%S;#I*6^&fQ7BHW_AjL;(zUe3LY5*uM2dJsXUY>+a+~3_jVYGTJ63BsC@9J!A^vvt zK0uVHzGtZWzRw6B<5rxi0VyqvbfBs@6gm+2Vgz@0+%xAStJ$*-`D<+=8EpR{N>4a>Kwch8RT9w8}yb&aosCS1h1j^XWWPV3+{ip zez|_R8eaoeecbn{-a@=H(e!@t;riVb8@9#kwauT}{lDt}$A4|VDNw-v$X3us}`d?1ZLXm5X-2cRLPqY&EhVFjC4a(Y&CeCybL8>jCe-#^0lwLtmu56*wz8TsDV%ERB_ zT+g4!WxVPo@0+fA{acg$lU>#+MK-0lq||=TRL3-@%RSxW^_9(-Sw2f{zA92u)6z4B z4Ihy?@~*5=qsLgrX6NLN8=sdyq2Su#{+zD=?{%QT^)s&${>A(~5f-6thp-wigu?l= z=HJNo*M2Oya*brgbAca-=DB{A>*40laJkVtnq$Q6^D+V3VbI-|GCm4W+}6fX|YtYrF`RnyU|!w7;@U)KFtwDR>c2X6dn zIFGM|9PW^f|1)Y=sQJPvR@-Dn`x(gW_1Vm3VY$Tp(WPMb+V@4Ma2&1@d(mX|7)}l) zbbJoQS>h`Vb{NW?tIRjqRXo{ab(ScaJMG&tl>5o*A?jKZCKp+KN{P!et1c~9^LGvB zq2tMP(E-5LY1fD-q(AvfLTF#?xZ!77n#(=QV=pQ7nR*r7Z0bK~(15-J5)+e5Q)Zbg z{YLgPSsd1~62;TU3z-(CnVHCpXI_lsc$nMcg2P>}nVEiODKnorf;o_BY7mZSU_RHH^NG2cxt!^5 z9qhjMHR{>eY_&pLeJ+o>iz5C0d9C`DndX}2b~zQNFV*T*q{~q5}%-S%=N62SVBR#r{reAZ3uVccyIO`A9@rDu57sw-sS9o#=$>axkB?^G+#uq zT?v=-Qx)h-X%3D)#7vNRx^P8Rn7K~h7g?`=A62KDpN+25EpN1{({K7FR@41YEN`pn zrX4#Iq#m(re}{*YNMHHofrA}(9~x~o)vkEi-Fy8X-~7GZTr=@<_p|LE9+Pl>fqD89 zN0z0vjC|LPiyMufzPac7 z^z-WufBo(GPe#sO_HKr9;4hE1T)VL<;nU}bwNTncmsKn(o3VeysQlD3>mDC8_*dJv ze3>(9-Pwsl-<&x3!4;1cT$#AGcBQF0cg>PJtnXcZu;9U?-6!7v-SLtamRi;Z+LUvSIOqJTkVcbk+0pc=zQ{RLwBUkKKsGaT_1j) zy!-OygVu#HGY|a7ndDou?*3%do}EjVeYQXOu{}A1%hKP8+xhgSw~kCt>Y%VKKI3(IkA79oP6Y~TOVq&^RfHdTuM*ADS6Fb2d(M( zw|VPtNxpZ($}>A`bB5KN9QW&@-!?hWEqCUEE00zTef0Y~6J{56PwQX3VaSd5zc+CH z@F%y6%SQ&ESezf#;l*>GE?OHtc<;iD)TUdXD!b!&zdLW6-tqlz#|M0sSy?b>?eBJ0 z=N(%!f9QlS#y>xDG=M|qX zF35Xy$S%u*uJNPqQl?y9@W`enOYe<2)A!VK2jAZpadPd^pXChakG*IX>`##G<03^h z=#7zjCAc3FxGPcwz~orDX4?!Fv+f3;V7&_5%Q_vp{0zjF3wtmrPKId)_d@23k5vDU zpj#X1p8mI>h;{w?XJXT~7#qNz7!4_hPHRvrA#nwfDtEP&>7@0n+3nCbPk=r6Q9BuC z0DL9^-#E~#!M^P|Ufo(W;vXQT(1|ZX@}bv&y*moAkj^vEt?ee3Kt>=O;+K#_3bPZw zbxlZ*5*f6HT))PgXu45|Z|KYk&;vOEoj40}0J!6bp1L*;>VB;(23DKFeZUc z>l~GyNZW5vcHsMv4OC}9Loco~;DuhY+>JLQ?U3bT;U0V)5erkS7bl^dpc835bv|_c zx@zJiya2aDCwd|4q5Hvux8r$G&uc)>9eAff_k%HaqU`7l67cVk4Rl_|U?B>IqFi9F z-;;xQ%8WVyo!B%5@j}<{_o3epgxEb5X@yQqg7~2mmqOgotH5okG7oFO8`I?e82bGe zh|3_QC>P>0kbLNy!4KI@034f+e8ck=f?uV}wpM_^ z`gLdeb!kMG8+iqtxB{{oI`PktrO@^J<`8YuQBR-~y^tj6esGZ&`49J%V1FOVhTbV) zcp2v{IBJH}H-igiaz2AS%VnKR1ivnqZuI*t5XV9mLMPJyDEp|5gTMYQ@*nx8-_wD( z6=H!-`~qU8`VY36i!y?HBiLu2EXPD}-8`A*&EWZY@|{%+R{HUdz%vqE71F&Mys!ZM z40QcI6vX|IIOxP3i!mIA{@?AL2V7Lg*Y{@&2x3{qf_+6%Ea0Un7IYC*5Rg?&B-TY- z1*NPM#i(J$hOuFZvBpJMc2QhbV=S?4j0HO;7L0A}Xf$G?5&Qd_J6By3^Uwcz-{=2) zKF|9Jeh%NWvvbd#IdkURxr=+p0`8elzv~PgEL(^i4VzYQ?GnT=VnYW`|3bLF+dKz> zGI$kY9y(TwS%@49T?zKz09&Ile?g~Wv zDI0D=o1s&7gvg*P!1T?CbJhFL0;1dvnF5`1%vSh^#tG<2|F}| z(L$$OM_)rXgWsKF>qGjSoEqn0pRQ-X`15RCqyd*eDyVH+~4~i zK6vReay4|yI}iux6=1QI&3D`9s8EJoM_Zv&CPG5!IvFg6RP;i9F#ZO72wej%hSZ5b zd%!~wIc+~^e-mqItkYy*G$aJ&DsY)lt^*%HtkCKA_om!px)!`9=oMi7+svjMjD`%2 zgdOnsZDz9+tXaL>cMC!l}2R^DVBJEL!xQIvyg!)Pe9uxFZaBKsn zYe4^|s0UpEmN#WKE5M{?OxJ+BA#tc<0o~*xqJhqVzqpIYjDDyO-fttq+6_9`s;!7D zr**&*PDHlT^Mdyw)Nd8wD{u6Xw#^6S{x~;17OdYzL>xlsnps2!K-{6Lz^z@_u@CWOYh7JMa?(}x{KhOlxaI0wSV5-1H7@v$TWUkf_vD7c012u!0 zPbj|~0w1EBJ~J^`#g0{ibz(&PoRWiHBbgr*;Fws%L?~S!ipT-TG1xB!p9ne`g&2cG zqmE3CwnH+geUKX~B17qX1j`{>+Dc#_ zFFJ7fJou32VX)VHW=9Do&1e19fZ6j|J9EHqgmMemaUrv*0Q)Qwk;e2`@T*14jt;ae z66%9LE@F19;BSIX79*AxGdoIf(P9<@IC*@q^6@F#Suk8*@_&F8h+% z(Shq$BG1s=0!mh~`6~lIg7EnkytbB&5q)q$KS&&HGdN8TKlY{TA`xk_K}24l&2lh) z1ItkwaM}jpT;Rwe7Bd=fO_5LzF58H4r+o*LOhO%SrHS=X2O7;7Bh)d2m1bd1Z9-om zR@xr$GKA325Wx0ZM5G$E14ix;k#Oiru#E+MfzE+7_9Hf+%fN3Aq3`swATYK>$YbE6 zBe0KrMUG-jj4P$D%hM-f_)#dSW<$<$H?s{H-lx5h1dpLKVfw^FuRiJIbhuvEKkb8 z?JrntTfjjt;U9WlaPTX%pXLGZ%4-oBMQwtQUkmevh)G=tpG(0W5E?%UaDisQ}jrx*2q? zCFZZ!axe};*ESk3x<1-Q&kG)O5%aNK3c58A^YOrep$*0SH9`q)XeihOuT!0_i$MQI ztiK9yiJTC3^jNTVjF|ZLqt`ewsWMW`=VTc;XC#Z09MCsb%;#GLcmgtz z`Vc%cN=(w|wGTWxR!pYQaFz~qTc*MOHH?GfizaM~msOWObjead`A_g<(z znfX=*{;Fj*$uu!JKV3|g(msNIvsrv9z-{xGeGBL~U(DxW8JIJl#RKK@#h44!&Jv8p zGG<2wURlMCwSsL{vtv2XyqX9>v@s{nJ>v3Q`|ypH+D0^Wz{sL#Qsd17Lr^+6qk z&TC4$e5T7lbv}!24VVp~*S;L^uwIB6P_v!ID&?NN!nweR{fG^eD?!%-tegX#j$>}3 zTn27C&dy~4Pn=|RO2M{eV%(IYZQ#K3Vj_#A_gR<=KcNoIMPQc;tXv7!zlivOE(f<= z6vhjTxXi{;31(hpc|!{hx(5HywHY}4I*T_Im|Bh)ilp}@@Xs9~CxEU$i%Bp&FSzDs zR;~k|++*eBzL@m7&&rix?O#})k%Q?Fns2qB>;d{ieGBRy2tEfJS1?@;239aX(`U&y ze2Dm=_F$H)xcg3xOdeGX15J64ASzjBc9>rx#!u&RXj zxeELRLSv=^46H68MRZ(1&l(bbj&NYCOhPWwu?CGY;auS6S`xmU7O-nw38@DED8STu z64D;J7W@qoPS>>cC1fgu-mhuF1uhakXXb!m4OknLV6TP}J|`%_0ZkU-5Ppr_3jJ%v&Z_|zw~_F3 zSqGkk@Z$oWZ7(6GsU2{6poBbvt^;pF=y+9t_d_K7TCM_Y7Rrv5gEJ!}eD2Kw_eQXC z3uujCKBV*?BOy{651@0LgpYqYm<(x5+XhC(OZe-N3Y2Ljq$T~V0Gz93HgiBL#24k1 zho-UmrQmf4y^dFa@+=7nruM=4voJ37ehREPN5ZdHWuR^j8zahwbJ-ZlLHz>O7c-c- z5Wb`12pSi$STchbAT;K!V3oyeyyTz?qM>~O9lwO%=()iD5H0N&m=B@XQ#1I}m#ocJ zFkz*HWYc58uh&TU`x*;4;VU+FT2Q)9!r%YOz|QMR z3Y=2R>TAJYi}B^a_r!r$*J!I@hG zJKzpMw}2IbPC0q2gt*f>V8d-JN6A6|ZLE$0G;L${&EOdbNBa);+|J@w38rrs&IKOZ z&gz$fb~_~e^-Bh}+rjE^;O9G-&vU?UgmMe${Vj`01vune!T;dVZv~s+&q8?x$nBJ{ z`+D%uPL>BsLFq15Uj}{!@u&Bs;KN-k-ekKaM6yT1*8Jdu?<7P?$7P>{e6&wEFStO^ zbHFWvZUOHIdIi|!0J{d|fTagmj8VQkAjITBTvHCQ{G$c)4zV_y!Dok9ERhlk`Q(U% zUvH>D^-=hT#sj$bD6?q+FCG#82Iocn}eiOLSB_JJMvSoeFo*!4p@9fxW<8DXITs@!OXL)Tnj4B zNk|FxAsA4`bS-%8C-{i^4fMXi>MOt{7li90xbw1vlut}?1TNS%%%nm zzlwI!c?T}N%3@Ln23(Wy>rVxkdW~IAb3plZw3)^scpGw$wg>dM!Qw{=j=UjUe{W*l z0^#og!6P??IS3xSC1Lkj;N4q7Jb**XS-A>aTF%<61MTjx>zxb?fY8sA6`=7Ru9eh2 zIPX_nAL+FiJohUbQ!DuJC61-{N3U?6S3=GKYl);J80B*Cs#MBf`zpXw4pK6dUgN;W zj#9q;q^gueR%N;pTms=gw+Gu)lk#gA4%|_l=@#%>Eh)dQs{rktrDO)ZX92&iBV{oO zcC9PrucrzyzAh`*fD2rtL`VAqu4y3U$4du>H)QpdVB1EloC9Y=%(OoEtP!(A8cRth z2p=b4rl4!VBTZQQOTnj2g!)aTA}D(LE~1*ztQ=PKNl>zd?Wnw48np3DSKg{Sm{Im4Z(9OKcR# z>d?I!y9Tmyy3gVeh!y#V?u9rxP_PLag*tRk!=r*u_bUC`+sel>&Gx#&K9oI2Qa!(CPkJ8G=stzsePKy7$$6L8tp%HR~<30o*O7G(yeFQ&%*ZT;5106yHzk%+8PWK^_h6>{j4u)(WWXJENLH97pr~mg1{1svu zO8+h(B|RZU(9Pf}2*0)jMPW>rfnI{H0AmDQ1I`rm9Pn#Fw}9sa-3mStbP_Hl^~0Gi z2RjM60vsghDsY;h=YV=aH-o1H-3p2#gtmb#1)T$<1ziPZ3c40tE9g3Kub^AND}rtX zUkf_vhwt`&40xL43E;2A-; zf{z8A^p}#l{RR7=pP(zij|5!>rVF|j{6f%m;5UM90nZ4!6?`n{WB}|B5bT3~g8t9X z|NlSic^qQ?`4e(NwDkY=D{P*p`R0B442@`%)Bp3Y`P2JsAHVDmlw%n{bbmS@D>r|j zoPPh-0<9D+x+o#!hVa0UBB?!@AbR(@rM*2FZ1eivPcsrhVn_ywCy8JJdX-AjND5vj zkui9cK-9dJM&j^FjheCettO**X-+&yGpR!AC-s(wNkhN@X?Lldbdz$@F491$zm#fS zrQv+JAKvK%jg$7_Yx?sgzIfjsufm`QN_)aucO2_4ZB87B3yzPJw!{&gQHw*3+NkG? z|qi3Pz%#RZw z)KXQv9teNZ^U-$`$RudA1+)zs92G-G@<+&V3_X83-)35e+U)|3Bkl3qi~sG-|Mnq0 zNdP|*e()h1hfZiKZEpbdAl|dyyx*vgsBaYf*maTihPSB4Y0Kz%`tzehz2=ACVILT| zNax`%k^_SKiR@J&A#L)hJc-H51WGIxcebosC2i|BBg3g}A-Ts@rkEK2d z<)d~C-{Vwx>r-C)qkj{5f2sxV#qi_8VLpHO=>LupYfI$lLnri!MyQ>tOwy$q_pGzqt*Y~DE-xyK^fRBCN))^I5J_9JR>n7DK)?~Jte72 zYHXZ3F(%a`F+MgWIW>87nn!GMVwafIM9&FcuJXi~r1;V5)HhFE4RH1H! zOG`;l<)6>`Z(8$V$Kl9Sb!>V{eA*=8HA+&{9^p*)f3bS@&x)jz%?c{G-*QeICYAvJUu=zmOdIZz;$#?LaN%ed$$gMaqzp7clhhG zckA$8Tf235+iAS+*5QpmyDI~gfx*F{{rW^l3(EiWYx*quDfC*O7m}yUi_TN!#pP-8 zGV-)}*?Bp6%ky-3#yoT0_B=~oNnUAQS)MhoJg*|JGLPgts5OCG;jJmDz4DKkmTULi>@hP%LrQ~uvMO4neU)?(Yx#YaZI#6 zPM@LA)-Tr^_1pC&`Z7JyNs%*fe37Ckq)1s5U8E|CE7BBY6lsgHi*kyV7wL+OMdqUI zMW|$v^3VKYy`>8dDLF>l1Z!s4v%q30Y+Ci@`giSjDUcVq7jOms1&V@@0%bvTfvO;` zKvR$*^lW*7uE1DeF4$gRDJUr@EhsCn7L*rM6jT-vgM&e4a52aY?gq}_Z%`OQ3`#?^ zL1lPX&^=iqs-`HlpEcRoYCK? zFoqbF#%QC;7-!TNGmKhewlT-J+^C})aa2h8HI#K-#X6EF%aiAEc?yiO3L~sVe{~pH z3r5w75hWN+IYv@}QB+|BwHQ4eM$eL8im|K6CwiG)uIKa$jFC#O(QEZNdL2Aufp@I% z41rhV@Q4E5P{9*gctHmbSkQYbdQQ-5IeM%>Z&m227QNJ=hZgkCik=blN{${WXm8eQ z)@Q8OuBT6T8;JJ**^B?mhwuC5Pd<^^@iE8Fki9-<{qps?^~Uu?Zb#_XK`Km@CQ|HB zEGu>?mKVDhbH)C}isF!BWpQ+|syMD#Q=Cz(EzT~^DPCTzD>fFJi?)dsm&R?g{h3J&JXq`$Ir_<;%bXr}uE=RXqr_*Jx z%UM^MPqcPyjf^9dsO4fb7g;uzY%JYaw$Zw=d}GDN%8kV2V3L_!OmdUEi8J||6s8c9 z(iCk{nc_?uQ-(=v$~NVgmYZ}YqseUAZnBt4Or@qWlhsside^uA%YNn9@q6F?UBAk8 z4!Q2RA-Qq6##~EoNp5LwS*|s=Jhvj3taDf=%X2{_x+50-^K7%uhx5%Jvkk}Rm<+^b z39 z!Wv4eI@=G7iu_;w+JfY%2OXbYR$*jcZpebDOltbx_;ni`!f64@w=kZ?C6v@bfzRCM*aNxdm;> zz1Hhd`L@a5ryX-Ww`D02KZ&@%cgwcmmgA0(=+*U9@QI+>sr9qw#&2nNbVbvmlt!&0 z#y8vKb?JHk7;#j=`p2Q|?J|1lJIpz8d&TWn^R5l*5pZzv#lDr3eQr#u`n)1NJ8<>u z1CstL)}KpQyCiN`&4!ImmKa|=O@dwie}Z*E-!Z7aOBDJv?;A`J?Yyh)A0RQ z9;VOl7Tj9jy57{7C(Fmz+I3Bt8+LQpvzs*x?bohX%YQ6eR$eki-!CNib%SfcRTev) zi<_YxHa25auj8uTpAG!ZdCGxF4-bDgUW`Z;@(X4uLX=$1+9Xce(rfNLX_)zeS zO-|%vtckNo^jhk`*#lw`;d;=rW>SByBj>C0)^W2ug@a>L5^Rp`z#_^vpn?KDQHPJ` zCT`MdT-7%%kT`HPXkkryCMo8LJ?Bne*OE5pn&l&?yc%%zS>(v5K|WqQyg6Tg53fJW zAIY?7MB=z=;iLzdpK$9R#C`MZx?_`_ky-Y`I*lk8u(sa(yNwq+1}8mE{5g6GSN=49 zev4G6+R1$iO`U61w%xSK-0=GaKYy}}Y&=mdVsoiify2NIwGbB6_icQ2hE)T7D7(AjP4*$*%9AM08>uYZH-pKax`qz6d1#{O$hk{88~^lGG`* z4ZeRnkJrUIbq?OXvxOlzbZ3p%xfL;0qn4PLU)b2bX5RxzuV;0O`lx2z6Ve{-UKTD} zc79LHB&Q*V!)HynX$=Z<{o?Sj5rTNbxvfgfhvK?T?)n_j$3w^!w<5K1G_8 z+lz0HI4;|4@Tu$OmL|_b znge_KO>gD!+-Y}VOY_2B3D#8l5zVfgro-sx>!@vL_5>c+&!{IM#EQ$1p1JjQr?#;Q}e zZY&%4aXy@vu7l3Q_Gp?A{>9Nq1^@0W_qIuHy${Cc)#zKN>6!4K2E^9yF}&lh>bJON z^z9Z>7p|W6!`bf-S%St~M%OKi+LG{!g(JC68F@2WS4no+eA(@y?(|a0`dR(l)~-}Y z8eckbebUk9arQrL_1==W_fh*+u|79KMF38sah{C4V{n_IlM-%-hoNg&3FA* zZtC)r<9OMN#*?;aCl|#(dbxUQwR-IyW)5)-ST*EYy(7-k5{ajObz_@_?XPZrG`LVy zTz7T*4xx=MxbFP^RmRf(-_P2Vl|8H?U`zkpNj~j7C-1l@cXS^A^VkMMPL}JrLG9;+ z_SkVU^YGs8u5qzZD|g4I6&+~OEpxH;`(2I8r0HCiT?$gwU?EMlZ@TYPo6fP{wfVv? zq0jDJtN*kx+46p#sL$19d7{S0>Xdjo+1txQlVUyJEGnFw>%DnHK9GKLEbpgIo0yz3 z&Z{fenN{$nTl}TUlSj+bQ`PdAG&zl(Q~*^#s=ox!#EBC~p zlWWgn#OBo6Hr*QVkykyg z4qIp0Kp4;%v{#y_~sPeE;iI^$NnN6E!hOlf1g~69QfH3yvQX zpB9rK4-J0XJ`Z`so4*XmqwtG9n^G?94v168CwRXx>hzvbp-^I5__rDLJL#P%=apxl z$w%!9+49qh%CY{NJiomB+u)h4r(q^@u=sLn{AqXV!HZ##Ho#LM^YB4#&;OG_oR5zG>74( zTfC}0(4@Z%?CUU9xx4;NvusvupTa#VuT|E~D@xV(hjo}x=GpeFV^`-%jqMV@2#v^D zy!DRJ{`#AYIvF0B$PaK6XFi?&F>NYX2J6gq;{0?zIJYQ z3Sw{ZSuB`ZkV^wN8rV*%Ss|iXmAyn&>Pxt`$Z$ep6^rUM{#W7sp=FVT8*h`-)m$vs z(k7?7*e=>^&2e3AviYBTLzDVn^#&Q;HkF=SQFwQ9t4Cpn7c4wiVb|)x^&bpt5R8tj zk3G>S_)sdtCFpZ_tgz~z2%bu{x#B{+zGmvz5mCG z&pzMq$y(Eqg=e33_(od$NMD6ZyUE9OIW5|c{$@zQ@~nQD{RX?IKf1bhSgvmU15??J zj(cT$JX>tO{N%EeQ@Q7=%ekce-hdFbVNd_0!ZyLzXEb^Fw5|5a@b4$4c>LJSqfy%d z9&IKZxzpNM9QpmQ3BDteCU>>(ulIj`-OP2m>-6H*kjZ_`Cz@rh;?(Y=f6z}+Jvn`} z>vrM%Sp_fp5M6JM>nMNU1oBhw

      >KdRkm^O8lqlQG8ZT zPD+^M)r$*aNw?ddlCCm+WI}wbT$vJ|7?U#T{rgLKAhVS=iLL_u_*~3!-kj}96fZly z&BgyaFEM|YiXXQK8?Hb1`A+XUrw2WGaN|&`&o(w#{>r#!>eAmkj+32BpT=cM<1&x7 zOK*C-iNm}r@kWmQT31~CrBlR+6J6{4GV65d9eWdU3zM_t5L}6_}iBJZruV& z_bbb89=Ne|{MnC0he)fwif-TJwkoV(=)(=*RzN294FE zzFY8$#az>d|2o_L@qRP$ZKACvjp0V*4$}?cKH&y&AJub2V2@FE7!yC5!#b6#B7Ec{ zt+Vjvj}2!P&0jF?`;*$Sr$b!YPj2AJxz%eSB;17LG0E?rcS0&(MlJcWi;f4^j%%Z9 zt#g~z!saIWy@NEdF+Lt+{P+uvug%rKoon@PUJaVC3kzM?yt%N5Z7wl?xdwj|{1M8q zP!Depf15S<2d@jZ7mmyy)rNhS?(MAL9DfVy{7hWzgGJZ}t_B~w-tx`gA9FNhhiK!+ z#!)rT&s(&A=do%xH-4&f&AigbzpqEasm$>Wr`*#NZmNj9QL|dqv%14yr7aI_IdfX8 z#*6CoF^9*_+nMWo`e3i}>N8uVN=ggojY_;Ye(|kdcB;Cc^zZy4y3V*)r}OVm8s|_g zFy(e9S9`}jE$;LPUfJ|c%$j4Ha)!PL_+frg&j5AD(^~=*?h9ARPPS-uEKGhhr`fQ1 z;l4+@mEG)gHd!ye!ux~&17mM$!!o2^Gi=|m2vSZ)4Q4Q)$J)Yn) zchZ2KV{e=r^n<4~E5^NA*e6#Sx=7?mn&3UMX9>a%faL<--fzX3wb_ zcKFe~%&%VgcADz?qWa`%1D`a$-slT&w^Mt+OIp*LOB*wJsPpaKs~zLy>vkG_7lc?F z$N%1}yzjC0Q<@dE7?ay%wRqfvUH9}YFGPP^MEw1?)tfW?_lK?S?Hu2;&2v+6Px*?5 z%Pw@E?>A-D%(HH~h#TMiK6ZLw?@jIMo-GbrzdCQ}gQG_R$C^8J*fnoJ(abi#>}%3Y zb#j{Hm3m|Et?taZ=W&JWx5*^wr=F%9nVs`E`Pqo!sa0gM&wH;Y-!ETh%>VJo53&QF z{+i(slA9%V;`kAunvp2uo*<;6nh~3dAJ`fH~tBlC?JNN0< zfUV~THW$||pJnbUpO%>KXE)KIMB>(wjJ!T)?W$G_N2EQye8reFBdW&`ht=YUwb>^U z15EOyqd`qXGabLXeegH)wUkH7H6FR2FDQ-BbnO|wd#zuDGHBGw6Q3>kqMzILBI(|B zr}i&24sJUChni7tufOoCW&fpeTH}#vM5eK>u|f5pJK>pD@J7 ztHa0Z(qhM`@4CyzDeg&sk6J4m>zHG37;I{AK;imQbkx_iTKSL)x$e~9E3pX;2Q4r) zsNTVobQ>^dTc6D?mppE``fijwTJ`P9PkNpCM4Vv1>7(?DD%zj*O|L9`;9tvEt>R8) zulhewO9KQH000080E&88Lr|0}$UPYX05H1*02KfL05L;RQbTWKWmjo#GcsQ=Ff}e@ zY;5fPePC3@)c_9f$4#=p!d+y6C=sK^7L8goScwZX3E2>Zh24ZrPzl%;(`~dZhP?rm zAb7L7H^WuhN{i29TdlUW)fU<+#7`1JlkidHs~Q9~+O$sGRHLM@=*qt5oVmN%O~Cf~ zy}$Rr7tP+UnKNh3oH-veXJ$ONY%*C*CX)nz@wmyF{=d=;*@X0HB$jjkm>sG@7b4-V6H)eml> z>%1Qn)3waF7SpxjyWb8VymR61b(>5J%o(NymhV<1-u0L)7mqQIHkm4{_)(-g1V0Y= zTZvSHJG{4;Oc^HeJ#oc5B;uQMGT?KOnKC&<7I77q1B)cn2CVly$>hbCk4vWYSt*G9 zQZh|HAFkUZ)3&deOzZ2drkpQngVq^RdRqaWo6P4(4F9eU-o7RX*B|<<0wJucl%6Kn zWV-F@`W4>{e$!;~^%!-3AFfr_v~*Bz(bXcEiQfP}w*jDRxXzS@r)#~sepUUq;hyRW zbvD`H>K&1;=<530@B9HIw3G`Pm~MjWk`d`j&RxU*|G)pszZT?`U3SxcLv0 zlzkG4E7{C#)4i5jW>Z@&wV^%Azw>t;jOuI5>Kv1DVZk2O`66@$)2a96O>L)+j_LC8 znm?ON>TXHPtYlM}V$-E>cD9B#Ba`rOZ%ObPs|*e9Kt_?CYS z-kx;Z%)wDryz-A!KI>Rkvr96i)`z+6LjZ~X>=P(0=&G~oo*4h#Uo9qacWP82mDuXvg(EPO_GC;eG@7lg_goPhvIV6Mz~gn zPRgPCkp^yC8<&dY9bI*qzUuhIwRc$^tUGipxS$fAg76e-4bJh#CpuQbhk?+^;5GPR zH$Hi6)(-VOxnZ1ZVAZ%Anpma4=Ds%& zo4Hy|3{VL*#N+W>mqRU68G_k-@rg}Pa(l8qz^!)Vp4_?_{EL@}G=SC^FJBK;&@z|R zv=_9}h5F*MRBlh?x3O{1%$aIe96mEMbJUsRhdMK{xeHp;ay+pjBtfl}$${OMNRAiq ziBF5g}ttL~TWv=AV{XG?(?jGuXkAK@djQbM(lV4^U>X|S6{@mYDec85pJDVqY`HiByf<2w{sP3KfoS34zR$CXa8Uj6nV{6KyHHy0cVwQ9w7d2?&cF56HoS`I)FDb*TYL&|Sc*Vs+LYgmz;*_cm4 zhONu3^2QG}wFaGmr+|@K&{SZr@wZRMu+Vrvvcxt}`P^zj1`asW(l1y@c z7LNlPLso+x!1C@v{YDe>$JjV8D|S>=b-L~NC4PVn6vR=kkA?3;q8(t)1IC_uHsSuy zXN7Qg+jaXle03(T<{sd8g+Q*m2S~8jvPtaqTFp5fMS5tDAbrHz{{8j{^lo%OvVe#aF89>?VVv!Fg<9o`JGt z-QzQ`hQ_^GT{jIXlUF~9H8`u_J&&ED2EMkHicmYm+kd9Ly|y)3e6sx8ncGpTuDNoO zaw{`cLDSof!ud^6Yy1bX3zA8)siNzegyhQ1=tlwxZDQ=_@z zRofh_gHHf?vMjY^@o$?sodbnEBc<6h(8QILXqR!-KoFq&_fHbtp#sa6i<*o6j;cxR`9f{A4)1`3uM=fv@s-=m zHM<-m^)f+w&K;IY8%_puTZC%MP|1EqR2i2@IfmOz$ zkOsPNN+Rg>HJ-~^Do%+75uHI;d>YBM0wz` z1HGFaMNNkwNyq%Kv#p@D;G|ZQ9Xhsd8s&cxC2(`joaViUK8J=bTK{+R`u6EJg_qjm zck?orlD+or>JG_f;@^IT>WG3n9?4*nG`}6{xm1l>gX5s%2S?R?zwUc|W<;)Py84+_ ze)toB?0Qq)*k?kLJg||7kxad+?ykPW@Tzd#ZTF3;tFK$x_ZLdH@HUi_&@Ht_r`DJa zda%q1n3g$#{Mqp5^g{c4d2kd`!_m~LxU@z{8+#(4NsjVhcDZtKU7+r}`ob7L0LWAe zYb4T8S6g>GzI-X=?vpwd|T&*R?3aPofOJ3uJgb%J4Qx-32oIB*^eRAj9{lN8=#=M-_o=uJ1sx zJj@^x^1|riBrSrMmj_2d7e~~w``b~t@#lbVfM3{5poC%ZMMg8foz2?3G12#j$+NWn z?@0E4N2347hWGy%|Nf^&|Bo#*$`}1}ONu>mwhqdU7Q}%k;uEvM)V(YY@~m2op07+3 zh!O++c#uH5I)gXJJ8V8c671wKejSKhVWjihD)=4AbmxsoXMw(?*bDEq2NwnMK$;h{ zf<2}+!v8k@=TGACDtuw%Ps1&n3!G+SH3JN+P+Q<%h*Bk8K%+sWE4c;wZ8eYmhPa^0 zz+eRP*hb1T!yg21@H903g`s20g@GCATBhL@(lU`n;2X?m)!F(yN&U=LFELxh!n#~X z>%X4z$W}Xb`(3Vm4O8)@g_-iZp~((@URlkj0!tf+NG7xc<~h~9@%#g>H&%}h9Kn+M zp(McKChGv})RY*1401q&-hlR>zFLAZGNFtPU})VriY;5-S))u zyIlJcbbIb)pxd$FiYk3ZwxHa%Ohh^8jkXtYu&B_B!mu2i0=--UQWjQcC#b1Ar&K`S z)9pT1?eyuA*UJYVJ|{t!vCbh@+HmGfJbqt;fyLE;1uM^Xy|&89%ALL{FP}xWs;gs4 z>#6Q`5F;0BE1l|TTm5)eBo!R0)f~x>U@oS=NYSS&)BLNm^;qrp0hDvlMF!N@vJ9*w z=wn}H%d=aa`Q7h+cj}*P-@(3vAG-E7OlZN+`EB})^IhEy8L#3KbhU+MFgjgb4U;#3 zl^(xu^#ri>IQxCVz9}u?TDvhXEk7JI6$0ECGRE!yc=kod1zvKD|!7x0L9}lTA*HL)lvob zJZ=&%B}k`bYpb)hMNah$cC&V*p0j*pm$#cpBa;7A2L98i#|{6RE#>$~2I)KIC`9I=uUdq%S!DzT^PWWHEq6w@dg- zRbKER+aR47=t*%M)jp|j3&^`f`D&l7FP!q+fG^A}5v_&x_OHJbH2woj%x&j{q4bWKw1K=svS@`59v2IS#af*4rq3oA0 zD`>s7orKA-@fOrtZ6J^|8~EgBwbAM1R{8(?SxtCshH7u=nbos1KaOmMdr|0f%$>596q5oPmBKy{$r1Z2axYVJ>`~ zNyr~jsk-loC;pdzk(L53pOCJlv`p5~ZiuXob|IhCMw_XMCE7bUk*|ghq-6pt$boUD zto3{zV8VZdj$FsE;YUN?fG^<%F=wkt@XYfhc4N)m!0t`Qg1Ka~fT{Kd|JF zE|EHqqHDya=o^;t7MV-nY8w$6du6#>5T$cS#L=ZQQ1im zwcD$g=1mha3htcVf;d(jZnL$uc{%Wx&DV^9DuSPFbDau)P2RaU&mr%y`v)$8W-PYJ zJ6h$P-SSSi{n1mOYmm*=dEZ5X5a`5%fw%zRr}g-DZE0SPy!BWmJI(Dx8L1Nd2FQFR ze@vkvWGFwUvovoy5x*OnkG;wN2wjUU&2v=p9hqW8=K%MB=3u+3*R9RS@7{N%(;KCiwuFOTmeqZ^Ebf>!7enuV3- z<$C#zzew1_BWq&F|E~`bcSHXIsJ9{iHTOUz4U{A_H*~Gf*hO0C*)O07&xuzL2!*Uz$< zm5dj$59!j+NcT)Cwhp-Vt$l-0GBt$xq#});T<_o}D2@RcTB9q!7EmA&auMiba4%M&ldBjAyPS7AQ z3tstnQ^e>4(6i5Ho3SEQ6?NunKILD?VwZhNELL!`n(zJHS&4;47@xD;WFi6)!75Wp zp@*;yQt8HY32!;)-xTY7olL&?}>q&gGAP&9i=WzA#ZJrK`QYb(?eqGXYd#k zk9Wk!SU^F&>H z8w=TI`KN*5z=Pfd3D!UjUkfiS%uKn@O59sdTwW7{7dGW@%!3nEsMG+)B?%7;*m(_h z6?yA)>nGNI;iYpV*WR@pN1m0K^#riHdM0D-UsLo&Esme`=hTMw$W0Fdf#jWgs*IWx z9MY72eTGtWspQc7(b~dE!6|L;NgLYm1&wE^ZI+T+wa}!TgzxB{4}=cM4}Al`R9547 z1Z(Us*rU&CBnX~Ct&!J)Ih3*PE8yEqz!GuPO1~xU+9x;t)3`mM*zn7nSRH@AyhFCW zA@6Yd5d`#GdFN^UCa9jx3U1jg@s83$$*kXG)@ov|qxa3$SDV##NnaFqy>{QlfM20M zrbw>WgJaordFu)5O5m$;lBpPyxn5iMe%u{{taA%Jv32{IGN9jdM!&_Pd16{kuWR3Z zm3p;BUwy{)>3zj6Pb~Nq*S_E-z@k3MFosH97IV@vDs^R=Sxs+b9DR3Kz3}Q<$y^37 zT%WGnS?t=k?$1yJNGj%!vPNF4c3K2MTzln>9{?wo0r6a)${Y8<{qkE4Lr~rsC)w;e zy>1TJW^s0l5KY&zwo?c6;MCD-k9qx^xMB%svTO0;&SRHF1Uk+MEu0)_r=;y=TpkX=JdZ zg8za#+`H#0B+JNS9ftqsXH9K0QcFXrRd*~?&xxNEesLM(8Ks`K${YWNZMJNgfW5~?6{0JG{R)sdFn`WU{mBKbpjS0dujU?f zb*;M#j5ihsk6Uv`!7+AqubWHrSvF92>{@G=y!8{SLjC+OT43%$Fuzz$Onz0$4olY* z-=y?0cRwOggt^<-{)KsZ(XNb{YoaC4+^&ObpJx6+bIkxe4Z_nSU>%OA64l2JMx+>U zIqe0d9i;(VsaCVr;;hDm<;#S*2&M<5ME5)*{M6%%R8;Q{eZkf z@v{381%UR*RelA{_umb=X;|C-M)ZaSu%&VOCr zaf9pi21k*)%c4f7t$kbVf=&*Ep_FQLRHK+5XdYjTlLr7$cOF2ghw$=WSKI8ay$!D| zFM=%ROyYzj&rp(K?Uk1_|6}qFH?ZQ4Jq5=!_wj<(TJ`iO`Dg7_ny06lecIvXK+Zlr z=j|*SefgK>{zP;Co9zo7TQf~>Izr#8@ zN-yj)K{Bd;V!nh$^?7D5fA(P@XE!?x{L&%009^hX&9<=Jf~ihc@$dZzg_8TYywl&K z+t=$e_R2dY1uIzO)s!Coy@&C;o!+o$hg4{4nE_TUdmWllYwXSMYIcO3W<>3z?&fS@ zQ=0y9dbO#>)TE>^cyib#NU2RdT8a1!|f#&XQ+7rC)i4`~{&_(n& z;6Y{dd*e|4S?Y7*scZK{u6`mwnbI?ywf-lb`lC7S=~W(q4!L|8YcKfgt^CMFQ)0Xd z?Q4_|fIF0zz#d%6VUy@j=q6L$DBwx{Q@CSMq?)Z`o((CHY&Kvnuqxb9=*m}Med=tL z)%>f!hn$u=Q#JqBZ%8cEYSLY0;G?PSHkT4z`&Kp2+hlZGDZSege$Fkr1ma?kF15)! zHkwdeSXyfaJRuV-)D}Dl0m3MT5K4cx_4j05zu>bo;L-e#idg=@g4<6I}{b2hv z$ut0CFRIndp_A)sncpt&w2Z9%lN$+hO?q@LPItVs_6-_nq0~@cc2rX^UZJ41&>dZu z4FKhx<2C;P8v`zNt>!E)a=8cAegd{m+%u>gW$)zI^lLRy@WzXn8`5H+Lpca~t!5BG z^sl>^K#aOk18q@bt7SR&veC6#PI1vZ1k?{QQr$(c4!GWt^;WXI5EsBP{{$eUJ0As% zHVJ%k2-x{34-|kkV;#bpfw0=w{>y;#HwrW`q`$pZvq1gs+$4}2NsdR@S;#Sah#Uuz z9MJy%kIEmezwS(zhg(1%rZB`K#1NI%)+%|&wwV`zIMt3Ptkr7UE(B9M}P5>{iXc z1sY?r(4U@dY*a0?7uRa`k|I~f+K*hP!1<8sHTTnCO}x$;pU!_x-Z8*B+WzSn({Zrx z#4{82)Sh_8S_7pWW9|9wr?i@ zcA)M3jQj)o4F5eqX((UbF-hLJ%i1{`2cH@x>zk1=kG_QWr#@#jPuFUTJuib%TgxQ> z<5ML^tyYT9?iLKKbakz5WBx6XTmYUU@AN>MrXs30zHH!H&u@?34ftXdW< zvEbw*@EFv&eeH)}GPeLpoVw>_wkv;cEt_Sly=JD`YFVh9htxrPzco& zIeX`W>7yEAzF`aT?s{b3osXE1XRWPZaBe|Ht_It#AP$~f%^+0kV!+A)I62XJlQwO_ zSf{n-d4T$j%83%!;kEBt8)Nd;&#iI%ubRgmL{{}U3UHW3Ym9>UfZP=T&hG$l#bCcM z`w!(E_PfDZ-85Le&Qq`lJYxVqa}!P$*qe#7XZgMqHWSoNo}55n@Kgh(|tMhxRG|`7bRdHV=pSM}cL#N-EdDrd}qcq8bh$vt}L^QoIYy}5fAM&-%-uhN%M5+74nau1iV=J)2Dq+Z`Z!>rX6eH{wTZ%%t{Y0jZR)rD8V@vGZ|$Y^YX*-6TM* zqx6P2MxBj=)@=6M^-^0L#LS`hp)c4R%v_|I6XQc*&sAdtmZRa0O14bWYGOkLMwP4Q zA_b>FS<)1*kFQOZb)IgYqAe7~)xdcqfBU z41f7GBQkVA%L=tBqnGPtmBI+ool`)p`FZG2a1uLgJtXvZrxcFgXEGJL_SO#;#6!pA zrbkh$gH-j|G=FpxpjdFMFz1DaHR$P=K*wv*JpDL?B)!P|{p>u}mA?x}DD`9T#;mF;_U=UpITb>|P+=nbc_9OXiNzS-5KWNJ4QoQzCl${_TeGHVB7Z;52& zgHQg6D15Ff=f(P;GWP&H&U4-Ekng`MjYe<~Xp5TSL zlZakXXX0az8qF;R62agN9Sho7V?W!6G6o7U1RgL%j&7%XKFIgC?qt3fuz&%`HU{&s zGn5Opk#e_spTpEJl`XQdYDZ#x)y!)8 zSdPV-U2Hw3Eqy4awo2gl{|jJ(={nERkjJWR>a6=s!HLX%KeImshPP%{;XW=sq}v}V za?NwpzY8r}!N>m)XL82;&~Rh`S!Gl;zgNt77?!O;pvY_K<1-k)21Z`2uvluixw49l zXVU$kbILFVT6$iH)u?Npt>F?7H#z?{#A@rC#Cf9oIJGPW?XcX&CTpuDU=%HAi5Y>$ zu41YFnPs;gEw*>hvmae<9}yoehKQ~`7O?^h@Jv_Rnt-$8Kq_$Rt$SJ)_3vJI>bb`The-3JF{pPXvKDRv&2fG+AUG7SVADVM@yUuAT#k1fjE!eoJ&BQ?B;A%V%Ki5YsJ~@ z<{Vby&~9;P#X0O|Co8dOx7f5|CxV%Nv?MPD%ya^icl74z1SXH&JdKs)Xt(5O#naf$ zSF(~^?Ur1v_)2zj9xKV#Zpqe)^ZsmB+ltg(MT_Lnak4W9T^+KDQ*hYf8>47yOV)$d zs5P$cvg->@+w%ul9EfL06g=ao`Oid4iy-9%?CvO5_MRxaJBGvra@-SRcMl>lO9r)j z;AT*5bEvx<3zhACpL}taF;XGl(cX&{f=~CrgUE_i)%r>);opFn8U}v69XR%wJ9>9! zcg7%&`1l>i+>X$p#Pd6+k1n&ZIYU-M)Kw-yXDf>hnGHQh$j3C)gH{$p245zzs+cxM zTVRQ)9cVPhTpoLU7!U>}%KF=%GN`U`zD0rdp zm)v%NzqQO7MdA37$WjSTI3%*My->{OC!WDrb!d{#xj5Zz>a>#0AfTyd%t|q6|3h+9 zr-jBA)L9!$id^K{RsSjEF_K}xs{F{VPD!Os1F)nYr$DiuWM|qwkieJi=99a?P-ER( z?!qY^pa+Yh75r@cL=P*Yvp(drkAkG_RyN)KzV_JSB6);zt19;bYN6+A{p;rtcI z(Z)ecwGulz_#8D+aGqPW#sgYo59kS3cf%ZZ3bbv+x(QyF*|ahV=h1tZ$%xjW*z(*--poaWo%FSR9ub3PxLGLvu}AE)`}rIDoyF^L{34&J9Jb%=!Vn z%>?GG2ZN~HRJ>Zb3q#%^$4zRFG*{clo1YlR>&U*DWg-$lxMmHZAICur<0 zIEI52pMy`KM4>Iv&Riz(g*cEgHIe!Q8e+e}7!FA??ybvPP=_r`*qfDT1%nP*yDetY zOSi?Um9ef*8b+yHS_sZ+@C2<;u>qgyIi$)eE3|UEw$i~(2Wc45jT%f_V++L7=P_R`f-dyJO1OnLG@Skbu6x!Vkm%P&zjpd{(65tz zv*|a7esk$JkAA1o@0IjBoqlJ~?@aogMZZP#TS~v>^t*t5z4W`7ewWbiQVib18fibd zjeb|qZ-9R9q~DeF8>HVg^t%=*aJ*fZXmimVnNX##spQ`ciw5l^%0UCX0evq2O?{z# zC&o*GTGf`sz$DT@!^N~E5<6d80vc1&mVmajX-hzMWUFo2i*Urw=ItzU7Uc+`%aW^FXB>uUAo~QFSLhpCrXah8TuM?#12n6@YFCv_r_hH zHN5>QrpvcKk4b3a6V%`f7s7RuE{%uGIiaFSka;xDdW_ds#v_N})hu|`P^_27T?ZSw zcVg=NoL4a2h7Meog5j6^ssUP^=H+>CQ_ZKsZzazjpok&E7SPwkBOSx+fyw}G62O1Z zhLc5xO8070`LZ?|5P-JCHPw6(Jw~Bj>9MGd)~G-mgEhYdG(9*AK5&&l&)x*$xePRI zyi>}KW87z}G#iVk{}>c&JUB6uW$3d`X#;*Qa&>|~hMz{&YElV4o-%wI5>`nohVU(C z{_KL*4WHpo29;G)PJ*3%KvRy37xfvM|478fK5hHRswqdr%PEI8ygvuZ*|5ukQ=9yL7dzgPvZ9Hz$W(MbgX>$XpA$^9`3WYv|2)nu(aN$CS>yzN< z^)pRMMv<#cIf-z6_WTYSU_JnJyN9`3_ei zbGYzx-M9{EU;gXX z*RZC#R1mzH^yM_B^s2LdVp1-`N#+JS;9kXQ4%E6%G+5;wCxDXjj+55ctQ}z5xZL}L z6Z5;8bIdnnE15;`s9*y4lHZ>1cDUTJhVzhN8~a`E+*Oy(#ySUcnEPdUhuvEXdO)F~9-CAR; z(}EpgegwlVz$61C>VqzKw*27D$N-Hw^8FLw23{*;X5-Et@`Gr!;u;?II#nI^SA1=#%S*S6ffj<&Yg!#=Ay3d`tb#OBBg}3 z-RkRmmVCjN^^Ju{fESaje<1%bTF1f31$$ULh3`**eLO&|^;)7AxqCJHCSXc+RyZCU z56xQ(#yM-S0k2l!Yvg!mICyPn4-nq%Kz@HXh2J|}r-$?VjrROb$nA@J_RFDfK(!)M zaIkv2G{H;qFJh2cZrTj?*j%hv4H&zZ#n2ZT8YS^1M<$oGRE>}?xoGTYXK=e5^Lo?z zQ}3}|1$)}Kj6%aR05o;A$q&3^CeI1SRjO@lxup4{;D406y7akb`4M*q}uMt1>i5-Sz^$ z$OpFL`h2tI>34ae4f(jvp^D#=1e^yf%4+%%Fj#x+dW60&Tskfu8OyF`N9hiX?ZF`s zmkAKpCqZ141mTGaDEk1tqwM-NZo~XgH;iV1dRYvt$R#hD|rb##m@ zFeRIZLxFuZq(`Tl3%3-yzGKxQV1Z_*O~2P1_Qzd~(S{sUL{+>Y3GaN}{tX1=v1w); zHM_Ri9cS-`OXq-E9W-$)DKpIc_Y} z@J;NfCbpnOVoO^f`OjKFpR>{yyV_|5hGHPVp$(+X&yJTIv?9UB-|9mZ??jW_{y(^? zOZp!$m~ll;(T9XTs1jdACI3?&7LRo{4{okVPEY7mtVMG68Gzh?s;+`uf@|A2H z9_T^8xv^Jk+@>`?r!}@{udDz7+A9J2y_0^|(C=FOZCtN4Zqynd(Hb{tja#(F$F;`C zw8p2j#%Hz0r?o~9aQjhg;@Uy*eFw?6?A98O00D#7v2v)6!^g_)6<95|6Kd+HsKg3q zr|A+6sd=mU_jVH_K&mFR@^vSDU|pJ@LzS32 zTT^;n?W?kr_6I0OdArj=&SHE0Coka&Kwa6$oBkP(qZHW-V(+D?Xw@lO_z#Si&*Mr2 zWh1NE0`6U7Z^PG^zen9=BY6s?*f+$bhc=w11|Gvk$0eq=TGd_lB6XMKa`)CBWA06L zvhLqjRq+B^Zk^<*P=NUNXhEpmsOUZ@2NH&m@|9lZe(VLDH0I@LiGGd9xWNKAJ{ys5 zu(eF3sITKp4`R!B`qk4@8?rjx{aB5HW3JAIZ02bJ)~wK#-Td=^fS5#IvgUX_FF01% z*xxXPg|K~rZGD*HXfj2A{Xala6*hLs4~#`RQM_r4`MdOaW&pfv)l}x$&1SryFL)s_ zUQu|BGOB2<+9rW=IKlk8nf*l&_BW}YTk73&)z3$-cGQj6l>r`vLiD*`cq3Cbd=3t) zsUhPfywshCAFJ`>{D1rKem>qWz9^19r#}{1gD=(3t@Ym#i|GE&K5P5fqD%MbP7`a- z-vvbC+5ZqqAs)=$ROdh-nee90%HzHG!L~^0V~yFUaHojRAK?4WFRJ-FB7wOk7LoJc z#fy#a?M8Uu}=wq?c~7tGlx|w8e4wVB|!B~?~)2enI{+Md`nM61aOPN7Mw10dDvtk9wR zdx`n%u9_TT&zix8AO>Jck23#yoXuc%2iuGyh)E6~WN=YQm;hHMMjeWCE<1?OEZ#_d zr#qX5?-eyVUKxwY7C$P@t+Q4{9BTAD#fj4|3%0g!2VZKoJ&ztN5Q|Vf+G+ej^|;6lKq>p&$}3|0Ujd zp7ZfX@y6d$!8hRzb#^ar!h0Qst&gw4`_0%TEBKw1W(}pejnb^8G>Zwy`U*au;BWNu z5`w?Q#|!DxQx$wVeH!rcuhOU8K0cK`9jM?F=~K44yJ*;mG3mRa%7SB6Y(RG(srG_J zrPUnKYPz+W<62FtREiB>pjUcYef;>xNE92hV4SCzBE2dxK}s8Q;lN?%t3pb* z2gjqjrb$DbPYy4YaZDOg0Cn!x!4vUag9NN5-)^+Cp(_#aV36;Gb|Ra-oEM*|u0l+%*e3 zpuV34j+^2xPA_F#S}8aYp3CMyNl-)=4vM;CXDwx+q_4%A4PJYQ<~^}C?i}0X!X=X2 z^gHZ-UMDMefbz4mA{%NwuooQ0a!lRB;f+(P;abgrR@2W_>y5)3|LzK& zK?%CNJf0HD<564j>uvNoah_%+pPs(FvG4L4(^Wy!?;v#pCm^>o#WB zceBQ5B!hj92r%pw%-=0K4jMIHA8&e(x=3G5d}u9glK=8>jMfascBgxggjm$lU~ic{ zvO@sE($p!INke3zIV)7%5NUINFl3r^yDByGW=8^J4hWS4HA%638P zx%Pq!vlq+@b^~~2$|cyE6}~E5U5f%l$Drq5#6(Nx0Q^Y48n-ByVlv!brw11eVq!1b z#j8(>blI5BO8(&h;8A1+oCl!P`&Xm<1E|~+MAG(F@KU@%4shX(r{Bk~4U&{fwq)A) z4-Em^3Xahn0me0gV!$2Ps*!&wj5tWZ<9>z#)4F*Ko? zfAhs;7zTzWfKw4=Cpt=9@imaxRl^hM3eTQyP8>REHY?A8HiU+7RCq&sAca2$N+9Zu zA5?ccBVR>s@EpNFN>8`uIj(z-`1p;uj?oV$OP_KeH#t;&#wm?WSK_FRx4t%nO7ti?u-kc$@Ai~{t?S|#rbZ`Pw z7zTX)wuAg+n>m zeWmV=tF!T~Ny*@gFoFU{>GG2HzP#N&vtaLr_b`O9?L%9Elb~XB&p+6%_Qd`cwki+` zcg1m)#wV+;t7I27A71}{)*rL3*vk&LeQ0fVS`K~4UYomc{rhHl`=P_{YZsXzsbZ_g zAXu@Ki0xWt#8*M*>Xx?`$lK>a;`tVNd!@DQpSCfyAA||-KEa<))ed{LK5M$`O#OUU zw0<5=5|6L0;QzbBXgXy8UqGP0^zvn5ER%tpbTc0C5-yE*Agy&l2?UTcmlDxedo-^QL30G#q#aeJO zT$zP^4mw1$b5eM5fvwCnQ2&X%9kNuK+j?wccEOD$abu+$oTt7Q_krURXs*+K>VUz? zQ*8`yKXf1`mrfnCJiK`7D0n^k>~u)-%jwM3bK`mX%G*t(BWB?4OkBI_PkTRmTH>?6r6E_2Wd2(uE&RV*q0W+e_+u|xS6 zG(|Qmak`3~%6qIN+f|&c9AzaruHqc!U=^#k7qq(WvMZNbPg+k_2Pd%#8!E^ff!{1Q z*t3+e6dxyI_m*MgU1HxQR))c3u1>7zw(p6GuCr_FY|E4LC+a$zNx6_}T4&iy%LiDlLEm5(v1uEwVCcm$_$-eq&DwOIxH{>pn9z}_UjFVK)K<3+k1s((4D>V3 z<5p{Pi?q3=+T2+b9yLpTU>Q2DzEYf{zp)5cSU{7`ou$tRA<@~~qAD-wO#alL;9-7g zm5)XFmOly0h2lQqaubf3gigv$r!m8-S!L`%ow?4Wt(v9XTclN%c9!lCtJ`k-Q$p)y zb%0d^ubDfVw!){I!ApHU#eXIf=XOZhlp5pGgXf`Aw%gd^9We?6ZLj}`)eK^Rouz*k z2V5PQwk|7L!RM(Z83=g}Zwz3-S$7KsJ+?+`+FTbD; zXW?Ab@XNf+?(*@h)K`mX3E$v%Q(i5hjPHGyBISypX^bxvJ6vA>^X0d)g$sPV6%$l> zEBFq)DO>F2f54lCOMLuS-xW=I?)96%Kh^28!R5q3{CEi+qQ(q`9%Jo@-x5^fP`|2Oy<=YSoZ?%tg^I3RbwYa(hS3!Pl8;!cNvL)4C zehKYzoXes(xpRUnw-iJuygxStnc;<9qKaIwC2Lu%sHBNB5y z0TWl1LtXT>n^F_sG$L^?|K}l^HYV2;`K)}^HGRK4gLB8R?@+}n_=)dOkdv2x2shQd z_dC>p%Tu^+i0M-PVJuLNRz6KD&(q3tJB#cnOgf7ksOGeCr&gY=mE+Dt<&su@rB*&u zE1#j2PuI$4X+X~MQmwpPD_@|Md$sb#TKN*Ke5qExMhl}{)xsO;cN6_SLcd$+_pua% z5FMK`XHo@S^&LY6Ikk1!>&iGEs78uKywWsr^JrPgq)R)`E zKS#1vu}-Nd` zkg$geP8$7L+JV7>UjBC)(%a$X_uNkWTBe?HtbK3!ubs7XqUI| zJ^V3y=Ws;*z^wk=tmiC;w~oUf!=t!&ihKKV5h{3IiTass?O)JUWkp34?XrBC+7-Vw z5g&yWK4z>(+wKQ{)(vIsJIoJ%sP>rE_szP~3-26C_dVL(J+dD#EE@HfzUR^>drN5l8=UDq~(z zdhC=z4|EPjp^+cjqb#7{a@-72Zh9I=PCj!e_HgNHb68qUb}@U4EY2&ye{Vg^*RkaMd4y| z*c`su8ot>Q_GN^9l9Ab}T*Ew0Uj@!&*!f(sjZLWaZd*&mkY90&1XWa;!qW9dE=l=1 z*5O7;J#ABDH14F;;l-=X#%G7JEL^$+sB? zq+DWv+CX-$-zgrKZm=vv^VUd~smwBxwS^bAnQ^IwNY(}wX|v+$FM3|wmH{B(wUqdt z3GcF&jaVWh&L>cuY*IBSyU=^sC99Bslmc~~!_+L<#2{PP3T%!jqw=hbM$5%T4nrUuik|&u#D9tOs0G0O6Vu5ZGt( z*3(*}vqEol^5r=4xlm$JL(qWm@!-bOU>P`B=XYCaU83T|0+T2PC%D!*m2u#sF7GfU zp;8&~B$gIAv>SWJI;dWwU74>t%bTU~*1ZWxmS&&1`9@24a(Ik5q99S_^>ly8Rh6x* zk+-+G%5s#I!$=@N==K|Rsl3@19^DMh?4KN--0YRY6M`l3_BB9*J#FvVtgpKkI+bhW z?Vic-(rUcPRxXma7iA2QDF-T(P9i@%S%xZORlaL9893UKEiyTchEs5WzKX_&%Ix*y z3tCY&Y;FaC*LpQUTL|*axj~mUpu`?8ZwF2Ve#IM0bCDH`2C_~_mL@5sL^j2)Oodhs zPlBEio)n%SZ(m$)MyiJ$M%rd)xOqX?l1zbkhesy?Why=a$fisK48q|_03vJ#z~au* zTpAu;Jf!QQuU(czx-O}?v?~+R0iT(d8|g;+Ck`ByL4{jzsL*dm4Fp6`Tdg>tXm;(A zLsuay3aPWu^_l!Y7jB`k(2SdFH%k`?8CM(+UW}Uw<8HrWPvvXoCI$449!1S zj>CdbifqM*rD!rf!2$Z9g0<_7gIxX>@Isg9HwA}IDHzF#*o4b0;WBeLGk8G)l~Jzp z)WXAMR;v<=d!owLp=w2;7vV<|xOZaFkAP3Dmq8Oc^!XNJ{t-7P-|jmT_Qv574?CL2 zgDec@V>bz2C~sd9cP(=&PI-H_Ygx8pr@oZ~B_E1pyhtT`EmrV*+pLR}=aNNZS<|qr zg%&Jpt|ekKs=G;)=RFhlosqXY!oE22ad>=i9u-)KpRiEuTZcgeDPM(D@WO1o$W|s{ z26$sN-lQSpGeZNYt(l9IpQg~kDu*_sIprS!PZn|8h=E%jv|ltUmei=|nHNOHd$An` z_=6FgKgRJLXdYLweN`Ev&3xDs?+;g1z8M-TJA6JK&(pjFEDE#QDp_A!q#R4ZrJ*1NgoN>EOJXAbne_Y?%5O{0pU`)o zk}e-js$9s_NtIxP|2ad?;-}NB9BpgD)8+0?e9tt@SYO zBB4zH?a{o%8urJ+HBiYzsfo@|B0D9Lnu{{R?l0u+yAmltR@Qt`YbAYDt7W0$amNkC z)0I#>F?e~#cteT@EJ6Pl_+qbXp-?AC#m1c-1KO4Uk_O%(d1x zF!)bH(GR~sFks>h(5*^0ph!<9uC*QjVB=GC!W|%1+aPh9IZ=@l1PsC8YYRJJl+tER zmVzIop${4GK@`~r{jRhv3x(i`k>%Yw)c)!E!V4`4R-Y3LqilJrl2gt06~u85>py&m zF%-eum=#AEFOBDgS{h9b8e)u0rqRWSg9a8Oqi9SqVky|e=1TI`HhHTXK)G|&)~q&e z#eHqXn1232Hqb1M4x5V;WB3N8)tMkxG?d`w5-YO5N^<_6u8vg}Hc-%t+Y4>e+|Oya z$;HbWh6C-U_~!i>8tp!!xw|#@aSD3w#XYaw{hjUsbSgq8gIAMI0I{;*f2_LnKPc}i zffLKk6(9?J81leReo9doPS-p2hj6rCi2*fUz|8{+=S#}k!g3HQ7@QH49~g&$L3omZ zCyE<|gJ0(#tU&V>BwY?JdsU*E0yo)wgE9MQcb$<#wE3Jn8)HxWQJik0?RUXr1rf;~ z926-XnDY0Ka;~c;R{v<=tTW@RhTm4jCqzZeMYL}%N*qWsTAgW8 zGAip#kz)lXJKPtUI^0qCn*x7>ra~pwP(}0EPMVv=IX>JY+jEhRy{6Yp;eSuy5Q-~T z0ba}<1u;kS^v&*zbk8mXbmru!prQ1%N@$JlUb5-DXX>@>~S4#n8fDU!1w|D*3XRB+lz4# z?cVwm$^6&PS{m!z*$Zp*JLtMMDq_b=(9i=fDEsoEq>ulb3 z-+$~n^CZ?SZ#@bw;;pNz6Z!W4$9&M=aIfsF7J5GgEETw?kFv@oJZ$B%0c4U^hgP<< zqwF@ob_K-%WMQ|y1-dndGT0)qIf1;j%hg512(;rnF^SNno;Ihvw4Cjwbe5L|t!Zzz zt}{9I!QXcH!~0i^=iTu40sL73k&le~e;dy+xXy>`&*5+Red0c7JZtxjn4eJlv(Ybf zL({AGNRG;C&BHYi{UI3_A-2g6;CT|ddjR-9rh8~QRPuU}_1Db8BgQ6+;m z(5dY#vxu+j*Np}1c0g$)Wm)Tr28(Nbe!SdPzXO&7}MQ0|7yVc={{6zDm8!$*=uaVnC#lRXIe22N1pA>#Lye^=Pb@ zIY0`}MoqYCDqFY&v~xcW55P4VCWY!B5F-ZGc$ouIyULbgp|=qMf;m`pa1xR}=vcqb zYzmIXYRaLp7BQ4h0gZO~{xe_1<9!$ggX}Os>j@lQ!3(h=>1fky280Y9guem!>o@V2 zKBj6I{P7&*ZT3W){e#Ul12fC4%6T{JRiqpC4R3Ebqyw#*-TkxT!9~!R#iFsn0y$ml zT9=8&$!BmwuHol!Gg`R_Qe6fvcdb?iN_`hxK!ddl9w-~x_SdX$?2jw?)b5ncRhFsb zfCUBZZd1TpZHG5!VE{}D+WEQ{1rO{3@2us7mkv zcD!gMFadu5ek7d-E*3lx4Ldi$Wzb-S0l^A~&&3Ak5gXWv4Kk^kj?~6?&}wz?`y|Km zTUT8{A{~F9kD2 z^ga$QJ9Q<@52M^_%r+~I4mUFcyTTubKMnjGyS%m0fid+So44ABssHvF?!7^BZV>uF z=nW`>Os+yDTUjvE^N1X3H`8KnSEjsq*G&jdIho*jwgH@(%wd)^WH;-r;#D zzvI#_ZN3w3e{|^qxLxJYDzmluIeqIfP>-nymG6H^?-B&$d1 zPLu0RuoGVc#kV>GOs_~TP-ry5wvNrvDK|VjZ|4 zerONKDrG))>fb_Y8Z`z~XSyE=I+_lF>7kdJB+W{zhM-#+y@4>DAUFL4-|le#2+87w zn};eQ_u>qc%ah$u!%pzOy^F20B{@y$VvRj&rv?4FMZnTvyU&Y*O}gj|bQDP5@vb3c zaGqSINytu#_;*YFUztC<(~3%2tCS+ShyfPZNoN})amRYSUUry&i#GPK7sOfcmB+vg zmaF&=K8VMw_$UvVWb@QGnq=-CFF&kNe*q+HOBiB7`7^n2Q6vUW{p>8ji(J_uAx5C2KI4I{cq50 zZ?uEiE~WwVqZ+XM=lM}|K0)1sQ{lGbhUbkoL8<(X{4@FQP?$n4dqZ8Y+8w3D{)j&=hW(R zwEA4Fq)00%)k?~>lBHV760PJmt^Uf+lIeIPb!Q2l90iw|>nZ&#t=_BEFV^Z;kj<#w zG)=o{fmX6cyT1t^@26BHYqgSU!8?ZRPc{a=!H-mtWne@WW0 z!_t1S>D*~Y4@-OSOVVC2EbXt(k~WjlX2(Y_zctN2ht5-Qvd&gj5HC2!?@VSKtuME+ z=&LmI4?dxY61zTzQDWiJ>*IQvWCV*XzWxjNa7J_6UF{7y)>bI~D@iEhSdE=2cIz<~ zjaV>9)(CZ543N6m0RhR}*5_#Z&<0SxfDdVqjz64$G%+1gvpd_!oSOXi=S=Q#0{G#{ z*CmrrNKf7YpiRRP`~JJc*`O{es`;hK)DB#hYv7!NID_R^tuK+PD!nb6^6@;)Hw~*L zcpiu`zGoguOWdRnr^UwLUewx6wt|yEfge?+g zthhamrijgH`e_LGK4iQ~JKKe$vK_I6E@_(+adBHX-Q~Jxo9;oF2)Y8wfmKA)HPO%t98{%3zH*dzM4JfuBS7$P1unfU{ zTHn%lH>&gw<-0)&=t;~*%k+-I@jstPi&*9-AD!c!yZgm&gMIzNBA(E zO6e+{75r|vV{@~?iSzRB(cAgiKK^ZdTbYAkd9{F<Z)>e2JJZPgdR%# zKx8a>DY|FS$2$)Kt^+uJbqW+Xjonmu^?Rl2%9bKT?1LlejV^2R0R^xO0FZ#q2TRY2 zj={fpB3@NNE8v5hCnMj^G|Npkbbjm<&kapkGl;8IQMh%n1h-BC;f8^@QOz^h?2oY% zAU+Ic#j{Fh*>JlB<)v~px=?-)H%_C-^}&Rcye|nzM6M5t$aUz=Ag9*PGzI5C_GZi! zhORx7Z(cIr_(Z;Dj~z;1fSo&91X;1%zoc~Z0Mcpa;RKzW*wK6DrgsQ70W)Y`Y`)#Y zzAazYan?cM3L?M=}3&gQew zw)a2M_6oB>+uj6?E^SVyZEupc>FGY#&Xo=wigG+uZ4g%u;A{Z+&HY~8&nw~wBjcIJ z;iJ>~aFxbouLFm6<7Q3Alpx?$=L4Of>o zHL0+Nvcw+zGWfs(*bQ$2+8Ps*%{BlK_Bc{uv^*bC&CI2vKm(ax=cPT$)ptn?5AdD;GL}=I_B3*#2IxYj4nrYS*0u z64>8cfh(P$H%z1v#2lP$=%odge8PU(ybRY`wJIJE1%>Y32KOfB?`f7SBkK};;6K%c zj&R52*DnJM+++(SN-v-C4dL504kR}7kV6{@@np|ggFUDHwM5VP7FZ_({O@yUG38L8 z98_thBiIFeel}Vk3H>Mh`US1~mDY$#k`x4KryIwmP1Rf(UfP$)Q=yMov7HQK=xuQ@ z540N4k^{7?%S?kPLWJUShRboxB#&&C-89ZnJl(4+{d~jII4eB>rbzNw?i;6rd4MMY zfY9aUWR=E4mwXBRCpJLaAcY`DTNN;GH8AgO$h?{RlZqR+vHI$) zp`E>mb*;GMNh`J$#QB(E--gNes_MEdfZ$#|wDDIaZT!{FvgGZuyuDh&7R;2l&$ETg ztZ;Ewg%_IT?ThT;Dhqse)MbI?6)wvJ<7++O7G5ZYt1|eCeF+R5h+)W;#G;+aRcMdJ z`O1`+Y5b0p8I^3w+N2|>DN+8d`;$Igr#ni^Y7B3%o$Ui0!5?IYL86}lPmml#j~yJs z@KWfDkD}X;ejyDhMGc)aJ_!(XH;!P?E-8jzco>{QoceH(X9%3U4yd>S2Yk{mS;H8D8JHVVL2C?N^QMcaqN^_U$bC z*>6XCOU!56su>ttj(FbB?);g_fkEw8flkgJXm)0X9Yr_d9JE+rdno9`T@2Ve`Q7Y* zR^!xYL2n$OH0N9pzMuqyfj)JemeqgZT*4cW?#=veNCy^IjZ>eI)tpmsMa~WL!c$$R z>;IJi8V_EW22k2G65h}L5AY5JFU2b0PG0$+=I>&sH#OTQT`{_3QFwtPuAE3DgCz4X z$pDKtJEsq;r&uWss9l@?2J6m$hrOoxow(|~F^2fzYPHeL=O6g+inqWQ3+Ie3#_(-p z8&0Y}nvywlw3-3H`HlQ{^KsuQ1mTW~{PK3^Bze2!vhI2`e^>LQgV8GvfXNniX3i^v zy1X+)n~T$EV-xGGkv29 z=gh>R!ng9@$v=?)I?nL}(*AzUGZ4u{bzkFzD&n?M^7d>%07!5x9^m2Wm3Qs|?_0D}R@~1FCym-gyica8pqVS+=Go7&7R(fy|xhC zC{NE?YqRG#l-KN>dBs8Ks^RfPfcF3{7shE$+(==F$T=xQ9w6pQ(02g&Z`H-Ayhr?b z4(4O=tN+L3D2Km)!Qb@%H97JhGdVE6=;%kdiEqXL^yH&%TlYb+yYEeJXK;A)c192U zMl4779(BjMcR|YId*QyuhDi@o(%|3UKK6F^+ucVqx*;j%e>>v<+@0K=anFjQJd*kL z(a7JA?!)|TSkk`kJx2aRiTrQ9{npVvN866>dOM>FavtAvbk{rkj_!VE-#ecj-*

      QE-pQq1I;9?x8Aq60i!uPF*f*S#h`aB&vxvw`rQ zM@;oK=KM}AbQ>Z~s52^qZN@i@3a&F%daGDxhjfF9zwlX{Hne&k6M zXiXM;tx+(}?T7ksrssJtmhk)%`VC;gjoY-SS^UGI9Q;R3cOrq7sC<>SA(H=z_R z#*g!2EQHC6w2RbEyGHkFG-K5T1t%jrle@`Lp|4yb3I*o~ZM|727B*8&jW$`FtfZ)L z!5&RVc=Gmx>SxmG0#TAkUBNbE6?LhovO+HnJ0Bl5r`!0fynR+yk@Zbid;O=-t0S{<+x_5Gx^yE8hMq;Z1$*RIr8(58=UKa4 zpVtovoVC%S4E8AtA?XS;SB+znG@S^z8Q&BOr zlY8vi7bzd4w0P0Qi59oWp;}Dbwhh444DC%I`ik@4uy%2OC%MG6BT2@4Ksn+Y%FS+Ra*7tRfSMKrx= zZm%F~Wrdez@|R9w&oG+4pq1hx^;cHH^NDA0Cn7cn#C%q~Nyk_EM!F!O`;LATZ`zDc zN0)Bq&|9-epS|79L{b*jUb&6xfWM)5q7L29ms1_+ZL1<3{U|c+D5dco1JLmvWhH67jNcb1A+Pnz*vxvhOl9}js4cg8SS(g+bm*v zySoIMSWrj(3^=UkOoEICf9gw<+y)#r8mfPZ!C}e$27uL=j)}vI&BSmYB^l04A}FqV ziQR(f>^7;wV7GgxpNriNPED|zB!_5y88KL);*cMhgGSTyqBG#j0_YmV1>WgkdW;tM zho#Bb)_Gnb?<(0|uU;yfMWa{oga1zHj;V$+-~=0C1`cKg^O$>$aFtdp1v@2Y@j z#_06ujUS5Gb>fW*{+*Xl^ax5hy}avcF{JPcp%MfshGZxlx5~*jQjLW6t;X$!4&inp=QwW^ z>>bkxdxt3wj4Y}4f#u^x?)5)aAvWss>YgT_?%$0=Tl~Tv+VfnE+vNLCp&R(I6)c@M zL4e!DdI;3NOCeX`g6nq65A49&m0s7Q>9=9)cgb7#YB~l^Cgn-NG3{qd;uLkflC8b& zDeEhk()tSFfaApvV7P$1HH1K|4`7%8duT1aa>L&~Yn$}}3@gB($X!5qr`2t5&as7a zWIQb4-;97G3UjTWiIQC1^}l0;1bYR6nhCdg8a=qy0^0X~2lvtKkkm6d^8NXSbxoXe z^#y`QMJ+B zL)5wODfT?3(4`LOK$vulK^v;SiuGrI7FFJ5RgnUCRPUd$)<74;0!p`bu;(!|cmQ{3 zuV6im^{0*Y<^u`-J3#z*1MuG&XgERSq9hl-p^Qu6!pV^_LrgfiEUqI=WgCWzPz4xO z6Kij#CMy>8!hJ^(B}TL`Q_V^QNnA*h`#;BZlI@cEIncJ1HYlY|cq>1YZ8DvMUt3f8 z6*uUw)I!v*Zl~Zj=E3-|N;dOw6APh0l_cj`!_!X-9iF&{Oiy!Euc9OFN5Yuv3JUd_U#+i~wYL<$#7 zn?bYZinN86;G`j&HVRDCH`!1tM1PyCK8bB@9Q{Dm0WY-aAso5g`c5VP-3mzFjYCt% zl#43$m6d$v@{vREWDFRveV*&1=qFaFSzbyAD^25jvFAnDCE|0 z=wAeG@pX?`sWsVS*CF;^Bgm%}|EmB3{sSF|kf1Vg=Em!=vewapPF@6t`@g=<*(cCI zteda;DiraGQSrzPM&^wK9?CoJWlaRa2PnQ=A)s0<0-W`AFQ5B~Q1IQr7Uw5~RW6AS z0rsUz8fhPc<#?jhpyCL~?@km=v+1VanH;t7=Yv1IUt&Bj|J_iGwQ;^qYZZE=)#CK< zLbt8qJBEyc_Q{)B+H6&(%G*nu&GPmc&GPmI%@*3&P^@cJ_rxP#UB9;38dt8wjg`TF zYIdE%HF0a3&4rCIWi;Md3LB$Ad$G%7tA9r9>Ps=_!#DUvd>ZX^I6!qnDb0Da4qp2_ zP5lEh1@iWB^7bk-%W8YiHfAr}TD7@0d3%`!pS$R#9vo+99rqKT$?uw-2B4jOM??!?Q&BPOcx4llpp*q+_HHKTbV1*P`o!7KH? zX%=|KZ3X+B_`DPMNHD{zdHBkVg_Y(Nu?2av_+Nm4S`uJCZfH2~PPQlj<@4XBeLH~L z5M!46x04nN{S>9wVtDb*9T=4$Z&mE@=TJMcz$~fak>x|;Yh37LaC9euLgrL=;+;wH zi17Uiwm8q>)#n9}X63l$^CB8V&lZIvr-?y2ecm)M?DJ+|5HYlcmmP)-Is72)^Wd!H z*?DBIM)EMkAJXEw7i@(J1bn5By+O%;DUySMUYh5Czijw(7E)1i=znp^Krqk2W8K&t z^JXR}m9mi~d(Fo^Z^7rLJmeNY6bCriBYC*=8a}_n7g0#2ErGurD#hgm!Ms`O8LM(0 z;64j6a{743F-oZ3x6~BOQO{U#6etr?09mn$V1qwpq=1Y$fJZstRO;i)#AX<@XEYG6 zA~F#uoPjI!vw_VPn1bUWH_&uxUJ<|KxY$yEZ5|YI9+W%X2YH+o{86zfu=;Y|(=-f) zh)p*T``!oi4XXGub@t$;P`@s!9{|nf--`{a;kPWrRXKp4&8sh(2C1BU^4mh1CsWOW zRE14>I4>Er>rHsrwu#^MPe`>k?@m)^X`Y=XE+6>0iRiTwAO`b0pn+^`65FLONp5-6 zu0|KFzMWnf`^61?FxM|p?^}V#B`nCZ5g$m`cq_2&ecb;JNzce6hA{2Zfs+>JWmoVo zj*C@RfB|hu1y@&T-ktT~$RxqHC1@WQJUka${l42w!R2ge-kk*}!GoCtIae}i+Y4L3 z)feZd-!NXepy^QXyk@WY2A^3Ohi5jmS(*+hy|^4{N~_w9#&1rU>qPyoz~h(=C?CN5 zKK^}yPQkIlrFm=Q2ha|Jroj0ZwlOa(h_g1o3#8CAc!9G#`CUM#1$nthE3zMvUgc(Z zWluYA9x8^UyEXYWIiH{M-CREp=>yFOS}5;Iurcj6upH=tNjA1G>o$zLwW`U<{ZM+bXcndEGdn{#r`W-l7!n@d!LD zyA?jqAD3o^vSR1(`RFS42`j_c`f69(s?mX$rvYA}%PnYX=eM~!S6NsTtnm5jx@ob?tq zr9-lsZpF#3nq4-ND1UvU&4kMU?Cg`^Wd!jey-ccPcqYl1>Pjzv`g5$by^=pXmTG^i zw$9mEmW`+Xbd=7KK&KkO;GcRoVN@)&>+nbL>*4{v#Ohe_1oDGd?RQogwl{9!y5dRl zDn8MaeleO*XES2l`N8w4G!znAX2BlthisZxVwu`>)&bt@3T-SVyBQVwF3F^O27J1w z$A}2v&jHy3EpvhU{XG?(?w)X?)xjU$Wg2$;uz_D76+hd#@G}-w%rOOv>a0*6m$8*H z)ishScwu5bsa)zb(+!|{lcbePp*_lnY!W2zERhJc^C_2?7u%_R#_n?I6-x35Ya6j% z1WAnH55>;=X6#GYz8yN07VbeFZQm%f^lVfknKP zd^>rPu6fFnh1G1G)AcT};pb}9QGYR8CINdScw^&fgEv-< z!O1k6*gVSMj)FbJAFh4NhX8}xzF1r4L{Jl0gM_7qrw)CF{@#%}442gUi0)Af6-aHr z*3|aPsjR9V(Sq9T1MIZc*pC}`4ydom>X|bQ7|i%pwme(xjQ>xz?_l4-4_$j3CbXQP z^I-HD=exQaGG4`}f>wQ@8K=9u8qQNs$5)@{IaBM3Xe$3OaxqFKMDX-d=)8UR;_@8OG&(`vj7L%hL4~$iMSq&Z>m80GVT`Ggk zlR)6klW=z+o0mJIM0fgT$H6%M=_oP#?*ZK;;m&0?ZFRP`+^L>%K*w*xP5V-qOiaoF zaWQ;l9RaD5D){dOkUEpmf}Lef>XfFAGRedj?L1rm!99ff?YIIacmtAVtdCEcWROOg zrUSORXRy<4BdX+#Nl?Wz=<9S35>-yUN-`38m*k;h1G6LT{PE2f2)TRK^DjYuDHFx^ z)?Qzrm*nRq79W z#GNh}8}NwHeq)|qA73z<0?&%XF4bz(CU5*E zegh9g;ppO3u-Etw^Z|Ch#+*8p=dt60|4Ls4i}D;{>8JI~k@4KnWRCJGHejsx>u|@- zxVG!0{7?n@K6GjkZi8{^*py?JcB8GI^(u~Fvp6zhp*t$;PoV+4qupB-_dCHXYHAJI zF}}+amA5<1k#QpIx8TrBrwuo0FO%f0S=M>d`nB0oTrbU*l@>y z;Hdes_AyBE$XF!iTvxXo!ucxvCO^`ueq;%|<3P}d@tD$Ehnhgd3)V6}u0f;Vy;}B3 z!5*zKCj0|^d0hQGGkBG}^N_sr9o>2Ojze<6v6+vJ&Yb`)?Um%s?P@0=H8Z?)vK_&& z##pf$|4%ujVL9~W=Koww#_(b~t$-fxMgRFId1D1mYv8~vmVWKo0XYDU?yM-rSd}G` z?)-6cO)R|h1_>b=HT}Qkw2GW({_i<0BIg(X_nc@lP5trA$EMqYy5Ie#`>nCQ7v6=d; z`}A2aL7CwN7fDzEtBKBs5(w^ne_)M+V32>V-yGFy?C`=Z?>q@L(4B9vPuu<}<$ucj zvHVYwE;{UsRp9pE^42p2t=7*pr5EFl8~1CT z_y{2&6Ui@-j+OI6O`8IEal}^>oJC(ReuE0{IM1 zN;M8(>IInE(`)tgu*Us>q*($ybo*qwEyR-rxFHjjuK_BJ&bWK9Sl)S1&w(UMtx{pl zk>CfoucwFCs-IyAH8Fkhgfp5y#%cyIp#cl(2IU#&X8_Lf#!E=Vce#!>Uh8UWyqYMa zS3)22_gejce9$7fUQ;H)O;!fnjFn$qY{_u#RV39NvtonLguvzgz+qXou*lfTUBnkqxD(}^uXN^v9-aU@bM2o!`>`f-Zd6g zqhdMH-uK=uV2!ajYS1%*=`P6;*mkiwsYZ7XCd}Y#+)+}c145OOxs=g|8=BThe8Do| zgowU@XBG2YJciTL%Y4oa@8i6#`k53gX6{~fjnf>Qnf}ER{Hpk34NeW%R$0MdtD6yc zydG{We3KPnJ8|W?c|Y^_vJ$74j%a(cfMPkIP&BPMO_huRWa2f1Ogr-oq}!=OTu=4& zkqP|AF=97aoNNA-V@_HX%5Jy_LxDNVYZ*2 zNt|V6n5Sv*)z(p1AGK|ik3Vu7Rf!g$x0(~Fhrz$dEJ&P$Kj%x~cbZlR{5y-ua|E%` zQDPHk5BP@Q#fC~dM}9hRNGk^4Al6ZAOJpI(>c1<`i=~Y>jVLWWzsqe4PREp|NLZ#NhfQqwp0_abi(p zwn-UH(>r}QgIds9tA+Tx@pwSO_$j^T?ReZ*XNphEgBpWdIkV0bz~H?=H?($OU=93) z@n;GCP?pV@rGm$3-HYAJSCKHv)&Sw{9F@?TPA(i`N57 zK{@X9a@MQ{;ghKbz{3{B-WfUquQxSV9g)%Eeq#f6 zlx%s&cnrb8&5uI|;5B|eF#Pj*2_XC7%Sr>t{zNJ_q(ZKR?_KaNV0`Z~zN?K6>~VgF zwt2Tv!0yyfkgXM-ml)Yvli%!^&2860FB{ojPW=SgTHv|d$kvkl78Ctj)1Sj^UnL?! z@lI{?HUrMK1m<+7g)kxI1DMak{rXh`=CetdPWtvVJkK!7dpZF_M`HTeW+Yk#BdU0r z-X&h{7B5@H%a_H=7V+{q@$y;m@@aaBn*f1J>eRacg^EB}0q%**z)W~Nu^t+D7bm(S zv`(cI+&Mh#x$z2MxZBbhZYAWayQFRsZ^cC=pgy~)bLR4G_`Df8L~~GP>=oZm&)gk^ zpY`~YTIfGjqgT|3ejYe4*K7*Rgk-voDSUhet-FBcI*#Og1%Iu|ctCNqx$VKRKtq?u5zK(+ zNDlMoLDpQznv;}Vd`AxH)ues^d&oP&9y)Rkd#KaBUtD^`<+!+XiSA}M$xSL8>k!)vXCc ze)&Zjsg8TO_wod(yafG-=IO1o^TNtBlh|)-dtX8$cdcUqa;3-C_8!;?@H~34NtpwD z*VY4)8=lPzaHpu0^ozlS2xQ+)R`G3wFj&R+&<1fyt2iz7^dxjvI(jiE_-R7jWdp`( zU-%=_2zP3!mFoKz<)$ZA-Yz-7v{Z`HQ3Rj~6xm|);)*n&X}Ldv+;##-4ZsIQuLWMx=GB0&Ax4eI7qIn9zZ_wy|BmB8Ngqr`6DB18-sTK1F>d;It6Bzqrtln!RdcuPIoC zCpkWWAiZqtV}OcJSj6!IQ0dF+#6ge8#7+S5iC3;f8>knLJ@4%-k#GbzavpYpUN0}Z z%#Z|;3nREI=;R2RC01oL&~dL$G$I8zf~R-c&u0H)lLJ+9|135JOq$0sXr+&O6<`Wuo==Q-Lyp80#=&PxY@t`Nsr zwKJq<=V#A@RKlQK21Vjby_+JI>t>5#8~nxaD}&DH#u-$N&1lF-s3WuP0?BWC6^CWx_^ zu6W-}I$qXUp?iAxY)POXH(iYpO7O;oVO%D4jngEDeoQPM1M6$mN^lM39hTV`=fCa} zejOEd1=V9Wb|uV;pj5^5+G^3nG4 zTKk@`l0&TSGGnZJ7*8euS3s!0cE5}X?xqAU_pOHnefL`gnvdX1oB9H7rw8Jd&TauB zHsGlV6=*H-`z6ETAuWJB=BN-u8N$!4BRC5X4$j(x>{xl%kT+d`8y?_B#x|=zCcj#O zyf+GvMj43pifR59%zvCtmv8C&JDN`y-8n>+=Mq$Tky1R@*9Iy2a8pFwIu?6|gSb`L zb^;lkNn<#NRgsR&MTE@xIN-s}ntL0j{WgK!)`x3(>GPQQ#2Fys)aX6IOZetHhA??H zfys2r@@(JrmPE74Y7QdgA26sf$4b-)BUOE5PML?WyLbe4Gl*Z)5kWSR)8El*(nh%${F330%9-U}Si~<%wA48zo1oW{!98Qb;373EG zvS@yLUpH;^32e9pQ++Bnj_kuz_4;r|0AJF^ur~E>r%9H8uPQUl9iWcP{J|%lC4H@l2KgwO7%U9k~8$Q$0F{v z@|83aYBxt5G&IU?!aSN~qNC6Ec z4s_!Wg5cXI;K|v7N%}$-0~cRYCG2KWWvFjxeS=7t+^>nm<9%*eY^Ms03Vrt`KHNbO4mwO6E58$odIXhCgE5}8I# zjRy*Pg;2Ko2RlmQ!r-z|4A!7#8{riu`%^ZwkJFd1CdiK6MkDgsXR+^QKShqvMd=+e za3#nzegzr*&d3Fk?DWszTZ|LmhL4xm#RE&KQzBx@M+PKPRMipQ_*p!j?Ai{j7)7+> zksV1Raz741ff4ClPe$ajz`%V(<4-&G!XD4&g2?ja*T2R+J^VWfIc`hMbo+IJne-1RH+Sr9yh3_M*mM5^fH65!i z#H#aKDOfE}!3s0;n-f^I4#TR5uxjmVAbZrVc?LS&2ZV|q0JGHn0T}ntLEt^6F8PdB z4Nk}VuVYS!`XX7E>n_Asm%=M=9iDCYftUZ}6)`&M-WHjH?>ry)Fire44zBKbIq^|# z+-3?+7*Seell-dx1NF13KsmXy)h;j+vf*R%_^|&2+{6m?#6aW%`Bl#c>gjxC{0IO@ z;f%KRb-(bJ|RzfibuH12vkK+sJ~s-EeDDPoF)vLn#yln66Auq{K`{ z=}VLgk~JMs^%krVp2g+V+`LYbxBEY+zzQ}+k@O2+BGN-M+6g~CU32$Gd;u%%+hw%U z&6M=gWYXyZnQyM0DC%_2eRd*EU#{kPHj;&3HUG0ztigP*Zc<}Zs;90QCcZD23nt zauWHiB_*saVIM8XvsWiqI9IZxESTp!)j@~8uFV5GuC31)1&VyNIaBR0hqKg9Gms&e z-_#oXnnc2k}<< zPyh*vkC5%;t;=wE!t!=)vf3$OnZI~3e&)> zrjx;`r*@f4aZ}KaS5sWstxb+(i|7cr8wYnLx|0eH5mb=N0M}m7s%42Xl#@^iIkcJ< zzY45V#}_~wRMY0aK>0=+Yhwqk9j-GCHdj=>|8X2lKfN9bsLxSnuh&2Y1t(NjsUOJd zKV{dMWy_U}zT<7l`Z}Su>ibspw5|T~6Tgb*ZFcg{Te)!G%$3+4U8 zg#BL=c(+zJ^m_WWi++%I$~0Uido>e@EbNKm6^6KUVrs zuU7hSFI+iXIb8eU+7H(OxDLQ|5Uzu8jlwkw*BD%5x`c;nn5+ZVXo4DXtn@Van*o32 z_{MEpwtP?fCd4rHUew-rgX>^YDFWn3q}7Ah#Pqd=F{2IghT3547bkudgL0q!0Lwjf z6ezv)1FCPLO-_q8$;UR?_D^aPOuVTT?t9_S4iC*`)=LkD=ULT{h4(sbCj!6g8HE8%Yq{H=$-Fam?WCqJOJ z$pKpDz%?7L*>H8j)d^PzT=Badu6DTE;A(@b1Xn4&Z3K;8hTq-rcLe_U2Pth+W(BNM z+Jc_b+adK`THBp%J^(&FS=t~u67!e7C-BLLmq?Gg$T?g1L>wGBu=vhDYm5Xc%ORW7 z7(Wb5mQ1Z+{ah$Ui0LstaTXNhjZd5jm$dX7`e#~GV=2I5!sra;d?9jap#%6u-;ckWyYTmCyYct= zR{VYCW%#Y#xS7*MKTemQwa_K>99@33jV`}`7A}uH9O{8fClzNlnZX*9G`$-hbibr+ z?!_Co#L8oue&h=rE4FKdBA$^DLewe!5!5ad%Zd1d7zmge@rgzFl8{$lp(-fZ zIM}3|mqMBIUNvGYaDMvv?$r5dUupwB(S1Kfc7VYz#_OG_5oQU0-Y~kwRMA;ld4?$w zK!dKlay~K31pY-eEma%M2dl+sg>5KQDP_E2;O(rH29yuE4i*-xKX~&H%y?}uZsh{_mlsJMe(M`jc8 z9(`B3d14xQo!#o}D{sS@CD4=IuCaKJ-oxyo@1agqhRE2R?4#gGn1OL1fx0^f(D0Il zb6LXa3zQR5;y?aRGU;;!I+5H!9()Ysrl#2avIz2_6n&)@ayf^hB*#CIdz+Y@%}P$* z*j{cZz=jP(HzWa>`Ms%tFf0n%%$?n7veU354I$V!yhm_POTimxnrB8@Szp1~lVEOO z_l9&N&HSQN*c7>#XSnJ7sh5nYSTW`99A0ugmOK`zjdr-W!6}#pAlC%PK7m)jNh_Cdl;pTJ zaRI&ngvR0*=z@rnWYhtN4RCbwIBo_~0{nCww*dE1dhj93o%E?&E6GNX1OeTUiPM21 zz*xuC)*LTC`Fj$y_+c!5K$!sF^aYMwA3yqgBZ$yeA#cwp5OHM3)i(I_YU0yzbyu$D z?->yx`}Vbo`SqSJnP2zeAV0Hf2;U%DtU)CTAWtzx8+|73i^jJPzY0PAv!3}qlN>E1ODD*v`XD$xd1kg)U zfL5dejjVutsp}3D=MW7^sXAy=a7aY@!sT=rWhl zGz>-=4tn`3FB+4`VlD)y=$GRV+NC%Z+?EF|Hdw)DzAz%u4Hg8d#73x0kacU-*`&%= z6*B+86L_0n;&>9TDJn2Fqyl3jRUn>xNQy7N+@aBp(0r5_Z%9YFG7POqDKyfNP$a3A zemXoc<|=nIZ(AfD|pjyg*QC^HzQP8zZGT8dA~6xTA)f(2%3`==Kw|@ zqv9N3ey;hlMM0qXk-Ey)=ogc@{DaW&E2((`ET!RZKA6f)o&lF<5QjOVG;H7B_pTVg zRd1jW(E&z9mPlH$6q(7!E+Fb50o$rO~uON40A%#rJb zg&^SB1ias*z}q?;o=q483DaX7n@F~Ydq68e+ru-EERKv4%>u8IYXJr{BX$2seQHle zjYP%8h?=*js(HK1?Ep3Z==>Bl{~cWYx)nzZNoPO}Q4MU*Fs!{O_zV?8>PrY-{(%Tl zOib|S(sX)kRW`0$1AhyrF$S&fsF#oXm02%;3eW`lQmNC?vJ+J+DPKU9A>P|^SSt*OKb7Wj23^|+n zUQF$ieEeIP38DKnnhfgEQUuZFZK;CjgBufqsBba?H8f+XNS-jcY!!9ZRE>C9pj8{L z=4PkD?b|B?aeVxZF(c&n6)6?};ICyRd<)#bDfk4gi@%#*fY;s71K*ZF0fNwn%8GyDP&bN!y zx#9_#cL*OQZQce-(i_N5rT1l95$ZHUnam;)pIbpNvjr3mg zfHagDItDRe*WV@mzl3?ugDGX-@rVB-=1Wp@UzLiv(MrngP-=<}ju|?*`vGdY@1``} zYx~kfF;*86XMO)-hr+}pvq80!uSd2wrUMceRCrAmnW2jz45f7vk@!8%q zV+Dgso+P0R(C#K3K<_9lMRP>1BS|fwl?rH^QlLFM9Gc}x;clLlR`2{`h*tG97$-%h z;Yzn6rzt@kM`{-G3ZFJ|CC96bcteNj9Px%Ae`gMtzq|X-A%AhE*d}I*h3|iHAXn70 zJEfkx_oPkBLb7Z4bazVlLo#vT%4U>G0D|u{VkR)?(EO$DhGI?^%kQKVedC`0&fNgb zufIpuZbm{kA=e^r-B?+!>iOWsBWUKU?k(=HU zbrw^G>aI-9k0GvB`N7Sk_z%SMLgiMoBd~tsaLxAZ-==D|2OxQ1>4-#gQWHg11ZIv% zk&~99B;Xv8;jkg`Wbc<)+_Il5Qiu zij_Nu#_=x2)f)Ezhh32V#e$={_{FMZr+#5h9i_eIKY}x~M|uFqRK3(osyXG@F2+GU^q|s8=YXUZISR_)^uTiGTE)RONFOu2X5nwO75&hwkzbZ>pX&@twa( z(Kbd{b?V?46b-_*XaW*Z~@M6LyG*T@+xeI7@LUs?o%~!?1%ol4|S~s_{rg zsxCC~i_d}`m5iaz50Jco(#Z+BRyaBYk3SkqAi9Fqx&xxu5>9qemMxJoP{dM-`_r#e z#|A&SX%gF3EE1vvZH=_J9-jv+!q`$dh-9NLyw`iWr~D%bY`yTmm-k7Poro_*hXlp@HPEWL!hrYkgYg94;-^VMxuGX9u?2^B;}aL8 z%qtFWuPy)I*bfIDqL%o*ZKx%h+J@T?SMz~cDJ_vq9C#LT69|6a`;@6qcnbXSDZ{k8 z;Y25bS4UB|FjLd?W;9O4&f>OpmTt;6x;ln~mNt{S9XV`B=^m8QJ+wFk8ANV6K;pS4 zDQef&rYZf5#wt?U38UR@V+%G(P;5#noH1B%zmy6ECjd&DvmvXs*nvrJ8v3BYhe$OU z2+-rdM&Pl>_lO?fQxUlHp_ER0^Dol}Bt1R8KzV9{nZHa`l~cv07L0~}wDK#FZa9vl zl}sPOgzGLiw`ZL;9^p*->M^hG>F57Gh;cvt{EI`l3>sa|3BowVmo0~q;o?dDY8k;_ z1LvGy>@kK39zQ>|{R1rz4_D0Jcp`1?i~>D9V&TuZbn-Nc{qJ?Td*r4Zi{O$W*VY=m zJXPxkr-)rl684|s5W+xx&!J@WbyHle(6g(>`~=BtUY<}O!3nthmo#sDqL)@-2J;L7 zA9(8Fl$t1yry3!brz?TLmeiy-J)SZ|Y$(6LrqmSEQh^P#Jmio%r1?bU+deafsuOx6 zurw9gTfazQKXvv}8tJ-{DuzlhQ88Sug8JT5bh^%Ll^KG}fW6kBcVb3oR*zK=VaBBhH-~4)NaBD8UDuY+vKs7~4x_{y2 z+ka#dA*`DsQ;pZ2U-&R(4yNS){9)p|+PKLS90d-?FEsx~L}g>H5DU$ojo}3u+xVF4 z;SmhgE!=#4ViyZ4Bp_{~&0X%;V}0=&c$t3?M>XzfwdxBpcKi6@r?3cMB-#=oXH-Hv z9Dg` z{IL|SfagEZ9>r41<_UNzNcQ$&^3wOj3M2k##MCBzr_U+rTV~#t_Uuz<_xukAsDqV4 zH#mhcLA-P}jutO*1R}5jfATibP6g5v_}a@a7h3qq)@B^p#$S{2jg&l1sd?B~eDC9f z?~Tkfy5$12FaKytE>ew*O0M`*8)ME!T;kT&laYb=)94Ro)THJ}_fUq!8ZXFTZLEb< zZKpF3%KI0!y`RY>{c#OSoMnmQRMR=WouTzZXa9yv_~F}o8J!!-0Sj6{%AjRZ+kL%`o4v z;jY_N{JO8DtjG~51Ks$8nR(|C<0y>2Drl90Lt-h?F3sOfgBw!=Et{x_>k~!PrWetT zMI5?1rHJcOionc#MY4z!#4&dH)$wARWzByCO4uYyn3*U+N-yCEmasClgqbNNU}kPf zmheMtSM?Pf&=gxD$ox9WnoR_Z1QWu*V*@NghmC^ecra4o4s#k4h@Dub z2BaSwE%f-0#Q6Uo)94q&k(B9IrL_>I421CqGxJ@CD2G`4m_f_Gaepv86xr{TRqE)p zww&MQEbUyUzvi*>=aBeGoP7)Nn{=Hip%3P z7JCjt0i~jVIf(*}Zc8g*5DRc$IkfiBNGS@y%=}Feu^<*6UMR|$G_-sW^vdo3BdXUr zybCA#Z|;cxdoF)?XbCU1-?K(1c8c~BgJDwxiv|CC0@Hsi_!=f6(Cn$O785?pj)@Iy6Z?Y{x)4ykxgyc(~hGBm@7+sRZBtr+_zuKW7cAfT(8tM!8L>(6(`h!TCB zW>FycuRduNuF2IvG>)PilIA}Ef>LvH=HWi!mOF71ya_)|Or_@IR>h)jQoe`d=76}4 zA5vMx(`aBjtD6Hs`WBmwtuF@T`#&Um!ijbQnQFPjs#8uTjzDsx;&>?uumOyK6|X2{ zYM18TAIYShB=$4^ems<&f*5-#l#jp547+a9FAaYgg<2eKJ8TGbPc9*wMhseX?T)(K z99OGz&C`Xe)uXtBv%8CI%~(EId^i%&YxNImIL3*oSLK|W!jV8^86XA9iB`-z#TGal z!ZfsjM$FjM#4Z|oF%x95;Yf_yJKMA_$uql=XLgG%k#=jIfxfmcXt~DO`*Sj0*HB6i z9yy2gJ|qu|{%d&%_6)5F9nxXLWZ>0-sNhG_Gs9(IKELxTDV<8B4D=?Y!#1yFN*{BK9aIbi-+XGxCXqjVP8 z#a(oG{M&~9X&{`RT(cUZ7=!pbaV7pB9js;mjY{`0mRZJbv7n3 zDWfsoN2Cgj8omPTtm}^wd*Fa~6&3r7fPl$syai8aob}h;fQea|4^+P6Q1*shTkgh+ zMm6VOTE8XYU1&%#@VJbP9%a(s@I4f_RE*%BhnwF?f5n%=RfuFoek%4sOJBb>^5@o201JW-~o{A7&D5fu}Tx=$1nc{PQeAa8E_KggRNie{dTvuGwIhhIJly46&^ zOB|gOz(H-E@m0|`+_ofIMz{p3&%h*F>huT=nPu}edyG9mgm-ZsfAiv$7;-$+u5L7c z(v&v&<*_Bms+1ZH*jtfoxl4?F?Y{p8QIS881ekEgQ4T>C%}GEa!0-7+6r-vNcrtJ*>o0kU_oDeMDFeM=JPzG#o^mf0Rq=d$n>X*KEkUD6Ta` zMc1Q)vh^8rcet@iCfQDC4xW*lKBDrv?`Q=ba715hc953r#Xw>VY3XGa&E1dV!E)29 zBuc?-Ilv$N6Z(z=fU_BGh{o|o{4VW#*tgjvObhuTCR%nw;kQ?PuSdCDo&8u8cel$8 z;FW)~BQbm><7^9VbcgS$mq5j#IcCxGGWnZ;L`5P+H?J~Mc=~BA6Q{Te zqkV0JZ!f#i#=rO@U}iz_{S~05dXMu=@InEN3><{^BC$v&z{85k+dc1w_5>YCkmng7 zhhl?M+K&R0W}d-i4>pE7!!f%M1GrI=wL~faF-3cH^D)1`L3tZ)_GF}rB~sZ7&{CwG z_5bnn)b*UupV$A_{kd)&pZCQu^(`!2okY8IFU|I2$ALR!haO}0Fjz(U+r}JVw<?MJ1Bm($%ewn(|;pgHUqYD1G$d7Z_ zVqx8|ZaI#>7BlRKbI;c<&Xe%G%2T^&{rN0rxxuVlJ-Rjcl^eckRxTUe8@#ZMJ8mep zDCfh=@i%|1=SdP66y-C~%qp$uf>kV`!@<%$wVOLbN(B z5Zz3)ay>EJyqV5_lapfJh?IdI{K3q;a97Ge!~%;Lh>$}s2~&smS+dhUOZLP*OLp34 z$$pl7mU>b1*lC|7?DvU%mTa`olBr?%7=~C7GBwa58hk>c5)F?J-#%+Pe}76!B_^a) z0yFbqTS_G!G>b?Qnhq5E-hnUPJU)!U$nvYUq;kZ~qEHz-pl6Onn*c)uqd`mLuQ+fb zhhG1GLW7uNEv;ZnnD`P%x`W@8GZQyRpdK~iY$XFW++0|2}Llt$dPCdg*Ahmro3yYdmK`o^+~>b{)xUHUp%l*5E?%LirevbH;Cs}Ycq^AA@3Tq~6V%^aKzkH2b7MCo3t z&Mrc;TDc&AIP*J9DQ49&)9_h~wECr6pOaQyD9%1{IsZEI7gmQtOI4-6%!2!f6ge`o z@rL}3TuaLS3Y;9e9~no;3sT8V|F$H}?+uMMEI+sqZV=C)8^qhx;5X1UN`~U!|Cn%k zX)6Tv75v40vgpPP?K*zHu}&_Mx?oNY>A3f?m8(0G1iJ_xgF6j^$)QKc8YQC1p$D;( z48|u0Rt{~@c^7Ui7retb#|nFIzu4(+Lt{T$P^&J(HAgr|6l=EM6yBIIK$|f1)AoaQ zZ)lHViC7|gI^2JUn&4)kdI(c^xh(XiSJ&~G=Ca}wS3t=W3u914ZrX>Nb%t=Sh#T%j z*9z~hvcc`a=nJ?KJiklRaSsSa`$=e<`{B3F6hPN1F#SpB=GpiY_$BX=GjT-=K91CBNF&U|R}H+^CUZ?q&ovWr(OTA_Og*m{ zndXU10SBH6!J)f|@3|L=AvX^%_$yzvc_>I>WdFhac$58SP;7zzIK`#ll5bsK37rYl zS7&HNTx>Yf8N#C!)}ut+jCU9d;!PVuzjhCn4*lm&?1-=6FZ2$y?uItL&FGtKHW`bi zQnH@vGO`9JEB@jFt_b#(Wr2-PksoGeI)3o+!nVZd6wPyF^tBUyh^hHY@cU8MNcHp}sgNT=Y2nBoI=t#k+y|@%FuyY}?I|QU{%nDU5*a{oi{*I)9e1Z^<16^r zb{o9$6Ot|2>MKOfAbE2!FaH58K)}`BSD~;^`HEvUKJgWYea6A(zD%+2yG0JQkXewe zZC;8~$|3v}fjg;`jZeIjc3ruRs(Tw%*AlrUfI~=$>RK3m_VR!16xG!cmS$!IS-k;s zOf%AmZ&0no)Pg7g`m2TZWd9yO69`$Lzjun^0m>r|T*g7V8zZH(AMZ)^ zC8EKcXd&mO!=^}p^PsZLlp}0`lC1EKc?N;WANtX7CQt4UgeNd1{Ehv?{2TB;9v|+1 z^xImzUQl84FE)Axxgp^5gIkg^xDY!2ZlXgRd0pIfgbo1pOmuV%$luVxok-Ci-$9+R zBh>wR%18a^>&RUVcNmsvt+u%b00z!nB=WxhF6OOHODR&NVJq6dXiW~jBd0d15bMfr&NCjyf9jvKeHLDLOVh5 z`wtt;d-PEuZJzxdj)$#WnLI7XW7qV@wu)1J@cI}eV4Lx-LZk~klFXtLk-WzHP09EC zR-A4ps^Y)C*|;32G258b=nU=ODu~R#4d^kOrgy;$Ugb!HswLLP1|rFWd-MZDrym_M z`a6P9Um-vgt9C_t^^>t`W`~GXJO5D;tM&-7{uSQ+D%plq z8h4*>wBgH}MH|k3nL-H1sxr0E+l)ygGNUXw zUZ-!P#v=&9^3Kq+1^|6C-c=Yhpc4QoFDtRf4~Q`CY$2Qpx{j$e9R&;+$&ahAkl0qf z&nC7|vCkRBK9?x=IV$$KM6pjNi+x%Yiv%!=eeO$&eLAh!wCJNTK!fK#6eB|hK60p( z7GOSy#0!3-GxSul*r$foHa-y(i4rHJlt>A+%~)a*=*MEXjM+ofyWcYh=iqvnS(^t@ zF9feam4l;L;30IAVtRYP@E8O?ioBTECmaVF65dR}dMv@QMm8bJQ@=^U)rMN6sFFh9 zt6!X3>xhnkMhmz9)zCWM{xLC@PC77Q$zcSM5CNASs7P)twB#;>=dtc-V{qaqy)lLw z#B-I}8KoLFAm`}?W1_hEtQPZG>}Rkay3S%hECutJk2(K8*bg5Mw;$*%MXY7Q3eXRc z0`q-)$VfmkCyj)+NX%UOZNo_D`8d@`c<*D(J255ifrnG_9(ow_p8VEXZHTLF|FsSA zuVibM{}ENyw$#?#nrO|1e=}Nh^ACj$@$@!S{OebyojCZ&eZq#oYj_)))OhC;=>lt# zSqzP4ybmVd^T{X4hWOa9A&RpSHbg7-xyzwecvNE-RGsJ8l9q$9t5%BT5IR8A2^>jS z4iA&%@NhzXSS@LlPO6X2ETKN$-6Yh<4t(B><)Qiz`BAiHrswb8YE3))Pn7=Q1Vglb zbJJNYhfP44XSWK=0q?_G$#NJo4Duh4ium1^W|cgYfSs`^p|Z!O=Unp#veh0=u{nqt zS8O$M?t3`Za!Bd&!g4q-9o#ek7s&g=kOe@%CMSTcdpLoHb65p_Z?te4`tSb1$XE98 zNXy}2!*aMGQ#5xgHuqJTNy}k~Eiuj^(E57=xPh6Fe_xDGSPsFe|M7UEezgw`Sq_(^=M4Ow8Ysmm6qx@xk@t#+ z5|)EO5r8o*9mauY1@>S`h>{HkL`mYUGx48_;cqV=Cu*e;EcF$FNX>jjIzY#>Xb3$s zWF(Lf+V+8A%=}dUQX}EHhm$7G!$~8d^6zIe5-=%g>xUECnh+xhsI9j>oKTy1S7B7i z(AE#9Yip)s8qm=nqx4AV(X$!}Ek>~|iDFx**p@`G&nAm~_Tk~SNy~_0pFKyhBaDQH z-ydcqe8-YzBs`rg_UU1@O*0Z0eFoDYt;8hI^DM)R1i9%}G3}Z#6y&Cx%!xFHF|d}# z7B=38WWZlb&=R?+4$YMm0`PaniLeucNrkvT2;c~=5$o$R`aVh-BFcp4cZd}pyD!PT z_og#j`7=rG6=01%^!R;LGG_GhBR?}(cs?^&cnjf*zoy_EapMhMhbj|M_9gmYzCih4 zk9VjQ!8<~vjlt7Mk@^Z@*8m)WHyDFOH%VaN1q);lr;!j+sf|{YC|W49)NfMoZlS@^ zBu&^+k6O;Dc@wsh!^e*#?5HWt!j2*{ATf4x>gbd`La1K4*Ov_Y8VDI9;KV5Z*^c`7 z>~_@Y^(l4~*-KUYZzeG#W+Q`bvPlfX4se{p)ut~SzJKId=L@b%nJ+M{kdpHS65L0w zj~oFUC)CUEo40yY3*r>HB$B(K(S~O&)Sm}8IHCZbaOcxVRwRSw>dqP;;p55$$w?Pw zR7>D?D8UxVBy4PFIq#mk)6(CWn%;hv^y=(rKK9|M0lf0B{yGskFqXEbo``R8?&qV| zaT|?#Y-{-8-=MvhY-u|T&kGDRnH{`ohM0ya#l)NLg2eBO^VQVZ+elno7{Duk`B#ae z>~*F(3y!+u`{Z1UalVSNgUugk4$3|pe>}V#)WoI{Uz6*v{y}S+z1;Ipl3-$X2((K4 ztn1l*Pb}C#^Hat`N{M#Rgc@FeGo?3}g6E0IG~m%$v`)Ylc@y4D#9S5pa`CD&10RuX zo+$lqp?&nH6lkRc?bx3TXr%_UI?EG9c$zzJ6JKy0*(^NFl5b1C`2R5XKJZOe=i+#h zrVvVMQfZ}X#iGTbfP;ZbDQLk)D>j`dY!XzNn%lrdmcr(*94+IwEZGV4xQHllisu)k1) zv)Q@=%m~@gPqe*v#YHT7F)l@2r3SwtdJ>Y$Y`rTDQ4gdmd0H*q>H37bJ7qY6 zwvHXxB8U33U9oqT**nn3VNaR69TsF%U+(1Lg-J;mZ_S|z5%huUS&kEGG0wi{xptCg z4ZiW=8=QI!oHj*Xy;E;Zl+Z|a9MX=xfP*b3uL4s_rL*`t1GGV!luGe~X{*m4+_7AilujxXK3mt2FUsgW@0mJ0O zqm$8S|6(%wCsThHQ@pyK*7C(Fkbev%ED5^XDPhSbHDR`rYds9L+c6rOyOS>aJ9pr# ztn7UFEVXskTmlT~v7=^Em0Z|bVIqI+(c{q^_5mJF+dG2#6kd|2HTVAa#jXLX%A*37 zIJ~BWyBC+b96tMd$vQr*Cxr-X>kiIaOnFCP`+*@km!Rc)I_psq*WIDF{s{h-z+Wx= z-41`<@TbexXB*%T|Ig0K#(zdb%KW1cN!)>@vCM7q6>&)k-{lqo0-)nrc5|sc4y^tI zrGQ?YFlV{VrSAC3i%Ch{SY|h&C1yNoB+Go+{(A?Kvl!x`_4Uh>{v5e%pLbVxMNeTv`}^^xtnXHMVLOcCXBHr6IK=q;vWB z|41DfBXxvyE_HH8o>Mi&dT#eVhF`c zjCVSm;^irSrsCyYe@FbJDqa$PNb$1gMM?2;1@*+M_T*vIprp9WWp4Azdo(pn)T3-m zA7j+KOaTaj^zH6Sb`jG6U!m%`Fyt@Imvk?kAyjs3yF7fRAK&!T96A=!-->%5Qc`VKklc`9G$ z_X3fjm+#vFO(PKBM?=Zhn3VSx|Oi);X9JgsHoE$Zyq$5YC;T+Z6o;L3SeK z7=rAKOu#VZb+nkI1SlVcK;sZdgaFT%wgOsc@(zS*dlrl8i2S!+*3G((>G0Tx0#8pr z3MDTM=D@BDZ&WbT3zVrn@(Kx1wCrHWPExqm%n`}NgJu9M0FOa}WuF0_9>xMTJWFR& z@G8&6vYSaPgtT&y#w`0P^>s)6li4$W)mk7pQLC*@Z9yKjpp8sDC0}xpwd7Z$cM_^v zcdL;!6j+l8FM7;6;@Khb;=hiWlQjxjYPB6vYy5E?51aZ6VrcQ8JB)9G^fny%0kWO% z>NpMT#Fx6j8lZu3d2o`X?ubTO%$@^IiZW?st4!-30f8_$-1qPDHo z)}*#+G?mm8Ek+k3JQVm|e1Cc)zTX=qk8Xe7nC2fTIiIwc(gjki=}{tNY|?7fc0?6k z#(QS&B{3Z1i>tHA{Y1)a0UCwdm@xnDPR5(o>ysF`XL$++x^@0?_GVPVfCkJlK=G#UqHECn zR$J#KL^q7h4)AIHuAcv17{FO#i-{X=vx|LvPO?5r_}389?n7!d)B0qk^~tKPPgYu= zhKT&!l#Kk`q_~?T=1uF4@!Zm zd+}Tw*h3p;^-|Wh)brFK<5e#nE?zaB$`(uZc8P*5_zR=ni}TVokCKGDRpJ*Q7H^fs z;y50dsDRt(W?_i9OWOI-#9yVIANkGf59E6!(t#)|`jvc^^zs(miCFO+g9!3S`Y^US2$*tK0bH5(8E7Vi!phBGq z79jMF?P_@(MK5D_19R{*;VTpfQ3~+4izA^fOo9YbFIx=!b;lOIS149HrD3sH?UF)O zsXHuQt&|C$SvIU0P_&tGcOQ`-BKzxk5L><_IVg#amwnVg{7m>qv1bT6x`I<>8}eBL zU4?t~%(X?RIrCGyE6@aY2WE6Ax!dG2q25sx&k#zQi2Ie8i`CJYnJG~)83*1T0~y#I zYn^ArRV2kiSj0!C2Kla3%ik`S-P#SN+budG96w)nUvg#-$Ku=_)?j- z%)tsvRa0QOSThSBxsWwraz1jo45lI<5@tkm^$s;0TMaO>_cKZ6$6U)sC7F9+;DP$F z0N0Lf$vrWWjBf&JipQL!f19Kfq3+&VPLvWYKvi@AYI%uYLx><}G`)8cONphi6mi~r z1FDe=K9b|LvOoPvJ=+}$9{t;A(8qB8%xJGo4rVMHcat349eA=t=gWh(g8VnH#KFe$ z=2FV!WXfa*`)q46Wkxb(2CRQl%IsvyY=_t{^OW*rO1XpmTuP}(rc^jsqm)vaOsRCR zr?r&YCyB1L#DxyFh$jLGRv%6!*KQzJ;R4w=0j>J9o1?L{H9d4~M0Nu`PIl>5F<5C- zJ@>Fi)&Fcxp=zvsnR?JN15Zbo?{C4=EMZ?|~ZqJy1!^e~D z;a|P#27N7Fx@WJ0O+=@9oYBc=YA1$%MImgwN4KA3wQEp&!Lg5IHS444vf5O(wnq}7 zHDC|J4=jQJXh4_0jeeFg!5XVTWo*-@$Y{D*b*Z4^<$*Q|COUVyIt0_Ol)d}7eUAr^ zb=f~RiM3T+TwaM*Ng(eW%A6K-Sjg%I)j36H#oD-ia!5UE?-lBX@);w$nct9$trWlT zq@lag)8oZ!BarXU(M-Xua87IXPI2`IMZ2`d7`Uj-qmV9hGIo=22GHwb?bC%Li*BWI zdElhMU!oK&f0Q)&(Ze&mUFPKU_bSiDygKc=H`$K~q94&hDs`1wYOjO+>x|49ZY74a zJaFo7cx2^Ret~$WJFo#tJt|@ZbJ^n*c@p1jzy)b_&v`Mh&^Pf8%gIk)?f%tr98SO zG=#xN7c2W6*V!N|t-u=#$;9g_ZnQOtEUSWK+2p&38%t4*WhA72h!^u@P)5_r!i~#t z_aoV`Wv{zS31Ik(nUVf0 zZw79C>A@4(;_N{-HLHyY{2m z1eM5*z9_51gI3gbu+yVaZ_|qo`T#{96-D^K z`;tZY;bX&*WI1FYXnI9mO-r-X-GnoqnKvSq0D1WR|hgWyL;aw|i6@8EMJ~y8v$1D{&l@1kS``=JmNLi?H zd6EeDHuI-C6+L;}HWIh-^njgMBGsRQy9jRtw@J*SlAcq;62_xbleobl@QakXDp72e ziW_>u96YjNl~x2fMZl|hVEBaL8^ZMX!%G1ozXWc0gaPL4w4VWUo^ zO7_Dyx%x*qoAV&gndIW5gsN$@uC3(n=3X^3i+>U5Y4G*2-XLCY^24E~9F* zIT)G^zr7>i&0{A7amY&AzHnuc&Zf|W+4v64m)hfJyJh$+<_@nC4;AnK}4CbPiB5^*k8iIb)( zP1v#!7GMb-Tp5? zVbpCvRyf-qMInyi`U8DVZAiPXMNBam2kJ z$Vv*T-}t&DsG{;AF^GYKV=eT)RnO}pFdRWjvgG2+5+?PrNI4>Ozw!2(sKg*zH- z(144L69rtjYyT>>rvBa`yLS9LpSNp2mI^DocgU`7{LcBh);iZA_NuM(Dn+VN?ulkc zwttpN@j^Zb%lmCXFnDkn$=qv{VlNb%c$+!$l3r})OZSVL z#h%)l9&G)}seHrP?_~e^OF{LPjadSo;-ohw-$!Y&DAxq43RO}A?i->d$i-Up>h&yk z9e2ke5~-k)J`Je$eRWwtpmWsBKFfX#&m9luXc=M{t=z>{W~tH%Y!vE_;&~EpJPMFO z646lYmYRbCB)+(Gk`d1g&ZT14frt%NaLFBZJ>^{PK(}`TPWJkGv3t1c{v@U^MwzLP ztRE=89El`__?}cu(F~CN3xAJhe#VsgbXcFQUo$#qU9XD4eDglRiuz$c4D2~^cZLP2 zdY&7y<&$!m>JF5=SaHXiWo~QDTw-S^7DN4Gwfc9zj=pGKqgxim8BbmvyiAXGF_J^Oi;ai{^V=pDfOH2Db84Tv=*yn-9_*3JpHG?l%R(<**-6OFXcE55YrF zoWWlW#aUP0WjSO&15`eWw{o(74itNHYO&$hrB=#VjMa#e9}*>#6O?Ot3n#-ay@;0% zPZy(KSeqI40f0+$7nrMk@$_lcfrt?q3!gl}Tq(#Z+;KMw>Ib&HY1!;W(3!Z^H{ zJzVbc6u-$u20?;Xk#nhhItAH)4F_Tw4|Alp8GkrEMI2o9KhNW9;a>K?EJ@Jy=~Br6jzJ9M`hv@x#QXCh%L3!R9g1Nbuc zz>2H9HJ+w7Rnd%!J-0@jRr1@ES*TWd*cwFlUwvh^ffW&V?u#*Kv({fJ_PF#7kKgP7FBE!i1Z0 zz|9@21a7tkYPJc!*g?mW+k&|m6{|ISBYYMMS$rEz)}VXa4ot~L8Y{JJTe%2;TVP)X z$*t%$7S`HrE#=uc@LIc6-PSO#q+~t3sh?XSey!7fwalB4LwT;@d1i_{E%RpRq79b) zwvSP^_=F_vKAmObAL(YU57qs50in{`wo|e1%(Cwa+PBu$?827SfIPS>=;k5vXgb)o z1Z}%oZF|MW!oHUliM>hz_OQ&oi|_S4O=&2)#-D=poK4O%wV66@QEi}gvpZ`(IBK3EhV%w@v94dI)3Crtzqi|FW6l6~NswR3{OzZGArP4&s zH@5}nn<8aWZ$@do3DoS)vV_Ld@bAVdbCWd&W+hKtOY7V_x)qgrj7 z|B1pMFreLmkM-#5BXIa1LHB0Gw%MV2Oxzx**$&uvj#lsOKxlPT%y!iz*|sN8vq$G! zLA}}@1Xj1F_9VrzJZtd7YPk)>8e^cXoQBL8g~e@8?I}t>mj&pvL3*Vza1;o0n}!f* zaM+x5yH2aI3kp!2CfN5va?oLlUJ5TPhn&X1F^~|p)jNzx0D1~fr&gQ0o_854j?@}B&Q1}`|wGzO^dhk0%+sBCZWl-qJ7rDoZV#0pUuvV)s7u@%-~@ViBS{X zJW6!H^WTwe0!!{@d)CPB)FqdWP7kc^F0L#XIr-=g<{^O_OoK}yEJEaHC&EYf4 z`;1z%9+y0JlxzB7oqAk+XX*S`dJSY`3j6;x{9;fu7e(S&0Rk7&rDr{q<5`9uGs9d} zimwL)XngwoPlU*|rizPPxUj?YABfDuqgw-E)4}GeHO$arR1ff7VQcpG27XDg0@o2x`Y6RtVN+yFX-XD6{pi zq*qHk$e=xi&0Ka7$qqKcD~_aui${c=saBdx5fFU??zs!(B&_fNzIGDj8?a4 zUSu`-pjwg-0AGr&P}LI6=f_*zm_RJ;c+hP{Ek832ky+J*5d?je|4LLrkLfI14s)8u z?aFEGU<~?hD^xh|EF{fHoo@_=W3k7%S7_k|n*Vm6)+W7WpZ&Cxt^TcQwEb1c4?+g2 z;TMwfCzj*3@(OcEQiuAiDfwaein(Ef9nY8dxlaeq75j26`)sEJu~C+~o9HdV`A4fN z#qlU9-TOvD(^|?C>IB!O@_4o9#Tch3j>}JM6l7O-b-< zJC&55#uC6hJwizB8Y9j`Q-`bXI136FyM5IEK0sOtVZeeI&@CjJ5h%f$G62zbwVS>o z+O%G-wi@vwP&5iq@CvP01Hx%N73}0$9qgs|)X}|G!Sdq`hI+kJpLVz^QP2>ygHfol zZWpW63cN(ZT%ka8AsQp3{1CW_tVM~P_t|Z2G3X?+l;9(0aN~!=iT7Ztl8KlX6xN9v ziD8{odn)2bG^mM!aMBW)4j#y69HR*!Q@89#;u;5xge-NmSN>7jt7sRzoMew3KTECd zS7Z08C(HPpC|LePQqUjgo$sj<9478$KYLX07H(*B5f5#0ke1+R1?OXN2j57g7YXEC zz&Ba!mn(!u2q#vp5Omd?vL9J+sJIN+QOg|sS~*4;0pnswbOc(AwS)L-#V3nW_8SWh zP2}(sGvOx=0Wa*C4RpRken7CbYoN6+V+0g64$3ea9Il^%ARyqhkv1p6!#{bwFVrp; zXj!S9gB$a^{#^dL?@HREPk^CK04t(EJ7L6Yago59oloq%^-6-WgeJLW^k0h5Aws78XJIe#19N+AUE%J zovyjZI+{u%iGfGk7&vnxNI`%!`mC)nQACe??Qo-j78Db=5FF~ffZg*xUTY`m_ydxV zV@l;hexUN6UiQ_2tyH~xqxGsub+C_Ff5dl9*-$^mTcWK64@R?*r|7wSvr4UEF?63F z`~>GM#`*iC(PXJ3)8+y)EOz%}J^ezwA!FmLT(T^-_t#tkbd7gx)Y#UFJZ@Rsfd$T6 zLV?`kwWY8w<8>b@4KKlCTDm}krq|Bg%v0>K*11biT#Eb~(SN*l*7H0C)kl}$nM9%}7cj-lOGCjZ`UDjf;;*SFbW0rlI+gPre@*3}d*<0t*l_VtSg;c*5uH{jmCLWrMeQ$?@_SH0 z*;0qz6TG?1xHUze6k$E&@1nPiJc{`4Amz^q+%`U`TH2dbE$wx(L*EkHgC25U5}fDZ zj!Jk*!>LoZeP1Y-jne8RL;D=qxwjt>iowI2(y90;yd@nUY3V*9%(Xofm{WAtJ_euHDQn!I7E;hlb;r0qBruHe)PA3gup3D|56BtHk0*GJI{8jzE zs9JuOx+yf-g{GgS4xPsXrpLXQG0MhZZu7|X)xa&2I%Mqnead&C@$B){-`I5ay85?s^8G_4FLb|B)Dp= z2jDschgsK?MKM|$8qi;UeLeF)j^AniZ3LQ%B)>Q?D%@)hyYVq`HQ5s+`r{VxLlWPe zje__l!dN8ySIOGa8233!TMZM-+NUa>;tr>ahH};stT8gt4Scr0hK8G zd5QgwkiCa3tfz39MC@?Pm}@6uj@CpU0r1aK!MjzD zI~w>$Rb*Zoy(>Bcz~lbwli-;Aw<=*48FY6_xpq;m&S)W>adt>4-=&leSWH!{40GQ! zS-YI=TR^A5orB`i(nOc6W5`DG$8;x%>KUIVgLOocX9KXfW?KR_zU(~~o~qRM!(apJ zwA4+~Ye>Zm{gk1Q6%vDe#m#l=w`D0 z?XRDEMf6zo$B|W^~65hdukCcfP?qoNNR&6yJ(EYFpq_DSLNMywns&_VHq6n}iF zvT^wUREl-O-Xz!z>?-M|FCr}$lwhdkhWY1FUokJkI zQ$=>9$s2u8tNs@t6>1o7D3tryG$ttsYt`#tVcbY%ci&2Oc1?JF1$FQ|# z2ivJr6EK>=BG^()f0w;EZRq>sq<@K8inPqDym<8#+(Pc#;CY^$09C_RQ=So8Hnz!V zLM`p4i}BZ}CL?|cCn=#jbYBI)8{uyb{8hl;o$#kK8jX6R^v{r$y1&qbSH7RDt%(!c zM+Lwvd%R^X4La&?aOE%5?%*<&7K?RgVy>~E_CuWP&5?Rf4PRG2uM2m`8@hpq*Uv4& zB_@3|09;*SOj)Fq)KLH7QUIrg29}tN{ZDP*#B5pLG*s7hPWWvklW~>)r;tK+-?^kx zB0iH+B0ki`AS+H2<9Mt z!g;?WeL?|lQ~_df@-&OjAp~~PGY__lzGB~b3$vAEWcxHDn?cUDg=b5_CZUY9u~V^W z381!)LOrzX-{{8nqrc%JAKrL{DkuVG^W_N2a+Xy8F!mu3GJI~8`y z0EMZUIY%i*>fysT{|YTl4C|I$>|gz6DlA!T%la#5+x9h7pGLQKpR;>(Iz+$cuDFFi ze0}weS_5zuA*&YABUnjzrvitIlU?SGxsPXmSS{x%C?^$5#VJ_gjfzOUZ5XCgs94Fh z5DTXy*_5!?;-}2{-p|;b16%~n-mRTYXY8My+{-12w02YAz#hbqj~vKvz-KwFNlI%< zOWP}@?M+JyOKIU`+K|jUd)>Eysc^mP+O^h7QW3>4wOmCsur|kmitdtvp+l3%#k;^- zeHDhbRf`F%wN{hiKwMKZtrks)Zp1R4M-!>q!`N)uo1^d#O8!L(^jyP%3&X=eP5i&b)Wk1=sfoj2ikD?dp+BUjKog!&0M!~pj-hmtJ=tVs^$YNMWYDz_JeAtYY*UX zFdX-p1b{z9zx~%}(yRi1)Ws%GY`sUbg7a+w&gkQQ$o;5?OHu2uURswIMCox zA{7Ukq88H8uB6Y+3e@%{3A2hsuOtyx>-=-&lB;xheV&8|q8#rDA113sQaZSg&IQ=l zCrb*hX%);$tpJ*;R-jZ_t8t95sq#A~^Dd;OM*0Ww(vQv$?&YtN{>W5aR1-hPU5J@^ zc+q&7+w8kT*rl6D=6vZKzuUyKZ!_I?{`;rNH|Rqd8&Uvb5*e+U$+70%xHyL~5262p z@wYS1Uxq!8I@_Fi9yLmwNBJwfX11nIKBXYzKpwJqnUkS+DmpspZB4h4t*sL~`O)k} zs6ufp6LEg&ASv+g=RZhN`%_(F#`v3cCw$+W9&V^8F>MU{FR49;q`%^#z?}7Tvz{H9 zaY(1TS2-IvXIwGu%m;y!Sw8cmsp%%4&`nd?QZ( z2Nayc;XXzjMm*7M*>7}S zjc#)KFmV$m+WMl?qF=$E|2dmZ5S~X^%l>(T1jsPu5dviBkEow5n4RX2Xd)^flE0fW z+LtEQ-Y8;ouA73d-BP)zGQ8hB?`l-F>cK=472OlT2;TU6;%pSw-KOSqCa%ljVy~=H z6_{a9ZfcI1CgA&eTW^EiRB!)Ni|x;N+`t`YHn>go?%o#LpL8OwC;E(H>_i#&%al(} zgO1=YE1BZZEq=@uvh_MRGXld>r0dyu!x`^ z)sVmaW4+a@@fs5xGmnd_n)(7LkvL!)kiLl#OYt>3eMM7~C zr+F`ueBJDPov;Hv!UB?K-lBa)!bYRj*5}x+w-R3gJWX#V-Agl_$8deSd@hS{HiWch zV*)kqLScAqb+YUZVGE!p!n5SBF;4w7O}CrbomZim9M^+2EA!Ajz8QB**bgiJAp%IA zd`;~_X8UK}1LTX2$^7|Ei+1SI-CI!4?{J!Rk~h)r%{#Q-bz$#%@H!XILCtjYQbekt z#X)z!X1gQby9FN|2!1Q3_Pr})>r#&w+k|@(@^5Vo+B?{agFs@Nk*@{aogrI0ZD;db z33n&0z&NvXv?7evXiRyqE0`t58Ta2^D)QP=&*Po}1%x&7td>1G*>XmuiXB%60fG~`=$xoH&{JDHM%}#bB1!-0P3&Dcr zL1eRM=u{D}UvO4DQlvaqoamu?ACUExX#J$^ul1e<%5w9)xO5IGAFZ9aIWU;;XR{Zd z;Fmvk>s_JzeWg{KjUnUan(VSl(=*u!F){%i_*D4_%c*In)ixgn?zZ5x;HzbQC^efSz6t9~mE%3VhG8~7F6gTIuPMG}75 zJ_K8j3BbWnQMJ?rU*)K%`VZ>fgKvp#m58rUhZ+2)GAhiU$Nc#FE@P0Yf}+_Ht;E0@ zBi`^=8q59;U(NW_|Mx`?M!vTknz6tbbQl+T8fwp2aXPRrqQ^(sOS9FR<=qdMI z#lH0;)pZx$-wC$=F4TH=tnvH z@RKdDp(SsaBfVj%his%`nk!{?yya%gn( z*=#)TJ#}UCsS#ORlUCIQTmLBOf|1_j$ztD47*v9*W3Y#)W9Y^y=w`rzuePy3EaA`3 z9Lwn4yde!XQ@tTNPW8Y6OKr$4TDRg7wRMVp0DT7MXHrlUP2Xs#PvuwWe%8d@&+_Z| zah_^U$=7-+j}j^a#VJw|z)WI)`+?*iltX%E;0I=AwR3q6sCEP$Yz-BU;a;UB&|^V| z0=Nz+#{(zVHGe$P_h@uP2(=@0OD*3X0e^Q{;bTEDd@P!})Us|Q{M`+&*4+!Q);$ET zzP+>@J|1_#$EwBf@yv2a_y)XN_icE$ZZ*7Hw{Cf8AM*RqoA^23|8m_?*cu#f{urg* zv2uOuMut{dL+h;b{eKIbw7_P(8Ku`;<&xmo&?;kSo$(I;X{8ON-cb!B>POyo`yKu> z_bqzp!M9$+o2p42la4u+!z#cf^Gd@^U?Q_=yAlcQjJ#jHzT{#GTGRP+xWMzPER2cVM^OolbQsM3 zN^!-wt|?#{BZ$pL9n`LsXz%b2I%C9-_%ZmPEFsL|WRE{BRAk-6=n6xP_?}euVh%R- z8IH$T`KkxWROU+l0{B9x!Vo5b)MHDnXU%F1?5^Ziz@`($c;2{49S5*lBx_{ItGW8A zgMCz-v?2ToSq~np(dxVegrnEyB^LRv7B~E4P8{N>9F6Eu<4t)`&tnRVaHQSI&g=4tVDi=^Y}S zRQpDw$J4rYQ9-+$1lii)_cD>KO-s{)Js%O-j>t)nEeyYxh-_gkEv_To&|u?1%=Q&R z;%HR#tZNeGG^s5Q;Zrb#fc)5^wQesw?>frM+^dzDPicGL_kE(iJ!%<^h)kD4NOLG5 z#EMgC?BFlk`O7x`@(6z!<}VNOmwWlkJ%81#Rxwyv2Q7v2ZQ>f<(L(NP(ZSZgz^8IQ`zJgFQ8i%EF!~K9p%ej~GKN5m0+yYNl{*s! zI?@wGU;c3es{PTC0`m8m%!kv!Vq5`RsI06uR1Ek9>IZ}zkh~eb zJK^W%CHMhLFof6hCr(U zp?;!4ZRRk67KFirP)Mzp%eV=?O5m>u{_^3^41Y%Wi$hxm;7_UeZf~&SxnB5Y@Xg@6 z55D{0yC1&$;d=nS2jDvf-!b@(!*@JnMEy@)R)1DZ#YO@V2Jfxi;={zlk)RVo_WCSa0d^;dwTQK*+7 zH%o8;lpM3aW(EF+O}1=U0F<9v_Gb9n3V++-Zx{USfxjmB3&Y=gzofA#0$dltcOiTi z!goG==fk%ZzA@bl-)8tW!M6#%jqq(u9UG3LKKLAfKjU7#wQ#RAHn(L#tEI7^->Ksu zze^drq4){<^ZeZR7eZ&zt7jd{%%TThla7waLt6byDymfM3iQlaN)aq8I-MlVKU(xCAnAc$zMAMZ%=XwFuyi%xLBC$ zkt;C;YvLm#s$B$ks*fPozbf8x7r=%e!-ai+FXtr(MLl!(tPKns^ES4eX;$ z>gf&oe(|)uO9Ft`V|teafLrop0iZ1r;fAVKhkC$@rT`|5c_;j%RX4{2(UICtVt@>; z1{^G`aP+_iy9~H5ok5uR8H8e_GYHF}Dl0#&HZ`Bi#%qpDEVZ&SYKtx@Hnil zx3sco=ULZ#X8xLbfX?cZ2P(PCRvF0*haR}N;GN|$5-dq&Y~ggFAROcV?1GghGC#T; zZ7}h00`DM6l`P&muMo3DCy<)CnUvPzbfOdwg!2i^#K8<=TZv9T=-?`@9&8PLUx5Bw zGwAy~{#z479=-TQN~h!54T`!=VdomuF$Tm3jwQ(bJGptyM^Ce4YrZnm*DHokB(KbX zRS%~NyJru_>Q^i&f+4`nW^XlUHP&l2YMDIS@B_yu4hJwmz&KAgmr(Cg8}g%zQX0~Q4Vjf}NFpdTaYojIv6OCOPit*p+kOK8Df`^Bq8qBt=T%QptF9lNK0U8z1J6oTPm!v|%r!F$q8Xod-ZD0 z@Dl>td+{N4LYz-yK&6kKFGe5Z*dOaOwz8{ECY1wUm{bHiz136MK|Sjll};+9%$KaL zv`!j2p2;(#LuIG$T&E4)SHBR|2wqyDw!$?kooY(iUpH#4_~k~a6%|q|h?m-ut@x=* zK(()b0Rp--<+$@%owyt5jo!jawVK(YjY$s5DdlLAQtnoJQg0fbQm}OP`sbk(`Mh-V zY^YrSf^=SbP`lt3;Uz^U<79^_e9Zkl2L&r0%B(p#{>8_sz2DNtf8-G3A4raWKss{a znLI`)g34jTRD|4%t5qoHdXqt4{;x^!{(7SuiIJ5`&R8 zdOE0uezk=+j?AQu6C1P^et(11Lci2PEQej2Y+=tRqKy=8Zf@j+P^~uxP8DM?Z?Edu z>=rsQu@Y~&XOC(Gz2rP4)Skix$v2l({1BCv&=5hXTsHkg;K_V$9NsIeAck0O6f>Sh z6w=Z~QRgfh!&#hR`OJtd^f>WfS!kJ)Pe4b+t-BWM+RS6(PQrsJt0hnaup(dG4w{=C zmP00J%-I}j%buYJE3h_aCe;0(=bbb&9PH#h>b2u|&n_A;59(E`W40kXMeS%Plr>cA zXVhbarVey(@T;MLS}XMA_Qq=nx%a|4A9k?YX#$z??k_v?eGFi?pLkpcnXBKSwu?Km zh0-UHyM;+@fwTHmUqPL?4qi^;HK`mPGOvTwK{}#$4&4~Y+Hi3_G<#^wv{vNIT&kFs2JKG0@?OSN9-QIJPQmSU40@anh@N1GGTI&^mw zV-BpPOStc!%QQ!@>c*03euayvfs#AS5UUD_=fj7ZM1XUh&HP1e@6_{VEbG88Jh#gNNOC#w;vEQFs8 zjhLf8FD)_h1Ra#3vlX5{R7Z`1DM+nz4l~j6^)8JZij%H)s4CvmNypIo+z`Du74d&W zFW6&=_1QiR#0-`?+T-DU)0W?%6Yy=nQ{C+2Z;lR2;8MC--2OW>q(KNJgrA{Cd^71- z?b*RGXjwt-Uh62I&5VIL{R)-3RLNT!Y}|_ZC>6Klehl7i;IR&cRb78kHkxrg+f$BbE$0z zeEt^k*-AD#=3rxI2codML!w4}rG)TPrN)*uph>Dw!ApZVyllceRTZN5N@Eu#=cOeJx`ai` zor_m+Yu-XyRN(hTC3t_^#=XphCRM9hrXdXxBByuni zaidH2`JzS1Q-cf9i$yReg=i)^N~@d#PtqE+V=%FD^W4|%`2%s*m!I65JEIr+zG)fHjU$Jc0A;i#z-9YLY7`xN`Z z>F=^5vB6~g?Lc4kj@bcpCDy0O%R+kY7h5cpiybG#j->xMNiboM+-1dP3Ilvx>oh0R zd5qM+$HhVTtT|Y1`3{A(w;ise|q(^CLah9@DKy=z+)$Pn7c1>M+Vr%DwwTrLgG!_81zxpVG4JzL0N^*eeBNBVyuw-2o4Pc z$T()jhW}nC8g3n;;a1-8{UXPy@+1U#Kx!*TrnQwgG2k_tFQ$w%QJefyV^Z4RT zDkU{>l59!_a%If`2VK}_q;4yGNCPGwP_6p%{;mgwoJ%T#*$CJ=b!Rq_ti4`kyp zaQgxD(uK2!tP+BDm^~N=!0htO#_UfY6<)-Bt2y!SRhzt*6aU_zy)#hLDK+^+smblJ zlqPp#lV{3J{&0vUw_d6?d7nYhewIf2Lrit<9Z+rH9<_mccmwxkM$;5AwU3k(^PGrfV{Y)|=dwB<89*_5|cpX`^CPp)k8$u$5grcsBa zgJ<<#lc!RJ|LjOAyh(#M5ImZxdq;YzRrq%`_)7?Wqz11?cp$r@h@#ypigxp5Xm`*J zeQ%dgMA4B2icDuxP}Ghn@~ub@rJRPMtU?t<|3jlN{Lpbnq9FRWLG=rH^`oWgga1sa zz71LEKc0}PADvn~7Qr@-71c*qdDaudveH>Lx5J4$*?V-nm=AQ#eJ>Z#T@o~d9#9R6 ztLwV^f=+Xa>ayxmEv9)Tg2W<`h*w5VHST8U4&ATb(OX}GziZ#sThF%Zt%dOY3-}Jf z-*4gX45XFA_c!3L2>wbTU1!$*=?&(g|7B@UM)=DfF)}69G%ER=L!YD5&P#RWpEsVT z;8$_hVfWSTS!_oaWk7xQ{+|2%#t0k=u->kk^M?$3tP<8V(F5193B*Em$Vc_uaSdC zrjikLvaq17hdj~qiFUuoha!!^JChm5ihITGB)F|RXl%eW-nW`Nrj-f`go~3NYOf`C zP01Fs5hcPLQoL+6HV|%alv~QLnXAdZHu*N_MoT{7!UMJ!kCP*j9vwPE>CsS$&Waqs zpL*2bKkgoldXwIfTIUvNiPpqWcho<$t9R7H#1jM}QmRX=N<~S&QdLsub~&6*&-PBB zvjkZ;@dMW*!HN>olHdfYt)gVAa-RvHCr`grS#Ayt4*JTVj2VG*gFa)~|E#(`G-Fk0 z;V-Sq=wPKe@U&6qZzqnU+-hPM1HU^!3po5JfgjO5OE3x=Y4kv|-a=c#GjolwFXHwt zzUgT4ho&)YtpAfim<^u7#By_DxizsopWRH>jphdl2D%Y6G@(wxTW%=Eq+FYLqA2l1 zVd9C2tUv%BHtO69?!8C(czSsH@28)b{?F-&#PJ6(j;Hdm@^_^fQ12tA zTm1JFx!9DX_&dqC#vC|l@|BAKGA0MxJYKVuM#wYh-NI%fI!Oj6)yTvoIN*@_cD@B5 zD-V*M7FQmiJC=3Jv?Jw;W%3=%D2sN-VmFoLs&_0~)n#cbuY4;PV{uvHcPt*XQt>$6 zqwYS@pRz6-#LME`WQ`{tOI~m!^LdP&>P^eTdD=PllNX)$Tq$r;f98YBkDmD;Xm5hH z@S7G2RHwG(Pk&2kOB1%G_A#w3x5;e@q_&0bTYhWR+VTm^sV2bWx-y&f@}u0pI#fED z2Ajtc5S1=Zt#mI|YED*q+$*h-8&fOA(%9l;rE7AvV{g(mE+n%ZExA{miv@HjIG zAIBqsvqq%x%{YmourOJVf6RTS2W?glUJiJ6Q{`kI`HEF6FI==9$Bf@pwLsam^k@=O z>Ck9go4HAk$;G<=pkA>cG5bw{KVRAW=MjpTn*>!%n;5K~HaSA)_^FuKmBhpW2@~c| zQZTU#F|o^|Vd7gJ2@?l~z(hP(!$kgQ!USzCtzO=0+=e;1~bm<=@Q=-m4f_(piaMIPH&(%84 zb;{1SFjo31Er;xoNSC=(N$*e^j`);L%!v0Q|M?jyh$P6Il9mh|Q~eMU|VCLvk1Lp!5^vwBP2IpUn{FbDc+ zbh?Q1K=ZnQ!ua$+C){cwcjH}zZ6`l|>$2=KSq?q#_?FRHcfx;Fpk}9WT@k!4vvsaO z>=93ek=jX_cShe$$r5y9v=E(tEW74kaNb`>yGlNP4^o`p?SQ*7+fJz8-j!wF31xAA z0(6#t;&A-Dt6@|mxjQZU4LA{JosVOoTI_Hf3wYi6 zrpKqla~cH^fIC@Ix#-NYx0l*GEP>s0M%h8_0$#Ua*u_+E)A9@OX~TK=^f=rwyE~RD z2E0T>e>Vp5NZdh}j2#hlI2^ge!1X@%1M|)GU5##gg-QW1$R2|1Aq@lrbR@!vH^Oq> z8LG$`EVXs4ybHA|_B#zYrLQDFBLE)A;oEL31+~{9bI%3aqo~RbSXC<9Glbl|Uz+V* z%C7-aTNAlLe*x6Py!#<8rTg8z*ttuZa`>SFHeSU{bZyAi8?E6?A^8;G+GlFHJiPMNdrxA&q*mH%2UKRH>7;Tgoh zL~O`j-9745?kuyJeXy18bh5FuQ8NZ=1_u2g`?Lq$oA7pRAZXj9*fuR1O5e3O<9zM{ z`ix^9)P(Y`h4NneCtp^d@p{kHPJaG-GGz}y`fNKFYSn#nVRCaTGI@%%UG}GXZ39sB zW%L=ps6|}$hCtLBNPUtiK;(K2}pD~Zv_TxICWZfH` z!Jg1+976BARBiSe07tX7^DD3Ts7B_F^@qc0o--9rsdjG{rE^p-XbY*-> z@6RU#&gm@KX#c{&)ht#(hn`VgFlz`V+3YB#Th^<^MxjJ}x`y(l?<%QNP0*D&)p_$cE? z=~j&rdo_RDc#$J4I0WqgV<8nS=-niHZ_wV2yC2G;S6#F5c|4}o){&C0Bl<6NBwT_) zICSf^oqxLq(H<=q&(WJOPKpV`1ELf&{pg%*oi1$I(yTPUrC@{GQi^UP{|NMa0R>#u zejz#QguU`w*xC&kol`S6qHowN|S9utB-j3Q7 zJmAMT&+Kk74ZD6%)3BmDg?j+ZB(~>X=^ma#diLT6W@hs~8&utgNI@V(`)81I2n!y5 ztr{h6qcxRy1=l#$2)qAPYRJVN>xa~k*MFbVkO90*`-y` zOB^iJ;e`siv>{QCzCzV=Vf5?%Q;_{|@e)WCX$)PwETFs78k9OjDV@QVH`IsgAo*ZHgnv(`nyaTf}WPoRP5gHG^1d;@k-uU@qam32n`6R(1CV^UXlMlnu1%SZOyvya2@n z#1+lAXbo$uey_XQkA|Mv{?Uw+0J zBr$`}!ypASxLHL?b7wk(oWiC!BxZ24G=#(q-u%b;m;p>`I#`4u0A`@F2AtT3OS47S zsEZiOA}N0+@0juY4kHS3-1v0W-J zU>YxYos-2EtEDGd3!d|&){-r1Il&ph;h=jsM)35BOh)h*dnO}@YmDH@(-NAlCaV;Jz z!M0OtOlV3oQj3Gxr%o;0IIl!M4vM6_&MSspr!iU?y^XxaU8y;C#mybrK*cp1s91D7 zZ+9WN6vpd_esawlcW5BwQ?o*+`OwVtUrszTFX<%RM2e2+dT$tif|LOdMFI@EM;a`! zQ^m+Khzb8ibX>86c3Q^h_3*mAU8nO+n10kh-n0B8y5vUmd#oRE{|CR8=jjmb`vUtt z!Pd3?-aGGRvh|zp$lUK8`AB8!NB=7Et2?v)-!a|I|8@bUtL^nhyqn2%S5#*1^{5lX zbd7Q+p3PvowAUk63yf8^{Stzfy4O3-n@da&I$f!D`WEVR>5wvKcT(o0!;z%Ksdun# zJNTA{wt3o?CXJKXy42{incKWi-^twOedG4bZ62Y5ws~j!Bvd?2cWk(>@Ho<5TZMHoGAHxq6oDdPZQtNE%%iF zf$;I+(R6k9>)9PPi8?r>rwBhVGyDC=>M>KqC3ILgpF!Vrq>zOp(asGS+ErEdah@(> zW8Rf&&5xwk+<`U!rb4QDrBpL!W)CN8#=h60Z=J-tRYKVrpOJK87!Vx8#KBARJe^Q- zHV2(NL@V*@BA2=VkP9K;-y$|V^dcKw&^?U@!)xy&FULlr#WwPt+!mZ?M2+sX`?#2_!kR*fzr7bKS><#nb||@1&UiLuFtflA0|#?kK8J0LTSLBBFIfeu>WBi zx_kBM`-DDq$|YB6zMzcvbp0V|vmokU-I~6pOk;nXmu|C=tRIVDE0Xmup|hq;|FWL` zmkd@Gp->}*!hv6n`wNSbEGbGd#m-Vi$;-FVRD_}j{eEt+k+z!RsWxAT#(Q@1&JReP zf2t*YExMlld2W*BB!PM7u?Xh>i*}gnC0cx#`tyL=9~YO#%WUSAw{v!ktmt^gX~soT zV(OBL=hUH!9AK)Y@oJ2kSy7*lG`*T0=P?0x0Zuxr4c z`!uq9`p??17YJD*W8WG#TwveoW~ywU(c|S(!~Sw4eMqLUd*p^)p4u>?$5VgO8n%|? z1G05}7HzB8C6HOMk{{s|Psq4v;jI}b)beu@p$__=p&?zU4(UC7HN};rl4l)q8R>;F zO{R)K$zlz$Y75AtFVUE?np@y|=2iY2w(=Id?1%*^9Ovt3wZE7>bjy&hQ&r>;L!F z9_nh)H5yJmvTqeGMbi9h;cA91@zPv@m2<{8MEp<99cq3K4x~v}Lkd4>PQRzp!WNHS zHbmL^JS~H12!1gYIfR*W2vrt4c#qcz{Q;32Y5sc_S4+=@dM7`fsJ8*Mq2YRprKP!{O z)o)52z|3s+$)va%d50!pzF`IM$^4SlnWD10Bj{Ewfp_w{y=vWu-%QtEn98m%laS|? z>c-40+#?~6>)r7~13bcxW0%SEK#O6Dbe1GkErCOv`ES}oqs=amAD$NE^Ef^H5hFbh zj6yHz1A*pyp&ZzbX#PO*>Fw0iw_4#y;j2LIivhA%ybLl|na#Rl88i!aCj71H;%~fX z4PVE;i;J?rMAM;6GuDz>61&iVIWn*a_RBv=`vx0zo7}=M-m*BFd!ME`-^b7K`Woz~ z>**x#;}o|d08nO+uV|;uz~THM?Q8lfzSMqTyx0$LbCVeF?Xfq~w*=GJjiu7!r~!LA zPpZ3uw?EPr$EMG}D;O_!1)e&o{`qgDZw#ifeKV!{>r(5dy@4%R|4h9waU5Fu=acvr z*fyX+B;Pim6Z_*m6!pV+{@nr6XXJgISlc%3Ccgc@-X#2GYsx0!ehNflBvJ`e2g0zU z3DksjYp=rEa6>))1P@IXbRVQwYG4-JWX3SM+Y4%$Xptl~9>vp-DyXAxUK*@&4C3^7 z@()l{n&ITX+zZ`X$nxLfQ`E3qq=xyH%L9Pi;Lc}6fh;S!m!1-TL z225U6TD4o^ho0k7;OZMx8SPs)NHSUrN`a5C`)@d(6i6+9@l&@e_qYBSwaTj`$Ks@_vu>7Lp;#PI@3gu*r{?Gl&nsb5nx4JMQc!?dlpa_h~ZWWwwA zWy*vvPRo=DsS_j|!XaT*RI$ZHWG_=QnnXlL(M8wCD zO_>S)g2Les_GSu)Bc~2291>PYIDGN9l5l88nu?QZc03T_${cZ0sLc}!J~B{?uV~2-5>w_k5~7fefs^E{#Mr$`e#r4Sh4Uz;0N(MSkzPbQ zllrM1#~6c^1H4=qFj|N3XS+B$uE_9fhEl-{V7RAjmC zCf7l}s$eK>P2NBD+dHtpwQ6{-tb{wx9!?}O1sctN{}*ZR4(v4Q8*^X6pTEr@m0m!@ zRE^*JauLU?`Wq!WG+aT01H5vb8<+HvMY>5&k15W0QlB^<88hAg9vMvFclFzY3B_dD z2Rp1<9$eS#s69#EkL+~$oAq|)<*$Y>?hbW3SJ)k5{lL|DO|j1RZSO6fWqmj=Ja}g7 z)w6ECQmWBaL`bh!`Du=mLPeuNvKCu6?qDC7b!zzXxRd>WHnb-0c&G;b*;BxIm1o5< zayV39+oXjNpFebv_qwous-lJt7ZL2&!5Yy=EbeYkILhxo_oS#ok-L4$!Y^Zz_u>5H z+h(@xubdaO_fur!c@^B50BjUcHW(Z&HopTJ*E0nU8(rRM=!6`7bPhP#YnPC!|7hH+ z_3^u8m-lNDz)KkbW|w!m1h6Ip!0PhOkO1z@0LXWFZ;$|P%m65Kd2f^e3eo^v-kYS< zGX?3{i(TI9B!Krb07_imNfN-XG5{vJyptt>Eg1llUEV1Yz{(7OsV?vJ5`ZfMV1~>4 zRS95P20)R^J5>U(W&q4|c`GDWRze;Jbwu+ZhTO8_ky z0E=DTyCi^DG60siymw0g8#4erF7HeU;E@b~WiD^21TZfHV7bdXO9B|50pN3a%On6@ z2EZDZceVuZhl|qz*1EiNB!EL{0JVp4Pw4XAEW!M12Fyl+xkZ9ml>t*vFy%7+XTWSC zn7I#kPzac( zGGKNROtA#BAOmI>!g#W*bndQ#eKiAY4}pzR!E~Jd)4=e|a>H)Eq}4Vbga;>ZcvLJh zgfQ+*msN&Gm@vV7O@i5*0ds_4rb{rJGho^XW`+c_ECZ&UU~Z6LDl=d@2oU zc$nejD@YRTlN=c=b2}yZL(7ibI|8E`kgGGJlf6pj2BxIDvmM$Ca(L!qo3$61#p-11 zQnKVb*yAZ#3SI0$Ig823>?t{l9c*?=juID}lv2q=C%Y^q%VY-|m6Bzui^blPv&;bb z?>#w7k%PVeo}6W-i@lwaWww*;P03R3U@xa+sc^CHrDUmevf7j^RsSDnPXirQmEO$c z4NSts86bf{;*!;fR6w)BR&me`S%MK6_sx@_R?DJQ97oscI#IAhNCplJW2&pzqtzHkT^%K5iTw_gRj~hYpsa!MucQ2gv_kQajw z)PegD;WjyNw-D|u2QF!CBI3Y(l5hKI_@Ch?(5ZY-zVIc9Jr)Uh$kJmLxj7@fmxDmpA{~aB-j&O4hT$0D)1qW^e;XdZT zok6(k9k?W4#hnh^M#8<`fjgIQTOGJ0FU4F3?tH?nci=V=ZqR{C@=p}s)^S@2xBqP& zcM0M4zOCbuJQKSdxJwE5SqJVlguBIoOY%vqbKtHZ+}rux==^(i%dWOV-m8lonU;bI zEguV{SJ!#kF_BsNzKAEZeu@u7)6I#dPbqvX?2p96{nC&}=1*nF+r#%1voGN+egzMK zvK{?jY)jsyPz|w}d|1NDAuB?$WaHxXw@P-sf&0kQX7GSdRxQ1%4k~dmnh-lml$sPJ zc6FUDDXo6XZiYci+@{k#lS7ZGfU$wlj`*cy{qHxE=o(1@w+fc{^9m`p1-gJ@&|bq# zhBScMGJt@Y3~K;GzR>`UiiM8=-YWx`t5`6=zv=*~MhcN|hu1cR!iPR|SpU#2ek!Hw z>(91=guiYqp#oU$H(q4!Wj9f@Mm))fgC1~xuCrq zATulFA4SjV175Pa)=J9K1bU#QAL--Jd6kT+sRcAf@ps%dz0NL`-}~)^@hP37ybe!^ ztz<72S3RNIU131JLgCO;^J#G7Z__3=Lrx9aor~3P>QjTZ-{NL|N1O9vhAhU2(KeVN zB(m%FX9##s?uW}qou5km>~RShh*sklroueae5M#9$)h+oqSUCV@g-I6*N1HG&4H+Y zt13qDfF*ilF+w*+t9w*2f;XDtxkDx5bEDK9HgQm{HXqVwxIVx8?TKyMn{i@C)WpU) zb+rL=>Z(NKGkaoRyjMJZw|dJ%<5kC8uZr%gX@HwUSFUfJ@2%W?IQM4WOSVZJQBzW5g2C|7@1~+mQZ>Fq!tHA5@XUfPAL|UA^x^Bv0#^jSUARF;XM=! zt4QjL`H$*i0cD613s|$495QBxV@Gl08@d+7qTu zVxj!Jldl5a2I!QKq;X9H>K7PPbl%!2T%I0igkp3^4bY)`Ab+ufiMCHy;T`a_e{-{! zu34*Vb$H7TKIjDcJ_YDyAfMIZMX`K(gzrsfTZ7T+XLKPFG{sH(Ncs0Uaq#sL z@rG#iE}eLTDSq~PiTFj)+FqUbMRAeUh|iDu-`9!Hx5Vul@uq0?QJr{`DPkJ&h0)q$ zI`M^Zah^uJHR|uviMLuJq!C{dt?t)}FM<8%0JacjX2b9I>i$jDSV{xf9D z@b~RdcLB;Cy8d}XN>#(tK9k0jVJ3{QQfwP7%nJ9uDQ@MkD;sht|G=3j#+N4smGC|J zvJ}3($s5&MA0-?S7rZLJ`DqTryEA!UaMcS4BhU#hZ#? zEYQ>hN)#4E|Jc+RbZLcg+(B_bdzIcW1RA>3U(jJiI_h+S7773z6VZ3Nt+=Tak0Ae_ z-LYeF>I4i5*UyWAU%HPT^WWnin2PBDcf^imV(4M(z5lB2wiA@eOp8}E9NLb7oG!v^ zzS~>9Fu7;rMBMJf>%EnlqdL56_Rec5t{s<+4OPU7`@Qw~zWgs_NOP=2Hg;Ir-xD6X zKRaY$$a8Ui7}x50s@*2sVR@v+m>8ii@9Er&?t~UUqTiC&WC}blfy4{-NTPvAw78JS zxsvedByQD6_d3a@}lbzCf_BXEu#N7TS_!H~d-?@%^CAYteeo_1VWp~R7Z23wp z{tPx1jJalN$+#Dq@x|Lf7f)A zZTQbtxo*9Zlae3XA?Mh`%`TOLGl2uQUx*gzc8tnfnA?+DgrEfZD+8;Xz-R^OksW(&S~e$V%Kx%$ z!S2gFn|)QeR3!}O(DOz^{&UP)aBu|P!ve8+3>EG7hJI=^-2GX04@~#v2S@wEmi%pH zqVB8s&V&)_`klvi(=%kOl>uWOOsVuSkMbX)YcfFs2$Dh(ABNdBfs~F`3|SD`-8>xa zN!4QE_6782`{Lo5dj|4M1IkarRGq-cCn*&fU5z<|Q-%_lL@)%N(wnR_|^E)hNj zE8+x3K1GSJ;-{i}0RsxRH=SaPQ-HD2#uzDKj4;LsU`$|)5ylvqxi^2!0QyX8&WW&u zL}TH*FJjp+><1M6<6-F91^k3o&j8C^wN1_$^~W|4Mbf&%mC z)M7(;0do;A+482bDfYU79RsEa=3_9QDV|VZ7?lTo_FMY$x7xfq+=v{NL`uAtDKHG? znLpQV#!LBqJ~Ahlui=~EvLr<%LG1B|4nWKQ0{*`T{;z`n@0jlkkJ85i&i)&w!BnKd zWC}`Evd?hp+o>>mXa_u@r*qv4JtH{OFx-oZ4+^ulKGbDV?@O2XyT;0oV4qaFI`o4v z((&7{qy{GzyMWCYBkv5NizImjinCn6ykm%6I!7GSdxCK>Jf+SufVy67TWj+vN{z<8oG}zgc*l-NSLJnmY@2|S+bcbm>!7G zcYYGF#C{jBXAJ&MQA6K3P!ktVyMT2V{GFe0;|gfpRW4x56w@Fx4O$}Z0(QP)8epa{ zjLvld3n->Mj06m$3Ky{BcqJk?@NtFYeFpPB!xA4DF8yC2c~4>9Q{v)97qAB^B=1`0 zU2BSsE?_q+rsJ9EcuTBs0lQQ&t!AdxaWT&YY_ein$xJIvF~J3_;FC=K%+zm*d__6f zL74r>Qxq$tHS2Fc6 zQxHE91{>&7jHWT8X>rlvLg6~aXeu+B3hTQI*j&YEGBcWNiSu2+suk0T%yeR01YE#= z<&jK7%rs<*a9(4ojLk+FK z8rl$PXm=LgtXOb3EFJt>PJmPx2 zLyPYxcO-QlOnIxK{MB)^JiZ8s_s1LX{&;uI2e^l#3aC^srOlA# zp~A?>+IwZtzqX<7g%bj>pYOrl9muWcUs5eq3MYhJUkdtn10WqaK~ee&rpPYkojvSg zdF*iAl3u*HttvwY#HlHKkGm)VFpL1N#lc*>GN2RPp#lx^`s5kG?MQl2|)k ztQHT9Bi(Qy;+1#H17uoH=bF^@@gf@NQfKkCaLRq2nnYGC!%R*}H2$t4EH3l0vKlKM zSispT0qbH1dsmLyF@P_C#{4DVxA0J>U^P(j>$EuKp=~YnQ z%jj}>Q)0#t=4+(Y3bSH2sv1t!Yj_%c-1lsHNc}tVB>9^#W>@MMe_h2jK==R;hAX}D zs&+NB5}741t@Bvh@u0}Fuf58#ntr>pV_2N@cv2DgfeD3Dq0kPB(J0t@fTX`b%Y~O( zC4wgkciAN$(MS$@Qq$?Oa&aXNT0ulf5Q0BFmz$EiP9c^i|&L6P2umvACY`LI!uPGgg49`*&2zD)HZO< za4a`dIUYYHd{|5Ebju)wrSC;I8?)>v=O7{Zx9+33vKU?Vzec=_D0%d zT@OzcEy2fU?mbdeCk}zEaR}#47Syt9JM=vnj&lw~v&TR+JDfiqUw4e7+ljQZu2k_4 zi}}C9P0^4iv_-AM_W1~U8~!)l|Mn$Ew_r*NOcy*`r)xo4UQNILlD9*ZzY(d%9K<9BZ^I&{hJcBW;08 zXCI}~<{HckbG9GWJwNucne9fHQa4X#K$)tR?PmWBnp}6wI)Eh_*h0C#kr(4a8!%lY z@X*S`m=B}#gb$c>?#1C|WvM2n#)UxT62n|BLoRLW0G6nrzldVeezB^4pxQuno3Jwr z0`fIc&otM`3Oq`W@yNi3*oI85HIP2;3vECnDkG)ugGrcDr68RgtQ+r_i&DGYasf>5 z_sxu9#BQWi4hFx7E(o@VoS>0>i)tq5ZEyR9vT4L_+JPFd3^tSi4tcps88hJgwmSQ> zU^GFCbbg8dhSvXvJEQb1tzk^J+j*QiV-I#loM~8EXAr0ybKDuIX==j;#`fE*?H;f4 zsxE*!b{--VzO$M%JuWPDn#Wt#Y3P9gjl;F1L6~Wc4E)U5Kev~9Z&~KX_vz(y$Y(Ha5mqAtJGNj0aM24zuXaGqFwJf zrEWb)l_31g;(#Jdm2i%7iP98E_Zc|3DfY(joVUdFKPLO}Uc)o$e3;h158c;4_l4~) zzuUsrXF3(};R`TEsmeC_%bru7R)v)}v2u3zXPs;y5jOTG81 z-dLep7P_xa^^8~b%<78KJtMomZq%&SrmSJl1s)#ugn;2u8rcbFh3>qkG(6<6_NZY! zl&U^o;fBG)7xiEmmBlyb_}tTMua4TpV?{bfvcwDQ^Ng3r@ruVVow(P- zP7Ab1s}y}4^tNm1f;%ui2JiA$mQj-sn z?YMTKy%snlswn&QN+7(F(#NXE4$6CkB0Ee8?ck%<9l;g>`fBtDksq5sI!cFB^p=5s z9XNZ0&dGaVT{Q5=5e)MVUtKgYNp(Fst2$~s51J_2R!q%O%61r6z2~I)ynwN$U|su& zt_m2@LVGFq+35Ugfl_|0&4Ep^uR^=qzOv7BV7Czq?T&qw{_=)3wOEq=!^*Y6(C(J6 z(&C&=Enns9xOBmqiCns9Z55Y}g;J>Xp5q1KCqueIsd@FxQ}Xt)8QQ(Um7 zl3D!4{S%nQ4QtNkqWjj?X^uOA%|2qOoOW`f1LANz1%o3hV0>U|tgv(cnH)*%yt={; zO)*#}r?%PMGQ>eC*c{L=e$;hpL{>et9U~0{@$D^Xm?5Tt$7S1>_|7;hR?{A(kZjYi z^l~f>^W_OVLEBN&dKOyMkJ&MkD6&hX^gp36<1}b6%y^#+1croqyU?c42U~F!;NolJ zhuQXvU7cvZm;t-K2H4uv!ycp#en%`l*bu@!(^bk(&>(FXE4scmKS4c4lDU7D3fv~z zl}S)!+eEZ20^64sL8B>>A4BJ05!;J-i2q3YM+4eFP$0t!oryKDR|nS*)BeoBv_IX! zx3EFzBb3R3?G?ED{4H&H3z+&Kr=>n9XsHikh3=)5u)3VKLs~($JuR&u{cchEk?PZA zaA0GVoxZ?ZssT*NDvG)~fR_l^Y*R4VOrmln%)QGtjsP%Tnix2T$c90|g&Ci^Jl#?6 zNnJ`|Z|d)_8mL4NT2$?>VsoA9DyB)i{|mJM95Dm$@eWiPzn~coYRxdHHACAV8-vDf zm(B3hQ_3EO&CtjDz&>8oJncq)P5wUgeaAgt z+)ngB?O^23$)BA+i@}slZIBKXu?ZVY4Sd*x2~vmSV)|2TIzrRM>GC&cif}()EZV{G zVJ)lWd@As3oaVzMW5Wxta}KQx{U#T`D!V7$7lLp5U*_HhKC0sCAHVw&SdxWZFkr-} z3j_^s8i6Vh&;(coWibh?(ux8?;t~bQtGxzS@%?7Ep&;OTv?%jLuoOwHQ=FFKhXU=R0 z9}J$|(5UwH-yPYW1N4+RHkjxtbmHd1Ef2Q>+=_5pj9Wz{1Tkq=poz_L4mPS*zawgi z%;xx!+0I#k4}xbM{_OC<3BPSTXZG7dH$-Mz9|&{>TP*%Q^*0pG3S4}2!JFac^S=$g z=^XRUgocvvJHfLEGZj7%xY!s)97@UhV4&+$ZC+~Z#PLO)fb9)??T~l_Fy5@4w6yB! z7XO{tOF8*gMXABLG+ANuNQ!#PwBc!AzM+y3l@%^_(G1Qnt3C>#pU1q!68AN(X1Q(u7v|6Xi+RQzkzFVkDN z<^`dkRO{&N2)_v))X8n9KF$VwHplJ;F3t?LrTWT1mUkSx(YeOJZyvFLnDuu{Ld+^s-7{ixlSg!rSkYjYMcDTc@~Sjau*I@~cLyx0yOl!LH~Ngm195^RLmZrFr7zOYRZHfJ<< znq?0*TG`9Be8ssprxEqEc63v-fPl=gep%St95%C`JajBRQl1hoR{vLXTH;K+o z)Lkx>fIWvju435IYoN)(1h+;R>wU&X`;i2^v27;x`L++P#A4K0vq{_^AStb;zieIi zMQC7t$Jpq>Bn}&y#Oo4<%Sstd8z7T7T6fG*2U{3*%4H&~%}nLqkHpND|xpoF<7lkSI8Zy73;O7;NL=N~-~SEsq(Ub*g5b&pTyl)G98CRsC7F zF^lha8?uNNNM`uV-2xMV(Q&b?J2fUx3uZ*bYkrOT&|}?t9}1v*e)Y8^pKD@%MT203 zYtpS|EJb;`kC=Ax?5I0oc5HyBpd$*yP^4ck)vWa5;q>`eVs4A`uEn_g`^8t{OFEpa zAw7}*r6)c-|6sfQVP-N!bv4ATmV$v*;xyR3HOwv^QJ2wMxI_IakB4;G$> zX0-Sxai=bsL676&G@1gN1MWe$%w|(<;U}CsGIP3;ACZ(z0tTjELiCb-dF{QjFL$Fa z$IX(tFL$%*zta)?Aty(&M|S?ebqiUipG|#v10mV6Ae0~;U~4;%-kV=^s;f?7oy&Dz6-*8J&Ke-00FR+vpmVWE+R(X$P563$0(KLl`d zu*K|8N8EwIvo?}NFoDGpYx%Lf) z2J>~Mhg^DK8o7lYSOPLf3)CSOFx+gG!;Si#AK=V&oGiPSzpWptc6MEfrEM0Y6VCY_ z7(8c!*`Jf@VopB)t^A5lDNOcn*xI{)L#nqyXs{&;4SYP6jfIBOe6Rw|FXM%Q!&>Rl zx;dnulI>~D_hdRYeu4Q|Yixagc01iljl&Yg>L0+U%SmZsAFBNzjT{oCfSZoZIl*;D zsl7+C(xxRe-R83hF{D_B2+u!iEm2pb>vOm0^)xvwQa>Y3BA0F$^(jPaTNzYX#slp~ zsb4#9#PR0ydbM!$6cGSPjoUqNnI*7&H$klUFZ-a|)b^#qK zw8?!2xezUbsykns->RcOxS~saN7Zb+NvZF+Isk88TZo5CRl%Fb8RB5smPg#X z#5$)Wmt;Yk@Oa^F$se0!oVGu6vD%B(9|(;kXhZ$R|Dwcd+hg z6z}*Mq3su2J(;r;hTOXZL0%`!_udS|)v%r-xTz4919LHTCP6viCKA_#WXxhT zAsOcxNg+8f3>rE(ILK08{fE}-pdX>iwi-C7M*l@U=)a?P`qwo!P9CL3FmIEi6sG&m z;98p!xQ_LqBNfOL(CEA`R4=YS^&O-Glem63pBF#3#&o!MH8_!bqC4A1t!r6c+^`H&*4Tr zy-&&<`srVYursl#NcMC}y+qAl%O(*x40cVXH831=gUO12D2|Bc0l5V_;-3rs97qyO zwG1UVz$nb*^|w#O3-HnsExUVU0qXTHWAy@L!XtwgqmM4p!MY=0_4K#(&lu}c zj~7I575@yqv7AzSMpBKJXJbx$#1>wAWM(?iQL8@qC8-mJUXF<^fHYg9rnb@D>>m>? z(Hn@{QXOHEI0T1-R-(07eg96X+$e~837}m{PtZemrbNfv--@FnWv|!pu{jwZ?Y7?W z!OJ%paix+u>Xj}{{By+2llx_XjuN4@vFZdf#8BFyH2!RdT67kTJai>&b{@IZ?^ zF%&wfb+_T$EGwJZqzkPJ!0fKxmp}Ki{EOyxa56$rg zHq7W}#1MCH&mUO*wAh17Gj!f3)TO^d2<7>LFyiUv4Htlb+G_noHacT-Om^5M6dvu3 zXR(H0DIz(`-^pfo)D8Mj5ll23?TXfHa{nW>zv!5+CBA-9tTmi*0V7n}p}PK>IC)&W zJ*F*Ys5$f;%~3D^Mb2IU1s$#WGaCb84Px)RtIWvFM4AE=GjkotD|xi z<>5zSO^Y56|L!sR<_$+{FJPz%q`eM~L9!n~Jod>)j~%otM*S#}@Rh(I_3aZhJSqJY zw%h-TB5dc@Vf7?GZDYvltRmLarOiF0i;pf%KYp{%_clAT&h<5Q@gBM>Uc(+bh8eAv z>sjcKzJ0hMvfBL&$DmmS%?E9bU1{h@XKrac(DHEAUq2d0x=X<*SzVKjx=X<;TkG(R{=r_J8+#eyu+B+X^v7 zbSa#!&oJ}XrQheTx>($*F@RQP06;>4BXW_cs5Lk>0@_v_8%MAh)Ec&K!3Ub(LZWXD zHWsiFQ~RE#*c4^5yV()^BX_}O$AMxiHI6*;*xk$)xJ$~@)zhzP#SnXYn^_dR-M7tw ze4638CN_AXSihsb-NJp_K`Fq(1ZO%mhaS)tr^T!_gHk;#Qhk$q!x-e(fc3rke1d~k z80@r^0ShRgZ6eHK5Mdm_94@pX@gwG#kW3m|(lDp?Hjl|SfmJtzQe>rwfe{9ByB(j5zWf~5_k0(uo*NXeU23%uXLX9B_X4;5#-x$3?4gNx7^Xd+M zWWL+uh%aM(_9WJ4N3Zp99GK&@2G5ur8#nU2BvoO8Q*AN7PpdP$c=35JdYv=5&O@Wa zX%y0GJcORL`li#fR@;;V(GlxFG^MQW3vcPwef_Q8tE=nhc)Yz?jp(pyiJk(u$aquA zvA0tjd!_k$r#AKulVh(BzSw-TF7oiZVQ%v9J5{|go@2|g_(&X&=gYaM4aTchiTG5W zZ-}<(eLyw|k(CBuD$D8PT$ZVZvi!r7P?jzwFj@WLF}*DFjb)jdSQezF{&A&N7VODM zNq$yaFZLhA-}8F#_ul3=Nwu^H_QBKOR-yB0;oSv`h!3v+j*-dJ6ps1sSixPfC%paFoQlahvyT0 zbcX|%#4b8EcMA;W`I8OD5ZTJ0QRYLUFmZ&{P5R^F1ermLU^W!|DSJ@x--%B#3JNR1 zz4%1@%jdkr;^+Ooos#|^G|(I({PJ;5<1?8gh-$k+>}8JK@VHYJN|)z~1JeIE+xqYs z^LT%O-iz3viKejE^XbMgliqmD2(OiHJ)00M;nI!xAu?q5WW^nFzizY9YzltEreWQBGsXO|1nfUZ41j{ zzWrD{Lz=bY(OU+ybOKJ=7 z>C1*p)maIdHY3yd#!O#M%oItee_U?J^k$RTD(7Dn_GZ?e-9Q`!+cDT=@D#=Zk?GeA znN}rcdJ38T;Y~xPUrWpsNvJE0nSNK%wY*|IFww9CYl9K2mGiU_s{Yml-u5VDKmUAY zYXxj-!#pVqt6O4huQQD8S9A#a9h3l3PXHXRM7{Y^EY2%QqRTp>#Cp?o8R)IHeXpXs zzB=rFKkhT`ls!II47)Q&*3hrNzg$^3?2b938IrE)1z0<)W9`rtx^2AzbBm+J>codx z<||U4Vjh&m?F4s2fjf|{QqUKB$_{v9wa1W0y(bnOQcH8B8sz6V;EmP3#oxU#=oVWn zA@>UqTwY+oxTOhD60XKRo7^sEFDY=g7lqx=Id<2#f5GgGGy>#v8z zGl;BBw5w{tGk6@lc0u3W5aA38(|N*;coeWlO8u>3(kh2^1=UD zkRJRK@QRIQcSV=skt*(gDEdh}rqSbAJoKT5JMchhlfXOmh`WjLbAWNxWL4yWX!0b+ zwr`7PUb+!9(`42$cKQt+V;;Mh8cjF}jMZous}TfM6LRkjR_`^?%v=M;{%1x4#`XeZ z#cvoeHa7*$v@A1VtTuyZ)ivC9AbQ?z_sYattMh!*2zNGj-GHVb=l)TEPp!2O14u?} zRbPD{b47ay+dG4kVu3O0_YU;Hm|Di)u+LC^^Z-WIw%5{mA|rfRVmxdm#@fV-m+;Lg zHmX9-n)+!?4;6FN4Pr5>3u`(J({OXty`t5YW=C5XIbCc&v?1i}y2f+^k3)AXCSGi$ zAS6#Y^_p*@$^8`_f_{|*hIp#P9dhpqyLT0- z?LQM1KdcGNCL9Klv?Fa{uX?LMt=Z^0t8y3-uM=7Cu7XhFR@7Nr=SmOwhj zg5WV54FpjCap8*90Ua!8Vmt`GW#Yl0H^go7#(Gl>z`^(bX(tqdgrrypv>Ac7_bAk!A0U( zex!**W`Css?1A^p92FoLp3IO(j=}&N=G$?ZncuBugZy_-f~#?vdWbh3)$YfgrZdWh z@$qN>a`{Xd`U|x0CdEHR`%cfdM?Kmb#kgC8vMT;NweK)#iQWc@CpwG^X~MSBi?|1@ z^w}Iu=R2NFJRZ@Y;n?^ID|*ikAtJphesH{o!bE$fz)|-LljJmDLLuH}Rl9!;=dTp_ z$LY^C{=xb)&7R%{C;y^})8nxx$PBG1ROjaahCq40{aLtUy+}Ol$KC4qJbNkFf|pp% zmc?H*LkGw_liM^sPpmK2t-wC6Efu`)3(pz+>@Siw`2za%9TIvOL;DyS&m;Ibcri{a zuRJD*<-2<|Vu9-?40*3|*^el)?2EbVi?y=z!~Vsh?5s!GvRIVepIr92T4@$=X%=#6 z7I4||?0+Po>@E$uh@s~*bP<<*ep1>0XQ3$jU-oEazsIU$U9W=v5Uk!#&Hj08>W)b>o_Tz5y-zXl;eslC@f%B+ZFABkJ z+Zgv&YVfU*`TcijOF8Zkm&xQ*&lR`ccl4Cy@4@6UZFFxn>1s z!It2xjb@}DB9gr2y1GcBbHCb)LJ(u~ZHR~@h@DWh#lmdXp2tNpDU4sMWcHLM`S^b< zEsg&*K}t5{GpcCFU;bD&WOR7cr6UjsPe33vmv-s}9YVu*Z>`z+AYG5pwUn+^bVcY= z(h~nnN$=*QcT3v8_GgXER^ADjow&U6!t>WRiEE&|@SLb0Hi=cl#N9G#&0m0(tW^G; zW<3mp$cRT(pMnMnYR&7VmH;2`dVm#PZOg3U{b9V%vhv#7Z3)&eujaEb6LL2L?#gV$ zYi=7$@pNq=O*Z(Xikp4wVyxf1*OwJz2KM#45@t~ZGfmBSEk28qkiKqAp%7X9>LVQE zi2D@i4_Sse%TsNy!&l!isA(Nr8hI;43$kqGxm$UGmgU&QEL)J}i$5}CSzyQ#k=4;! zmQ7lgS)654+kNbN52g!j69R9@8(qwEZDo$#IDfud-^q%2&e^=J)Ug{boadNt3ZAh# zHuhsx7~#KQ!pX9bw;O~>)n+<}Y<_}I+~1jin1-?a&UuNg@Grwcqc#@64x+%(nFu;}zYKy`(U}8p!W=al0Vj+B8wcLRbK8B3rKw!LwE|7hvoQoOQK1g;AksP|4m@@$MMODA!?u}jT z|CSU4P6O^Cw_tM{%vWPq_xN@S-qCSqPjU0)%I!vhm2>*?CP^6$sBU|Ou-?)V(Q7Rs!YAJt0gmguq*$%WL7nG zW-qMjP$H{3M8tH6dzd^ZM6fEIr`-suX>75Hkc@*NcZ2S~pe*cZC=+IXvY=hMn`)F{ z?+mS=U3x)1Tu>Vqv@3cqJH(~5oT5A;=Y4w4U7WLB=Dd%M(+C<4&i0`nG0!2e{3i4O z(HkZ-oOpa*!m>yDuZ9M=fFb-L&s*SD>`f*zoEjbCuU(M0>rMEbWG z){`i7-ouZ0+1dV!|7mu{0ygzozoI;*+3U^8v7Rrq_EDs9wtswhW=>{!R`-OXYRBj+ zl)BFuF3K$l7v+?wIPnGtZV-qqJU_=7GVg^j_a@~)pPb&J@+-b=l*zK#Cs15rqjsn$ zGBd|2*P3VMcHKWFSS<02EE3EO`hnv-J>&9VpA{n$z( z1|Mt@p7~>&I$Mzsi_ivpP;9y0K@tnq<;@8V%fkF#yVi;_1e~zKEU`~6wgrR_j5p^M z|ID?@>WpT{hcNPb&=#6u4LxP|78fn}^g4*Q#pDZUT2jmmnYFlOB ze1d((Gy-1zL#~52fb$mQ55%dz)0E{Dxfj#Y`}*eJ`<{4GN{ zY>DMSD(aJ3IqZgVlyEulrR`QK$C0{Mb(-dR(2=^W`iBJM7UdGz_n#m0fT@%U7&6@{V(R+pp}rW+~K-O(E|o65h1aCt7uedt4at zGK$)^+CgVr_t2Kp-JllSaRz{R*pIt&^@HIE9vr)$pY?sLNpH!cpRl_lc+?tlcSOg+ zwZSpCHh_A)Blwm%&kA6XBxaXI*=P7DO_FW7YtI^Vpk7j zaI0{ZaQ?lJSH-%c`cy-@>=u#vHmai9_FjfQe6;;C0||301-nKEZjQhs(FiT!<1qNH z?kh1s$$5`IbuwMTN9LHDLZ0Jo;S2*pni(O@jF8zO@vtBF+Z~^0cj%F3fs_h?l!c5G z7@UtCevT%f3R^Q=(h6i~MX_u#q0ka*aS``wPu54NEvpJLS2 zpJvoWwgGkCj@q+%@BnN~mn-C?XTSGI-5Obvh&QuDz2OA6Y+0yo8yMRj{t<_6MIt-V zHDJ)Mns4V#zafqs+|Nn)i40CLi@TMn@5-mOr2G`TDS~@Fr=eMMZNUr8UD_V$3xA6g z=dDl6A-#grt>AR+;RwI3C8>32c(9YCOI9s(7pV`_T@i$MnuIS@3KjI<8s35kVX-HP zBRk$ONuR-|HN)3iG+`(OFdTcdHS&oh9U~cil4@*BHAMBX05SC@-mMecfUUI0LtC1d zws8;D`OpE-SI$?+zS7NY!B{U9?)6^DL{+e@q*K@xbcZ6#P?jw|9%OLGOo<=rPWo>S zbFgC%{4EU(*Wm>e$`8?FB6N(W`@{ttX7ea#($9#nP~8fasC;@R!E>e%KagZ{bC`pL z+rWY0EqFm^;|EHfL&s1mG)wui`^^uBdnIXBpV&M9Jod~Xv zFKq|0V0@O(9q9<3b@>N{x%g$_2u6akkS#hOyk#-B0X~GxlCs-=VAV}qG*P0_rHyIS zgA1q!N9vfY(X4wFUTz^4Ni*EzmLW_(o6O>{%Q1v)+%y603KtQn z6){7ee_5a>Hi3;&n{eP?v1HdYChp~J_mM3CE_ubbQr|oiYYHC9=01nv$e+XYx)~|` zgj4c%m%QRn1h*M#J(_z1q6Th3q#BWZcTu>1#Y%kx562Qmhz7gH1qO>w$aU+`9Cr&& zP*AIJg0_BqS__Q`1q5}(-IWgHuF@XL2qQKYDKT&AD@ha2xA9os~7Bs zb9k_!xZeF2ZM*Ev1Zv}6tD(S-SnS-GPh{vA$p&~gaW@(GwCpAYjP#kH!XIiGv5nA8 z%mCX~^o0Ao$OTqI)0tok{Mih=RRF*E6(e{wn=`BtVU9fwiJ{YE3O8~JpAt}sAVWEU zdqvQMlg2QJCoKj3g5Z9usQ$)Ta*yLhQzDZx3~lGi4!QUB#}f0=b;&i_8!VPk@tH ze0<`4lrUcT;C_HkUOy@7gVrEiCoys+mq$2kq_Tu0qsOp@0X`0r&L!@#XSk@h%k(|0c8&cq+b zXdkcRIA(taeROHoZ*Fyr`}7!hYp8DGW!^>{JYx@J8-(a^1Odh6E_IA_=#UpUG=Ia`V_JjCU3 zsZNI?W0|=4UN=@7O2_h0>ev|J`Bxru{efknEpK(RxPzaf@;;G>i)EcHx!mB_jg;a} zHYb*+jl2A?pK}jTN66&|yO_PQKs-9^X)aDcO|D4S#pyoCmC9^;7_hg5-OWW29)Y9{ z^l9NGWu$GTB42E?od71^IHQ?(U8c z)icInsK%G*P&owGb#;rd+c*qwVb87!Z>!%KEVckdW-Cv9&Fp;g>t^RmbUC(}oeSym z(e+<+{pl66vyHxY()D|~-l5Ax-_y78+OoEsY{tSd)_$)i_+QYaQuwdw_Y7T%^{Rg+ zy3Fxc%jRdkWp3zd?vvWQD-bL41f*D7@v+2tD z9_2N_G(e&M_@5a!%K)o*OB>LqFO_#dU%c4*r4Ja8F~B}xK>rl`!)&~J-wvDAEZ)&? zV`pq|4~0#c&QN-^N^J1gw$o!re`vZD0_3_|dC7j0+g5LO9Prp^B81r|ujhr$(r1qe zGe3KY;{f!yf9hmv6W)1ZH1F^@g{5k=zwr8jIL?r%m;F`je!wnH=csE~KTKOickITR z(Wn@&89|(x5~G=vIr^)f{-ne1Ea_pz3BO$}sJHZ6;$XKR7UYph#a_+3Eu<#NnC;xS z`(xp9!m-ZqCy8G;rwk1=_PU+Pu0n3-6P&9WTT&!jhfC!MuW1mE2 zk@~LG!+l`T!+DxQ9{4n4XP+u>4N9eldlM=#(F~zTCL`&TZi+k!VE3Y^(^bNBF+m16ku?gU7IJKYw!XTanP## zV{wuqPSf&*J?i;)aWow9PZgRoQE#C+Q`;1KToKm^Et;StX!ves`TZp=;U0=O&+(^@ zrAv6>EB<)fk1`AxaWY1njFH(P@vt9vO%Ye;6j;e_WUSa4`9M;~9-4`*2wcyLzJv-n z>2Vqn0T1GB$GE8oeqiw8U4fBMf9;uN4qliT;IjbXuSF>FYJ{q*#sEJdFkFWpFO_~0 zekAMR+|a{GVCdlhOmZ;vaI%Qd!$|<>;Uoa`a1ub%!^!T_wi;8P>$!zpXkl3~8&|CD znRLB>hwAJ=T?F@FTVY5%?8p6X$LAk_B5sRa^!Iv3UELg@4)Yn-B=ysEeHz`PC7T}C z6>pcMRPFLVLJf#l;lZ$eOFcawt_z{a=xlRxXwJ;?QV#E^$-+&T|YOVEF3|yWuXXQB3p2$se{zZwS7)g$K^jRXQLariny~nj$c!#<9_z(Ues}j zplR6fd{uQ^PheKZbr{ug{q%;?baA#z3A#AEhWTTtZrvrRi+k!ZgDx(3)+G+5lgc=! zP{y$quI3VJDOnn(^iH#)0UjgsIkD~}TW`T*a$Usl2yekx z)}+;Nsra>lCL?%=Zi_CHn!5h15A^8zK#~-;tl=2znBvx5l2+h&ppHbd0zA#6{q5XPRu)(uJ~B{S>VJIo+VL1go;bO zs_YgFNEl5j|uN~yA&sH^OX?vSI&Si@+NKMbP@zO)^H%I+^#T@ykxX%xRK%;R}k z$Q&IIj`*3U;X`Pkrm}n8pt6$#bc0I{>$;Z6&;_odv(v`+Yth*iCg|)mm0YnpD=$H3 zM>Fge?mfrTSY_unsO;Fyo!9{qp57IHfabP7X5A|;3G~cyv7)VsMc?sTG(}%UlA=$X z3J|FqxGN!eExF!?XM)QjHk&J=LH>g`$==z6<2xYXMnU0~4L z8A22FcHdZ_>Fo?4LT~r^1-jlY9v0Wz;Z5r85X^czJV0-UFsZjI;;8d4_0ZdKnj9?P zb)ZywI|i!*0PF2IQSo}sdOO6);5_1bySg6=1$$4`9Yb>tan;>??gpGti8}eTRNXDR z6j$8=f&c+gtbXUWC}h0;!TkVb)g2xzTVCWK5x;v=1P?t_cU;1cO?&tIxb|+YuDu)d z`Zy+YPrIhA8_zH%|De5NIK-`oWHExxe&ylLA&15>`dmZkq!ox$|$@SG>L9=g^ zB2dANM(-D#0bk1GX>&fIuDc}Fb;_l$sQa$T4aS zhvi(-)OB4Zp{_gnn%Vh2UBiEDcD_j0|Iqa}x+d;2J6HY0?EEx6ucNDsu1D$GMAw&p zoLX1+3dNa+IQ08C{g(gapV!rmdfn`NmE!$&hG!{x;kCob#>+3L|9Ba_CWphDdEV}v8So_B3d7-`cC0(0p7Nq z(tEixtiDjgl0|C&`>biB3H^j)lhX=d((| z^1-ec@AN8CcWEE4z}2q3SpBB>5bkKalEzWKBq4aql*RfJ;g3&c4-#xC=vL#Vhrx?x ze>o@os4*ub{D3hhBs|%e6Qbm%%t@TY#W{IeHx=hJoo%}4IB*c%-zN_kIA>-z=XUJJ z!YR@%%DVBa<1M4MDGL$Jd2M3%B8?xv7aQIi&2UeUUKV!$zHJ+kCd`vGQjPIRGPX8& zzi7)fN!*3bB;jt&nIzmjc_s;W51&a@qh>zJP2jHCabT8J2y>2&`&rN@hFqS8aVY}7 z@bmbfbD9JD)7hmIAGaO%qiR@4&UbfJS7{hAvAq{z

      Wqe&dQS8DG)j#9raUlZNQcdYjH+ zu_>oJ^k%!kVvbOesg&wzwR1!b(K}S;bc@mrPsCu0SzpC4BGcSQQwvu#k(8*mS*&(< zvP4|&1j^-vmuF4Xnee{hXVaPNZuJ%OxfL48Zwk*lSf4&hXUyVvMjfqjjMCW* zIxl6>dy<|o8{Mr%#O2;Ru{xu15WiKa%Ib=^HIoW8S)Y;T(hk9uCfrlr|edCetDO!qRl=x`Q*0%tb9y z$4<)`*62Dny zoryE)O~l>#mA|U8CuP~~gpo!`mD@)SPfE3<>E#g_bQ(SFE7hq5X=~TAfKYjLXm@=x?>=n@oeLD#yHB=5seBd6FtS*&&znd#G{P zbOwiAm90$Hk$;qtI;&N0=65~Y#PiC->7rwFcKzURdH{^74)VTdq^Ur_E61rKS0(7o z8CfJ_R4JFHw+Tem^1HjCkSy=5;)@c#q!216#A{-ezuZCg|228-Ly)J*F&%3$S&15E zM|GX66shG$H-l;vDR(DQUW>>oe55&>gdiy!?O7&$?dyz{v#qP~=eis$f=poT6|PCv z=uK8qb=ve+QqWp#{4UouHd-@GW6E-nXj7U@Rqh#0%2;z2sePx*`)D-!>132SL$A@1 zb?{kIJ<4EsDTUhoS8;MEmrAOeOGGc5p1_xmO2HvnWS## z{wFs7n_sa`Rjs=}BDwaTMv)xB-&CgSCK;y5i5F<>22Cn&WsPHoRZlK7cz}JmQic|A^gHLCz@X#rKx4^7pF;fGfnaf)4ZsB)#c8bWz%b> z8EpS%@9d-7D(^ckoMf1^C2oLX0wqoeU=o^GvYpt06x)eF&I<_3q;8;-U7=Vg{M z?f1S$zcXE(YHU(nMgGUT!$}MW9&LRT4OJt6dz&ANnhdLo$r`4|rb>#XS1*|~qeppC zdQP)?lEG*&YgJw0y|T6ChO{Z0Jo8oulD^$L)&5nkKACz`O?F2^SnKj7cKEbpxHo0% zq~vDV7h&+r396M+cEkhSQD->Zw5@t`JgTPUY&DJw38;^TJ7Qhxbhv$*TI|J~sr7_nx89G&_r8jL5%bTSu3R6ck*edMyfZVrX{QqpFldtiv0O zNqLnHZ+kczRK3K#Efk4huaF-h>!>axIny6-q8ine71Q#YQrHTdB6COfYJC!E>{8c? zC)_umqow+FxR4tCK3%XlN1XlaD!~2V1Dn(7o^-Ngb{LrhL96W5>FirF5mbP^GE;lfue$QK zP*+ZS{h{tyr&sNgJG7AAUVBY$n#?wCznZVUq>(u80K497V0Qtu;KQKKz8(pUw)Y!-E%;Qd5doq}Nxf&OfU#(n|=0gmPb=eU~ z;$z(ji$N*Vn^3GAl-|Prp1tVM-!moVhuL%cS0=8Yi)BZxSSq28ygTCY=7puFDjJ>9 zK-2bJ@$9=pmgh1%T4m=tuewxyGTw${)1mekatm4Y7qz#@X}R2=3??v-AiMI+b95nSqkQ<4GTmC4e2j=w+eTkQQ&G_Vz9{ zvB+4MUgxCT>TpE5A~~ls5NwYcM@zb%d)t-PW!awI7Y(;%R(A8uZO=?f`VgMoU|ji9 zDQMvpmwwrfhc;#xkn=7f+fIF!l8h0L-RersoZpm8;`+8qD)HOe)LWCY4msIro%f_d1=PYOmaq?~3>24)yxs_Nt_~T3Z`OT^&q|B}?9F zB6BG9Y<}}x`PHc*G%ue?kg;FR3Ca!uMoHXelK_2BO#%7aapBvrP@le^_Uml5IBd>!1)?G@Pp!`W2O3OR30a||Ez zElXWu4)44RTd$uL^EO2yO%Hm!#u92?xlsFu$ajT4Hvd}Z%CBE8X89wYDlfG;eI0#> zoM;JWt(p6@Utw;WS24yJpHDe+II$iT=Y1@sF>@4Ao0*}^-K6wOwI&=-dE3sBhIS`XB#*UPngKR}gLGSkaVcM114s>AV+0$uuMWA27jW0CJvDGp>-{~Nn0PqKAe>C6%37f#Z8%&div_3KA2p8bJlZ~gm(^Ip7zbCi#+%Kf(v4?gJIxQM z<>{Z};N34KGf|@%X4aeeLYU3-n*YUi-;ZR&|Hr*dj<~&PqyX6jlswtJpEyXpc{bpyXKAH6G zNx9RBjw(DkF@C2cC&Y-c(_?}3v#*rfZ`}EkR?BbjG{zF$n*M+R%PZrlgF0doB02CF zPku2)E)*>;D=B&0ga?m~N_7O9gZ@w~>=%pevb4c7scn9hHzk=Rul(cFY@PLiKo~8S zvTdD4RkBf5$48Z+;rUBVUoaV$XBlu(+a6A)w2ZV@q}17s1+wW{D4YyXdV9P(sf9Ry zJIhqKm!#dE3ibqJL^6-1QYk!^a%}cR{oUB#1(j`Wk2|goLE$4tRh9!!A5=l|n6co& zAPUE$JLx8>pX3L)?{8CcvQ2FXQ(C~kX3g4EeC>LXU74Rc{A$1wWf$ewxi=^`-qjgu zlMXMx60DHgmZ=E)=7*c4G26qj^;Ig`wk{O!3a)GG4o3sQWQ{!$)z&pc1NG|iUuVRw zYYWG04{YA-tz27SdtiHG!)C8ztz&JqZF5UYeM6(yzP3`wEiEb}{T7WP+X8$Qsjr0@ zQk28>@5a}Hj9#E}EF`r6N>5)%ITz;SD#}C&Uqt0z_5WZ0hri?{|Gu?Gf1gvC`rm!W zo{z}8fZFc1WzrYkolWmv7QRM4?IDs$FS5P1Ci_0ApMAe`k-QtSC!I&T>u|C3@MqHT zW$DlTFh2KY{IK4R@;pA1<`sF|&}V;b&inH|SEn@nex89m-je3|pTjeDLgyoS{KsiN zn#X^d=B{-8qKx+{qyAr-^HB@#rgCniw@S1S{~E=&5}zg>BEF4yg7`k-y~Mvxyr1|9 z;seBAAwEd_XT*nyKSX?(_%DbbCGI6YLi}%uj}l)($8C)GPbq$!_%e#0AbuC|v&0|H zV%sF~zaTzEdCiT@q(A>!l2 zhlxK*{3!7+5g#L7MC}|W{soGkApQdJN#bj5+40!;Jg$5`Me$$G7Gs+sz8qb3Sd(8H z79^y*y97y*lJ4#h1O$|j2I=l@knS!KP*Ma&mvr|gARS{cU<}y4{l0(B^qq8Yd*Cq^2p) z&CE7=U*rbJX@HD!%RkIR#=YEsua$70f;E)qCew1av=S!23t~q>G~>36#}sJ&yHD9O7`giXQUdRy<*yqa(0bs350;17 z+55>uiqAg*Q=t8?9c9l}q{;hBT0BeCeR`Bzt^?-0{tcK!rkBx};P$^ml#g|oOh5lt zQU*shRp!Q*a#(8YDMrF4_!Ge#p*fq1QZwf)2+dugVKM#Q)?sAgF80K#7fLrOL-D;~ zKZ8dMkN@t5=sEMN;>Gt^QVE}?t;n#o#R1r5TD_DceP*fAXSLlZfP}) zau+GrlMNHxW!c56d&GcP83qeL(!7Ee9^M961yFUyy+wvZ8}B~)q4Kykvy?Cc^85w7 zxcf?Bgo#Ydq0b@myM^^dEW4#uuur?4q$s&wKuC5ohgB1DQKFTw%IG}KCg>9P6~ove z&rq&G6+cVtM~pH|aqISTjywAYtw+XPj^Wig4}K2Da@c_8I>K1B=Ou$csiZe{wxQ~l z`j+zJY|GlgOBt=67=IFo@$PBeBQXS|7aZwN1hL%3i@zhYQVS0M6$fL61l3C`4&Q@W z3CNnuV3otjf?d^kS>@m?eQltV@?_$!PkL6-!{iK6q~ePfCg z`NCt<+;oNs2ZgC}STjB>+5Z*9Yj`qVR;{N9);`P=4^ld8h=s`-1T#Q%zaTjQ(YxEI zcAdnBvmEXm2v!I&L}eFe7fg&2E5TpZ1JMIU+m&TS#g@db;&7M(DzMQ z@{c$WJiAZB?rbR2Uop(e?^;#CSa##$iO8&!Q8C76gm~eB4bk8Av;B#R_(c?~uu>R? zhb+pW!0a;WC<@3S&BUcFfKnJQ1ibN{SG67D6*Dl2{ z6$GXmOfa%aBCCbc?=$z9_M=;(JBy4G%GG>&5G*n(5S-moR^a4~f%wyKGp9`dK8jGp z+iY2-M=8jsU8D{QlJu}@d^4Mj#$#H18c8XKj80D^3XmiU5HbtpPMq<&Bq(bXANvw! zNkN)hw>mkhI8+%iT>Q?JGrj zlzRnCf4B6djLM@7>K&D9cuzJwL>`s{GqXez_o+b)hffn`iQSoHG=n8QHmi9-TEFsO z-6%)t(?WrwMA1}=0u@Yg-^eVZ01+8RruZ|U&fHT$Ruj4tkT?*^-Mjy!8$(IQQ~!js zOY|k^_Nl`Eq?27oKWcbZG5*In<#*`*= z+&8d7l-gY8YwUqkPmxEYus9iB_}(Q^h#b@a76;^kOTgkT$U>wa6*-kb&yaH@^QGZo zN22p$gR)Tm`RYreZFcxeR737Snny*kcmNHeTr3fQi702Nki|jHH7J8{k#juC0&&PY zB>^%EEaaS~ax-d#kqVPRS?`Ra&A&|W1u~81$grcN3ir6MBfJVQ>f`GQaC8{ToXH&~ zc=AyX|i=;lHE^R^FJ8icFNQsBxZGFkBM# zns{?OD&8eDp@y$Ia)QOB##<60=Ugkq`u~G3@*n))l!)@qMBoeL96<#*BJ3!o0vr?O z5O<`F>TU+D-C+u>K6?0zv?vOj_d!(|d84>MEp?-~P_7Ugl7&{wRCl6AQ=Zp>#Q~V% zp(r#0a5PlOxq*qCvse0$DaUzplp$3|t|-6?P~ZQ+2V$d;l07k_N|GnyN2|ems`J>e zqoE2WRQbH3@Gnzfvjfq8;N4IaRY$6SnIu>PIUf}}6A<{1ieS=hbmW|Ng)AO&&RiLc zvJY!M4KeA<9)nObyLtp8SPV?vY*oa;-V zETK}yM&XM*`VX1F@8^i}*#yD?St!l?CsYNW1ZpNuWk1yDIP?1dVgHSXC{IgBMYSNA z_kfj-+*1{!G($oEKku3U=N%VO{-ET1NmNX}P4J)FNTaxZ87TIDaaN9_)t_wlcZ2uRGElCf9y-S7Wj<;y~f!419*NARdTPx>lJ9g)Fmz=>OpRo+IbRl$lUu*;Mr5 zBj;3=ko=E*G1mft#E5dDBm^!>4B`-KMEPAJLi#_yf1>}-@53k%>AGt^vilj9W|q#RpvqA|9Or(YBHyJ5New2iar9Q`|e{BBTB>SivQ+M zQf5Lq8S6YKChSPFI~&3HsAxt0gaU6x{Dh5i4@;=#Wpf+f)7P7Cr++J$qyU2lfxcQi zzojDfPs$*HRbiRh?_9jj!+HVhi`xeqosI@08*OR730(uZS_VaZ-dk)pDJC@;%DT&X zKPcQEHmR?seWv0AZJnh%5m-+?4VL zT0Z$NSKg%c27U{f@O zzX^edftX33S6g%2IhvwOtbD1uEeH0v9@Z)iemNx|wq*_iZ~0ac+tr!?316olAz!=| z_%d|cn?+8L%k>gHNNSbU4iRy+eU4b8I#Rl0fvTxb@(CTT0^0a5uN;SK0d&9C% zYkr1g;^`3lkwH5?Z(eGM8GSYH0RDPd)p&eMCwmOK-gJiXXg+wIr!^ILoQJtAXE`H- zHt(>Fr@t}kT?F1H`zGOT`|WU_ht)sO!RiuE!|3}S(rrh^Q%D7^hm}pV$weCKOwpzX z`L~u+R4}V4cwQ(ukQl6C8qNKEnZ9W!;`+0?vBSYtv++sI9CH|(6dmL8RXCAUyo%B< zO^isc=-M-I$jsDs+_RNg@I%OxRiEtd{Gh{`B5|*SseB>(nW^N33O0)XGw+H9W@?60 z&q$`kg1LS_dGY0nnDNK1l`}6$MGj*LBQayUK)U_PXdXG;jY3+TkBHgvV9;n(> z^dn3Pt<$z^BAxWK*#b)yekW&yPALTnq%&s3LTe0}pYT6E@vwhHJ8mohq@^PW z0u45Az2QWwP;ef$&GQHE&iLbxlVTN8cPiZalvppg{_w{2whh_qffmg#x|yJW&@ofW z7~Bo_tTJ-=V8TVWmHWhBDkx~Y|0l~y=3!abmg;*0DoWV1Im&0~5>b}}z4NdubA^`; zrTO1wGOc>|t3%UDL3wUK_bIXD7+cJOvF~g79U(_4g zu8RJvAq8$*V20yf&_ia;!@sDr*kf3Qw0XTW!FtKLe2-pbj#CCFE_pMexTezq9<&et zHiy9{x|ogKa_n4pz)PaCh;06_3CeT;e7n_~YdX#=Tn5(44r0i4 z_Np`l?=(3a?x!lnygb5an%ZM$$)ZJ_i6}WMyT!4Xp=UC6Wx05nNbZn9wsP4}Q^jsO z=cJv*n?Jlg*TF+3>-5{$NvsVNByX7KLU=S56&Sy%uXu=Y9o_n8fI??py;y03mDLp| zqeJ+`*&n^C*o)u%ZQ2$m40<%jU!qlZ-DfW)CpMh)J6%3iB127I-KqEu{=$tSOkuYX zC7Wn2$2~PqcsY$0lH!q(PnjYA^dsXL&W6iCow>zHDUINFu8}wAFNexpezp?6=he`D zE&+Q%=ac0{2WhGYv;*z1U)%O*ht)NMFc6+%!_DYFD~2XnRb3YaOmbJg&gSAkoc6@f zcR^>QyAP(6)#rA5I3yO4`ni?vM#N8AZ8=O?cozQ_w{JMVoFLhc)2SDn1~`z0>H0lk^H zh1Gg^|2!f_?LjYgEcK3EZ;9R#^=^S38mb{$dq5&er(92lAyN#vx3zDsj>1dITMZd9 zV>!Qq)#Zu#GIj@kIW!*)1PtR7EoizJXVf$g&sl3>N^e-sQtNJryz*2E7#kFGoaZdc zo{qwTYLOJ!4vm<3f61VH*S@9{N$~9*HTzF6`=1-~s~h&m3d1CawgjLJ_2S*)WxAkD z?L^<&zY2cz*9AT-Sfd}I3!pjJ3!FJr{#3ItF0Y6nhWAofrZuItBQTZMd<`24a&ZTk z{UVqJp#uJ)4kT=e8GCzRfNGoLd|bJ7;|gmK9(qah(39SyJyE$oGn1nnP1L-<>Cg)@ zh(_RU*MvzS#4o3>^$Pg%{!?3sru9L>{_xySIYe6S*s9UyFB|EY(q{?1{Aji_L0A^~aVhvfr%NHYKx9)&2H!7pDe zAR9E{rM1;}rL0fIG{;>s3^Y)O(`=bOhYN?(oLk1}z>v25Fs}BecJ(ic_2)#XI@!RU z2F+vH7l^bsJMQ$wXvo#d#UHunxn8`Pz_>JDM-V?Kw+6UP$HUgiRW9XotmkZ7jak~5 zJ!iftII(*#cA!WXAfuF7P864E$@tqO32LH11cR=8{O;b^5C2mJ7z^R5W2!2-sx8)| z5bG$ew!|&O>6uWB2j5!KbYVHVP8zbA9ovtUvT`K$5q+o32l2v_97QCH9W#eL$ zifG}>$Zy*68uW663Fc2fggY)@0UMg$DpA1SBS$5-YMa)G)LK68wZESe!C%zL)dgW= z#6p(fn9q&k3C3pKA>V^5a49_R=f3cNyMNKwjn>YaNKNT(o2`7;rQz^7@qiCvYWyH& zCF2pb+A6lyh*ZnfY=odQn}q+0z9c&FrNX5h5E3N9RY?7~bP*UF@~m}Uu4;(V@+@uo z1X}R`>;D$=RPuDP_^&i;IPz$kjvyGWl}lu(`u7ti<5Q0wMY&DtlDB~{L^!eJ>d28- zT0D=jf61QinENJR^fz2uaIv@3^)-#u)tv29{B0asDEaKcoYts&Jl+IjB&A^ARZPL? z)V2}_=w0G!tJA@a{0iRp&ap)Rxn+=pfKO!cfYzD4Zga(+1NOQ zjEU7v{X@*FPr+u2aHzmuQvWq-`wCw@mp56##qPDP@pYmCu zH9yaeVtvjGb{ZEAbLO>zbd#Md$d{Q54c}-`u0A}qCyd#*)X#u{>iKT=6LEfbs0AmA zW^2lW6z|W{q2+*eKNaWk^XBd26awvN2Iy+5_&;cXnPSv3#ix;mrZO5{3H0`^pA6C& zw6s!k74wJUl%XlqTymZZ*N*-&)9)9!ExP%jpEeDS8Y066TIz0C+->`Y=+<);+lh|G z)@OtsoTDU3X|Zg_Yt3@!H~j;-t7{XWMhd#`phil%EP;9d37n4Jgv@T9@mGOg-u~5B201^%cm^b^C)dZk zOJP%tJfqWB<_UnYTE9ervv>BtE-`IqYnzoP4L>@T>(Y?ZnJz_$2UypRUqFvlwfk9S z5ZR9gW$xNTj#y#laqbyp>nDpLrmR>NLfdrHTfsrcf7ixO=aD!{E+t8^Vs|VdL>zTH zVh20%k6J^MS7)}KBsH{AYJLz z)Oo(j4PlL2x`9ZQe&>MJWjKa>s(W%Y&LA`zmD-$mh--O6nD{^+Pi2R&=5;Q_jW%Xl zNIu!dD*lZbMvURGgP@_yeWd&s8m5|v*PSCjqQl-ruJiU+9er~16$w>-RX4QyZH#5u zTA+Kp`GW6?H)!ZvJR1MZ50q=CPv@VKvH$ZMXQtT6VEl@KwT33+ z7?)C0;JD>@|8lwrMH=WJX~uhB=);Td?*l&p;uy$q99cC5hM2a3nBdJnF&OGbak5qV z-e0Clo`2Epi7ju6oQDQ>$a;vfeG1#3HOv8y!x+{>{3?y8qPp}^?3aLB%_xF(!EL7rCtG|$MRTy)S9 zp|g&1w9p@m@Newle>(wnbqY#_@Jwb#dkowvMH2R?%Uxnu3V03LRjGVKP|{Y9e!n#Z zLDTQlkYv!dg8L4sNu%TqYPt^4R7|FpFCrLmx z8&iExqtnwg=@K<31rBx8U)G#4WoG?^W@~n+49Pdi(z@sx7p5uN%l zs10COAf-V@a4b9Id(na)kn$rm-RcS|y>tnUcv?%TWYXML2dOp!tm=A$)e0c%V>Q-{ zrtb~=o|%f+tFk(dI}W>ab89MO8`E^tq9$*NuY4Ofu#BdfWRwYs<^lYDLCy8K zs;2u>6bXz(>7@DK))b%puLIq{T5$O&i_b%{>tEfvd|~0=@w&bwr5~`328c?|cZk#v zJDwF`fAW9jZIsm5j0dL7`gbZjZ%2frRi~#U$p&9*MK732svEU()%jH|XVo&|*uX>u zZ~QNWEL$mVAE$-iIWNmrP_Rs`ef}*mcSty|)xvI}EVt_1{P0Tf8z9;!+&*ix*Ft5{>6CvDRCp|M zbaEc^wJuE2`I8!y|Jee!p3ES{68|W;^BMy`aaWbL+EJAL8O@wP#lPpBe<;XH#ILe4 zIMbvYtCj`$UdWrG{Z4gIXgn~2>K6paHg%VuTRg5*9AF%F^Hr=xY~nz?6FBUWeu z$kd(_+>w@rmY0k`rImRoYGs?O$EA=Ai8!pZXVI1!Wu{}C+OIDUHDgDv|S^d9mb*8GGTvj195vp(sI;GP(O zXLGfODx>UsI={Cw4vybeHz!YOHfd8Lf7AE&&W|_HIhD`pi!E_K90n8sE8OSCf2}*L zv0DAB(>$Zro84SO8>yMl)pBh_$ z%i1m{99VWNE)&vt;Fy2ar0XuO{6v3zqZN8bXmc0t9tUDLQEs9LTEA5>TzFagvx014 z=K9?))b{&7|0``d_uBU5%ADhM5rR*r126eLBeQSeC!2ki%1GxNtn*7MvpvQJN;>cN zl`$~OI#NxLr;+kaJ4T{dbdcOP{^svip*8U;Mh*f&1@w^C1ZK^o8y+7qdZTMMfqo|U zh(Mn`=ry|3j@9!TNAH{2V`e5dUPA)gcu5 zGo0hE`0J-cbDOU1b^=J<)A7ftnQrHKz@izpa)|ht$n2kbd&i%poavq$WAfp6qZe9w z??EG_GuP8gh4bX1;5T%N?}g3{rahNJ#*6g?&}C60iG^3$cB3hF6+SPyJ@)W%^djr@ zD*MIJv-8mmnY>?8J91UdI8(EC7#>qY=sGV&r$A*Cl=Ved+iElCoy8x3ApvC>9iqnH z)$k9`OoRK}YKFa5w=e7&iDX$P47vsH&m%C~BW(CADX_uk$xb2>^}n&Om9V%2w-xks`oK}$GvMC|0%{!#IlC(ec*eC=^P@IRMADUAX4 z->0EgE;B5Rq<^2lHGuAR3NcD!+Ci0~PAFeU)YuliDSGC(8TO-I{FI4WJkPFF z1ENZG@9X~@hYy-k6@A)b>DgRg6cnd8@ltXtZm4}tm#n~kc6*V3elt?4cY!sC59_>P zq4U{|8eI}#8EtlTF+hH}md=2vX`R~FN&nqZARInKS9dfj-J#tWXI^yc+^&{d{c2A# zM5#c#k?>xGtPhq8w*8Jx#t^c)af-pmf_c6Z;vBm{k=ZBsc8xBD_nSj6wLt7=zkpfw zuvKeC2JPe1X$z3L>__RZH_wl2KS|x8eddF63q16j%GADN8@eVm4OifoG;JzBC-00G zq0j<4j{D4|7sj!?ab@Q_tq_nme}jeA1|)xG8|3oM0%XicXMXfr<|&*4l=Y{o`BOIA zomve*3C~hxH)H|RQ)KcW^YIw=a9E3ERJYZYRZS|E3?n*NVc4L4$SkPlnE#zD>LfA} z%kJ>D>&=2Ak;ThDN!}6)R7w)p3evgrmJNaVp94Fq`drDXFXSY2n1EZiJ`#Y>0e1QO zEOeTaHFmxTXFL25=s4k^dT5`ytiznJRft`yPJ0GJYe1bQh7JjNBA|%RHfqm^t)-u{ zU{O|biC{$Yu~PB;DK31hLJ<#6^s4SV5m*UZAfAx#Ot$KEkGRCrdRV;B7AeEYiR>_i zrKW=6sVuv|qbL@>q6XsIM}iCKnPJA;KF9wu4#q-_r82#{}B7mnMru z3k%;u6~e5L!>|jCpW$e7OMAAV*o{AZr$JJyZOOYoS#Exb-mHBM+$sum$xh3MQUIoP z|IwHYDN&M_=XUytF1W2 z5eZhhIHkPf2o90q0g`v~?Yy%x?RGRdAH7_kLq|X1Nx7T<`_6c^x$PC(U_^Wq{9S9Y z{mN8BMrzL`;Gj#1*0-(cu3mHH(?aNr9Ti#sxn3P4*2!>9r4+S_?|bWein-006}2>i zgG$lQm6QyZIPUq(KFD~s9_~Nsg*iBD)>5X}<3{N6V%D%PzpCedajo}#y=C&n`P{8E zzRXy*zNNKuypArz&lbA;8W$T%6bUaV1Mo|Hke_X;rbs?|x*Zop{aihSDy8n%i*!@8 zOsd3f#t?}*)E>*{4*jZmuBa+>)Kl#t7Om~k%HAemoHHjmM-G(e+ije@U0JsP96ezo zHeAauo`zzarX>@znt>wX37Mj#7%`om@yVh>7S%__b~VAt^zGk7rXN2VI=>`|B~}*k zW@lHLo_)g$5vm1eBhQ+?AQ zAVJs;tY7)(b$~UqQzkyu?I~sL;*JUL963XC*lZhiipa6djbd5<#FutY@2ln!(V-9? zGVj^{p>|~s;8KMlv%Pp3kYMA*wer%Y*y%iYnDklV%-4DTc3;YhJ+bFZ5vnoDdX4<1 zXg&8Q-y;?7m_3%<<1DEG_>g--EfDDEmJIo-J_RqICFUiUHf+Hs~r`u>}nT+2=sO*Y| zvSb)tG8tlPlWXq1N}4cSVb@*9h-@N@WNE_>bfSca6yo--Hn`(o!l9Sph!VfG%QAr3 zg$&n?%D^@y@?J8e43+Jq96p>ehdX!1EzXv+xY_qGkyrdq9d`EOTCsifBm#b$GLf81B z-LV7DI3Cj(fd5jam{+`x;Z)WFGp4T1tpKNhIAKcG6IF)js1&9&bdu1wgjEXm zmo}VwF9K6zLHi6^_#G{ljR9*Knm_j2aY_Mn@GLe2S<91YYB`UPluttLx0rsNA0H~* z4tHCB|C=%D`*x4z0MPFw{ zb+cyZ3@PZ(nC>P8G5mR92U%*o5N#SgfjJkq&^l=k7pOCc0Kx;_6wA!g>&DFr2aHxt z9Kc{Y3ICoKC$n!da-VK`QV*%b>H+f!cRV9LMZgpo>ZAt#eQ~$7)wafvRvnz&BP0ur zT&)=R5_(t8z6U`!DC}z~`8T?3;3h?U(}g=QFXG+Lr(r3y_U${3i~h=5mflRkfao`? zXIcDr-rq!$bci<^3#!%Q%jTS2;43BtS`UM0UwMWb(I1x%7uoU4IAgSm`Lu`2z8%oD zhxSr3T*L-NB=tu^R;_f^_WL%zD?`R(^=hNX+xKc8jEJ34Yt zOiN+CtjqC*?@PxC$I8%qI7dPd8yeqYhN4y9gyju!v%0={Q^Vq z35AJF+*1G|IA=bqT-`E7mmi_6aK4b&6O)u5GIf({{jT`LyZ^K7dDy6g%LjG$Z#fF) zWz^l87M>*u#>|wSYw{GTIlrsyzj6VOESTd`um+wh2r&B}tGQ5UU|3&Ud=~caOQ>vJ zT!@4q!zg%XT&)rFm+7t>R57P<|atc+J)qV5?={Ii}AO^REmNu>MU>zP-$ z3R`o_{Et%}I=?kOp4^O4tK)n2;Pq&c6oP}*v%Fq2c87Xix9`dHKj&nCGip&!W#UQA z-|tRNVKmoK+KqWVi(bP&pr(uV)y=bJA%W$g&4x@T8taoc+9!!=y>PT%)EeyDqvbTp z&IX>>5@xBQj9qmwy1R{C_nyEgp#GNSF`s3U{`I)>MSC{1s#Dna!#_(?)1H=vL(}@s zsT2KU)1+_i1Qp(nd-eK6RB349#OidSCW-V_sjIgQA*w|>yD4ErN2q;`c?Lh;+U~S*wDKCtXW#AAPKxN zTqXh1#(7zSJrc9Y%9S6id@b#-=M3nW7PRcsyH1o+ox${iu%AUI9R zP5i78;I&ZRL_{Y)t7dY%)b}Hk)t#rB#44;=>fnU(M=(`e(KEKMyv+OEOlk|Z1DoN6 zQU4CK_5$?;yfbDT9w}|&S5L65nmXk42^Xw6&$Ft3viw~a4G9P?OE|1H9`tf)0pyw8 z?9?y6(yK}YCz?-xH{?A76dDh0xPBP0tcohmbP)WWA8pPA9C>HN=I*CqHO2h&YE=?F z=Xu0hxLW}tbZ+4lh8?3wSa=HhG^OTbEMYT6a|)%_N4?eX!{X!8;o6J~Obt7|00A}+ zfTQk3;*e#+kan^4kXOB&(pcRCfjCz78!Th);+FSbb&p2nl6yHiz_*+D%NY2%mQNVD zTYFHuCUFn=8|~n}+J9YDtt|E`KC3tdh1M5sb|AR4UDR&H(q}xgX$@1u{fqbpqveFJ zs!n&`M2g3zA-7q@Y>0ITKGI=_Nx7kl-GGIn=m<}yKq#ihd4z5}qnDYwa=V@LoJi;Q z&1o0EjDR&A!BSLsc+{tUKle2)78G<8pN}hUEm9)1-eO1WL>TacmkEk-aE`4x zzjxRjUCn5%bBxv=lq*~B*Ehe=P^vP-aLGzt?JEG34z&?E!u?!mtuyt)d*avM3ul^O zY4j|so}oPr9do411GJ@dL|(=a(|norawos#dZ36pad@TN21HcVD&*RQk@_mvDXSZb z`)qWNe{B8vVXE!fF7Cs~OX?P#PE0B1S^({w>}B^I)=kaT?!nSy&{{RFgiD`h_`+1f z`_I&O-svyK`&u0K%YHwe#!u~+knLzgCbsVMx0raXN!R*|rIBy40(>S*Dk!rilFH?0 z3oiMy>Q%7jY;};~x2M8b`n)wffwwFd>klc|edN+XlC%;_ zg{{9jm%GKT&<{grzD(x+bBEaZryV`^M_Ztd>s7awwgGRUq%BW(dyKNbj4(KQ2#bX; zas^MKqF9-`OFWs5`#hieKlNNQ0pUiUw{Ezld*qwWN5_!=4zU75vv3o5TgJOj3Z`ya znIQ0da8&Y*5MPcDgwSE_MHr;~#ohSa?|0GLG9)|gS5LV2Pa^qXeHx@YP3TR`i?}~v z*{?gPY07JwgWc+}cjI8$9I(K|WdIHGV?%N-xbG{N$Id^Mw|Vs?O`mc!RT%rAxgD$u z-zt4ag(j43NLA}?3!{L#zoBgis>C)_2 zC8t4{$C}$YWS@Kg#AnLd!6RP?UAMAaQRNLvu&9mQ&sN$6y!=TN_+VFGJk$4Fb#*N0 zQC9_NFYD#KF}_OJg?Q^FS;|*VYn5JAYf_oti#D-%^xo26l3~)T^jJC66Cu_qU_(Lw zbmutZH$|CR81V1jWDxt!(09`m|D`19L8R1PaRfa zzv;D{_(iMM%O$GBqq3&2Tsh-3z*sKBF2X>c%?Amd#cGy4p=n!}>3N(O~WIhW_k3vONMuAYDJBUws3fsMMlQivUA+}%iX zS?`y8Xlf(#aqYC5^}yZr$Q!%u$z7==O5+0I9nj{Vz^_v7wcAU%8j};IaLKx)ay)fO z?iWfDxU~;C^8xMCx?hQ_Ydd=22WEjRe6BQ4>I_}-CkFC*{`avCH_kQCD}qskwnIjX zKa5GZpI%f3J9hc$W^R3Qd{!>JsTAAd`t~ z&T`6V!)5n!n%y04bA2eUYEPf((|b2&>L6aRtiH2Bc3~OSTweXJ=wRDwC;Sn^K2l^!fQ$a)ty z(vvbZSm08nl?0X}p1HqZ80^RSyl?IoRXC`IEg`10J9d6zk=(3vDpPCraD<*yqszesBNTPuj8$&?iY}s|>>Kw?nG0^MR~7 zzNT-sngFiX-|^SC={C(E1=RrQHFTc_hS_!hj@^LT-@~PqfRN7V#flmCaO1^}sur2h z%VrBGPuE7sQV@sjYaK{I*jR%2Y7sYc<5$9IS6&6M5ho=k64Zm$@Fh{^D#A#^P9hh9Nsi9^ca0YXvKG4^f9z|_xxVdmx8!c z^;K*o=MQZTikqW<(BYK8{vlOu$Fp5+FKL7CQSfKEf;(QQlZ!<49DXDMw8TZM-1YqV zV@C~|2VUpF9rz+_Zk7o)OO(S<*9m59dL8MCrXfD`Zph%rZo-v$BnyeH z!ub~ce(DPbIGvjkQwR^-7oPu%#XWi`6MIaL{ayE!el+UN{3Q5}=j+<~*EPesNwVw! zMS;vfYLd4~RVBxN8eDR=DvbX0M(sK}U#b5h_t2E;Zi`oMNlmU0e{8qwOFmBv3f@FV3X{d+D~eouFyXSJTwOp}TRW(}G3p zK7X^73mA7t|M)!+oAbJy0g82>#~`co@(nB26N!E8!-;2evhJaHm9^+=nxeQR%ppp6 zCH}WUnvQv<)AZk;c6i}7X%CJ83{{oO3RChF)?{t#%lLvYdWuW>JllU>qHvp((xAw@ z&0qxtF2zU04UFMgs|Zalo}gamih_4IMiRYG^u;2b$VPt~DDNjfDa%V!W4M15kcYLr1`MvsZ#-|CunZ)`fTp!!7SwXo5ehn>mg~$!O@9zPhyvZ>b>buNf*D$` z8|TsJTpL*|M(|cJPQPgid#~X}a~!qViP~(E(6(+2f=5>ArL|*n@D8`0MiH}0#h)3d zc>gtaZ|^o1s^~BWc6VMtcuB;SS_n(dAbx3uXDZ9r(%8O=4F&iypP#VbLHT6z9u1^O zmj(WDNo@AWgx*3j5AkRp;Nr<~2#v%h?LFytQ4BBiR|oQ3U@T`?m3Q!Y9BfGviS}_D zLJp%}k^CmYGRNsDV87_ufm|s&$o40mAmusUh)=>DX2;aq(icAX5)wr#Wqdxjt@k|n zIb1RJ=g^f75l7evc!oaA@WJO_DC^Hps%y8yG{za6^ob^@|KRi;uC7K0b&5Gt?%qR@+d)5>0z#cA{f9I9vho}DCOozFU!|~WY zx55!>9ToSW_sD-Mrd4Xis43#1;yx#*z$X!sMHyntp)q!6Ol=n;Qo-fgrmCpoOLz$g3Ngl?a#%2!721E=;HLzXm8wI?v_6X(6* zd?SFi-rnj5mW)4n&G{J}{nDoX6c?ZMv(EaxDERERNO&HNnTuRp#)xt9z}_pgLQMkf zG1;-2=z({iRZ_Q#7$@TL3anlx2nfCTij5{H{e)M#c+j9F5Vq77%H|)Ee>n@u79PwesyUi;(OOBuI# z0{vJ~tMOvrgHV}jq~rk>L^`j-9N>Qhnh(5W?t)EzPj3~KgDD@`0jmE>~C~AZJiG@m285V|{8~t@vB#kY5jpv=7eeD6{qg&x`JFTXKjujG4(2ON~dBOfi-#hYqn#J5Y%?D*y zSzU835wL9>!EJ#umM>}wl>H+io~*sUd=AW+0)vKv_lyy>_r9-spC*F6<~Ic<2K)r- zv4fts87I9BHn-jLDpL^F2<*^B<$To{g-1d;J{j-YRk5OrxMB+amKDc?zPO>fgi}zD zNc|<8RopHm@u_98xo!*gURUEuRHO@8zb)x1 zn|Br$=jq8@E~t+0#}@ju1)KCJxmTIg|NUv+C5jyiEw`GT9* zLN{GTon&k_eGjLG$9n>^2F?`IG`|WMki5337t;{w?D&`g(io5Py$KSdtl*iReai_!znf(T3oERP>FiO3} z{~9Jqo#>65=&fBx4pxV|nfroWPj${nF138?yhJa<3x|9qt(Mwfc+TXF70Hpn`Gwbp zuG-~53MJ=p$+`8lQ!+Zvmy4EobAsBYVMroV5_{7MHYB!zNBjQ(c|eB0P2cK^_N|ZF z|Hm7f?@AErbZ{geM3i;n--;5=t&irvP2(v6HuiLiA{>|uc3+Wv#;nTN|F&8BN}v7( z6@L|N`56XK6dTmz6i50tS7`1v@@S%rbBU7t6|=u4bSraE=}+flWA^*q^uq5OS1_dT z&GB+r>9#*@SZT=|RvPQSPySb#@*mp6-C!Dd6DyZ+)&OOtsQH0Mfk?>K5~b_b|rzPVlX!?=gBO8>oqz=m6cj@_WS9Zd2zsTnspM zKG!vBEnPUTZw|)t<>AN>ia{HQPyv}zOSlF-9RYP{vu5+50Cj0Mvhj`Qbn4P0K6PpC zqgu4eF{ppxU)7p_3$%tw^hOBnH!4oft6ito(lzrn+d`N6JR#SxX}y=xoqyWwRYbNl z#xVEq&2){hs&j84%X*Ya$klX0^5q%Vbh4eb<|P{~x2(4K^u0mP3H8Z+VovrF?ROF9 z9ig{&8l&Elhl*A50iDr13n~Zc_6Oq@+J+aiU)B|C^OQ@ZW)C}1V`P?6>GiBrf7=-J z?4IhVL3QqH7l=ZjU==9aw|J?sx@vK zA2&NH(qQqRWOdG0W@YKT##C*+Cq!-Ew5FIL{vRG0mja#EX>(9tR4?cWxAD8;VSq!eeSsCEEgArf4_(1~!NZr( zYQp%o9!YF+}4r;8~?UNnQk;U`W*dM?bBy z-IsYShD#GtE$ppU5RkJeR(0$>B?Yc|c&9KQl7qvG&L)NO?NBwfi$?PODH{v_Od zF}E9-cv(^2rloB17#^nSTa8)EX_F8cLb7(eOk#B4eNb}VrfXuaEUXXeJ0MPG822t0 z-ONdrxu)1_7E-NaStUs7yV6x}%ss}ZPtM>p#v{kf)Snp-o6ivEe*J6Xe!SDoi;BhYkO_?Q0J#H>X8wd1^oX0{jjH}0jC3h*0|oL0Bvw}^-e=GM7x zyv+tFsnV78>fAoZc?cK*6o#265kvTmg6ta`zvsA|(#N}zO+B)gPLm#GMcT2{1-#AV zeVstkVJMjph@W$U!4FgNz)N%PCMGxtA}za95&M}|9_zBcoE&V;v70OewHwJc92%?X zYXkZR?ro7)OJKu(KQyy5n%f-mlB^;6W^Xiq4u*|=m|?r9i_kek2=)GOA` zxR!#|2i2df)jvZ%5<3Ugv+pP{UO2+XONW=!RU9=>giv& zH@X{WZ&kC8g}EZ4_iCVX5#WyFBZcv7QEM)-31MHPSsLhos3vi2W8;@uq|yy)Wg80J z&vav}H1YXpBf|izv>RQ=aw?DxnqKcOUX|`;&POvZz7+E&y0hg ziLOyfFGF4nGM4eMVpumAL_xaU(C(rIQ$Fu6ma8BZtsbzf z($~^1T6)1uIuI+&CX+&Rs>4ewvBu!TY-j01PFLi-RS+PnVDwD)#;E<5y8Sm|+3slg zfZ(D)tZ%j!ndMMI7eK9#`f2ta?YDs4!p0va_3?hk^xX%&Y91}~qG8LxRwMickcNdC zO|(|qH1xMJq&S;~-P%BcMP-@34+N?pCvbJ{Wjv)P@`qn#*;+v!;=!QaPCKq4`Eu1K z>sY)EbM@mr&0h%G^rJ>$r+d=DOUWW^w(B3Z3m>9Qn@#%C7o%pod^MJDW@#{t&PGgM z@^1F?8Ak}&A=DgP+cwdYuJ$Yqmr!eHp6n*mA+?01oiq(P zzNnWLrMtx%qW0Ou?-B4j_ks2)doe!g9YIgSly~F(cs(32!GA$!VBQ5TYeMVnjk~hg z5y5hpbc8n{PHYp|i@u+}FHU>a{LvfT8)>IZZriQ({-|rNzjkN%ykw8tYt}4&h{j^- zcNXrbwHw1(d_2scW_wXO3F7Z@LP3|dPfxyYD)T%Hc?4$>rav?%k4|QzC{ zS5q&6>ikcZ5;j{Q`{TyQS9g&8v%{8w+RS*4ywUR z-h9dgVOBwyji81bMaR=O0V*wH?Vga!s+|ab&=*eIubs}X-u<_endY?`V3Ond2Mz*HpLQIX|*(Xb^GG}cNa|i zTtF`&=#<-?fN~wR|A&0XASt4^IRY_zbu>@U{}*vY9zb~>E1XUTcpD{KMFoqtGKnk+ zU7Q$fY?aHs&^`vUyt}Q?r?0nc3|&Z-Y-IGC?Xwe4h;PtM&+xQNHy9PQriD)313G^9 zA-{Vk#xM+2rtUs8YVSe1QH`)MPIX{B^TxcLUT9ErX@{yerlB)!+JiD$Ep6A;V;TpP z{l)K6PM@cF>VuSgP&B_MXQ7?0KE1K{NF;8Nnbai>gJSkknmJpr^@v&r5~|_<5FI@o zp&tHNB^?W$>&G0`N;PPE-ltzd4?wu>8CKOjKPyz{4&n{)Yb`+dD7*EysZ?21-_xSb z*^MalF|v8sY_m(bj8?I8kb!>q7GDqFfMmj~yyS#1bT8d32>%Mg`12>y?JI({V|`;u zW=~&Kk(VOspHP2`4!im|`)I!7rxmgx$I+qlG|v%r?jMw-J&|td%kzsF-aaqj6&iZ0 zw4`G&mCL5`_Qz)9`p3n^eslyYG&s82WSWQcKH)z0?vN)Ybl5T&(3{)&)#s;uCN#2mUi5FU~+ALXj z4OcHTkW6od?sc@eN0jG#M!~cI1E9WM^K6>FpK0Q!(O-BopaL{T#D9H^Z2=C}22E>I zWjzt)U zDxgn@9%Yvvd?MNrZcCwR5vV@hX`&k5kVLiXdbszVa(xY&<*k8?zA!OZh5y(n3iVfA z3%Ty|U82|b)S@?P`kOAXq|huT>$?v# zSX*YPR`@?{c4KD(5qxl`s*yT9pQlq0M~X1F`Y}fDrD$50aUTkL-sC45X~%o@uglc= zYmCPYUV&oZbnEm$0;-!Y;YYqSrw)Iu3Gdlj`srneuT@ct$P4_y${JLqJnU~GnC8I>KFouEnw)gc`O zhZ1?ClN>7)u+gnC-%SvLdRyS|VP;8j)q*g5sebWh#v0FmNL_t^uy7cP;Da@|Oy6m7GdFfBHUSE@_e)g_<$)Fpe=B_DhB zkK^Om8u%(hCM~QO#jEdvDyAhaa=MK;MqrMJ5cy*%%M>H45SMc%kkN> zr`bM-5{BCeU=?qL(_1R_{2}}`e2`iJ(D}9rwdQY%pghwc?E(q1lJBt)F2`4W`a-&^&_b7{|~Ef(LZr3WizKP4e_;IiJtEYbq6vN@Uzq;7d?9KWGw~9yXP> zm}SP!zlxL%DVP<;2QuZtRLT*?a+$I^m9onC%U?-vzTM8}PKDSVbVxoT99ryEL89pV zWIvrjmpUbd4X;j=e$x(|l^Y1U1T-w@XZ;$5Vz;thF06GUD7D zjfZv-b?>p$6pmMg1D;Q({X~nt%p?sIf6BXHU*rpLG|P5%$^Bwl7~qWobW4=s`b{R@4iF`70W_kWq8gx_G1i1cq0ml;`Rc7D~H1ivH!&}xLyXO~HUd*3k$ zP>v_jsp5ZSP32|D^!tq|FY>O8Q*w!55TrU4k33?SUdlDE+XSp7?_)TK1of|&C$!@2 zWGMUPZec%t_XMp+e5%fQiQ6(?2+*jwxks~!ZioTMvV|87`CuK3PMgLtmHIBcCq6|^ zAWMiFsey)mBOudrf(!2o;GgTBLu*R*#i0$}Xm_F)E2w`ajDV!dodT3?| zKZCCLKFcE7ua!4Y)Ufn*uM5QT>!Ma-p2$skT4YN?_~IOyvWq&6AuU0gcNwdu`Ub;# zFxk>AN72%+x(a2YDr4GCQTD&s<+_HyU>X^Ekj6F=?7`TjJAO-4^Rkr-fCG_LcBAtJ z%+T!rkU4nYk;j<6jfh=Grn{Mur{ey@RKPU0u#Oc5=n6N}kB3vvZ!_~p^M$=|#1~?@c{6nsViRabd`uN9tqaYj zj}|V1pug{VIra%bKj8TcIZf-f#tfRUM#ZomwZBBW9%>#XB6OUs*4)Vt=Y%id)=lP& z=D+khahCB;t5`tRJTEgY>fGsa3kuuUifAEgMk=4t)+)yWF_65ukY~S5YAu<_yl<6} zCVFj$m?orm*l0htERP82+l?E+5%E`!%U(A7812SiMt|NuhlnwBvvKYYvkOlB&Tvrj z8MLr*!a8mFvVXkv(o6gelYqlt>6;qctTFq2mIiO}Dr5T>yb2suQl!ykGh$1#`E@$4)9O4DCv3BpW;5HjEjOZ@OLNw5rBGOQ;) zr+Rgs>N^YT2k86Lof!oD*`K-&yzC!g{P{DajUO^`Z@ae=(%RSTQ0g!OyZsLRTUEqa~81y>v7G^!Q+k9-`Z?^L$H??*I+gw2n8se_v(Znu#DdFf| z=WbA!*t2OkwXCEoQ&vykPY7@Y$aw76_iNGIEo4%umQn$g2m2h$QfnVf2pw>tA{N(1 z1=UwjEq~nr3u-hG!v}b#!KZgX!;IO>=m02ag|PvvMbDW(fN+7*d27sWQJ3U*(+_B# z_XgGFJErgOl1;z=FxN1#J1wZc$~1_--)Z`l&t65WlX2A7Flvg8p?gKgh=ncgjc8n& z3AEYR2-!+?8s!HPdNW^50UdOxbXus}E)G-mdh8o0uh-vw@J%<$Nm5oO)a<>$>XbUvU8bQ{bVsoP2Z>v~} ziOOxd9{U#c$zPi5{qAl0=gf!f*cKb`1b#=2Kd+?Td@L)x!`%?K(H6raRyq%+_D$xw zc_}vLLCBZR#+!+EFJ6#j>AT!YEo#Fqri z5AuUmDLxRrStG|cF*h?tEa4L%#r-1o2s0AfFKK`X?*-{5f&+R7qTSsaE19|J+VDtC z4b?!dV(mE?RIeZ`QKU8~V*iJQs_fqQx}sFy@;3gI4QjR%p2`Zm4D`~h^A^-1@2so; z$aT-Vuvk7^>XHvvT|^IR-awlOuTMNj3dXN}7+!MmKFpO%RR1&SKn=9~O-t*o_&^s~ zQyR7CJ+)}-L9hCg9S7B)ysKXQ!L&XQg)%P$Bt7})?~m3VR7Y$@g6Rj&1vS*=IBUWl+wx-s) zg~3d?dJl795IZrt6trp&i#dzMC5APt6LC=oXGO2MX39Ht6&_F zGESRGB1i0M%^ft!IAU8if(4fAIISAc_8r02f~U#emqpCLzNIy;@$w~)Eq(H(2wk9A zBxEZhnSHYaW3n(dpOK|5OS%J~qwwh(X`SV}`N__5bOUt~bdXJQ&7OxJvvbtTE$E}9 zw6B-FKwfq$$|63C&3A22WI@>NnJ%~t7(|CKUC*PQQzPugzWv=9{(cHLcZ%=P>j66IzU^t-t?35IP zgScOp7-*EY&VDvIKTM>deLz$s3Fs~EL*_7HFZ*FbMTD+cCIRLNx@KaG=i%Z_rb(P! zL?zp%W2XyIrq)hmD~6CtG`pH7@MM>{AR(FWpc5n~(vmnKIggQCM@Tk)FOp}ZBdO4M z){OCNrfXQ}Tupjs5!p!C#Wx)_1-~yt@OKz5y_qKXyB#@QvPgQeFFV9Jio@99PCFue z0x%rTvS5(fMu$t1`*@kYnFcw%nMQQ=m4r`Sl56FbAs+M9<=!Ngr7ef$fcQfC0czjyBPhSls?;R+4%dA4lo57RS5P=&;GgmPN z8gKlJ_BOAH4t9{8a|I6ohp7Ro{OT(wys-yz8ry98R`r#S^iR+k_^xZHDIVh&RB<}& zi0&Gv%i2qYe&&sI=BRVYuhbXo$Ge#Pp2KPlodXCCXQ$OSd0js6W^zI7W^*>}qx-SG z@#==L?cc&vV+JWX?Q}FmJSfL)9~n(P)1sxuW#94jLnJQ#fWawFKB3g(*``O=TwA27 zY2k6rNAn21uZs=J)cZ$qVmXjkTg6B?A}JCo2(1c@{NIA&q=QkyfZMr9^w$Eb5M`ig zsqx4gLJ^!nUls^E6&;fAjqJP|QwZZnZ^-r9=Fkv-?at6dIy+`3`7h00wTu^c(zlJ8 z)ix_l!X`wEP|1VkhtCl$U<9P1!1_ z811jqkIZgptsIXfB3w|@6FZ{ycCKk0cGqsW3|??J=v zf27nYG9!4!FLv(o2nAjR#a>AM6j z%qmg#@vb8jJ}yq>;is&mT|H1sst1Ce8eYAszW@7@;whpA|T1vWdhD+g>g z=DsdDcr^wmc@%3Ir5V8&#CB@>e)X07-)Xjfn<=)!7qu_YH$+zEM0Ru-M_&=_QbC`} zXhUI_7LVrso-8q9&={~;bTnJ3;r@p0RAgoO>wox8XtnlVWGWWh;&PzroG=^bwnTa% zw z)K}J|X|ic!wJt8Xm$?e_Xt>|Re3Et7Z0Z^ZzzvJ&Df%L30)K&B==+q}e0GbXz9Jy& z!ocpe+4GR6AHLETvHqE#hg=`~Vtw-@CmDRJbq!Yv-K;74o>ZnfqC! z>BA{+E6+22_e<#{%LglV8fW~995WA6r^yR{z#|1YpxDG}iQn=qm`j;HN3fc})q=sD z>Mch%%Y3ez*JF36bK7~6&;Tav029(loAGHUlDDGD^MbtOf?CcJU%Gg*=TsR9e6isp zsDEHAeL!vxCx^mcMN=Eb$a7BGC&Yd+vOaj%oxER6ol8SI9X`6-=(CQPjvmX@XI7V~ zOTII@uj6w!@zK7Hw`WCvRM1UWBS}efXEcVwuPLOUUfB+gSB#BGHy*ZdV(h+O9@> zMq=c(rtdc%_=V6^7E10e&|+Z_b`O1v>=TB?@O8rVHPo9dc|LYtOB#FjH49@;5vHQZ za|a5Ik4^}4^PpErKJ$^VC)sPncE2Dw7tj8BGp(yM&t^lcl;mQa{!Q-5q;NJ^Q!4ke ziGFWekX~k$z+h8^zXTdX5~mg)rUx3k}^gZe36F zXW@-uVDd+<6w~^M^ULUBuVwTHLmHu*VIc@tfosB-MLA_{LwMWlS(;K!ei@;&6lL)M z0fKG=Yip>7__Bnrh#buhT^c!RZx(7K{R^Ed=Kn$!(Vw9_ZU3m3yK~nFyR_mTGZt~W$|L`gy-W-4*L938}6;?50GOndGhJ^~D zOQMJXYE3Mg{bs93Ee?rFN&VTYH>)+j&L)ZYEJvi#h<%#xkY_)wm81Q7E8Dfm*`1=_ zwTc;11$}#;UufiynzJFy>>8@t2JD_7#E=y@Ig_eQ_(!DTsPJT{D}DLW%#ZP-)90rf>Divy31uO`!#npQBSpY z5)zmwgs-BR4uQH!KvHW4S{V$rzGaPQVhRaQi&>lSPbnLfG$5hYkSYbCK{XVdQFFCj zOic(d9Xs_`MAJcO@1K$67lQfEQ^M|!Cjt$~H(MB0L8BVlm}F8>t$l&-u9(O5rm`6O zC9iUsJ`+8$s{Pwv32%hSKO_qsX|&j4X8n3GPsS*Md+hXb=~rpejch)|w)%!TyPF~j zXzW&te0!JQtdW&A89_zV*{_u_F>UNG_+1wf>XYj+SV=y&#NXn}Y2M_Li~rTF@rz`9jf{U+#=j)vCyH`T z*@p4^@$n{6Yqgf#J>$GPmpY(2-LEd4&&BF3eBB7WQfZZXP1op`Wb~p`G`+sWmSG{n z$hl&EgXr#AISP-<4+wr?QI=-7P;0l778M(Eocxn`!OWu0`4uurQ_wU;zs9bJt0cH|FTZ&9yxlp|NM2{$QQ@Gkw*4zM`Y{ zAsU+&$qLb0&-k{Uqz+M(#Ty%H@dyT*cAGCMTnh)q>~B%xScNqU}TipoapCAK#ZIB}AEjY8G}*TKw`sKU}3q-vpN6KbMm^LfsgKmxyrDv#B*j zSuBWcp>Ft_rPj_l!e1#r=D0KP2FUbALMlF<@1T|aNe(X-lPN0AK4r2)rP-}ahTttm zCiNxUJZ|;*S-?kCrSlk^cNu4vyh(@W{gvmW&3VSt zzXL-b>l9AR%kQJH$--_Lq5MdP_22f;S&YE&qE>4a}1$cU%pSq{Urh&)BB#FnRlH+2&HiD-|a$M4QdXI65$D594GRB)u z(L4+`d_57C5Jayw9HlL4&7;<&`jMnYS1KiktE)*8QTEFIQp(i)^oNXB6Dc3jt}@br zapl*z+}YpFRVrjJ-l%`wU%-_~c0SdwhtJ7T?*K4LvbBi2$e zf*X}1{#PSbsx@AxdUtJ&+CR(KMV2%MsEx_kmt-u{s&@MK4O8Qj=i3lFzMIC5wLfS4 z#c-I64bO<6@TP(#L}O{U>#KV__s&oeHbTe4!sVYT63@>K7Q39#!kv)zRxRL;t^j+ z*5Y;UL-E-ir)ub_$4}MJ_aip0A3tdbprIxF%zqRAR~7Fjq)@r6sa5r*V&sF7x}`X#9(`%dS#u%FZAjVfehg zso5bMNCqy%U>SRr?L_3`QT{04y~PvRL}-TaI682<&?9IPZsaZ$u0?DulYTkUwSSRS z7`kTQT@)36uU)LyjPkKDIp#0JONhKv*?J!nK-uD8cNuvGC`(89zpaZ}2V*a@_1c)T z6p1C*Vd4OKdk}r4BOE>xAraxWd&NWYDv%r^X;kQ}bGw6+&WUoyo-)UpR1UXHR$Mok`PBx6~2%-B4 z;d5s&%a33b_ZxFwWAmNfs?@M1hB^BO$TvSkdSx`ZFK~SM8oeFi53O)Xr zPKCQz{i0*Yo@LgeE6fFJ?I*hh@7($MbYbn{WyM(7q3K(KbQaBiw=J zE|-}74_^qdUvDzT(&?ew^yftJn}q9csYUDoa@d9cE<53>HSFss7i5y&3{kP);MQ2- z37#=T>AaWS#?D(wm+QDgojZUI<)|Lu0)W30{rM0yYL+LYJFbIO3VQ*YzJw9a_{*(~ zAic9-nKjMy(w{m_9>rSIz;3~&U39-u{AwaW=Z{`e(-1b2hS53sV#Z^kjYw1xb*@J1 z^|kXDjnExrai@54)b1Mut*AP|*oEC@vHkq`ZP9)!Uw3dX`~2WvLl@B!Y`JGG?VLOJ z;7lg#=QHI!3$(ZldgTe_;y$4}ql$E0Bq+0)D6>9bQs&AOWiGP{T9hDR^flfVMNN7* z$S3^OxQZBnou9=y$ReKY`LwP;a;J_?ZSp+J#ZRw`e=51u8|Fqed&6=?9)SKY(ThSu z(Szzk-bjZnoJZXKwIcFu`S&Tgd&^^@vOoR1;O>k6ln}>7P~N>V?{oha?3%AImFu4S6#J-n8 zsD1k{^J&k&M9LDgZzZ<^nA^O>Nl|MY#xYC zKX(1#N78*IgskDutP#!q%U1^Fq9^cjB2HoDQ) z5)A(jE})f_V;O{?lX{3qe|?)tTO?&zSka93%%h|lJZ?i@_Pf{7IwoC( zuoK-q{NSx}$`Xj#&#Nv~!uMmYliw46M)tIL|7F3$*q&Bo40twAdB2?a>8&GO_-WH( z^2O~MJCIoMXNWaRp!Lq`(nPq4#LQXhlH8s?&jxXS7zvd6wrAPDfb1a{mk*Ghfw7vr zO`Gj}8y{xYc}C~p^p>?9{$X0l4wep&lGAVtIRX<^mL4(*N=wn0Uo2r|dS*|H&+~aG zmvHjx>)D}BUE=F$^?6#=8XK>>@)xguEWWEVbw8juZ{=g}aKC%6+?*;r-+Pj!fEz_8 zUs>9b%7=5X=MpbgJB<}pVxg&s)-QRpC=^*kDzX}zt{QjPw8&8_n;XVL!xE# zK-xa3)(**`<$zCbi}mZP^?y~|nGm^ynkMGA-xjk2E(%efe1g#m^$W!MT^-cpZeV?n z-CWGU2u6F5FeRhenCDn{2S&K^m`|~k$0lZxTaECvk*HVCbPYw(A7!U%h}v1T{yxy} z$p*CCTXd32{D?)a2P9XknweX^o-FJ@;^0zVPjMKZATn~yqSky(^Xp^KsP=JoUvg17 z-^Fqyvw@Mh0}y<+ddO^nFnQ_KbglNv=zK{9p@O}GCumXfbTHg`Lz)L zLSBv}uL5>XwNd0|IUAb2iaK$|rsgC!aer+z&@uK{HBZZwUR1zaZW<*fCrcTJr?v%5 z$>mu*Odm4556kXp#?ZcW+CO%hyyp=j?5%FBYtEsTJCl0a zOgzm##;&*@GrYjBOnA5aiWHaQW}m#PQ;a6O3YW(t>T=#1_R!lb{#S=?WT$y~Je}B| z+W(itbP3}+>Gd$eD3(uo#^=8zg97m70}qU<-_R3{JbJS+1~2909!7_F)oh>+LRumj zud{!YDt&$1IYSeruPqlwfrRek03n|+=y)d=~N=$pNI{#=lja!pxJ$GbdhCGU{A zw2VuvO<0N@LP|oeKk;Uz|53zdCAv?BPgIF?oTJv>Y!!|{8g17W-TMh?04-RaBboB$ zpOPC*gE!J}rdmV(Mf&C|!ItF4u5Wc8D*ilHM*^zNskfL!LH8vuB~N?kT9U|}Y7Gw! zo)2l`+ep_4eXVrDZu^J{rf>EYx9a(``9eN@len%d6EC_7ibm&MreI^MKjD}AQ<6ZM z%^UN%ES@GcLJoWw0ld)xb9sx!?>bGKc}oK!?JeFcvAz&k>jUPR7#|2#17n|OjX0H` zQ2tD!tPhB^ZPquvMcYH;{*y8ECo!{0%%)5*DTk4@N9SoN=Q;)D#C5lldcTmUeA0z_ z8{Wz%WbS|p_}00MmU&nnB&>U{@$a-b;(W8 zdZdt>AyWSCLRU;ia)7N?2>~22f_!eI8!5l3iwt$8I zCCWXb|Y~kQLF9E`pWw9 z=mU5iZ(~;;!lH>ZxGEd% zD1W?<)U3-4|2SR(eN*bv^0*8#PxzuSVMSf1){;8Cj4mq<7PsFTD=eicD<6&VByHy{ z_Z(KA?7=*lFoON%n%k@Nz3w&#L3)|r0x{o(d?bd*Itr@iZ86`#+yLav+`F(6TnwGCo2`5W|op?zSRWCT=y#1<;-xATGJEnbeQT1OS(-s zJdGwk6-1!eU&OqF`sRSK!e}PiKvreq!URc@RZK^jfG^CB}Kr3ss8N zTvC%I(b=y=hi>a8VtdQjGUME*$h5Rb+RxnNVec<75s5uV1<-OJ=G!#2ePCe5bgt9P z8}Hx)tT;`Ni2?_jt3+!}d&D9h>8!!%6`}JY9oeCCB5#oy-m$EdwUK2fgz1K@?xtg$ zzSSEojk=8=UB`~$#)PM&gSc4SH+{qx6Pf*eO=1Q0FT_PUbZv|T<&QdiQRorZoA(FM zTzq*QBpcs?4hEhf_raG1VxbEa*Czzx}5jy`Y{%_W`6ZOX3C>r`q+;u|gL8YR|tx1~+-}yPb zQ;ZK_GRp+Pl8<-5M2zNZLev+40och`82HDx34T z*)S<}5Q|mGCahqS*Skm4S@j5?+3~Ea#3q(+J{xs1zoBC!0UPwYlIsTL^KR|*u5+#pb_ zVc8dJAWXe^jNdV7CCI%Nmy4hPQP|i`8+-qT! z^*aZsONLtUZe!zw?!~A+)Qb!f@d;_ldUef$0UwVzq1S^ zij%}f(|kHsG|f-07flmknb?mIJzwmaGVy-bmO|HCU5Z90#h8va>~6A9^?(8;luKJ` zX+xc7`}AF;#3$HmJ4Qp7Kh zUfcDR_249d4WGp!D#8{{zUGbEqGV8={o;sNj<9&Pgx@pK&|+^ji2iTf?v_igglCiS z+b4xf)6-9;FFLL4;QbqYI?M*Vg&OeXj${K`)Y=mcD*oBb2DE``!NU&8!kUq8 zujeBY=drvXovDKTZJ*=r1%2Tr+G0kwZ_tYQv_s>x#3RFlbu zqIsisC%Tr!c|&@3QYf!#MRr8B!X;2t@)YsFQYd)r)7=3 zLpfqvn?PPQS!k?*2^3S7vr{S&SBSGo?F<&8Mb3>3=ytg%lI-^>X z%l6&|^pft$Mj3Fn5;{xZsjm#6n|uW{X}?B^aZbeKdY_=<4OW38OV`k)Y3`Sg{(Vh9v*j3J6r2XC%^lPL+@W|Azi%}hroVf?5t64mMQe&aVR?`fM{vbUKY)R_k+>@F99xAvY-vt!do@YRwvprGw6#_IyT*Mv9rWF5eN}7$?6% zE;fFco_c>j?yOls>fAO`NS(j*6;g+eOp>E$j>?`Frl6OaCMF59dC#!It6Fv!{y-fO zYSAy}iCCY@s?V-BpKbc=`R21-pS{3*&eCT;Yd&Y|vuOxUX~ywE?Ph&mf~L0YDtc=B z)*Rvj^!j=`*J0Luq7GkNDeAB>RfjXw+SinnaxUwTR19XnC~K0gtgA}~TN`(X2OB@= zzZ6^A2SYu*Td1da$TlBxghD*~Ws%6?-lor9oLQOhezP)ke;2b&{HG@*Kckr{>*M#) ztK_)&?a4{#t(3H7znG)0xJ1$4O9^R2AB+7<R0gA$gWeg*2>k$gnSi?U4`EubvX%JL=?WT+?Csm^W6*aH0o^@`Gi z(!M6H3j7Z8{FC8gIl@TZ=*CxLe`2&d$uQKk><((N+HIi=`E1uc$y4F#FBcv_3obkP z#$a*#TIP9m;=YW4{%z{MjDUWEZ`zZaYh%}!Gcun9n*E&3m?&|$UE(moeTdiGsNBUD z$?|(k1J-I|;3Z_yksdkve&fPYC#grQyG#DFMgAvG&ObRV z|CKU-=6&nYtS=W(HRzVVBtCr-=2=5GTqr!r1--cK1>|$nAa6kV^%?iYro)e%1pk0D z3IF55)4+diK??rQGvK5C3%axi;F&d^m6p##`BLj~KK-54dR#f?#;NtV*FbLhb-jX~))wiAL5P#_8?{v$BnAW4W^OflrUrfW% zDu=iaS$xk<`)#I-I-naiIy}dQPpNnn_)!(NXsyL%Pt>HZoN3z9z`itDW z0X?pZgXkz`ry}*d13|Knh=Y0^MxTq>7PQPFMAw6T{!jT})Ws?Pzu^J>8%;lPH}^Jf zXlinwp6l}Kjb44Nz9Fb@G3pZU5E-884(ft6{=*#xTO3p$Ii{V@dR$riIBk;9s+*7WD*vuJp_i}j zF0}H3wwS=-Sz$=9So%FjpnPpUd;2YF8zzJKYS53D&Js(;b_5fne@orAd%1y9XQ7fn z5+Uow?`$xQLTkTX;2qB?XTGDc&E{53ngSp4i;)15Zm>*II~Pbn>P9pl8U%eAEQU@( z!Aft1R|qfWz5jwMk}p#Vl)z@c*6aqWUV((%hl{y}Z=n6KB!SI7Ntcf+YUsifN9?RN&o7KNv2hz^&4Q@LQ8$WtW3zU4>cj5V%mq@r*ScmVN_7fw8X;v=oht_MRrq{e z7DJlZz=^`-8lbc_>!>;bC&?d)gYlVCsJe7wF?R6`j=#s*xisV2-BmbQK49{W{puYX ziH=Jo`4dQ8$o9u+g2i)I$sYS_j|k~;Q}LuIfY$XW98*=Z|6K;6|ztjf_xp+p+HB;ImA--p33i2$~EQh+@6?^ zbbA!nQ-8;ALe_coKS;%USjJylX{_Sqd8U@E?!$6N2h~pY)0Ti)49wky>wT{LM0|R{ zPM(|IjVE}N0lwbO>gYqYTlF8y2uC`DQO?r)iIXjjp%J(9n(@Q*s&{XAd~2-Pt*qJJC|Lf6(Z@=TPK9V z)10om7I`Bs{J-S13n4xURfpr>!@qG*bSOLSGnXW*prc`B>eA#errI4E)x_{;d2K4) zh|~S!p?yW+&rYEGEtblgldI(9#VGBBqfbiO$&>8 zlYZ}&w@>}guX#(9M>>B>Jq#&4GWtTYMw0cId0ZL_td^`a`ACJiW);n7=UKU0R8)BVM<}56 zT=$0~jw7_Bgij5+BUTmBR&_!h%RXg#L!c)_NA44Q6Bo^>;?|D&;4LSSP|3f2t@qit zOqOFb)fA++f0q?D2N>=Rl4k!k%MY$tJtzp66xVqukY+o3Pf;(j8#dVFr@sPxNP{Iq zTd`(^?FEL0+iCSRZH%#68D0TrM^G&&$Jr4_-u<8Z+h_lYxhi%c2B6)BpV2?m*h3+* zw+qVRRA}?6%v0?N`S$`6HbC=I{zQeR><1NC%Wu0rAsVlspui8MYW{BydfkirGkH(? z8{EA&k6u-mYFQl3)he|S%-GOD;xt~zU#|ASH>IZMW(tzf1jB6}3imdo*tIwfP46OK zT8xiK6FZfg2^O=>LkH32-&x}C@n)w;*a#`93S2l;m7iip0*Ofb#Pyu@cnARSYLSOC zgUJQyr+HWeJ7xZKyy-3bA_vo$ZPS?@bIa5k!^Huc41LUA$IKIYKl~Dkt`|Dsa6@h< z%k`+w4=qBF^6hG#D49eX`lV^=y2xIvq?Y^w+y5K^&s5(vqpv=PMqm0&7wH5h`TTI_ zGwK+$X9{g96btP?h2NoFzJM<)X*mt=omSMb}iHKd)HrxOJe-TkYQ zp(|f6zt)6z@kfevbY>**|C#&oav#N@+q`Ka)HmmV^Wwd*)Yuh;c+znLe!}^EV`RJ^vn$0h!^Qf7 zJ_GT)(q2uj&LeGRC*Re?@7w1O23sr$>(zC%YqAoVE-(4^xMVs%CPtE70n;y?23MOT zx2ARV%J(uxZ`8CKM2zB}F2HU-hWMR?$MEB834*OfJ>>R8AtKX9bEc_UVpyUraE z7+$oXHeA+Sf$xWdNDm|-^u5%vIm;F7Ek9Ur;k@KzI5UiI_|F5Tv5v`;gEG{}ll5ZT zCi^ER@}ui_;?sqgy_|K1{AK^GzbiV)zwo;0re%q3OBc}hU;Tq@wK)(Pcefe9hp%5- zTO^{R=g{zT&5a7dx9O3huya?El7Aazqnsyi{Jq?1OfOH8l{BnBBU_Pi)^C#27&so7 z%s!svdGPuc!j<+ol0-b((-+cW1hK-y4oN@I7 zEEp%^F^cd|9nSgeE~|QHzsD+(_Be&MeBCM}) zfR?T6pSX+Dm;_3;iA!$JUk+S-qMSL(u4uv7a37OCw=5i?c9`ryL*P8YhnGDq7>St+ zJpWjHZ7ROvg^WC?xP3Z}$u^9+KF!80efQXqnb67L@G4Wg{+Wh&E|mBv*Qce9yQc-e zr|o+{z~zjp^w?ZHx@3^i^d!kP-oT{Hybr6+#E31Py}CrC5Y+5cD3-=h^P%uJJn<{#VZh*W2R&xuge zT&WVEU#uTQC2V60g_STib;{6wGkIn187u@Z5WLJ2xV|kfS4$4>$v%L>uQx+BubvLN z<+7jcRKwna*&0lUkDdD>1*@dDTg1Dkj=)YCcr8x5B7iZ)mui>t7)s~(I{O8@ zfNrh;_i3jljjdglgr(X)zmByF(V9~CvfiKWS<@_K>B4p9hq*sc3vUz+-VoF@@R6dy z<;rw7e2=zp>87i^EVEqFN@Q0ZJK96ioLh@5ifc))>^71K;C*d@HKel79z~!Lp!|iM zLNstCq8w}Ldp=<^f72`0)!ErO!N+KKDSw{>AM(I7Z~o4Wb2#et>P7moQsr{cpmCOT ztYut$R;l<)e(z#{FW_V69`&kUmQHsHmNT0hlbh_~I+H7udM1CH8gQv}SAEC7hRkH; z;~5;6yaN+WaZL;eeO7+#Z2iJ=won%45K^`OVnU_U7S4X>zlqT_Ql}Uvif^oxfUr}? zdn+SK+9$=fa3LJ;8xZ4HS@CO@5&C2WVMVlQyi@eT69?cGClv zMY5P1_YyUC&o?0GuLJIg}ZMiI9L zRCspBSCoi{(o1gaZvEvhqddf(t)L<(0MPOpLpZSBmiLKC)Fy%G&w*9kpXDD(wVW0$ zS5Xe!Zm0ifcgUtmzq`~lxa+NB?ECI~1v2%I$F_Bq1ZCLBxJMZm3CofwpH`-`CeuV; zT}b|nv*nj>&?J1u+GuP*lQmYUj&M9`+M@-8NE)sy-uzmRgyX4jf&cvhG8Qsi3xW+iUZdp`2+kT` zn|&1Z^3Go`Qr<6C{{{HRyo)G2Mt8q*RgaMp8&xK3raD9YOAOxUjes?F&ZUy&T@1~k z#E|5!-%Vnl4Cdaw#m+9kL%x3ih^`4)`!Y=IbvbBeKQrei-u7xL--i`pywF`YFz;36 zKis~x>kefP3*!NOS=*V7YrdCsQ#x^pxTA|Ws$fLnlb&_Pu`hv%1aKTyTvQR>Gx~4L z^gXo~@;$#PfBtI=wj z()?}r3StAf0w`={=s6~qVvIj7?}!baC3ihpI}p;TY6%77tgchJj?3300A7*RSQS{@ z7Vo?raJ_5VO`CYF+rjC`g{%{&xG#Q=caPGpqWhc2W(;M08D+_dRLz8;$#qQAg6>$^_=@9$T$)@V?>&6(kIISx$3&Dx^O$jVp@aWk2#~ zWNwWXC6DYtb5uY36aFx~{kie*W&;x=y~u@*exWC@AiK8zN`h%C{hirb2roEMLgB%( z-!@8eWEeCf_jDi8jo$ICy$vJbzNh2dto2e1Y^wYx-POVoou90tRe>1wl`VxcmLn|R zI{d3t!fN4_D|@9evd~-p)2HS-FjpUTPiml}Gnm)claFiIs?_HVEO~HM+|(gy3LxTL z!0W3;n2IG`?+v2`@I%;AM0{e&4Q(LwC7}T{8*SlSYjU2Qb;&BbnIBlCUeWdF)`9g} z=6kxIP4^AF1yS8o!g*b?( zD3n+dCFg3jA~IjP(;nZ)1hTO7{H@{rl%PV`flRF9H(4wiz?R5s{dpPPb*El}A6-r3 zwMH|@se@Y8Rc>?nm0a|3XDyUG%ia2C*@9GYd|f*qKLvtqb=r^5Hp$#VM3`nB0^8nct3^ zJ!Gjj9#XC(BwsRQl9~f9nFNL%XMTX$$IHH2*d#_^;DJwdf~9*1eeV-B2TkOre^|s% zEg%>L-K*+j$=%ZscM`~7S^o3uwc^wI@LrXb(ohC#{`OwY2I(fL!CEd?IMIE4CDI7r z9}ke4-$py@_B-5L3Bg=6f17^g86!$QI#2OEcYD&e*#{YJ?isrF**a>15?to+o5#QK z?lyJl>|%j2c?i`ql6+=TYdyKF1SGkQN%9jw5_d4b=JwMIQ?rANux2FaWu)P#+W_v-*uCcR&T3?6LdU1GX=@h!Fj4ezZ;c(WS$Aw9Bs!OFN^wp> z**3=E+d#IZ=r7+##l9&gWZW0w6v_Mu>NYMDpVd_?ZWIu|>X~sSlmFwh-tp&lfq+Jd z7n7!@U{un>x|KLS^7n4TPa=9jzeu|R)&q1v*Vc?ugSMkx33GpGOAg@NuD{BR6Am(!&q2m`?qvpzZtA1pM1g|Y&ql#jtjlu*V+7kIe zGZd+qs&@F&h&W?KZhhiO==xPYobKs9bw`p|!l1lIh>ar%ee_ab#NGBrVT;KP1ypvk zgnV-RiC#H4Syi8TM^jKT!>=c>S4}+E7b9&evOHY_d{NX$YoaavJZkT=dfVbS1w7qc zNTF!{?TQPszRHc;!UvNw>`8M^Jq8t0_Nk>fGK^l%*(hF~cva91U*F{NuyK?H$PUG4 zTn+yP>Nc{*1asDWs9?2kjzb@Ns&f3S8VKE*je6UN-ZH&evxvSmK+SwJy$Sv*!DuRx zT`K_+DE)0|LZ|UTIn4Q+jLqsBH&hdKj%80(5P>cZP9mgERU87P-g-{Q=g0{>`Sj)! zXp}w#z!ztoi?ng*4>Y)0_(Zn=pitfGL&YrzvylTvdBoY+fia@=t_oxA4L4$?5U9C? z$7pM>)=emrHIr*q9K#!M>?wsk(Cr4X47&Az=wsv`GdKH`bc2zxg#zk?1Q;wrzw;WY zrMuoa7_A5Ig+dp4B zBNed~{muJA^Ey->VFx}^GF4S$VPaHknC6I>ny8VumBXyd2ZwjgKhfP|lLK-*Ff;Z%GL;!t zBN4C#I^5txgKblZkNMB_K-_LA;!C>qF73;u zn-k2FEB7g1jsrrCo~_dLxw3A6&u@Jl&@AFxnCZ5Dd0C%Sl_n@htI$$ulXEP0wyfKc z;dgK|I%GI?>t!dX`^H8-h@SaN$`#T(Q2I?Q`+?X(S+{xqd#FH+L!WaxH% zJlI-3=roOpR$QP6qQnT3I3EpAS{#vXdog0A#M03!pHd7mns;djRU5s)X{9OA-E@Z5sc0uaosN)3MFJ9f%0E)4op;8IK1{iU(j{Hg2fk6B zKML(iNM(JgL6MMZHy%2#5Pf<@?d#ilL<6Z@8-F$D0Rgt#NKe?MeT6_v+pwV%4Qm*;rm&%7!I%ivwh1_m$psVNX$eC=b&pWCUlhrjk)AE|m#2>Erm%xj;w=W?b!c zA`!9CLk!*xgvJKu8z6zG;NHx@~kC-I&OS2AlXm{+k6L?Q&&tnIj9RNjY@yL%13_Gu&XonYhBy7 z>2_kOqpa&4C5bO@F6%UN3>w5|AJhu|{S^Y;HG51} z;Zcwu0nNQi6b>W5UF4a-T0&GYlX;4ZUhItMPZd*<&3Mt~=S z!pImeS`h#s36GE{6R(?cV^+i7yKg+36n9$}d7KMEj@&u+v+Y$O(9Z-Yp(g}8W9AG( z3O+UJKk`8qUaAlj2tM_~zS7^&2Qn2-ihRKxsiP+k2TmP#@?G=~6d7Or?6{jkrVrpB zuRhUMy+{AFuCBv|__ZlTN7YL`$oFm_`Y$etM9vTC!W3IINmQNkI8wabV;IOeyu$be z+_iP6*(Gop+7Z>#dqc_)W(L)4C+<#Ka|ehZo>0OOka}>yBb5Rz{-}V{<1Q`oo!Nkd zpzY1nkQzJ{OMZ!rx{{8xarV170Et*~tVFh*={EJ;F+Tf4}k~n_y8pI5g>Ib}gshXuGO12~t{y)Av5=AMDERPGY zVOBfJ$DOW_q#%=Aae0K-LN`^fYTA^;aPEMw*93LeiI08Y~GxKk6@x7+lm<78bu*Q(U+=X!g`~`1|HBtdOM^T=G%k3^Cd&LE6#WOC6lADvU zkJM9wBrfvSpU8~!Mvv|hUwuq{&K+-Z%wg#)w(C?k=WSV$wvi1# zbV#9w^*Q0Gp-9)EmvB)IA8|B&gk@D5S~a!HyI-J3*vfyaq*{r)@UH3FihotE>-xSG zKZy)Ll}gboi{}jYMWgQlyFX_C^Etm4$Vy+BZI2Df$a*%Cf18=qId%_qs5BBzR{Zep z1jzO7jzN?Rl(oHnj8pjr_&xQpwIc*IbsT>EL*Z2+wyXkdp7qPhc?oaYzFK)?q_G?(=r;`RVm9+H+hMeq`!B4 z;3JBeeuZzP8(Q`)kn|h^wWRir0NgkpH?~pIR+RK_O77A=zg$cn{pF&}rK4+K%N? zoa7~8`v}O>p%#gB*@-Rz1ijBACE+PZjmXnYoe_$9r5BAGuEL`nmJPn7?$K-<(PtuN z_{(dg9EK`7`rXPgCoWBrbvl*AQ26_Ci&KA`2cA-L$q@7^l`;TnMIp`vz#Iy!Zw)txxF9}#Jc_nj(?54ye9sm{*5a9aANjNqiZ zP?cs?T6(pNn6P&K%Jk*gE!KwM=cJVY>T+nh~Z^}iv`oGL7y+0(u~s)N3CpsdSZbj4){`Q zMqfs|o9~O}pgIJRjreq16+iXab!&Cp`hx?KeachH;&%A@E?+V$#wGnEbSUI&3iU%{ zFh1)s_UXOVvTErun_mgtiwp>z(#8JPM66 zj8YsV7A;v;)k2V$B`V{zK|ZVNV8)<#o+h!KP{Wgmyt8!u^z&a} zx9yvsH^nzpZvi@fFKHbC%%thTjFIW?X)o!f%0BbKU7kISgls#SX7VEhqx`lBjo5cD zv5haK>xkRw3TYk6(Tz%|CFcPBx9~PZ;>hKD>3W*()T8;~ z!u($^E}4jm2E6_T(^0Nhn|xiyNnQg<#$M(z}p$!pSjm13_VHmQ2W8T&0Qj~7T)a@tUml1i0dRFmmcanBTL~k-hLBagt1le382igdMYrP3 z`@Us{9T+vdgk&40Clv#~PMY94aDuuJUjM>XJ$`B4;Yjn?PUFBQTK$f-`n+@;W}NOl z|DZI81@gtX`Ak@PdoYS~;C0uy6^3VDbneZplhzlCpeKnd9wpvI&K3wS<^X2|k*M6^ z_zhFExhDME@|a#hMcl^Z&V)=E?9WJ(j^Z05AGf(3L6>B$7K7x-jfxAVzZ&B_sMM}z zjSM%&Vge&8X1i@yEBs1sE3pqoRN^DhesDiN6H+GdKeqh)>ZG{UL}}i z{bnxR3c+mL=Ki~?&&8jILGhN}hzR?*0E{yc2qhJee2_qh2E)-RiIuLorw6kXN)z^B zoIo&W2j~^Y1Fx=LlT7)x&9P|DH5JwCZs4ESbw9!hSkwA{Nb$*OM0;f{3akla-McgNbDsX^2^Naq$J0eueWEv zPZEnw`w$oa?-QH9aujbz6l{NmNw63mV|iTJzkhv3x|+AU>esx}K{pbZY8=;gCAVd1 zYFoW+9P>OSpLDyoPY`wve8lnFn_`-%JL~B9b$rlWe_EUpOVnk=;oebv|6^haXkzUD z2VUd%FI!ulKtCh1`qE-2gR`Czc|C+jEsGz6AD*qKjsyraEOLdW7+>`Zh&&3e>$y!Ov#yx9tHJY;~^TCRVI zPieb4w#7B_8&tcf2gC+h>ghi8=TR%15X)`YRUKA@usP&pzoYRNWb1W~Q>)|Ap|uAk96mI=`*eBCxJlTH!Kd^L(-~mdIS&)9~zo z?ji+u@Z3AI{p5RT_@>Ib<6c0gj{Iy7?Mapu7dcak8A%l|qqHylr0;vyB~v8U7doK> zw`5FBEp1HtL+hL~xzV-$@w7V*C4%g`WyLQy^)`z%8)`Hq+)T*1Y3NFsPE04;b5}gh z8JLtOUMV|^Dc}6$*?1faJuj3xic7&6v>s|gOQk>3`!^vOPAljxujXEiqa9Hu-Q_$D z#8WjWBG|1o<0TR6hm*26{i5NvDETM~l&mra5%utvEeHD+3#8ApFD8SH zdAlhm9$vC}sX9;NB4v;fdk5Ig?Tzd; zS4Q%FZ{^5o56oFAAoWjqgBaLM(84iLhGFwIh_Byw-iATAW2KzNEiq#{g~nBD7T#H)lW!w(lE3T`;lO`8{;g_J%;5+%b}d% z@M{W(*W8iAaQxv8SHUo%oNF^Bit4 zzk^_=SmlmIKM2A`nJn@RzfY@0@TFpvS`Mkd|9C7*)ogDMcWSRjJBqEhj2n%EQjMcW z_32-Rrmsm04xYeWT8el!Z@uk^NL68iIN7PpOIjGq2shtn#f;^;YRC)mtad@ zYyQ9yW-6u8!AZf|V1xl*4ST{QYI+3^d@Lf(7&j^nV=2p|3N16Xo@tan&G;FHC~VYP zx#iIM{QlUa0+ca-OmE#=I&BVlAFd0Sm&I8}b{< z+2uQv@K_x7l1BiQSpO+P3W8`bw<2IPU=D^4Vwd@kbpGKb$3ax9iFv(+$U)fu!C>&MKE0RbpQJ%N z=cVWNJ^UyPn9umI^~-~O_$riKsQ`l=2gYbWxgz9#Z5ZuYurqq1?oifn*kui_iP9oD zFYAgBU_3&Pfdg2g_BZyyD5F62Q`!LbDwJyf2n**uN68lD&nJe_F8C9|5>Xgc6(~(0 z9P^~F<%pJWLIY6J&oCwW`N~2nGP&0eJ4RQ2i2dC2K2-fk^CfS(zbgDW;CkP?N4KNE zqJrKZV;dd5r(9~B5V)WB$bTAHPhu(7Q}?a_wjN!|fbqY=_>1_yi=*6PFTxh2NmPBY z(mHI>)FZ+sf&_ERhTW@H8U$lb2Bk@qW>?G|S~FC)6e}v0@^%wWtd6_JQhUm;nc6qg zDmyvzHuC3L{wN~R{-NNpy!f;F&&3-(`%viz^E>aUSVd%c;a@oqtIfMFhRUOT$-4@> zZN%3rrn@q@1uZI~8=#H{{1fwmI=Jg2@95xL-V=$mldhrQ_^n2rfjRQfSe#(HOyACG zSDf81T?3CY5b1%!89MQ(C&Z{WujmRq?K2H6^G?;)TJ(*m&08Gv_@}o)m+UtE4) z(B1xoyy^x{1$6OTTiv{n84s}c>W~I0KJ5h98U;)=Ja-bwy0rQDl#faz0Fh?>CV;&c zeghz|n^_dgW_WT z#+cQjUu(0!nr!EUqJWXoQOUa!+0P-p+Vj)dPr61OVO>Py4HHe67Z-8Mk=`6Tz&h#; z=~8r~iJQZfBb(RCfI*!_Mep$p)=Qm0^R7mo>m<}mZwuF4Yqdpy26_?Rj&VL>sCOPK@V2~Skaa}8(5l+P5xVq~j2tq!{ORw89x zT^dMl>u*ouATRsS1d>)PVepG+Acql6Uzf(4I+U`)K-Cty!$60vqpgf8j9p738Ht`Y zFR^?2G#Z+;@|LKePI_~n-$+23A{v* zF}4Mz6xu$i`(&*~?z}`@5Xc%8drHXt^Q!(u=9-^!N_0G-u~N`lEP-hi*S(<2$tKQb2$ zgT0Lg@*X}OtSyW5n8|1;1UubI^L~aqY}`Yg$_z-&8_h{24_tjtJFmScvGNXeADz<5 z+IuqugTN~h&^loPXdPnST~9DL1!^pg7E7;`rOt*MBrqXJ2bUbBou`5oti zQ>OBAdG`GB`rY5}UgCT0a*Ya2<^06DUJ0EGWN6>Q1wDbhiA1BOj0Ef#BVUN)?Qth6AdcNOenR{+gau3xnvKh55 z_E}-tjow_%NWG7a=6;nk-F3Ek?q|Q2b?;wVp({A)ksHl!e)74lz6{0M=}kROd}2xe z6r82dIH^){p10pFb7vL>%nti<3@)iZ~it!cBaeTiUW_qUa3b^+1sgc+f zpaD57J*U1k)$r_`7zI0-4{Rk7YBUFAUP(a$c|f1b-=6ud@p`dN;iuGJALmlnBA#3D zuK(K)XoBFci7EzDA(UdaT)Ql3IwRFtVst*u7iF~gj%TBL^vF^Q&|P!+Zno@{k}qNX@M*AQ4r}o3)q7 zg~(IpRD@Mz9Kr`AefFM#c1?;Lzr=3cZp_CX2YAB%4we$J$wJ~yuU-kSo!cr-Y)!Wh zXgrB~x8_^kd>!Q=|Jbj^yW^hz?SnXRIS8VrPH+MJu@5UF&%2`8y=Q@Ya@oDkkX&D; z7gik&8$XrjC3{DID|f%-vY7+D*zLM)!8<<;M!!j@PRo;$Ex^Z8z-e z^Qhnp-UIc4#~)K7czEeR@s5&!9zHwU9_%gBtDrb=4|S8N+0bM6V(QBY^8itE`E_9& z6#u%!i01`$e;q{F_)}R@+82M_)5+S#VdB-aa(li zKYXbH4tWTj>FzK!h;6rPbS^u}T{2K#h||3MQrJC^_Aldj6D!NNh;n2o0(LYXh6DA3HH2aRv1i$Yf&L;hoPp-v$NL^uyTttupc$qc z4`}Arl-QsT^O-GJj4AjxvYDkok)vK?a8MKwF;b)a&r&nJ53H!GVr=RLE7U}$b4)$V zULp|SA*jZ27J9@9eyv~OaL-RAA7M&dIZAHSn1f$=Yxefpw-KID2*lat5K{x!?FO7U z_UeEExNiz?UA;bJCqD|5XghtFB%rEr!70Rrb_^D8!;hWpzD;j3&LIl3|8&Fn)xAj}a%?S`(8^|@BF%x_< zRqVXP0}j1;lnZ3pjsMWwTNfZlLY@Upc1spZ{@YMG*CHyUP{P=VJYLFo@Kg5N2K?TL zsBzr$9$BM=d?WmZ%J_|WdCN|o>@F7Z=isy%v!75+Z~`x+>r~>Y_ubZT#VU^wgYBDw zJi=D$voBFl3!s-MFIjP-Z}wRAT;RhNU!c2k$*s;j$VLC&n zmi5m^M&~u5_OC(g-6QjfCyk`1brh2TqiGVoLqzld`c`Vfxxb=*Byg{@FlLggD`QdG zaMo<(6#yow4GC0vz}i)-YSTA9w2{#`xCWfWvGCmUFh4pEw9$aZh)wVHS6air3W>{k zx}EoOX5My8!u6RJDh|v&IVzTK=89vrw*++6*Co&b65gT*6e{+ETaim|5m)RYAPT(+ zaIga~WbSmO3U)eJvL6e)q&6SBlHDEQQCHIsj;W2UaRj!=z_IyLCbwVp9kT=_PYN-o z)~0PKfN> zhI$7-3858c>{tdrDGRR*?;T$*E%*)*{dXOaxOWuL8`e*H*%*;u`!WY8xjI$q>J~pV z;@G+WED*7j{6>Z~rQ5Y;9hv<>7-M%?0^dDhSFH){e9_FUZ3+Czvd+{@!m=KEtPy|+ zR(9IPOfhFWU^_&scvadg`00FRlEbSVtOuLoiZH$=UTYwl^!B7Iwyn@acm(XW#W)ehpa=V=^+ zdzM;F`H6xMd|PORZ+x1Dqv;=^I`1t%j9Tqcgx4@y3E3MCzdLs>=eCUd{Od%CG1+V7 z+sg@^ujCNDD?{;4jf|n4Ef`cmt;qOx_3Dc#P z7uT1r1CUvcMW}hNq-Lhpaft3W|9g+C8wv+g+EjS-JXf>gDiW}<^P zDBfPbUl9;IMkXwKBd~~cm~&~|V0G>%^o$Pp&QIukzR)6v)OyTW@#oC%O?mLDtvt}1 z9&gw!x+M!Al$8+vqs+K3C^tWAI~K>*yfb;UXsA0{wlBMZhJi+`TbnTHmmc!3b1spS zAqm=BPCG#?122SaK2KlBYKG5ed+QwnmUnc%reWslW+X}sUkeTf*L(uJ@j*x%z6kEj z?!6EMif@!~^_?@GYUx?!uF%~v|C7Mzsq256`;OP@PM+OnpR#}Yg}qyBkJh~UFZkZ) zE<8Bsl=78A*fMkJi-8~1@!LKrzR*^%a8N(rlprz|nUufXSZ!pwbi1gHwchXC9bY%*Db@>ZJ_=}kjTxrs8j%33 z>}_0vLUxx5nq7M(2u*6c)>>np9TRxq*lhAjtRLthc`ElDO@-`7C3 zp^1O7L&Y8$LB>3wB9A^i+ZD@+r{1AM=78$6IQm7_gu3Ss*I$N|^2N%D@q`0p_J-&D zYw(=DF#<0ac)#|&+o*1Jv12XsnmGM;nR8t{Ne@KxHB*2kU)I_zr6;hpRskV6u+GoE z=P{%!4`{=+z>Ll3D#LiOSV-n(Z+y-k-;W?*J#`odE%AK{fYbMtxg;pL%Qc<=k?~-^%Mb z2rJ*7J5qqIaqxfz))|uF_uxg0#*N^QMZaR;=b z&XIQCXy_erd)4*r8X10tVKjK;$9!ww-?g>IJzToBd)IcdKB|g9TLeiR-GVfpC`f^> zc?CGgh|P@i%~fpVw}<_6($sTAjU>0`dw@r}kUkc1`Z+t^9L~t?hIibC=0kZRf75g^RxgV-wbyMMFnP_q7dZUOlQ?p9cZ) zFeKv>e;!iz9@M7B2C2#YC*<87iSeTwn-asq^u?E8J3ch)ZkkLiTvH;!%d!Fo8QfQ) zM0_s?{-S5Tm@&m13lZZZApgr~dnS)4_&l@ zUiMco^Lc|Q{#Yo+FYIi9-2dr2!JGeoDVan2gcxd)PTV@~6>j`pLVR4T=Q(q$cQJ3n_xl@THo#2Y7EQ-S8c+50eI1p7OLIbHb%cRqTZqWqTFZGXDu; zDndY{@6Nk>7BwT*Q^R{7n<{|nZ?r^}aYRtAQ-xu!U+$?0^*xJEJ`-1F%^f$&k0!***`?=975ls(l{DBl zDF%*x5_|aYHS%W>?><}dH>uuU2hIazcGUZ%Yc?@ta_VIXE+=B26n^wOLovg5TREVW z#$9Jh+Vk(IcUnvTtW~a#Jm4P%iwaAp0fMFGi5B-PyMQfgbt8^m^G1ymCZJ|Vhmf^% z6+&XlOCw_UHWwq>FXs>qC==HdSKAOQYanqk}HiMb>GuqxC_2Y zMF@*Y1zh`NZ~t%>`23d!OsYLzb9flCHU)u37IbC!(R;YNGlzv zxSS@kpq{UKAdb5Ta@DN!PWl$M*=raCHRioRRt?RyBXHD}(a=esJ$r`zOwvbBF4HgV zW$D(lXBX?wpHZN$I@+1Plhe?YbFsAgV&^Qt58&eydh70T;_qXcqJ4K4pd1{+O{C%W zny0#;LWN_pEjFCEpxM-Mq$tQPyCmT2G&8du2exWse<68eaYY564u-r{BO~hU1ECuj zJNl&oR+5feP4uz`W#EL^`S^Sp&vq9C%Oqc-b^q;t{_gtYzz*+^)#2!($Vrg%gK|x? zdZb{FT2q@~5_eln(w321eB>tw;6H!0&FQ>IRoh#<&%Yb*2#YpI8GMIe=rY^REJoRX zE7b!Sqc0O7^AG4pmWQD)Iiu80ykA!FMrsj~%<+ST?T9#40PFb0+7GKE;$&y#0H;a#`)X&*TWaCh}ip37gR(o*u|%`Dy)=CB&w(@WDEFa zZe4Vc#+=%>`97VN{Rf6SF&kELaw;7bTCaQ>_G)e(GjX+Q<+zS&)`OCH$fq;b^hX8O z+-bQ()&aI-T^52?eF-T($_m;n39TE|Pozs|AFa)0yuJ)mvnD6|-Z&i;=Ww!OLVQ+Q z+XrVGeQRX*uFlZ<^jlu_QSD%a84z^@Mqs;Cu5J%NH5?{yA>&1js1rEInDnZ z%s$61#LlJRtk{aStD35a?BD`)jb^2+1@-3Qlf>Mo3p^-HCACF;J^jfz3XfPi@i+CZT&g5H zeW5=$1QKz@F=E3GD)tYaj=Zv(ed>}G;|7Qn`-gr*FU8nZOa-aO7dUV5ck zun$^f$UkKuKCq*HMvznbco;uTQmU)Pf4~E{e}1PpRhavOpK#YB^#l8U!4nS4Yb)## z^;9$VUX8ahucP>1?#iZ4X#@Z`0ms3W>=x?N>H|fwimgWTfagyFpRHGz!=*_s)|pAs zMk2y(Xeg|@=rfx-pa(6=>+8SI>%ZdOjK26uFdwKhzdw(_8n7zu4Dj$qwsgWDeQ?2k zRfF-)lK0XOKPQJ>j0s6t(a(W*zn^;c&szPiVt4@(vwjz$GoCSur+=!DxLm-4mcyBu z1bQPR)NenU*V)f2>MVYzDu+PI9EZeVT6VdUbyMMhU8Hq5eB;}djJRE z`_m!{tn&bK+s*F%a%(IXj*bfhm#J7qFo@_0uI_Mk6E;|jbcO}50QlE@J?iTrpd%Mm zSVDJB-NPIZKi`g0@~QzoT1Mw=TpKUx7XXRyqPB*3UBKJzszKBXuI}sgYv)qm2YE6G z0xgYth~2>qE4&=9CA~f>B)nKjTj7atIkfq6B{C?#A8_cf`sc7%?w090uQcN3`WOOt z?iR9vedm4no|B32*uqHBrR#JI=*MUKMC`<|EgIN-iOX0!s2dqm#ZZ9t75rSe5CtBRP?_GxNCCwVOmO=puLVEn)f zaP@xr4gI6_WFxS^F9+6Z^v-&F6J{*l$v6JTr$;0{V5Mv^VeMmT;iK)=i_A*XMV z8)_g(p3l?ZJy<_iVCNx?%Vd$?(D)|qv=X2eYxL9;;01!8B&aB>)vZ6cp5ociAXE0| z_c6WSb{vCSrCof@W{T&eL87N+Y$o>h9mfkqAc$a7iSzXa!o}+K9i2XKW8X%VOKST; z9c;pQ@(aVJgpPZOTiXbk3A5DK%diKqy%ic{zMmY;qL*vTz41&wOL<^ ziFD?!-4|;JC7k7%T?U}m1V`4YwKy9=j?=o*9P@>4m#UFZ{Vwr?B5)?VTIX-^{3RP| z{e~i}v)W?^cG&Az^M*pY-e1d&_)nGmv@( zb3e#YqmY;dTJ)BkM@YBx74O#d-h#L@1J263v0Q-mm*>F*E?Z z^p7V~Vv2zG-uuacYNV$D{(b`uy0;I|{e=l>qb{f8-H2TG&hPBw8D#(dRi0dq%9pXV z@T{z!-)V36hk&k34glXEH}v>CT@Tak09~5*f?oRvy7;dkkAD{S`RTo9Q4c@DIAC%|q!<9uoOML6>vYVfPUC-3|NlT~D(yb8H0uN#gB;wUP-x zR~sswOfEoRhTX>JsfLesxp&fA{Y*lE#WlQbGTV)XplJSYzX#5fuXL6WT*Jj*HTXy5 zoqpfboHlW3q;!cZZBq>0rS022Q4BA{CC15Jx2hK>48u&#PoDB5h4NWil}D(V0qpyR z$t9Og^~f)k0D@s~`t};@E=W1?c+PNJZ3HH7WB2rW_%R{Y7;N5Z!o&h%ex#<#PMEzH z85SA7^!l97cAR60BnuFdGPt{MK5@xUg{%pDmsHFBd0EaPGKA1%Q4?qRE|qW-pNAx0 zLXN3-7)>xF^QOTA-t2p6{d1|Q0dPM8Wv*yAT=18^{u42tcS$+c=Jp{t8e3r2YMa#fjS9#P_~jzwV_MHl~}K)M%^I@|BiQ7 zJ>sp{dUZWqqVn95L%IZT;{P@SL2{LWWd#RoA|iJhn7g#&>7(~oc3}9){@Dus+WhN# zpB{xr?-GU){>dP&U9heowOaD!lJebx?s5arR_fc+IWv%S8_Vq=v%9@zQQ~uCo2)!3 z2bFZ>t@4kC#K6#gyPkL-p^YEzZK(w29SQy=7i)W3Ze_nI-4=q-1XcX75v2|~e9`Bh z6p+~S{q+IDEN^Zy7@*kLM_+AM ze7H9!jht6pkB#$IhD?{i>M`t7Kp@7w%#!Y(;mdc@*|S<4KvI~{Z!)*SopT10c`c42 z-j;JF)qdXv@utUTb18t6tkR#C&ytwSm>}NyGiO3tz`-oN1RL2)h@k`lli=30YxvI0 zU)&51e*#G|I7IpWE5H&iHSqC>5A<9U;dgMZPc}l|A&(0qFr~0dhWTT5FOx0P#ymXk z&`&}r>)B|E1BuRXr`I8-5^A&FqnC^%3jT^Cke6%%s$U=C<*xP_>5lg~%+*6!yD;Hc zQwWKrPMmm>-vFZC5-A+L2O0emD(#~1us3nwQiLm1+;Dyd zUe{gK#D?$^P4D7tqzmX1<_=@C?-1?*Nh-+ic|AzKw_hS2vFVVPegKZ}Gay)?)p`?u z*OuW~4=RcG?aYhFC}8mAOG1eDH~7pZFNOx1=W8E8`h&c(mIRvxJWc}!3<<~i zc!~8+{q2p|*Q0B$EiN%OVt|_5)SD+@;?9C8JocKbbC6g%{BQsR68{8$-?&sH!Cv(r#jwGgmycy1mqf6x1r)}?=+T0y_7k`jh&zE_Qup##yS8KH zrmc*QIN4qJvJ#ktpz>iD#FT*c?eXBm>_ggOMM!gG08$l!kHkF%l2!1L%U?kW#|B>_ zCADELlC1LwGyeoi&d-M^vRLI`sm<>AnOjtG#hgfsnE6jYqaWH^b}W(mOvesAFbtEw zf!y$2&IgMt{M;2;=yP8oh5nWMND5<11S9KZ50w}j_8j5gwRu*;Brht?3qeoXtck8O8Uh2Oq51KqTmJJqkAS=yruiv zm=$+JB`+r41N(q}o2K)yr0=*>QS_=F<+#{SZmEu4WY=o>G-4n}#ZEh|rhVPMh@Q#k zqWh8Rfo1+cb#XQ#P}J>blR`-dQy?X@;W_l$s1g|T^v=FZED~Dwar_>8z@_hDVHh^L zp@@-SH$f0}AJmyODbm|dxq3$3F{F+EFFh?aVeCvnB8>KUXlY2ecl;L(8qU>fum1S z3r)i|_q_nm^YF8Up@l`Ys$Za2$&XR55mWW3VRN8_Tm3&en~zj;E((t!YIVD#P+p9A z`8D7_S$}kQ#>ehf%C3!up$7_c;BX(}TWJj_9Lfr*lH6zQq=^>cUXb#8bEY6w8S@^< zEsx~Dh!!odh2anMkZQfG`!p|&JLobNliPxoj9g-Z?%^*k9O(98OiQnan#WzV1g(OP z58FdWjni@`R))$szB1kSQm})_BhDr|`u|WuNIV1miErcN3-^_V_J?>m&W3!@M4gXmw%UVq7e^C3i*mtG5W$o6s$?1&wNy zo}3$^r@uY&&kpq#R>%XAUcf4op!7wLA%;o!*X!mlcZ(~oX-aeY`m-gmOf#xvkt(9} zc&V4(@6eBQ6;J$Lavl{e?{@<}&IU4%?QLncjGkN@wg)!oXVSin0A$8ItEkt}J1Ffx z)N`cRs~#QqxigQLaJjb@040m>F3b_bxaGNLE`Q5Mfg%JV@n}PR-=-0MjpnMwr+MS zTIH)7!LZz{qjyOj`D^A4r0=JSQfjw{ z^S|sjwBsX(ztb_T>?VH!S>IPX8<$pP>T2C?F zC^|aCKk%vnSk{01>-SUMs~OKxRa&>I{tTOlUkw7r%bz?uCG^S5-Ctyl*hl7nDp#IU zqJEXWzImeZ9ay_!A1p%Y{$9T%C2c0*atS_jQaZ!^R=I9%#g2cH++;wbwpUx{LwDok zk^8c-Z7IEt=bw@5HP*S)+ll%ra`4oF$R0QMp*?)yOCd)h?|0gfOH1)n38qxOUKf>% z*L-!V0|&ow2KE}2qfHGmOQr}61Hvq)&kxg-sK-1WTTh3 z2WlE+ewd zmf&a8vi#|znv9=MOI^LD{T-Wm!DIWO1>`IzciXk&4Q)=}0}SefV~w{li-o|<+7o-j z-~2ijZQr@pcC4P=Kw}liFiHCNjAAAx7zLx}8Y+}MRSfvtqQzSK7W7HJn%&8!0Kjb2 z*>IDX-t$otTR#1Z1hd@!?YcihM>MfBw;b8iBs@}&C8RvaiP*pt|B1@d5K8@yRjr$) zR&rgp*Zi1j|E%u^Jmx+G*r-@dz}_u+uojZYpX``J64DQ%-1XjxR#4TU zW68*bs;ia5B(Jh=KI$Jv(A}!Df@nTu?w$RW=WEN(-zF}@%~U(CnKcyeEREIoF23>eK?lWriXwp) z@o5BtoA=X39)TPb2g59CZ#UZ#6|?*eM!mPaPgVUsYWI0ztl1Z{X<`c%d#%+8gRM5d z7#VZi*{ZA#hmeM`-0;5E|zr|bvNOqBYpNDbzj5ycx)HVvI*~r62O4>s)yKTrk-c1C>pg1fHBiuX zTT#6}uw3rk_VDKMGT-RSt@0|ONT^m&UuRZ+cg@T6j;+7ZkfTT^CiBYt-;{JLGjT`E|6E8b-eW}4dLONMdx^r z#2acor4{BF$cs7&5Jx}vUc^4}RrKs7VaLF>SE@no40k8=J9W%ZTEgj)-oZ5kd8~ShEqHjU6-shCe?*jQTwK4?yp}lZ^~e^ zsfiPR#holPacL2bVS4e=ZSOYUb0ya-#G}W{bwV~d?=DeGSRG{=VN;f?4JY5S>Z`y_y&UuM!3X_&U;_3M*9WWV~l> z{5ISk83(DHX2WEPCH4LRGJv`)4SJ$pj7Q9 z!~K-DdS4?)&x5Nz;!Di$OI%NGSY^@pn5-H686kGUQwg{^q+}PQ;(#OBt&5NDg@YDj zQCt-7@P{?Nxo)y9B)R_n8ZlvX(!_f;gnXRm8U2+4)wq}TT8i=> zC6&$6o{L(eCsQg+`DevkakD(kE=Bj|B_}uSe`6bnq+Q=ZXMSnFZzu-Kh^DlynmE3+ zjsS=QZK$wRm}MOuyb_n#)~x+44>xyn#a zSig+KDPk;nGA2UPMA9?IoceZj$kOtBLfrNjDsSWLBbs9^tA|W%6eI3xTtjo&JL}V^539x@Egg4pu^t}XM2v!Z3Wh6&j?JRuT2E08 z)uYAyc_zw@XwEbYr%Q$hk<=+Ge0mZ<8Qn6ihC9HRPu7k&u?tABi6t^^C)99-yA-GS z67MvUf?9x_BoE#=Mtvs7!^O$jKOozxp6~8oQe~YRDdu#?Xk*(nbQ>#{mp96o-?@0m z{t9%WT8~;!lf#Zf;#>EDgx2!-ubE;%A8MFi655W^Jz-XPv$C69N@wvWyp;vToZsJn z7JaBG8p2~Ek;mejpT3uqJpYh@!@*$Sc>0sh zH)L*a?e~(fN55@K=&f0o9Vkz{3P%z(xy=1wW^AT$HFWmJlj(u)^;AyX+7815>XWnd z?AxF8NzE~9>9Z-^(i!`lx;q-?t$=LfG24Ry1_?{L8ec4%9O1$Ep=@^nhbJAU2)SCP znYZ!k2j;X)q{C!|`9=FQiZUjhOfQ_y&!?)~(LGClJCX++o_}`usr2bM9z^=dsYmVQ zGIT(1an(jzDSNxkQ z!nkRn=#9xE@z-oI`+xir2pQ%4VdP}v_Q|*D(3wbMkEHdcbIl)SyJn(I`2$DdqY)Vy)U`=T?H*WVgrc0`QMqDi$ ze>wpabGGE0Me3x}$PT5lO^CUi{O@^mXLoNao;j02(_#nZlbb z1c!((y;aKsJO%};sT8Ww{xWBl<$17>fPpmG)t{W-OUw+aJatl!76q~7D} zh)St`tm8JvB;T&1i{+xDm{lv2E~>Ro_G}mpnT8hlerfcyw!*82UK#5DRHtR1-fzdV z{g_8<|48wAO)un*{#_AR3vu(Dc4{#8REl!vAGBEf8_9!`;q&bsS;vSMy0RdMb;m)G zvj3U#01*#f7iTl08PN<$gZ+8V>CFZ$IVW>OIg*;vWzzr?Ct$wGM=;AM!r=>NNq=e8 zpV>e=v#egb2EUnGx^m=nl+?K>8(QHi}|(swK(e&*?7WZU5;@*Q5o zlu1H6>N*6BqCU59gvgiE!pg2P% zp)&S;I^~S=Ct;17*zDjdBoZNwxQ~cwJP)4qDvV_!&y$4^XNhFfk~FRL;pl^uAbD=0 zuxYUWlA^=;VWt;_^KihvxbGBiCeOna)XxW)Cok2+>{PW-K5-qANs-12Fa^BuceM4vG+ zBx#YoPP@ptpKLxMj-9l-ydd%3n@(&jRAS@Y!rsgpvIqSO%9Y zOHB~`H|7GDTn%SfX`-)0%RKdkx>kN+J073-T z-Wz|6@2so%;v~~vEI2kO!{ufHI9QBoLZ{YdgLP_MDxY^$i({5WqmqiAn739L(1@3$vv z-gH}e7m9u2n~EsL@E=(>p+n#>QNA6L+6XufSDg#-v{x2RwHdI7Are5ROQhPvy$Eup zJW=~ibjK#xiwN^Vkv(b(>_M&ixrx09x)4Q~e09fW^x}~u5a*Gk6GeV}7#xR$tS~}G zg5Wr)I-F5rB3?d{l%cAeK&9PCcUc&*#8%zDN~C*_`Hq|{Op>H$l(dlP3#wNgqiT8g zOPZmUayV=ob>4)k@de8F-;A2rygDDL%-*9sw>WbE%g39OX3{ zs=45zYC}a~g36mzU{i0Vp$z!{C>mdU+*bhI^tW`uvV9 z7aL{Z)guWb@F#07ItquP0MiU8i?#*2P(nGta0lo?4L~81LfHsRcwl=XMU_F}O`biH z(0zO&k-~cU~sN4j@|%VPih(sFM$?ej~aJejhRYz~< zL9HNfG}N`S+A|9{%JaRdxEg79O?fBt|8n@1JpbiXoUGspB!KQa-A};1CP&~F-k5G3 zJPIodZ2d?Aw(0zFs@5LwL%Ra<=DGGn-G07Dy@=?O922RBM^W&BZ5~NP_#tC=Z280f zxG2!e>z^pl@K`A7_eM&TN)K>AweKjahT3h35GwM;8V54d-u++qJ; z*k7uf>k(Zf<$xpYL$8W#>a3K?Ic8KShZ%m_w3lz(`8z&K%gr01_}P?KVKo`dHTpoS z)SfN|uLoz#O8m_=l2c(jGgIxlsJ15NHC3%GQe|u3K3YSRB7YrHln zN|2imHjiFR@T>(C_ac0N{yR20%g$_+K>1LrX6eiKd;ba4G`8@cewi+&k0keekfA#^ zlfUixr)sN1{sJh0Sg%o(ZgGsYplq-S5TK67ndc}d#h4eWSWDx#r-uIo!uucZbpH|V zPye4EouL0oWBH#nUH=m(=YJY9{Ri|xNq=h-nEF46)&JD1`_BsLh&{>ighZ0}e;Uae zqM90T_km4yA~=US>uW`|QXh3D0kf(!?;MS#Y9Sb((PZMuXluCdIP)u~x*{>yN-Ea- z<>fQ?&v^Fl-3YFy`UFr-u3W3|KXLLERzFFkh?U}d3SW}$=@Rn3$sfzrjH)7DcnA8p zDrdx3K3k+i=mHJj26+de+DoOv|0hiOY;mnMJZpl*WDwPXv`U;!|LYKCmH$ceS>=cv z)pJt36aOppd95ENa8Kfb0(?EvyhrJjLFi%$&%*j&?419jM+_A^GHV-j3dy^%F&VvM zTmS1%hGIGqYL61dch3RU363-W6J>!PFo@F3v@;kbN3TB<3iMo*_M_W(A#FOPk~qz= zR-eZzjOdD12U^RF(>pI0-xmgB`PX}Q%NO)R6M{l;v}q9+-VoPaBIAux$(zw=s|I^c zyBS0Bn|nk3rRXO>o@k9yznHDnZs4ypuhZVHVyfmQ)|#8#ipmnfoVtdmlaT_=@twY^ z&&k+x+)utXES@!5XOrWtX6tup6XAO+9ykQRMY&$K`Biy8jxs;rabxPnC{TTUy#_V1 z?`(uN%6-oXEasJ2))&h|DE6GC!b)Fr{59di9J3Yy&G(+n3WCmV>5dp-%3t40f#`9% z0>x@^43*1^iu6X!ekRC2p%okyTrF4NlYfiTlV2l`-1Xmkq4rRC9 z52Netl`gyS!6oa~2(p!I0sB{NM~!B4t-Zw6Y?gfBQVzwlG$W8f2W-n)r@MtJBv!DO^re27lCd7@xM7Q#AcGF63e9+bg3e z7>r@(d&GWnN2O4eRb_Zrh77UldWfhss;LodtfBGNZYr!(sQgEtt|d@h*EYe|{#nB8 zOV!KtTkyL^|37pcwDK;H`2_^MAMypge3~GB@0viK<=-hfkFWxb;-ZiZX9bPdp;YFq z1L?mzsz7H9VSbl`p57l6`Jq@r{*-|T z>mxQLKR`Qg#(g;46M25!(RB|G1bB$91su&*el4$3&HHoaFi(!}YWv)jH*%k;028}# zAdTSgRxHV+YxHS@dHRnld2tKzfibfmC&?!aoHn$V1(`5kPf2V?nsK&3m~hq&i?70<)|}9I^EMuQEgSBQ4&9+BIl>755|1q1npyF)`56ssx>olFxeCZwt14# zvj2LidWXLC>ZM%;-Y4UK&xQ-Yo^Ou(g#LCS*&1KC{kpuW3=lVy(Bm#QIS}S8_3uOn zzoo=^ns;yP*LcZt{T=C{cgqeko=Phs{^NsbS&Nkb#yFYIlLF zIbp?(gbNoyDTe{iu&0#301n9^{dYoTOM^F_)6a1KO5ik)=)EaY=!*MpWkwVF_oK|# zeIzaGGKnB1Ax@7Kf@Hdh`Ed9ddg>Pq73xHWfAn^>A8Msj(BiD!tlsphW7V+6p?Aym z)yi$Ogy_4Pv);TCI}v|XR>Gf3)s5N`46E-J_E30) zE6suO*Qnw^(au0TbirERzc>5CVk4l_U)Ib#4tczA~yKLyEJD)W_8>>FFv^| zESaK&Eb>)W=_ti7vYN`oSrvz^&Vpe?_s7h*GzUo|tM7}Da4d45G4*qkN zvAA>zdw^zXBRsk+p-^`t#%C*nQhawqJgf_EUAFq&J!>>AOq%=dYqV2%%Vb2VI2CmV z?`T_^jZ>{PRVpAOXG(4ITj``fyP*w~KGLaA(n+Qc`cESniKT&93H_6n>hJkM0r2be zzA^ZKi}@z+r&_yR?qWzu0qr|!mvDZ}%p5eva-B9JQ)YHoiTc`8-02j>5pNEnYbz;T zg^My7jkHY|C566S)%J$4$9LGvVC91BxSn6@iWBc;Pcz+v^oEVNErEdfk)S*Cc@6m7 z;Gf$Qrp5Om>kN%qxJJ%)Uv4N8Go_KSeXDdVn4c;~OG^m{7;VvYp8<})9qwUT)W{t> z#O9@FMOEb-PtHjmq{L^;elAas8OIEMp67;{cokSgmPK;TT1ZidIJoJIU{8e{aAu1% zO@FXmsj*Sg&4Ie}XY6$aJ5w?Zha@V#0xc61pZcFj_TG~$;qwVHaGy{oDvokRAy~9t zkdYie|7_psimoi}%-NVGB4gq2`y$P>-<5D>_Jd^O`!Rcp$h`TowaKd}ofzmBsb}YJ zNILL~Z&;e|bGuANHZM|Aemo;EW4!+<`b`=G(O5GLVtAUvcWRddmW}%kGt~65l9C-FMNDo<976cr$7m@ydE)>v3GDk!kUBUG+3ChwSZi1AuVC^nJu5 z(uFqxIrw&WSn2|hx}O%RM~5hX@#AjtL2kbM43hE0+a>Kca^L*+5*k4QNdbQLm-c18 z3_wgooul3p{JU;`->SmXcmw;Y{GExZ)h@)%$->aktjAjp__p|D?Ku9OzKp4+%lPuAAWz^WOyK?W@Gq`+VIBj57k0iF@Xmky@&U7N`%m@-{J4{{ z6Sd7n%@g%9@x$7*G$(`xmk^-zn?;Vv52kp_7T?(WHkw? z|9vE=D!tPr`WD>p=ED=eH-`bV?TzY#1>Sxv^4~>HE3Lb&4oAs-6kLD4v{$`=^V}w| z(tu;Hy0-yi*VYJ$`QFHGLoEx82=Z?|H?h5WNxN~VHv6^U+^uVqyIg^Vw+2$NAHGeU zH8nYu+d=^Xm7<b|N5%&0ttRFlDf+IW55e*c{MYgg+5+>Y4P#%%N8LGAleN~J5&a?Gjk78rsfOvX%>d{pZ3c_nd@FBx!6h#q@f)OWgIa2c zh?ucRB)dSZ@^g^M$WLMK&xp^7WTQtY#3Pj=y3l!%R41vs&4U8xSA^v1f%eZ8`m=Gx z3vgAU5(O|9SyJLicmyglFNjj_IS_S!V;y*g=#u>LGDKiBdt6wFgZJw!FRv83aA5&T zS1F7ctS4ALu_))V-3}IM3IvbU-uQ1ZF-qaJrE{a|9hj z*57^v9KRY$z}7E^E_}5K_PPiv(e08?oC-PZtDo=~+d*q3DYIw$ZGB8%cjP z;Fx3J^tDhcNESy9vV_Lje4sHgmF{>T+$*kC(Za)*f6o^1^G#sTT&+2s-YcJKzxZ}- z1DS6x`juWdmB@yn>F!jAVqBj_DA&!$LjWt>`y-OpSKk!ERs<16PmL>I#g(>0?{jG=&MT8Fzacy?SyQ zECQYkDkdiT9A@6`rc(A^bc_#F7(@|9?Iex`svZj(uYa?u_a^n!FpVoc^Wv3LR_U)Q zW;9?T;lM$yIC~0UIBjxfzL^rm%HZiKMH@89;O}Xe>)!;9K)8&KHqugqk zWS+q)Uk86KmMJAK+Y$XDj$`XXYU?9WW*L9z`D}VrF=ebKGNd-L{L9H-1v0G_qfeB& z^_uZzTVPTPPt$kPYNpjii#jaogH9hYpLdM8#<3XjdWBX~1pkbm_|`;OO&v1`07jWQ z6zSJ)vhoBw7-HKR`==kbb>DIa|4i62pidaxTIt2^n>9VW{QgCqNJZT&Dw|T5T0hLw zoz&L7{c|MEaVxskYmBN!K9+v7_b`kXb0354x8AY1effi3k)I|MH(~&i(TVK`6CdDX zzK@sj!Zvo;diTO1a&R$G#^jX;P4Jmn0UC~nng}KM&98xnSnBZF+oUh1DwnTC^gj>A zmmiG>Ic+N`eP4cwwPOVe!!;#z1jD&Wb;Rf>wA3A7aXRbgPsgxovn_!ZCiHI9pH zqmS?#c1}!{D{0;p{ETJhm`nelaz&hE;L7;)r-E>>IrLB?)Q}>#Z=77lzMG+#Cbzyuvcx%GWua_k*&7O?dm#hbf^v~(6Y%skX5WY|)qvB$Uc|GgY*FwgXn*;pb9#aA8mVaCbQdO>n z435?O@g{j1s$y{GRs59R6xuFI#@dyWA^*L-GVOl-Gc1tIW8A(SAvprk2B1kDcl!F7 z#T~d@!KijNiuF7o_~cV>U^#^%j9BN9iGtNa#Yt>)$pw$J20Wkpr#otJpO{FS1*L0| zI4~X;ZjapsC_b*Nlv~!V$kN!Fna&T^ua2^q&Qv@D3y+X{(?Lp`k1_H@a7&<`?t&?s z>GovZ)jVn@mg~%Mp}6Z-h{Yh$FO9(ZZ0-o9nc>NIfmbB+ALzPp|KKYQhy6VcrJtFt zLBE;$G!&)=<)-L6j2lZH7?i#z3UKd!G#glERqzqWNlhGck^ZngS<$e}hIkN~AK!Ub<40$m% z5IQQPLe(Y_rx}UIxMB96e-qCZg2SCl=y%B@0QnE8dr075da>(2E~j+i3xqE+!L44i z`YYz)XHjp#AZ5_luAg37!jIKP5=VBUb#+?f=wxym6_0`ba<4+p5_{ol?}vpe0xIy| z4<8fLnuPtDOCHyJUDnPy-P($_eY`ROC&j2K9uK~0tVgffg5uf`MeLU61UYFGD|0%CkoP@NUkZRo{?%E_-JvwB>MC*9}jLX3@Dy{aivYvbVW-CdFgw6b`5HE z;kCYF8>*?8Gj z|1`ueQ+UCuj_jTO>}K?J3&Ns(Z(2cV`TqfGK$X8J2lprRJO|L+N8T{PUiEcquLgO; zZDQ5eE_$$4eeLMg@IkD;wOv)AR7h0fz$e!|C8I=qaFmR)m5jB2z{a;7XnkwZ4C}+R zwkp#uZ;)Kt3H9p~ZP!O_#;u}`t^hcjXXpTkL%#9yG(r1tyxQsn&kt;wzm>0^2wbJR zJV#6QyjEz12qRFSewFf3n|26LL38_2v*!3Rz_{MjXTSMrQ}NDYmyn-M4>Gz2<9G+@9SnAC$uD zyLeAAeG9Z|^}1r>XqnICErl`Gsnr2(p56OKI``!|KmY2>=D!xCf8O|cBM!o;bzrAk zfl$?V#N~x%sCWjBA$_ESR{M|aJ4eSkS4kh~*mti}n;_}qY0}kqM4RBy`{GKFWPBNW zgso=$pHe^AUSOFnmGbd4J(0#*)4BKHk@aI$f?yJb)Gt}|42cL)^-VY zS-5O?DhF)`?8?7e4kosTh7s9L`5=$2*S~o-x{^ocrvM-D83bvNzZE(w z=L4VR4We2linZb~T=RPf`dh$JC?AMJ#luA@McScb-_b+W0eSlFL%^XyyN-RYwP`zJ zAHcVBoaVo2!TdH;YSUN}a}nbPPJ#7sA)o z0suY++}VEt|JvNqfW|vGg3b6AI&~d)C4mNy_3ZW>HFVr##Me8vxON?Y+FN`$U9I>5 zS2@Z@t3{;+KEd}khjK{kV~hu$NsCY5cDaD0?QPjsry@RLdSx(ziw_awyQmGQRAKNw zK#Q&fc>}-DQx8oH*xaj}OS~tP{aXF826TytXEFPW);9x$B&;0*9i)!0WtO3Pa|owsH&imad#qr8OqDwMACBT} z(H24bL>a6*n51n#h8Dc)fc>N9V-4xjb!sxT47^cb<2^A@fI}P7?2xW&`8dJ9_|1n{ zJKx{PYKM=X{WCh*p17WWH@0}r@wi|T=Px$o^p;A9v+4;+3D@RI!o7*>p8+AXk6BWc znMAzmtUo+H`9H*`oGMJ)0#T7Bq?W8Ka_r{a9KM)IT=nq+Z}_yli<%xfZx;| zJk&pdet$g;YZVO9_6=U9W>iCi{Z;8|__z*!FTigJ53P6P?_CuaFbk0#!AAKa5Q4yY z>Ip|6RXyPXF%G!ys<Ow#_%BG2TOOM{;_bz-cWnftm7LC-qUDhi1ilTw#q;%abwx4D~}F3#5c19k@EOJAH!4xz>Cqy}N?D zp;G|WCNHl>&$jY|M0`S(X+!O_^lz9Qz{!*E4!=GM+|$4%`dEjjvglEJBp|n>F?>Y} zAGb#o8Jq8VtWV`2t5GZj_h+a-NfHfGK5ski|H*_dO|A=AClh3B^#}F;D`{EAxA_7VThqg_#nEU%MFRqAewKU zBryVDCqUlIpgNcTp1PtEf&JALEsH*tMxT~PpH@VlR`RFr9>7{!9oEEvmzaV(g~g1cFO zryK}umtDw-(*TM3w73;#oX})$s7JDAd*e*9u?1&Vz;NP7@hX8$z?rvK;ph>rv59_0 z!<@-K<1nlB9g01m>Ob`7-Dvwid>7ebdEHvQcKp~ecm%8M!zTKe!dB0J)U2A~#Xbjk zY~Tv3AyHoY;YZEjYxR@Y7KXuT!p%P0!7;9C^NT37@0+VV6YSpx`zw2|{WWO6KBlR%}sCyHWgTlK1 zjSL6#xsx&h&!(?USDH$aX=`O8y!Vkxk}*hz+)8ZFa6JwFJtXV}(T39ot~>x!3Z)tT zAu9XBS3m$olQ)d(BZ>`~BZ1^AY&4xyD zv%qFi>Nik6`1rblRG~Co<?Ug7TtIhA#lB#ARiaj8Af0QyKFoL zDR9|Kl7WIZPGS)np#YGeHW{j|xmFND`bnDK1QwHc09v=Bq%Ra-gz9c8=>r9Umt>pn zYb`tvGLeYO?sxw( z1lpBmeH1MO_U$n@9i~286&i#3W6J)LTw6&lR+6s~)d>rbjS`yTsm#2^9Y`Y6Rg!C0 z>%`2$CS@InM9q+B|5t6Z1*WNOUy}UxBZR(?l@F7y~CJ)L!AUr+v zU<5rapvR7qA|kF4HbON*0!*xISD-RxVcAjvhK3PQkpL?=gL3g_KwhnHC&-9zCo8X7 zm5fFHN610bT}>!sCp)aIw7q$LSdcs4(R+#L|{zOkO22rN5;kG5KJm z@G%$ox&0{?UO}mDi4b2ryNO&H@+ui`&&+F5-U)S_jOOqYJVr&W#mDVyo`abY864@k zW597k(Ec>L-dLM!6KZos0rU(qmuhqE5hhh~@vA4PpeTJL>46Qn<>Ck*a_@?fWouL>izG zly_Rn6NKas?NK2C?iZp$J>4FRkU~9uk}1^F9hO2p9kCQD{(2B5zJZVLD}VAFgquw@|Ou7In;PrmB_YkZmG&G;`i)7&2V9Qkzu%|P(xo$pUT$K-i>08=!P9Ft^4 zGo1fq=Gc@Bsbn^YTpwezn{{HsJ?lj5ksugUZk`Y8^I$k(tH8-#v1jn@FT z`|<`F+933{scp%}{z1rwV9qRY8#oOHkfHhaYd%xna362L&L7|%V{Fz%!crTfXZFv+**%jsK>G2q}TVR9}k z%0V@rrSXnEtI>9vQzyR0%@`BkQ*Rabp2iPaU@pUC&_QZlC3R#gfDcKxD-y z2CsaqTU(HdU5q(t(AVf;d|KXm2)y}x&3{C+;veZNk3ayusLIO+^hv-@>isHG8&!zd(}}CiHJw`qoK(s9Py{ zNPnup`lbcO=*#;T*Fw*sLHlHIasO4d=rh=T=CNZCu^A&i(IgKJ@I!1PyxV=P5C=UJ zsgFL~0}aY*uoeGc*p#CH zdd`Z1FF+DDw*CE&~<~bpnb8-D(p2_^x-nJONCdGuTyuPM+s|Wj87ydcoyaTgek@_8f%*Kz|of zf~P5hk#mE6cHRILB5ns1yH42LVu?E?Q)y5>3vFcX6XlU=`7@YJTn-1V9G(E+!Ag^7 zo2Jwwdc`ylx761rdBNc-k@{uk)hpkI?#Cs8m7!sAxI5P$VkLgd>QKb$L##d;pTq7X z_AkwDFgxN<_K)^gd&2zb$rxtp6-i!(8Bih@`*OVB(AkyH=>fdkj;C4mVbZlPr- zS$h|q{~UnLy$_pvpk@m85q*ucnJD4x6-$)%c#eXNxCrNKn(*8YU!(ao?YjZLsvdhO zQ@)Etyd9u9AV7fD3;i4akpP;IL2Y6KnAnyrmKV|WJe&8+Y5(J;)_hA{Rw|o(OJhMg z(PE7`(VC$D=Co^_0!??Ip=)~UueHRDGqRb=e&tg-c9xf$wo8GhL{`D< z;QhI7%kKcwP}>nr`4=I^u`@Yzj8z92t7LUKsg@HJpozNat>Sio?sqxYs=nC6`7Sh* z5HoCNmG+Fz_v_G|ABWDJU)rhq5uf7lDuC~2)K3NRDW}4>^CTPbA?2*1A&t%g#fDT8 z7}9NyDjNhr8|eh?<@|PHor#CogsdE`@ZPw3`m4~bC%gLlT>okCVsN1YPz84f3QnQ? zI7V?4gpw)6g_aH2V}9{f%my@?lfK3^+YaSRFcoRhG=B78n8~>DYcdk8F(aY8%&kJ_ z^S0W|*WaT3{};v2*Il<351|-HRv~u?3kJ|sey0(8K8!y+aq^=yZhphOnef}9_>Eke ziyXNIcX`le`7CrnDDZD>mbBV3BP767t#U0dPrLdzY6%RgWqcSt%BbQ_?7aqmq1tqzXkA{!@o^~a1#6`!fz~= z1AbZX8wS4&_zgrj_@%gW2(vb_a5WEC zZf0TqyDV(v?+zY+@jqFZv4w>*c=!;<_c0HD8<5Ag8M9Ik=q z*TmsU_;-QRWpX^}@3U|c50~+szsJHUJS^p5B@ay=W^nmfusLp8DrQfPuR(kA z_IZ{)(bbiaxYJ;Me1+ysxuwvb*%665GGy)>apTK(m~RrQ2hSsah~i(iJRP#%b>pcU zO!hx#V>_M*YJP()GrX8M{)e7IM<3`H4Vdu$!$ znTy6h$^1R8|K?Mu>^vZLoM#;U2mgWezm^uierD^7-LId)^#-^+P8UpaE^;Na4V&Ox z2cZqMbaXy1D+-Ti+Q%O#8uf4M#^bc_s8PXfff2k-)0HDt-`TXVedK5pN67JMtobH? z8fW5>toDM5TG)J^Hc%Xa2I`1+hehv(JQwLNF@$Ar$D_Xf@X zp9@`HHs{^%H7ue@yN|=>=N%-4TA0aU=!cWtod-qoJcuxTeNL=>oVK{uY5}WWWm^c2 zzZfsoR{J^-`tLZO{oU(`;&10f5A&;Ji>w3Z04MsYZD|EpRGf=)v=rM?d}@)|GdAND z8PvGOAJnsy@@HET7QM)JW4Q;IDwMJ41})I1A}xvypIWMl7Kvk(P|+gW80DLyMfQ=U zN>kAy>2zgp(V`@p4^Va#ElNH|sV!QR!rnIj4Cc~N}$6q*HGELwE> zDCN7NMQ7wF%|(mk+m%m^T-tMg&)<+Bhh{T!>7=zhdUxWu8hG`&sam!Rg8o`IjuM}v zQCZ;WTrFFIAPvu78R;hf-51tzz-> zy7Vlk`2}vap~%n!9oBv!l6QBkf64SSak)5X>qWnG(pJk}^ZOhibcS|$A zC&};Uir#AFM|e(#XB#|!BX1a)BELW0?rorTJ`FA9arW?wS84xCzokGEwEbvuAy!# zuJJK{^C_(!3NFI)0(>r9x|HfAB`QOP(}wU7`PN&E61Y* zTJEyiGrq*)S!;>KAJO$bv`+k}nbx-qIs^>==!9yD7dB{za3nw)p!-YEXFt>g60Q15 zM7?mC>RV~|7M94xI0B&;rfUlaME5KCOXyhNJSXl{)60p7p#yXSY0}FAw5JzoGQ*#< zO>o6>@MF?--(fI*P_M1>1|?h)e27Nn^A74MCH@uIF}{&LY+L*tZdKI`JV8cnvz6q% zpdBj7dtNU7kgymJ(RaIM;0EB5ygx%}ZG0{lH%+Q-$ugaTpy#>NN08miaXz;Y3t2L* zO)PP@$s5WLIlS2cADvWl7+#X#CzXtDv%yEgJ-RIgKqoQKWa3MSXz?bvzk}uBg<8Lh zri_ah*PwL7jmqju320f#xB|$wAoN#CQ39<=iQ7YW%AnNHoHHK1ujj2K;9CLsR(V5^ zXw13Q&dJrn@R9^S2|#S2+h``%rH_=y4gPV^|FIyXr0($VDC=U17I z66w*B(T~!pFuqmEnJDyM&^(Sieh(%5dyxKZrL|nNm&n?vQ%2{4xIvakib%@!AZA8q zvT#|_7~S$l<)FMVuT|dYJB($>*ObTM8_r=A$-xk^^GvM@2Zw%7`!0Qtt0!#vn(tY; z7_S|G4@K$;2|g?b2pi42$-x^VtPSG@Isq&neL}<+5W$=iHh8l`%4aD$=L9rdzGop! zf^WuGbdg^&JyB=mdO2#nDppRiICRQ>RgDd6T z`y!FhgEa5C5^L1$h{~=*M4@%qLZc|!O(;JkRdvc&n3U z=B*)D?{+jXbP7nK_;P)5FNliF0x|T(FH!lGJangwo{Z{NoGtQWYA+>-bUf?}D&DgV z3yhomhC_jtVS(QJ9Cv#bhdyX$s6gJ`PjOkt@;qfL$$3hI50q)nQ})nwI=*1FDdNek zi8PLq_~9YYIDa&?)axsqZ`XXKM&4?zUNi966!Qh#4el#N^OAo87XSdO4QUG&*q#fF z7zKH`PzdD>b8xDg)le30px5c(74y#Hkw|7?sZtxd`lWOK0o$|Df5Y}H$%QR43IzHC!v~lLUcegFQlJ-t+ZJ;j z+DPd4IJJ>Z9elizE&N}wO;JkFP;(o{&!l@8SQ6Usp}Jzqad z9$$@C_*h!~XH?Gf;Gwb!dAo+a59X&m;xaN-~NO z@Duu54OS1y+W)hX_WzvDAd|#ha<-emZVPv7r-A%nm;iwBO;rfBA%Mz zZ`JawJ%fSaxPN0W_^K_be7D$0hk5;TxU*xhuQk(W&N~O(P}=j$H`%XxjB zVSL;{k4Nya3dI0imUrn>tC~AX)D}(Da!1oC=%ck<>=md7Km^C>xuXo}ar3v>x{n_X zZ}1sD;EK@q(3==PHu}x%9ZCFvw{$#9K;vRS-*)-{+GsvZ-zLU@Dm#79{i)_?T=QDv z;%k8LJhxWU@dNcSO@YEAW*Z({-ew+ZCC~~K_r&!Q7QctYP+HU2QVTQzZ#>P8gjvNJL0kfg;~Nh=O^cG$S~^wpX9Lf! za$2W#KKm@!Eaf(uIvvisLBs2^vRH?j_A7wcUym1f;4vZv!{>YSkvY&yB$sJq7JIUC z`)4U>%ExqcPdGN)>F^w_%VOIdveLbUpCm>}sd$I-%pZ^n)vWc$OBnr%b{hOZ5tMDlC;*HCx zGwRTa-=-(_!CXR%5TTWW@7R3|+>2~-FS5zK z$R_t9o7{_Raxb#e^xSkUJ6+Empk)uxa|deK1NGb?TJ{h2DI#ep1VNHUZCeL)Up@qONvl5AIE?7CB^iN|1PdZ zHu4!Ve;Aj*xfA!M{Ow6rbec9(Yo}?SXphrl-8A&P(si-{biU;?u@hb1ea5Ot0#?qY z`SR%P3U8D$?~-APp3~UfcqX3rFun|HMNW=RDRLEh;0f$p#*JfkKJNl|!PMd=nNPf9 z9dpmr#!GBlRcvHZIujZiFgnTREx3WB8t-Zfe2IJC`)Z5G3sBlvn#5x}I-PHzeWH(* z)N08rj*usMf=)ItC3`O4#Txq8`(5vk=#pMEb7-e8=#ES8i{2b`>uqcuG~#KnHrtg( z+t2HkBX53^=sp?E*Nmq&`5LvnCiD0f?8c=OR|X0^N97F-x~~zZ3m&Jz3h9R8O67o& z8&TWF6imQlXLp;^s1w-)&Kaah)%LP9=53T97mrrJG*FGkGq3)WR;yrV!`Ey+g{-SZ z*zy)Sz=>Za^!}Y_Nusaa=-a|)kov0=sQ2TsOJ?R4A_g3)HhW+iFywmdrxicN`v*kD zKN6_u6{X_02~_a&TATE-xcQ`3-Z1uT1bURM>Va1`zCHx6EwAfyonUca)Ngn2qomaX zV$pD0#2D>r4>(&E;V$=(B#BBuJt!)NLJDJ<{-_IE^aqJkw-fqv6VW@Pul@1$iV108H5N5XmMq4e}pzxYQIePI6;|hd^DtXjqa8LKnB8IY%baHGdkkhc&yLME;DH;llod2;7+;K~UTgnI%;+b~ z$8vkk1x))SGuKhz?rOI4OAYB`g5bv62uF?gzEc_R|7d>$mi;|LA1{F+Us&4SjrEP4 zx3*C8FGqLsohRx3p9s3JE3kI*N*AAqT!5`=MV)Um9`R8iwL)lSwpd4+-6c^4YlxqHE=teat z4BvuB<>i$Z`C3YRf0Kh%Bs|NxNz>018{~~3)T;nEU&~t}Z``J5IpmG*QJU{%V=2-K zq~&Y=Pv_flSCg+)_br(!&{1Pkx7=6BS>R-3%^V%mpO3YKS>?pt9#*g+$U#lOX2%{tLr=#-b@mLN}M zX-hSBv9aK0)g~CaS}xv>nDQFX`OB-c z##{Ys^t_kx;)VQ7-=~3L@<#uss;@}|et#-&+z!IAB=iR9_cGnL#-8UIRHfxLP*0l| zM1CAE-(tM1(st6#?f|O$SL@Q_C?#yndbti>w0{lcG!}Atd%gt8-`26ZD#a?Xn%Aq_ z>u;6SB|?n9Zm&74oy}tH0?gD~3q6l{_#4nuz&vS3M`b9Va>j}aj>KIRlL=}wqFn07 z+aU{E>9E74w2=|aA)eq~Lj#(5^_p)7T@udh-Tz{%$Pn7YQjeM!!n^5s%Eb>3KVFGZ22N2MvL?I}duW zt)UBui4xVQuzkq~Z+tGG>w?l%ZUx*5;K`QUAu{|K}^fia$=S{?Os@xb>i-G4-v z-Uh)x=-GX{XZKhzsb3Bmpw>8U*A4^BSgnn{esO%?eNMH`Wez@pZEskq<^5NyYoBx){8spq$QM7rI_h+ zDF^k!1~dt@J+rVul#Bm@)}XLKR~p1f)pto+VKcZkFMoyA-iqs0Xbom79=Oyf7ynyi z6#WxL3hTYqeB>Q20*&S@eDv+Wb`@*biP4*AI;nx&omO)pLE!jOa46X+H)4B%ur;84 z=66l7GlTu$w>3hGo{z_n)06WZ6lzoC7E@lbni^bF&ui2RTaDa~T_)bckhkAjFFz8r zc0XDK>;+Gdu)QBf!{`BzJ`&d}T&^qoq0644U!(apYf6o-Z04JNahs&nS66B@sjv4| zso-0^zztq^s^=(PJLz6WPUwE~PC(}^a2FiFnQ?#pzAR_s$TYPsecwcT=nERLP{3(bzj!EdQYU_XKw< zC5RGN2jFfIl#@V-jx$-6l(ZIH4q#nheN4M&H^?8`kE%*bMQ`7NA60--Ye9P(yuM21 zV>&ID>Zgf%e63oc85+R)8M?BAPK#^A8Ez68^9h=$X%G>5Pv~Q|9oAE+Ukj{vw%m+T z<$OH2O>tWS&C3_+&G){8S5zl0Mmm+GO_IPbjASd1r7Q7!=u47GN1cr}?ta=?-*Lf+ zOJ5){l{XznxvzD3X5o=}>7eq4lP0);s%r+F&LJ1t0ZrO65hnPYt2-2yFN~B z9ZUD6t}#D*6OUVN)*3YbI&odC;qZ zdc^8ptt-&(J&RkQfQQ}*u7ZQ0LI9Jl=QT4AQ)$(6o^H42Jlif-YE<{$3C?*f4AoHD zWTQ_2x2;0+uP&u#6z$_#y1zodl}0sPn)@x>8ReqEJ6FMHSc*HESSfzj#93fB)7kol z6uB6$LeL9bnzCLz8aM}ctJg_SM;;^k5fiiqmEH!>K(@W{BpqU4oqZoQo9vKzAP7|o z3c3dxcw8i>G~oDVyS} zo$h97K&);X-oE0m_g2q;3_szfizuS?4AJ1c$`}&ezeC_ zTMOA7T0q9}mxlQ9moPurJ9HZ!$}l>mUGD>ZaXgNx+N+rIpP=fb;szzeDG$+2EZy|S zqy2lZp@u{aia7>(<%iY}{GMz_;J3j@zzsx!hT5POH0eophSVXQPMOgbxU{iOzA*EH zUpkNWNBxDZ_>E^-QH1$?w~vZf8_4j0EnJesnt!z|olw7vEQ~J6ImqKaF(tnuW}m~{_!vsvoG^Uu zt-EykZocq3R!OS0CxsRrU5{dCL+^a)e&+84={|rwcZFCa6fLgmfd2Ebuc{8n;1!h} z!JblalSqSbS{YvNQWtFF_W{%e!~7|Pr^uAPi_h=lKOTU>P6O!~(V}fPjRUwMhh7ew zMX{F?<~)2UV|VWm;rCN4V)y#o^RLwvmnS0Ds`LdH3CSD!qJzSKuf~hMB1m?@>3SI@ z^1BOm=a;HPsi+%R3a`;dWx=h_Iz2Pcq~a7u0;-9Ku6-Lm5%E%IlFtPpm!aGh(#wbV7HOe z2S_+ZS4)7r1#ugg0)QA&Ta=etA%H09k2uW3dqEF}-l+MC`0^98nU1|L25H$#PbKiQ zV=ww!MZu$*Z<%r}t8Ug}?#J1KJX}ueGd18F#w@NuAtLL*KoM`tM|xgya9aR+`X#~L zf%l+s+o=1BJiF0;)Jd)gt-QzMGJ!JXAn5qTkO16wXtF2@mkAu!^GZCs^ELNv?EPoG z919i81$Vu@Nut5Nw?+jjg9{B^%;ctpT&=XH)LTYxMg~{(0*)g9Zuc zc8~eVnlXgxB^4!I3_M7~*1M_Zkp}QTmqW)%rHn)q(y4D&R+9Gotp zFpIE5$-bVAYm{)Av*Drza(DxVUPg)?#AkEd0qX;;PvBo~h<*hV%RUXpPkE{OBNFt2 zg3agyQ3<@nmO8pE1-Uza5@RHE#O(A@-Y}HkvH`03%4>Xxkx{zjH7g%B(8#iKk%l5# zl`x2dc~1DEtcuk&!?FnnLCxR2#-E^9&X5m^As-q;{!S>$r_>Lld^#N;%c=fwU`?wH zWg^e>8j;~R&S^gMawmpA{|bC4qe^Me=)w|nDSk3?cs=2jB4*$fb_-B&GrnDlNc@$U z04L$izWAQE9-(XSJ^5vJEmN=_-`ZY6=#>b)1K&-2&nrb}++txizJzQ})yGP>n($j} zoT~IJx8W~>w%e_bVDq^noYaz!aIkuz`CMYI=ESZ8&FTiJh>jL!Eszb$0G&woY}Q}Np9@xhl!HWeAENq1So)%n(M6oWmF7;ETCF1oo{@+K>>E}?Z z?0OkOsM6y&GU&}~D%cI~?z=ehRQEXg4W!_{2K4u2=I`+;d+O&nB7>Jv_BHR?$cd~> z0HFx8*pEB9PPS4M~LFfAPV9m}T;+ZY2QphbUBS4xd% zT-$I4Q!5)ljVb+0*!4c&-Yjp$GO+_NPb@@A}+ z;RoNc3~_BKWYh9*K7Pl9$7-GX?)8GaG~2A8)-CCSK11{VaMLZoaYjbM{BgQP8Qwa&!ODQd zl@p?*s7Bm(T>Gu2)!BXk}VF=Xu21(GKNJGiQ+J7NHkNUw1Avgk+dkS z1MiNklgNnpN_lc84NO{aRH=KvqK)xjL{_2cc%A&nEK3@EEA=vb(TA2YNe2g~=C786 zL(SeRf9=k}`7N$PT(npw=Ua&=@ybUwkr0T5dia}fgiB8gc)@|QS&jh!cDF|6ZDfPeZJ-pHJ=e%bIf ztF6Pavx?(L4)gSfv8P)56^^z=yQX~V61%Rx9p*RBW9znK6CVC+j&EWwBK7C-Wqca? zQlv#bH{MSbcW(>32~9F+IaFk~RtMJM9NpJUn+vHU1ic`&X1LbImZh=1SdXJb;K@0y z&}v=aIcnXH8;-8W*kSJc3@T1(EePRq%cnnxu)CahnDgO#%U=Ks9y!H`iKhbBIZFe~ z%~P>+PmC{3m~S6QOE37PK)4jcY@JQ(- zH`wLkMw}L2B&EnpcG_@BARXB*7hj2&f;XtuDe~I7ssnbdtl z#k9voIe0lpqG6!J0d0}78nfJq{nr&JTnGyv{ED9{8;iVpS&LR({m->UCosk&oo+&Uc~5f{ewBhcQ>=i5z@@ED6?}yn)K4mtmPo zq~5wgxorzvrsv4dF69*K@dTD}DPkt2RT@>|rpO4_ z%SO{C9fugil8Tg(*FXrl_#!M{IWeppxe-EFS1(^p{A4>#`{PXztSS$BDi_zF^l?RW zfT*|X<@F>uqP~U6V-8i@-Bx|piY>|Dx4>&{ZbZu`M(h+ud?v+R;F!UWQEe9EFziOs#AZRWSZ5 zzfWfZY1LIHF7PxAY7lEVvzl3*YeOr*&nKzC>hd}_$&X(Jya?UYg&~fbc!tmdG8zVr zV~u*;CI{!C%9L}JAq-Hm7s}!k=E=PzS5+}(`J9+47e7Lc0P=I+K?c6>FZ)SjhH}0F zX5#a>s46&U<5Uy&y2@M>XGRsq8HHLyBH?Y^u_OWaZd*5GvDG?3J8L17GCjB8AeOLFlJYPaka6UmB?q)v_tT8LZ;=M-}t znr{uRME9-3mFT|pxDwr0q35RaYrXk}*L;Re^VJyC*M@E@@~D>Cfrh7JstoFDR^p9w zpu=DB2JbRz@KA>he?2RWkry_Um!Y3-soa({50ZV^nWjqfg=JQ+iZi z$#5AJ_;2}olGx3pH;5DpTeg{MbU5;-ER|$|{=HJqZYR|?NVP}DtF|$W;1GlPx3{pO z$tVU>X`dnU{G@luc8_Xjrqgg&=)v{O3E{(D@M7*d8li12{Wnp6ua9M3TbX&CceY;6 z+DR;#KJemZ+tXsHKyrAw=L_y`0!sj_e8H*|W^wM0MS_Ep!X?=Pf$`uZPfXG3Bw$ zcFYu$YN7kT0@biF^i+H22IjRb2@QIq*4KldE zewUt|p_h#%KS6SpDLL!)ic0Eq{rw zr#~P7vhtNjf(x^2P>sfK{#5<>Mbf^^hGIg)1h*K5IvH2mi@@*1?Vu^r^zXa*joV;DFq zr5WQ`-cB&b9pn=^bOL1EOH7Vk6{DPnD9UqKf6n~J>Igr70RUz|nZLNR2p2OGg}6>5 z1Vi#clpA?v`IrY14!=DBqP`G8#xqUvso zsysSRWa3X216r!}Ei{f83A_|zb<5xNesPT7t*i{)++m%c2plO}NW&nb8B+{pg;t)0 z&s42O`DWr#JLitUMg)kC(N>om!STont$a9RlVm>g8X9Bh^DHMTjHv2@I0B5)QT3x; zrx%8!E?B}Nbf*g!I-&ofmlFWt*4@eIlzl)WFC`=~^4j9_@t|RQ@%ebZFiI~xuA;|f z=i}MLb-`sED|E2zL1G#WJ88icQTxGi2|_-@X{;nUaIL(ytb}|{Om0Y5>Sb6ro}++8 zguVr)6{~SWMJ+kfqSrurRmxh_%V`X?d<7N3ky(ac3zo$fU8UlPx`Bb$ z>5`Yy2rfZL>J|*rKtCbaN;c~wa@tY&bZOJzoK5X!?@dgk=8(Q66VJvGep=g3BF@yn zKCS{<3>0a3ZQ$K@J*T4G7?YxY)fR0x5Qlj)E;=e>$w+BNZvxo&+rf_~A#~eqxQ;?E zBbh88+rc{!s4DoF`dJ6LHAJ0zPvSvLu~`y{LTU3z-jv zlm~!>GDb{AJM@$&p2z_ffP&bQ_3|l+T8jrEP_hiJsh%iF>?BiW8VXzSYAHO7lEx;P zQ-Fu@YUQOQD?^EwtD|+Rmy@DE1L(dIg>noo!Cf0<0$$W%wK6YT$b!pR2Zl6?5J)#* zQ(}@ZV=_+!g&9RwFC%-rb~y=hU9dQcgt~=& zZAi6Z8!o${e4*{W(sPuV6B;7KVw;aXX~_;Avq{A_k3NYL512-2i06e$6hcbYYo!+= zz)tn)9ok!7`UmPTua1-WB1*G`_+rq@mX|H*|A-(~GwEN=q<;}s*~#|keepCNbK)Ls z@7~!7%}?ua8YXjT{(9QaHy$m%NsFNxviKnL4LIUdWB!8okx}%ada{>n+u3>AUVh#>;x<37@3i*}6I4E+&>%Z)1!X*+BKTeAx>Pqgxp)5~>VGl)z-+Tq2A_-f3SIvnC_E&wmd zoDKPe=3-;gW;|p0dLS+6YE@9 zve0ZDTHRtglT~1gyN=w6w5KJ}W>E5{s1RtV_7PovYU z$Yj+9$KyA-EQm`zvD8me*;pLT)(f?CgbS`tDhp1CFb3Q_5!-I+I*}V#N9Vo>%>SyF zmj`h~-TeMfkqA3cWXn6q?{%mr*h6Dp6=ZhXo#@gy? z9c24$Sj~yGR3~DsZ?nj0Rwm*JUBiK{YXJ zxnibooyM|z{7NQMVrUSfwiV^>&%nD(Uj?2rRG}7DfP;Wni(s)s7s3P9KWCYPXpU!D z@Ml8gKM0@h=AXW1pTh9zUjFGr(xA><4dH#K!0+pPVRph-D7ORiV`2hwEEn7;Z!G&g zEt8?!Pv8x6$=8C3AMa%!?~Z+hw|k=w2(8PBYK)wWlE5UQh~|>Pm1yAFAqQWi-W2&g zbSRZ-O3=}em*|j;UB@gheGCt@lg{)qHG8f~-f&1gVXGrA43%|$IvF8+MO!+*k9wjH zc2wH&=veyf+3l$;+Cuh5IlX8LSrvIXxV+W9!gBGgNFw;?^%(9B$jsr(^jFAgIc9Cp zF&u?!G=sb-FbzZVu%VyA=G1TT9Bnxb7kZNj%+HiJeJ&34v>fLhSz+QMrLG1UcLC~Ag@(?4)Zz<%>p-tvy5SJQN=Y#Sf6AF z`d1!nP@8RBa5bV{F3v^q-DuF_VfKj$7cOBS6dTJCKl-tE{u%P=8)4^Pa?ig zkxf{mxO(qgwaxang!c*H(u1;U+z$S=YjHI#B=fHec~79wM=cWST`jdNV(51#EdP&< zCdZ63IJC#FyVYYLt4zzbUDVT{3~)IT5yAT^WU9@TW${*d4AlnZq+BL%^dH8BrjB6^ zY`YU{XRU%;e6Xx|Iv#YFp9%V3{QW7-_}u{5ny>lQB=SjCuP>+E{rQwRgwZ&c=M8Wy~*#U`557 z@;IIakC8qwWy1;ye#buC%RU^GgCBQq#On#pAGWGJ*o%EQ82x~&yh8Yu&nGf;a)&iO z5bE2(3XrJ($P2Fi$PP>Uucj^yIXokrndD>2LH(CVgib4vi*W_3XB&5k@H_;!$d-1M zzyoVpszg28$Fb3+DZ3mCKyaKyUI(aG?x8O^lU60iNyfeoLp@6k%6}P6DqEcb|CO6bQT_S zm{(y*ACo)Qs89!kRq?Bot_1!Q zTK5xLDb_gA`q1RZu_u^j9Wx^bpTr@&UHa`a^bylcJQ+P9cFs?@OnjQgMqFqZmo>Az zjoogZtumE=mIf89=JEw>c>Umc``z-|24gPWHWfA-Un3h?Cl}}R#x?V4`qR{#0sH=L zFDP-F`Q6{qwl``tkYr9>Ce z|Av3R;WO2$fxtv38=PPRxv6Y0)6G_xngc`7d=#-!tWBDL`%B)nMzuEK7FctB?0pQr z=f~cW;pX_*`|0?e8+-4K@7KiM&%yUgJH_|KcY_8#ag8$#JduN-mov7bX*I_dAYa@% z#hWiy5VQH)a$3wlgT}|@4ZF;m3LKuszB`LwAB~5O{%i3s&sWeSA2Z$rTY}NP2IHAc z)W4_gw5(=!u8jiy^m2qRp9}5|Tm=1`>C;8}Yd1Ex5u77l&SgQ=H|vf;f0I zFol!ro*&^WnfZqYaK%B{(AbCDHxeI)#l946T1qaFd;q~{stT&JB%4T{LYVRZa75Vfr{QJyzx z{DmbL_Y%wdsP;C?y8^u%T7VebCI_b?$7l-;Y9Wq(71%yh?rl%dhMBx>$cH(@t=RZPkr z58xx_V-^Ig6PPYzqh$nv17;`7qXTB&^8vFZ3U;!IRFSRJ_EJIQrNnv^rb!@7g=}vU z`erz+7Z|V8MkzyY1irP`(Q0E>RGLhnc_Fq2na6GeOgb?D{adie~>2N$-+SUNA8v-D<*rL>kAC51-r zZ<|8G;M8fAKC+eO^BmC^iLHmlm#8>o7P)YNE!* zOwtJPTQ4Aa)GY{ z=pjj`jd~@y$$asyW&d8M8QJHtyGqLetT9&N$S<)2 zft`Id1M$(N?iwMKH;n6RWBIXO@$x9{V#0&(ULv&M*=SD1N836H@8-9F8{0a6O-8YQ zmA~1k z&7^PNuy5F))B8s=QDwlj!_E3bv(*l8hyLN9eVV~zR0-kLDS_Tb8SCDa))?(sUPo2_^kUZ?@bK1$J7YS75BGsn)v z!J^F?-)L%P&BWa*qFnp|dJG*lel!)ce{74d&qc#Jlzj3mEHhSEZNUXlVz1AXmx#3Q zdbxI($i@>?wY=pm?-@n7vrTPFlb61XWn50D8tKba7tXm6tzM`C+VLZ+y%TEt<{6kh z5y3XZ;v_c4V2!!VPm$`j^W>!i5%GFD00|J6#v_*1jY2%iqYt65EEmJx2F_{&BQAmuf$V@@|MrF>v=1^$CUkA z;quVGQ6t9*Hnu0v-0=@)(y&3Mefcd{vlzpDqq&wMm1kSN#Vuq6zmmg$c+!GDck5Mx zwdvLTd^y=feB6zXopwPlu0g%C_5t8^!fxESeZb~zn0pCBu@$e0Hp^moo`A=e4VrI7 zXbqiT<$5=X@MrQ+d)#1isY6LIL|`wN6Weh9%(%^RNU4xY2^1MvgafxdExmN zZpHp(=*bQoXQT1@Vmv@0Do6!iZaobFW=7Qt?>%Bfzk3$z+(%-&Wd6E^_2dJ-I=U%@ zHG4B6*0wH8X7>LR(udLJ8T3dOeAwxc7A2YR82SYdBcsC{-ov%uA`~TSsYz@d?7A9HuE8t-B}a2ELm;45NE85^}J%;UsOkT z>|j(9YIoIFwn00MaW-gpX^Wc6Y)I&|YnIbE;fep00)3Jq0((yEQk1uGb`(wf*${5c z!ivGWW%5gDi&G1^=6z^BzxZp~?{}sgTul95s#paq#5Oxwh<8(>(rq zRAzY=Js$u9y|l5lpiZaavT*}3Tvz;fJ73J$Qo*C>(xbtwD%^`hyU8z$7U~G?@kBtB zhC?=1L|d$gt@&6)I~x~f^?;`i@~Zeqw32f^=RDr7(J(F>w??F{4vP=yqn9v1je5?5 z>J9f3S`ddiv@-09wOp&0vDCDE+QqoQ_~B&ypz-PAr$yw)D0-ev@_>MxEALtN;V@LR zRsWD?kdwT;1Uc05Y8(&3tTiFqVA=nvywo)ATAYW5uPjys(v?9ChVyAHNW1C{C#yyx zlC6EfwfS*mGerG~>>PT=Lx{X(3Drmo8L=7{$EtBF?Qy08(VZv!aT7dl#ha}|skFS9 zEZLV&MlIPMcnnG4k#0R3fqptp4Vs5Hy2){2@v#Hq z_No&SPCX|LYVcMmvihB@b~pn4AZ35%s3vTR(@s<#khD*{Ng7LY~7@HoU=z@+4lq ze=652gIrO!IZVSXbu9C;f1a#Zqb5#ufwXuNjJ!v^6}9vBy7VTJC49T zz^uF)*SLjSp6PnNT6g;eH(!g)RaWDELFs>Czo6&0vHgOJTPKp6?SR~%Lu8Jnym~=i z>{d#4CneKzEKD92%SA_1;W@pd+2+T!SCR10@%4ez6Up%JM;|+U68*nP$i39MpcL)( z3cQc1R$ZtW4%D_nx4xCe?m>hnlF7x-gMF#S9H&=FlOMkZKNhBXx8QgAak^@~44;v; zNgn1@4Z*mQ>DZ;%g3pF@gVzU%bCWG-Bj-A&*Ow|Uy$U~-69Q<71HWNg6KJr+P;sD? zPSaoGq1mkU}HAsQU+A4&S zo(bP8@N#nX(HRaoSWW}pc&s9=;AJeptGCRtgMjd@NO&IJeo&2T`!{fwk4RrbD$?ivR(ZcU*1{1&8wVgUqWInqTO+4wash16*fe&Prc-TDcZ>%Nh zlVZsgbX6mP0oHlGTWI<2b~|;8*iH9WW*P{meB(LFq#aw{5FKL&T*#)QoVVb>!3)&X zSYmj^mFO_xTj&5SEwDuF!f4)9U8Bppz@K zZa8V6Bw3%}0N=Po>W#}j;e{=%%C)JrcJ^ii3Tks4_J~S}MZF9I?*u1!G{0rm#Su}uwAH4)H|9mzGru%l(N)B{ty=<sRsjG~uxW8xS${dm8tQQ(1N*O*yN@e^|AMbHi7#TBM6vKytuHJdPE~6|K!K z7iVw{-i04XI&E@rdT;74V=axuqtOIxhvf|dw!GEagfwkJsy4w56xJ=V*z7qPx)Fy! zCpd9_XBH);yR6sUfum_eYiJAYrekz&wdfo^z$_lZ=)9V?^|;xs$askxQuwBg@nFBe z=LtR&_$=JRc0Oe{jjrQF0azNX_P0*3iM`;aURKGHp|jcxR`sye=w%% zx#`G7+BiYFi*MT;mI0zkpiPeWA?KDe^)k9qlxQd#-dhNqt+D}PhQUiO%04!DtC}J$ zFIQ+tj=t22pa8!su_oiM!x%o$TPvjqc(5r$PB+TY^^uvBrDA%^F$cat%f%_0+lOU5 zD6G*p=xCX(OIhRXrV-Xp(8!iyTyS@-FhZSu<`-Yeg-hD@!tX|xV8v=O39qpEa? zXvt2ra4GVJ36^+f$Qwq2Dox<3lsgpOL6s(ORmvSkTN*)Yna+~<|K%7BZqTqd7`sLt zZ(J>BJHy<3-jr=~qMbTmI+&?2pBan|3XbLD$rC6JIPVg8SRapj-Gf`nVx-7R>3*d; zc`YrBGzwDG@7lb_0uQq_^)&NJ=-K{1JSd>SY@f^I3y~}7d~4cqwnhbgzHwGk^RPk# z4a^nNO3C7l1QoBif|*}7DIco9U8}U)PA{j-c*cAZL*ki(`CdF1%ZmtGUSlZ?-*Ush zj-}Irjks2E3p-F~4?fczut8^LYFqGhq3C8pmu}#@7HmDq#7Ylh3a!jM$;X2mnWy8R zU08UJuK6}}*jk*{CMGn$dO0T2gM^xqJ^KB2y&RFSy;u0nj$5f{W0e-%LGXl|wkshF ze#7Fu_;8G~aW7XON)#F1&}Bcvr@_<-i%Nh&OP#ecx*LIn&7fV3`YNSZ zhYwf)M20&B8{0~9%xT5wPI+zd1#Ius1$^%mtpzT=fbAPxe*xP!IIhFmH&|t7f=7D+ z*{V{OMR1$WPKXEMPwWAyhB~`Qfzcpf{;`qE=>;NI9Mn^MR$e+M0ZYiQ_pzVP) zH>j7fWBOTA@WNkVV?6C~m?0X&2jlktl&dR%fGFN@5kQ zR~BivoYxIzmlj!3K2U!ptp4y?uh752Jgz&R&D&qf$JcPWwPFye*6oLn-r|w za2@n4nlC?QxhZ%aXYeRqlp5&U)j{zdR$5uRTC@9+%x}c|DT6 zWQ1gS9^`Ep;CIll2lIrAhW8Z$r^URCkTJ&YB_CNc22kxhDaC4Mtc}%9@*>t&q$5Oe ziWIG(G^n91%)d)#^>keco%;gy^d0y7%2*BNWQZlf!BlZq+Hmg_(n)!Gn4?K9ZUzJQ zK-azH43I~8LpI(&Rg4Gv2N4)_M{Hw~RPePiQZ)Zi$Y@I=+WI1Gky>e(5V#=bdtw}U zoym4i-U;O!y&Ulw3vUp;TbN+}V2`qHIP#8`wlU^Zdya}H1|4rX4KHVA1f}4d_D zGU!`&zI!m0h&W=8GRP{=Ht~d3R!{9I{aZ$m8-x-%wMeCpcx`X9vG7{ZV{)@Q7+ttV z`NG6IsdF4E& zLyMz*>=Y#*$DLSrvCzG^3QJfw;%??fC(9egb2s|7NjLzajhF&~T^lhC0!bS&1A-)N z#2g5cJx8?>fw+F}yTJPQ@#5IfNm`P`NAGUNFW1KrSQAH}#0mT|N?gB?>6=y zC!?fBzu_fho}*-WLc`lFnKH(UX5$n5z8+sA(_*=}q220;i^n~nx2UubUE&^wzSc42 zhtQi=8yUKR^jqkN4z@^T5En6)XQbgkba4ibeDIB+66)2sbK^$5=rWPenFr!Jr#{3g z9I*DMv-@AoJ1@Xt|1(Q**uULS4|0Lxm#=4~qOMllN{wk?AkIxdrvf)H@F8#qzrwem zKkE)W)(_kD_&Z~*`xw}K5pJgb?tIMhZ%@(EC_ZCEGQ(zu4fRkW5%2XQBE~Qx3h+=k z8XdGQ&VXzi`?BnbUg*!&na{dWaGVS=?hmI`@D98ZJ}?3=kHLai_iu>YH2wWt1afLN z#I?RJVsNO#Xz$1!iL*}-zq~INwdH$$e>LZ4FDhL1lLEg?S65fkWU@m`#zen82au{e z;y*Q=1)rh})1RTpYKPVrDVlw5r}}#RJj8#0PxwFVpMbwdy#3DYdS5Q#znSpcdcr^Z zSK{AzP7nC;#<|5GylC`*|I4$f+W1i)W^~HN~V)JjP!1o+6_nwO=pF)&{?Zy^daEMwld_auR>|pI` zlIb*>%Ak2%-IuP>B(1fU5}I6UdD*?;K4;ve;UAMK<3Q~{`q9vNf;B6}ei;yrQ-Pla!L zzaH_WnyG|u*As*%mE&`B`dq9=x<~s?-zeHReD(bi-{MaAl79uh2NLkb^-MZwF34g}kjMe3MK5dwF}n*`2&iBz%2J{(E^lD*>O{It;JA@wbA=LB*H? z;eB^0ttVjXv0b#Lz>#<|H0`EynkT+MS0x6*L|&GJ>@$=(!wP;XNxNt_*(G6 zr=bvr&F`mo5v|1gj%g`H8_xDA?dF`mNY5akN6*klNuEkvrQtm!FRvVQNHxU^!&b>K zCn(+336{LO^%}!aHbKAo66Oz=u#$3NrIL0hvT=u4o1Qa%b)m26%?f>ZTGv8b>v1?e zOU|bIub1$Z98R@z8Xt=QsKZ&|F*<+AC^Bf4BG^t=cpU$SsS$YLpp8orzg#hXVV+Kel?rqUW`ru zdaw(dy4;UGkkdDw=#zsMzZe~(KR`$vZ$*6wqz?RPPQhc~rL;5f^j`7v^uUdTxDJN1;< zB8!$3>?*?7uzstABjMQP$Lm!&vn4~ijunVXvNDCSd}4ki((*zldzxytok{jj1-*0V zV?pn{+fnDXBeUu)_KX|Qvzcj6vCK?Dd$G868m%cwClgRE|;U6V(Y7M2`%oiF=#h5yDbQNn;uj`zsq13&1|7P9EIsfvbKf%u|jJ_K??bM z$=GIYrY;&L0uMx<~w>&E3JGj{fx8sUdRVb1+}b&+SCwzo2uuFb*wKQcRS zgSV&Y*Z>vuLB?b}j@_-anC(l|{i&VIAMqcnV)TG+>S0eWtcP@LG`q9+F3M)x;$La+ zKV9{!bviSNapc$o|Bbybav?q5#lP0x2a`^1?`WTd_<@2kI=~xcmfrosr7Bam3(@ZBYKfK-Sw%J;od*>fKw}@y?^w|cAzF+ zQLkqoVF%mQkyugM96`!mQ4DhN<+P&NQS19j&~HK8wS7>v zcdxAe2nob6x3vcC^`(JGH|z7QLARw9EaIZGafK$X5VNrbl9IVDxjRm>3t%*xuCBM7 zWjZ}5%GB4L$mllyb{DczHRD0~aikFWCYFMqen^{~DHGk+W3{d#VjLC?SRSZM|(gy`^q`Mh4W6ZWx3 z^lUezQ|oCg*u1qDUkeTPv8N(^);lV)Wfjqa{dYx5;Rfun-c|)@wf|KWTzXo36*Q)t zq6!B0wyJ=kr<(nH~EEE}Q2lVQ?KXEiOV&)x0 zpmQNMd34DhU3sSqs57+1*#WVVda98gU~q@s8iH^XMBp&q#aRB z!aK?q*I>oQ*#}luMtv6@e+WnjolaXJ2n|!0Usss5De;AwES;h->y!Wc!i4P+e#ih~ zxIfvVj?u#;Aet2>xFCU^U64HVP{c|Vnq=u~%R&AHBdz`u`P+rXGuW_Jq z{I~$cG+t=AKWWJ>TVtQ7t>)is{L10;b)RWzCG{eG6hmX3~nfmj*XEl z4sGuM3oGGpN2%$nvA8YVdYk95m(#^O? zd^_}~<)tgp*h8`;AqPEBdj=Yp&?4OW~aN&)6!e;|-m)oqqoe|-W{`I<0O ze=~S&BP4Vuz1j#z=lv|u(~viaCB9azZLrS?Me{YzePFP^(eNFH_LW?paXcgN6gSye zMn2bIU!$JaXwR0kY>Dsu!3BZXtGF7eft-Df;s}XvH6RBGs#^P{gWV0RwGC>Z&KcKD z0TV%)j|2KaRU+W6honH#pgOBwk$`>3O1~4h4(zb|NpJX8Bl8NxjRvYBLOX|=F$nz; zO{LEjS3OH`5l+jehI-_m%$Q994xWUb2ge;fcX6tpUUkqWvIzkDwg-_W(=g+o8LtI}E8e)?@R0XFMawpKK>W znIPJ_2;xGNwY)vFi;MQq(${=T0{1ZSL)i<^8h`4G`fzK2If4PjBydt&PZFrs42f$$ znb=`T8|OWs`}g4c9@al)CguB+h$yU`091pjL86d7%;@ByZ~!QfVOA2@9yaL0PKg8p zK`LH5iDrOj3G%ME>`EgR{V-*LD-Ll=m!vujA`ODgq?*{^cUn??-^mUx)lkn!2JoO| zxuKp`%XoXiQ4%6Q?e9g)<(e>F-l{m{jl<-vpV&cWS$V@BwW%RdZDtn-sK+BpD-L{& zbmVI`c6WVZ|Jbt)JYIRD;<&?15m8(!ABM*kxnU}@#8#W!W_#NCb{e)3jO z7;{k;cR^`Abe>T43cg-y!8 z>>!>J?pGD$wbjV1YP3&&6GRg~g5~u!E*ekmQ82P-1V{|6h!S^$fYY(yt$NPe?ea#+ zksqvF&`O^0Xf6GTlMV+%zM1P{Yp6`ixaGF`RxbGu=s;B z<`BO*ujP%)Z<_NF<1}(y+nZn2Ap^Jbs}7!C)oc^@LZ0x+ZmvAu0Z==&?Nui(&_K`X zj}`6#UilmNwJL=!V06BgqQmFNqCWs#R4iiwUOXdjwTYET{rKa^>n4qr$=jiPjk^!o zsE52&hT0sU`*-MtP5RL1=)y=GyKKm>%fa;{Aff={t$OT$>f6CezC+mo;b30_chA5H z^X*@B8)V6=Q{LJegb=vxp*tj-^x=y-UwR@l`wP=Gl{(QCGjB3N`G+rrP}`5HXxW+TXRzLqng1L@wb{K&5M_7Yg(WjgIb z_iQuV1?&-$A+5fu?E>6Io-(MK zjxZn8!15VXm9LGS+tISzB5YBHPB|HQ>)FKsM1wI#*#C|mY(PQ8}?)<>#5Q;I@-e+C9*R< zSoM3N)emjc3NU9yUf&9tt?;(+{8sm`1_@{Hdf@4HLI;Q}{RJGrzwwqF1tS6SOz-;{ zS|CsaP!QF(2CU6$Id}+HrTI!1*PymCZRX?M!;hoZ{yZIfMA(T!PXWZ(7`nkcdZ;5( z^_^s_zY1Fkt;$nr+~zbMaYI|x(yNqCPZ=1v2C6I9yQ?6qwmBB{fo|Z|`hqjn8mCrI z*?9e7_%i<>e1Qaa!SlUZJzhjn<9rvL!Mn72qK4h4;)wu7Z?qvr4_FjY!}k!70w&jx z{%Nh_>h%+vfL8EJYo!LkQyJVHxC&e+a(axRE;RD)HhDv`<>aW98BssS#AWq`(9ux- zjb}*JID58lW*SlR@ie3+4d*j~!=HycBFqr0hdc1}gkDIL&ol#viOkw82MuSJ103F= z3z`{TGzL%HXvOY_T8Asr91dO*`5=`fZd^QZ?HhDfMiYn$(l{6Gy%JW|LkcMJX*#=| z;34FO&s1yDm>0mt50L)5k0JeM6aAyXYB=SMV4U;5vF~vS?3k7FBHnuAao{B#C*^w}jEjbp^L!5h;g~!{~$fYN2tdu^N|R z@?SJxJ=!MR-;1gI^;%u6WE0}XTiSm_Y@00?J?}7btHFxB0bl(MNSU1g8-m+#t1qY% zxa}^iQ>aW6>cAK}tmOi4Vb*m@x9 zkmw|!e{IDYYR1Q#eq`zDe1~a+-c}nwIsnr`PaW?$0{Jx`I?%x!cV?1yP`$VT96MG+ z`G8G>)t@$ZFmk~8jt6nGxk_4_05yM@rD~)U=d>VA;Q9kn=umIq;()#en9i$X?<K zp{>4P4$;vV|H%_3e;s_NkHF!Aucu+>4I)wzwy+Vb>S>S!g(DfiD9yp62t({R@+0*v z)f#rYj;_{IH<$V-b-0;cXlah?Z$lx#zWN>ahz+12A9S%dsGj#gjJ%@zf_j(f1{ zvweEyct7Z9)d{)Ebmb3fFr=(}Zx!7JRcWnn+BDwpXPH2y=Q;1evsaECpeA!rHP~+V z?cQCGB5u7dGY61|R-IpUKo)_8RaQ>N<@{YID6@J-ZD;)B<+b%%y|y!&MU{DhSfzdi zzQyf>>Id!hhVO;k?xC`fJvvqTjtd4It~z*ucnA^$ib014HQX!KBQFx?fAN+ROJF5;{U<`Mu-;0Aj(dt=7fSAzgLkA#5y9`OzQC3?CYd)(FKap~WdCg(e znjh~Mgok!70D77wEVi-S-mr&8gYJTINVd-FOQ?T!H`c28^C3j==KZV}vR;1j6*>uI zeLhX@!oS<26TIMl;mx!D9d*72dao8We?^N^^)-Mau-@xyC>+Obr>E%%n(Lz>t7MY- zJ#@EGWj-)AU-WGUFh~(7q;U13O^^~>{HJhG5HJHm=%xY0!Zo_T!dtERcPPbB?(IB8u`h&w199Al=%Ra+{Bim8MUr71yr~JQ&<^M%o{w()s-Q7aD@7H}bUf*Wf7z2);*H-m`(eDQnxCpt(>xl9i+O)sU0sezk^pJ@~ zufbLcdxMt$1ZZPu$_R~P5jaPCi~^A(*_tfGW(Qw1k)l@3UujX4!YLwj(4A+fZb4KL zplEASj3VG79+kjRO(2RYtqle-ax5Ilh~r1`k&VEZoyORR=5IE}9`pK}ap2@hI;T@< zHWsuQzWuz-0MYSwfMdkuLBtYV8F zBK|bp-;AeO1)^i}Y8YEp>_X78L#Ns6>yGFyPM)Nx`y^qu2H9!u{i-7ZWD0=+!0$(j z)S1mTx`8SI0jXcqCQN0JeLP~mTEGeb)r{WlRT+(k%@@82YFF-E49w#DjM|OT` zEHNu+OHr3Euh;pSlc*Q4hXsui1x*-)9>q~PE)k_s|FiV~R{Se>S^W+0&-^aD+jOgv z3XQ?u3UDTzXmL{b>5Ocx;iW`M0JHDUfeOYr2M1rs8g^L>YFz2 z=QKtS$p%*d_l~N{V4T~qUvjw z)WSxG9Gpd?7C1cTU`%E!GI@J6`a8=wIdy3hj@47<4yLW-EzmCUc@gK(Hw_NxQ{$2dPAR7obl*47h@0vI~L?@Sr>^Qtun9E@^dHRtY=Lr7I!gD>xG5lA^ zlqG}zPn20-oE%y*nJ)ZyGCC(tHZYvY;R8IhaL(j1HBX4?!u@fwH=X0O;^OJSG}Gd~ z1-eON@pdx*Hif?jg#UNxNII|QYq=a)wiV%q@$V>`9{xR}lZ;z3f$;yW9(dy5@!P04 z8N_rq@i@dEZ}(>MvOgHdr+K`79*z6Y@bEOA;kTOC-_T5R@ZvK#GGnp{0pq&w)^3kx5<(vO&J`SEs1zd)8H(yX9;HO5tNWuRpNg zXmn3RaG#_{XT!{Pef>S~(fLYK4@H-TR?0K?SgFJ_u>KC+9(5`CvTj@ReGxN0q2z?d zPQUXMgWoPQ2Oa6vIt}G0xNTJ^AFl-(6AwR;T9S7Qf`eK|E;0-AGz|*>7K@#Ae9Ca` zA8()#vd8a$c!q726)yiiCSlJK{Zdhj%C4-LjXA}auVj|4wlQEW|Fq6sUCL;u25}Tz z4>6pRV^x0Ja8S@xg}+^O?GUgOP6}`KB)MwR!;$-wodCFv5m`CtPTOi2HCgm8Rl^Y? zwEzn~+H1kf2d7QA1Y9Fd3H{UxS4({SwN3nXRM{>*Ouzi(NUp_Zd{cp0#4;CGc-OKJ z7p6Z>_3cE$mDYYAOFqTbTyC6qC%8?k{vCPi4(fzrG<*6Y(-)>Ce=SP7-}$lIet(K| zRqoHp?HhbD&E78R=34*sXmz=ox|iE{q|`iS%oKf`sdVId9Xf&TFQ)EmLx z{R#cEmW}}~^bM{@H7L4>@7pk8Xo<5ZiD&88R?^8Yy>AjCGm}?8>@!#h7;KBDU_S?4Fg@#=XuQ;!saAaCQ*t-bi`L z+poE8oMHaV@>RY)!<_7c2My1ug*9~Cy%B{kR3&Pi@2l6++IN{(B>s8R{#3ve(Hc;2 zm@*ljS<95&2v5CkmvER=+l1(ame?N8^KVAX)Q(~G@)V>}6@xv`lV)mR%|fANV#2A4 z9*38oHjm1bWbZHd{Q41~F8N(@v-W7Ld^q<5(WsMtflTlo=cZ4&ewgj-IR7T`7;wz7 z6YKIY?0T@Tc9i-!V#fI6yhja1v;| z>XQUYLjQ8gDOA`S`l`7653n}VJmQnj2XoyVGG{(a_CKwnn`7A0;atiIF}E%GcBR|- z;((WgC7I8hN)7fbGtAho`rn)35$6rPWiz#K((ylZT?ZRUn*~=YqvN52|~1S z)Vv89%4IcN*JpcXS2i5Z@Ge6p;?qXYnn97=Fpc}r&-U-180_#?wqM1|hJr*yUYCS* zuQfmjEsn3Q8*15eWy!O%iWFs1htA^G$i^Z@LA=Ao?oEfyda46~UOt zR5GdIEMnwv9axU|{lbAq*%vByWx55xoHg2?n|$=*jz@G5{URm5w}4Da4oI>s0QKxJ zNoI_vT#Z-&u1uG5pP@c#5#e>Da*>S(!4B;Yeg(1w({(EqOhw-(9i(@vAnL zoG~A322QiE@|azVWaG}B{tok`kUT1?Gs4FdNy-Gp{Y5Mez8M^<;!xL&CmVk^J4voy zEHftulnv$62B7j>;2DoS`*%JaIa-mte9b`99}~lf8_tmzcI{{0W`ADrCcr1hHp3uO z($(a>wqPw@U{u-0_AXcj9=gaWzF(veRRYZ;Bk4wEkPPc=Ga-&!;iRnUOrtHvSG-Dx$=TcC~D& zZu#(?>;%g0=gt#l6bU~lIbUjAc(!fz!$vK>T8#}CoQv>DzM04=QUAO;_k}REVuo1P z{TTxRkt-~Y_PG>-0N-OTk{NkvCM# zY*L_a-fN;8=ou|NdxRY-ba6S`k^Zq`R93~1HF(c?6Y3?xz?Dt)y}DS#G$_Ve&UgCB z6h({V)wL#}Ej?EKDX8YDvKIw!>sj}j*|S%FCZ^1yS?PJT<0L-l%=T?AoSG*+GAs$` zE_MZW9DJrMF(~>ps4hPh#GG@Jh2xd@kS;?orASpmLptSh``ZkOJ}0j&bGef%& z>*xK)Dg*6bz;>JVPd>aD`YCVdHB>(Q@O#^QPab2qiOW`0ir40^J4}>xKo0iw6}fuE z6{U_>Q6}8F$gC|P$Q&Mtm*fh)D{_$rn9wEgV}M0!9V-&c(u`YLbgeB)^!tzP%gUX{ z?|F{5b!m7H%ryp5KQzes1>2D~QS0WIn_8ejs z)mIiHk{}_h=EpcX!%za^@}>?He=YCP%?l5<*knT%-p=?`H|@1HUxdqv@8v1FEsi%t zoDTc&Mm5y6cG{RQT-N^mBt!$C;8q1-8kx!i-xA!V0XA^uUc7W&_|Y3q zBFU;2rm!c3EGFhjz`NnUVGsI#plvFmc=C)6z~zKA|XiSo$^4SoR;rn_9o~ z8M&(x{kGfPCeOy{vfzN5{OkF*t-;SyU-l}_JB!k9^s!3Yko|Ra*wfW5Dn$3q^JLEW z)l_LJxt<7oLC5BUGbW#1iV?KTZLfZw3}DhIT5fprg}db@VbuRhhnfexM24j4M@6Z& zdL1Kk8tZW6T5B&*+tFvLRjJ(b0wv_8ms{iIiB+zANFs(BKi5nwe9 ze@t%kkG%dcGE|w@uh^FYr9_5AmA9ly(jSJJ)a#y-N_<)gulmin z2=%021nLVi&PMx(pI=04qlCA zpge56#!s6utfo83(}Si?$An-0)5J zkFSdm*a6Ho>>Z##fOKPqo&WC{8s2;5Qv98IXG<>iCNp(FFtwRIVpKT1Y5;NVRulLe z9xZ_QBMb;MWCC+PMJ6;R4GAcJnnoJo+n!(Bkl`i?GVp|<-lNEJAl4zZLlI8y)PeLY zZV~pXL$V6RaK>NP8l8~HMYxD^m;Lg+f=|e_7aSE^GO7l9$9wS`Dlp-3b+-Skens4) zI)`j}byPzxgL#&{fDBzeLbeUy>n7<0PN2lLs~yvK1u5mZ)XoF*@1h~)9Y`VcTI9Fo zB<^c}YMgw*1~a(XA-jsY8QvsCHe*;_H*)DfHo~EHjWu*JLQs+qNARv`-9forwjE*G zd;+G&kS!4;U6~K@_~;uZp4)`k5ay=z>hq0$Y=+azq_|-{v!Mv&LiiLqAdK}%d0922 z>x6jr{N+Qa+TBo{(oyjc7u3b$fQlQhYZD^RIpxA(YS)hBP|^@Z@O>G*kF;T+9}>h| z=M;7yZNp21Nd})3&v_JUQq=@O)Yudey2RRN519aey%6Jn#fzhg$n5xbS0f>7?^t*2 z5N6l`)GE5E*kL$|ODMc?PI!>snwWH&>@6;AWM=qXj6ozxW%wN==;5h^mNMyh0C4(8 z0ovG>S&8;1IJW&dpL?D%Y(T_SbO>ZV4S2N!w4*aiH@8iz1_m4mb;7%`4=P>CDay{F`CD3*VlVF#o zt>^;0^CW!tF3H*7$Wk`aw>~Hw$HqMU2%)5^4qmgS`6&9%$cMaW6O8Cc)eQPkjWH6m z(7;wPY(u1Ec5c%?D@eUa_@yOk-Ta1oo_`+XvHY;+{TF3+eIWUysWUZoiw5~&O%e65}= zpoVnKNlFXtzI?P4@oLTJKJK*6&^S-!?N6YM!^bHMoZBunZa)IKuhOy?ZKOovcSx_b zq0@dq2@kbV)2kr9z84YH0Cp`Sa)n~6%Ol3!BO2#PX@UuGE(on12z+=LAdCh2-;nzG z()Z3&rM?L>O!QaV9U}S^%69tKG6P3^{a^aJqSPL0`7|w z`j#j;FVc<{Gksu$#-b%IW9<_4bgY8m?UOqbhMJ+dPAR;lOCz%3pJkV zZ-wPu?-=gWBzDzE_nEll*&AftDS4vp^TxE4!k1$Ee$7ebSeeZ4F_5ag*$nS$#lw^Q z*3zqQ=MXu66^pC052Gx?7NWKtrOdz{Yin7q%RCv_)X43MSCp!a(wgoJR>}^IEgg#5 zWWb?_K94@fhaWz)PHinxVP%~yy9a6(+5) z{oaq!$#OQtJcgH34HqEK3=8S)Z9kzfu)KgN@xuxhQ-mm>mGL_pf`JtJNkgVjkFb${ zVR>G4L8)Ii_X1Fn(7fe3*lJm;eeHtD`;E&m!GVq2k)~Wt*=EW0^EBkNPnV&2=>5ln z2v{gy{>We)Lrd@9d)y3;h%?7&X8yt@m@y<%W1XjOy=8=4KOA6Y|>mVwH?Gd3l{K*2f)R!YoW zu#>V`{3gP^9S@bX4+3{)!&Ikuv>d-i7H$^YhgFF=QODF&j_|#ty9X=mnxdiAt-w{S&m((<5exE7(lkL%A%MS z?Fa@!O+5GG9xuzGg5iSarkZPD^e&*WILd+uqYloyS)k^Rtg+)AA+~b?jzk|cg$q%z z$Z>e?^zH#0;j9<@86b4UaJUed_r9OHi5k;2>nXr)lhKfB16LL01%4IMwiA~WDFQ_E z|65cr`XSgRMx=%LFzPmK0?tGD+G(B%XhG~4P#@ryAPmLjwV!4Q5&8*q()RL%E$s^W zR+Uesr;!Ft0M#c`k-e>;{Fo(#U_=cwdSaSD32>&GP4$k{js!)uvFxNG4ZW32{zZk< z(R@yTVun_sYCitpG$O@Jv&(Y)h7LtQLBt7g-B>SrlsWX49}S8U%Am3#J56m)jNt;i zL8(+}(Rg;mk~jes8Ubba;ji9}X}U*4syv;~8ZQ_tBEU`aDg0Ji5Bj!{A^!WSGD@6A zTZw!lTm*EhS-%5^*D7IBonlVw9r(Arur{@6GP_R#G~P|`EJHcc-a&_C#AzB>&=uEd zTGXgbtgy%R;_J%9?KM*ec(Ah(V`x!R7= zX$RffRaXyqn#GwW2xfujlh|zvq-pX0>$@r&L6nCPUR0=EDA|_?2v$V~&Pr^zd8ZhH zPP&Qkg*sLO&*2nm(?oWibM5ScPJvuv)SGkQLqEk^#SFLgrynV@YW492SZ66w-9$zD zl>iQO>-Bkvd}HQ#Ek=MP{TjsX90V_dnoKH(s!da12B0yBijGsHs)DjKgDOAUVU!o( z7H3_VZ(OxSO_~8sbIbO2{=j?>xG=Qp+?4AjQ6~~uB-BMsviM3~_7#3NvVJ7(P<4Yw zMf$|DoGUXey9OfOv>C6%sWHdx0*S#8qi-sa!sfHYHN_WQ|7zc#x z4{Zj9i1rkXtDR?I{7?8tr`lggbOqC{_`JvOVo!q~rby)$klg^%F#G(9pp{s)OJ;>k z_LW%WOLK)T#-mel*|8Uy?Art@#zAq_5dm2K)7ZS?xuvbvuo_QpmPDHcnQO=UE|*3Z zH1VC31obO*H{$cs;XbWn)aLWdLZ*6+9`WDDhc+$1UIgJRQ_P+ySItM(qzBuGFjc7l zC?)zap)Ql{q+iUzr%{?-u-!3m5dC*K1rLalkb_GQtQQs7eG@Iudz@&>3^27=q&}OO z%qc5<1$P^yY4v}`(XRJpBL*b(Wz-{;f5ieU5)3FSVF@FA|42v1Ls(6k^|A~IEVOn__k7r`e}D#WeebFJTpQwHi#Z&GdKWI9wJsI=s5by#<=m z=#$!5{3ut7wh)C_x0#OW(bXMWS?mH#D`k7WH29)>HMJWj`)gZdtb_Nj+8zG77w>m` z*i-v3T<%%r{odjkfI}?yTl~a~ye}?his=V1Nb5C9Bt-mA$)WI${kDyaEwN1ZY5O-Bx zKtr5S4HW_u>#?BkB@yh`Q$uHG6D9HUi@uoxbHoLITsx`)8lD}CW)4iK#x?Q36a37! z%7cEv)@21_&+1(9nyo9#lOFs+7xo(J|CF#uoAl+QN7N)e%L`2glu=DrJ%mY0Fh_~I z!JZkzyJk1#;qMNCkZl5AVm zZwq3nC-+(71~%!YUMnuXvX%<#gJ}i3V1pO~nkd@5M}!A<5wNQ_&*IwZ^8y4}&bbE= zVIJ7iyl0ZYIn}B1g=MCW{_vB3O4KeLNDoAph#*Y8;iuxk#s44*Wy6+{aqPcV4Ym=m z>gb322-sO-bNAuGoJ?!FM-S%%O@jH|g${3Xcpz~-NBF=7nWkjM8olk?0z#5a{n+C= z!t+U~W5X)JxFV9!Jw=5sgOvk?GxrBjCF+&oO+*-divM3|N?6}Vh_auy9@Q|l0tKiI+1v|zUZVnP*^owC`K;ixGbTujN$2HH(D9Wv~+>7$! zZs#ko^Gxmotp9*vAinBle*X~jYzM=`EbCc9*M1URy~*cfOAFRVu+;a|ZqSLWfr^y~ zMao)&7Z)knvwrxgduitTZX|gg@e^iigg1O6uUw{#6iK(Cq6Q|5Ulam5{hCM=sT3A# zJ*HExC*qUiYC+7Y%Xa;wlY3l;q48FK&LyC>4-I@dHN6%4oWsq5B1*nvj!(mQMri@{ z%E2dic;O$M7tsp)Zm#KLs?@UI0PGIHrm?oo+qlB2XUywviPl=_Q2mN+$@3C^8uMA^ z?w&h-cadT%3F`e#@A}YDtGVRqoM}%D5T-r=$NTNR2MEuEGv)yTN9Bj8*+%2D`*{SO zahx=PAH~~NH#|wQiCZ|*PV^s1lFEkcEvEHq794aPIKz{_-gcB9%fmaoXE5cO9H#!p zVPAyBK(;Xj)bSPjW$rTG4o@S_2h)L{X(B#lt7(YSPUmMG2R1+?LWWybAnUwng*1_$?O9EEY3WE~ieF6EM z_$`K|{i0R94QH`G(g;pW65 z8cs~h3tiHI%;a9lrD;|6wu2xhx3dFsfG1V^y&K4>2|+%o*RWrT@Gv^o$0YsX?YyrG z?F&E03uD1))pp@-!1@D)Uht3~Z;fUSN1em0gqAnESznLK2xH7xM21q}qo0|AX+saurTco`LkUjSGUb8HJ zgu&bSdWYgogS1{HsDZUS1;6$<3<8qIikDaARjndo4eGkpMgz{+;60r0H#Ifp9JXu_ z)rjj{=Mbv1GefS)HdU*r(~z%Us0?q&0#D>|laryBcTaN!IMXU$y(1U?h$L=%^F(*A z>8~(misT@1b#-;t*lix!zr>mLdttez`>K?YGcD@b$$|7<8= zwJC{NEGbmh4_4I;GN=2QNU`$0=T}MQd&7mRFPs9KCuoJ8vwUypI`5NN6f#l!#Vk>0 z%<%rqkev*rJ{oOh^o-VIIv~>0dAX2*yzLt)vX+~zmefsjMI^a#g(jb9?*)Y(9KJQk_YT$-T61zM6bdqFLoYmykf$SWGl;%AiiMcvMS2@Zzp?g$Cs><0 z$us=+oBn(I-I98l)*D~OW!H3X(_DLGM;pV1F_u#oN`JF_WKF7+!Fj#^=1rJ3M*=U^ zMLJ(|zi7eV;2m6yRXLpEk9_D>pYMH!R42yoVvvXD?)Ye+n#1)u`+Uo!|Uy zJBDpsC|$X2lN5bmsXu-33T6@9=}rS-6RjV@AkQz_K3LwoIQPNhE|KT4Msw2H(Mv}- zD8xGrlpJp(joNK%3PNWSFeWE{ zaDTo-tu3j+jS+(V6sE}Hzt>ctAa^va`1L*4PY85iiaLJKS~?g1LUIMH#?)#K)mNV0 zM!vgjJKmq#@;};R%J<;N0EIDj?B9$nUZJ!+V!T-mj1C}l865Q^MymQj&P=OXIw>?WbPO(jO>ANWm(Jr;VR^kdZAMc=L0{Ydl$_;V)T(NS8Xo+ zJoK>qXwNfvqvySkic!Bn zJ^su8Q}oGfX9S3yK$TBDE)D)5hL!lCS?K?J3Gv@LFWcvT_za6%X2!XaIbxc(i z@I#w*0drbBWL+!gMUli#RN}0=jasXCmW+jGR^ZbLSS8l2wy*c{p4*ewiM8j2jACtd zPvy4zo=jKgdOH*{ELm9SO{eb9Sxd^~EdA26$Nt^;);H@Fn=5I=4*mqeV-bF6;62{I zC^MIrvES!Ue%oitKG1Kd!f; zVDE(d#wNlrg`IoeW#W`pn|F2ZUR`KUMRN=C1=8x?$x4;^W^0oac4JjhLICN?Z4jI- z+4H1Q_&zmW_WSOB;afSr9AsZ;`Jd!e>Wgc{$&a_SeR20Z>=KUs(v;MemexubXxo?) zhk14{mYpiwE>eE?J5SZG#J^2He=`5$cwP5i-PL%7;O>^e&q~M3tpj=S*KNI(t_Jm? zFr_^il&}#Ixi9qG-Tgly5^f<3GX#1Sm~SDPi2et} zsvhBgLWqm~{~#1@`Afbr%+1FF0A|F50LELr{}tf3k+BmIz}@B9|0SaP-$Z;~{3nlp sL9&B0$x2sli7yiT4-hT`;{O5if2jNmLQL|nHsagu;ce|*i~gJaUro+Bz5oCK literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo new file mode 100644 index 000000000..f382b726d --- /dev/null +++ b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/КомпонентаПечатиQRКода.mdo @@ -0,0 +1,10 @@ + + + КомпонентаПечатиQRКода + + ru + Компонента печати QR кода + + Компонента печати QR кода + BinaryData + diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index 62597b9e3..0b4aa0759 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -188,7 +188,7 @@ ВесВерсии ВЫРАЗИТЬ(ВЫБОР КОГДА Версия = "*" ТОГДА -1 - ИНАЧЕ ОбновлениеИнформационнойБазы.ВесВерсии(Версия) + ИНАЧЕ ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(Версия) КОНЕЦ, "Число(12, 0)") <v8:item> @@ -220,8 +220,8 @@ <orderExpression> <dcscom:expression>ВЫРАЗИТЬ(ВЫБОР КОГДА Версия = "*" ИЛИ ВыполнятьВГруппеОбязательных ТОГДА -1 - ИНАЧЕ ОбновлениеИнформационнойБазы.ВесВерсии(Версия) -КОНЕЦ, "Число(12, 0)")</dcscom:expression> + ИНАЧЕ ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(Версия) +КОНЕЦ, "Число(12, 0)") возр</dcscom:expression> <dcscom:orderType>Asc</dcscom:orderType> <dcscom:autoOrder>false</dcscom:autoOrder> </orderExpression> @@ -322,7 +322,7 @@ </valueType> <value xsi:type="xs:decimal">0</value> <useRestriction>true</useRestriction> - <expression>ОбновлениеИнформационнойБазы.ВесВерсии(&ВерсияОт)</expression> + <expression>ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(&ВерсияОт)</expression> <use>Always</use> </parameter> <parameter> @@ -343,7 +343,7 @@ </valueType> <value xsi:type="xs:decimal">0</value> <useRestriction>true</useRestriction> - <expression>ОбновлениеИнформационнойБазы.ВесВерсии(&ВерсияДо)</expression> + <expression>ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(&ВерсияДо)</expression> <use>Always</use> </parameter> <parameter> diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 17d5afb31..b47cb6b31 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,23 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="28abc37f-78f7-42d8-8794-05a2bde17d21"> +<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="643640d5-800d-47bb-bc90-7c6235acc247"> <name>БиблиотекаСтандартныхПодсистем</name> <synonym> <key>ru</key> <value>Библиотека стандартных подсистем, редакция 2.2</value> </synonym> - <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="6a482546-8053-4b49-a5c7-d10a9d202ed8"/> - <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="cd4d098e-3d3f-4027-962e-c15c09c6f665"/> - <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="796872eb-d15b-42f3-9dbb-e830b540bcad"/> - <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="b60aaabe-fc86-4c2d-89d8-eabf15956a88"/> - <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="b613cfcb-2e8f-4bd4-a938-2ac1faff9a23"/> - <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="e4196973-6540-4c0b-ac6a-1a2342581701"/> - <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="039f9f89-f65a-4207-bdba-3f470090bec1"/> + <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="c15936c1-15a2-4951-84a3-3e3d65d0f3cd"/> + <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="8d92646f-b5ff-494e-8bee-012d4a5c2561"/> + <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="db7650d5-ebdb-4613-bd40-bb2e50ac44cd"/> + <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="12677ba7-2ea8-494a-bc06-10605331cd7d"/> + <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="a26e1f70-e8ee-4617-b30b-368802db3f05"/> + <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="7ccb97a6-7f91-40f7-b405-b5588f67ebbf"/> + <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="2a6129c7-0f91-48ac-810e-fcd15ea90543"/> <defaultRunMode>ManagedApplication</defaultRunMode> <usePurposes>PersonalComputer</usePurposes> <scriptVariant>Russian</scriptVariant> <defaultRoles>Role.ПолныеПрава</defaultRoles> + <defaultRoles>Role.АдминистраторСистемы</defaultRoles> <vendor>Фирма "1С"</vendor> - <version>2.2.1.35</version> + <version>2.2.2.48</version> <updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress> <includeHelpInContents>true</includeHelpInContents> <usedMobileApplicationFunctionalities> @@ -43,7 +44,7 @@ <splash/> <copyright> <key>ru</key> - <value>Copyright © ООО "1C", 2009-2013. Все права защищены</value> + <value>Copyright © ООО "1C", 2009-2014. Все права защищены</value> </copyright> <vendorInformationAddress> <key>ru</key> @@ -53,7 +54,7 @@ <objectAutonumerationMode>NotAutoFree</objectAutonumerationMode> <modalityUseMode>UseWithWarnings</modalityUseMode> <interfaceCompatibilityMode>Version8_2EnableTaxi</interfaceCompatibilityMode> - <compatibilityMode>8.3.3</compatibilityMode> + <compatibilityMode>8.3.4</compatibilityMode> <languages uuid="db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e"> <name>Русский</name> <synonym> @@ -246,6 +247,7 @@ <commonPictures>CommonPicture.Предупреждение32</commonPictures> <commonPictures>CommonPicture.ПриложитьФайл</commonPictures> <commonPictures>CommonPicture.ПрименитьПравилаОбработкиПисем</commonPictures> + <commonPictures>CommonPicture.ПримечаниеЖурналаРегистрации</commonPictures> <commonPictures>CommonPicture.ПрочиеПользовательскиеНастройки</commonPictures> <commonPictures>CommonPicture.РабочийКаталогПоУмолчанию</commonPictures> <commonPictures>CommonPicture.РазорватьСоединение</commonPictures> @@ -361,12 +363,10 @@ <roles>Role.ДобавлениеИзменениеОбщейБазовойНСИ</roles> <roles>Role.ДобавлениеИзменениеОпросов</roles> <roles>Role.ДобавлениеИзменениеОтветовНаВопросыАнкет</roles> - <roles>Role.ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц</roles> <roles>Role.ДобавлениеИзменениеПользователей</roles> <roles>Role.ДобавлениеИзменениеРассылокОтчетов</roles> <roles>Role.ДобавлениеИзменениеРолейИсполнителей</roles> <roles>Role.ДобавлениеИзменениеСтранМира</roles> - <roles>Role.ДобавлениеИзменениеФизическихЛиц</roles> <roles>Role.ДобавлениеИзменениеШаблоновАнкет</roles> <roles>Role.ЗапускAutomation</roles> <roles>Role.ЗапускВебКлиента</roles> @@ -410,10 +410,9 @@ <roles>Role.ЧтениеЗадач</roles> <roles>Role.ЧтениеИнформацииОВерсияхОбъектов</roles> <roles>Role.ЧтениеОтветовНаВопросыАнкет</roles> - <roles>Role.ЧтениеПерсональныхДанныхФизическихЛиц</roles> - <roles>Role.ЧтениеФизическихЛиц</roles> <commonTemplates>CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную</commonTemplates> <commonTemplates>CommonTemplate.КомпонентаTWAIN</commonTemplates> + <commonTemplates>CommonTemplate.КомпонентаПечатиQRКода</commonTemplates> <commonTemplates>CommonTemplate.КомпонентаСклоненияФИО</commonTemplates> <commonTemplates>CommonTemplate.ПолучениеДереваОбработчиковОбновления</commonTemplates> <commonTemplates>CommonTemplate.СтруктураПодчиненности</commonTemplates> @@ -422,6 +421,9 @@ <commonModules>CommonModule.АвтономнаяРабота</commonModules> <commonModules>CommonModule.АвтономнаяРаботаСлужебный</commonModules> <commonModules>CommonModule.АвтономнаяРаботаСлужебныйВызовСервера</commonModules> + <commonModules>CommonModule.АдминистрированиеКластераCOMКлиентСервер</commonModules> + <commonModules>CommonModule.АдминистрированиеКластераRASКлиентСервер</commonModules> + <commonModules>CommonModule.АдминистрированиеКластераКлиентСервер</commonModules> <commonModules>CommonModule.АдресныйКлассификатор</commonModules> <commonModules>CommonModule.АдресныйКлассификаторВызовСервера</commonModules> <commonModules>CommonModule.АдресныйКлассификаторКлиент</commonModules> @@ -466,19 +468,11 @@ <commonModules>CommonModule.ДлительныеОперацииКлиент</commonModules> <commonModules>CommonModule.ДлительныеОперацииКлиентПовтИсп</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработки</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВАвтономномРежиме</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежиме</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервиса</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВызовСервера</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиКлиент</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиКлиентПереопределяемый</commonModules> @@ -486,10 +480,10 @@ <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиПереопределяемый</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиПовтИсп</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиРегламентныеЗадания</commonModules> - <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса</commonModules> <commonModules>CommonModule.ЖурналРегистрации</commonModules> <commonModules>CommonModule.ЖурналРегистрацииВызовСервера</commonModules> <commonModules>CommonModule.ЖурналРегистрацииКлиент</commonModules> + <commonModules>CommonModule.ЗаметкиПользователя</commonModules> <commonModules>CommonModule.ЗаметкиПользователяСлужебный</commonModules> <commonModules>CommonModule.ЗапретРедактированияРеквизитовОбъектов</commonModules> <commonModules>CommonModule.ЗапретРедактированияРеквизитовОбъектовКлиент</commonModules> @@ -526,6 +520,8 @@ <commonModules>CommonModule.НастройкаПорядкаЭлементовКлиент</commonModules> <commonModules>CommonModule.НастройкаПорядкаЭлементовСлужебный</commonModules> <commonModules>CommonModule.НастройкаПорядкаЭлементовСлужебныйВызовСервера</commonModules> + <commonModules>CommonModule.НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный</commonModules> + <commonModules>CommonModule.НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент</commonModules> <commonModules>CommonModule.НастройкиПользователейКлиент</commonModules> <commonModules>CommonModule.ОбменДаннымиВМоделиСервиса</commonModules> <commonModules>CommonModule.ОбменДаннымиВМоделиСервисаКлиент</commonModules> @@ -553,6 +549,7 @@ <commonModules>CommonModule.ОбновлениеИнформационнойБазыКлиент</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыПереопределяемый</commonModules> + <commonModules>CommonModule.ОбновлениеИнформационнойБазыСлужебный</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыСлужебныйПовтИсп</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыСобытия</commonModules> @@ -616,11 +613,17 @@ <commonModules>CommonModule.ПрефиксацияОбъектовСобытия</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлы</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыКлиент</commonModules> + <commonModules>CommonModule.ПрисоединенныеФайлыКлиентСервер</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыПереопределяемый</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыСлужебный</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыСлужебныйКлиент</commonModules> <commonModules>CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент</commonModules> + <commonModules>CommonModule.РаботаВБезопасномРежиме</commonModules> + <commonModules>CommonModule.РаботаВБезопасномРежимеКлиент</commonModules> + <commonModules>CommonModule.РаботаВБезопасномРежимеПереопределяемый</commonModules> + <commonModules>CommonModule.РаботаВБезопасномРежимеСлужебный</commonModules> + <commonModules>CommonModule.РаботаВБезопасномРежимеСлужебныйПовтИсп</commonModules> <commonModules>CommonModule.РаботаВМоделиСервиса</commonModules> <commonModules>CommonModule.РаботаВМоделиСервисаКлиент</commonModules> <commonModules>CommonModule.РаботаВМоделиСервисаПереопределяемый</commonModules> @@ -637,7 +640,9 @@ <commonModules>CommonModule.РаботаСКурсамиВалютПереопределяемый</commonModules> <commonModules>CommonModule.РаботаСоСканеромКлиент</commonModules> <commonModules>CommonModule.РаботаСПочтовымиСообщениями</commonModules> + <commonModules>CommonModule.РаботаСПочтовымиСообщениямиВызовСервера</commonModules> <commonModules>CommonModule.РаботаСПочтовымиСообщениямиКлиент</commonModules> + <commonModules>CommonModule.РаботаСПочтовымиСообщениямиСлужебный</commonModules> <commonModules>CommonModule.РаботаСФайлами</commonModules> <commonModules>CommonModule.РаботаСФайламиКлиент</commonModules> <commonModules>CommonModule.РаботаСФайламиКлиентПереопределяемый</commonModules> @@ -679,8 +684,6 @@ <commonModules>CommonModule.СообщенияВМоделиСервисаПереопределяемый</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервисаПовтИсп</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> @@ -703,9 +706,6 @@ <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> @@ -756,8 +756,6 @@ <commonModules>CommonModule.ФайловыеФункцииСлужебныйКлиентПовтИсп</commonModules> <commonModules>CommonModule.ФайловыеФункцииСлужебныйКлиентСервер</commonModules> <commonModules>CommonModule.ФайловыеФункцииСлужебныйПовтИсп</commonModules> - <commonModules>CommonModule.ФизическиеЛица</commonModules> - <commonModules>CommonModule.ФизическиеЛицаКлиент</commonModules> <commonModules>CommonModule.ФизическиеЛицаКлиентСервер</commonModules> <commonModules>CommonModule.ФормаОтчетаКлиентПереопределяемый</commonModules> <commonModules>CommonModule.ФормаОтчетаПереопределяемый</commonModules> @@ -766,20 +764,17 @@ <commonModules>CommonModule.ЭлектроннаяПодписьКлиент</commonModules> <commonModules>CommonModule.ЭлектроннаяПодписьКлиентСервер</commonModules> <commonModules>CommonModule.ЭлектроннаяПодписьПовтИсп</commonModules> - <commonModules>CommonModule.ЭлектроннаяПочта</commonModules> - <commonModules>CommonModule.ЭлектроннаяПочтаВызовСервера</commonModules> <commonAttributes>CommonAttribute.ОбластьДанныхВспомогательныеДанные</commonAttributes> <commonAttributes>CommonAttribute.ОбластьДанныхОсновныеДанные</commonAttributes> <exchangePlans>ExchangePlan.ОбменСообщениями</exchangePlans> <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.ApplicationPermissions_1_0_0_1</xDTOPackages> <xDTOPackages>XDTOPackage.CurrencyRates</xDTOPackages> <xDTOPackages>XDTOPackage.SuppliedData</xDTOPackages> + <xDTOPackages>XDTOPackage.V8AddinBundle</xDTOPackages> <xDTOPackages>XDTOPackage.АдминистрированиеОбменаДанными</xDTOPackages> <xDTOPackages>XDTOPackage.АдминистрированиеОбменаДаннымиКонтроль</xDTOPackages> <xDTOPackages>XDTOPackage.АдминистрированиеОбменаДаннымиУправление</xDTOPackages> @@ -809,7 +804,6 @@ <webServices>WebService.RemoteAdministrationOfExchange</webServices> <webServices>WebService.RemoteAdministrationOfExchange_2_0_1_6</webServices> <webServices>WebService.RemoteAdministrationOfExchange_2_1_6_1</webServices> - <wsReferences>WSReference.ОтправкаSMSЧерезМТС</wsReferences> <eventSubscriptions>EventSubscription.АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанных</eventSubscriptions> <eventSubscriptions>EventSubscription.АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхДокумент</eventSubscriptions> <eventSubscriptions>EventSubscription.АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхКонстанта</eventSubscriptions> @@ -827,8 +821,6 @@ <eventSubscriptions>EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия</eventSubscriptions> <eventSubscriptions>EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия</eventSubscriptions> <eventSubscriptions>EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия</eventSubscriptions> - <eventSubscriptions>EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов</eventSubscriptions> - <eventSubscriptions>EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольУдаления</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьВерсиюПриОбменеДанными</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьВСписокБизнесПроцессов</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа</eventSubscriptions> @@ -930,7 +922,7 @@ <functionalOptions>FunctionalOption.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьЭлектронныеПодписи</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьЭПВПрисоединенныхФайлах</functionalOptions> - <functionalOptions>FunctionalOption.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса</functionalOptions> + <functionalOptions>FunctionalOption.ИспользуютсяПрофилиБезопасности</functionalOptions> <functionalOptions>FunctionalOption.НеИспользоватьНесколькоОрганизаций</functionalOptions> <functionalOptions>FunctionalOption.ОграничиватьДоступНаУровнеЗаписей</functionalOptions> <functionalOptions>FunctionalOption.ОтправлятьПисьмаВФорматеHTML</functionalOptions> @@ -948,6 +940,7 @@ <functionalOptionsParameters>FunctionalOptionsParameter.ДополнительныеОтчетыИОбработкиТипФормы</functionalOptionsParameters> <functionalOptionsParameters>FunctionalOptionsParameter.Организация</functionalOptionsParameters> <functionalOptionsParameters>FunctionalOptionsParameter.ТипВерсионируемогоОбъекта</functionalOptionsParameters> + <definedTypes>DefinedType.БезопасныйРежим</definedTypes> <definedTypes>DefinedType.ВладелецНастроекПрав</definedTypes> <definedTypes>DefinedType.ЗначениеДоступа</definedTypes> <commonCommands>CommonCommand.АвтономнаяРабота</commonCommands> @@ -977,9 +970,11 @@ <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> <commonCommands>CommonCommand.ПраваДоступа</commonCommands> <commonCommands>CommonCommand.ПрисоединенныеФайлы</commonCommands> @@ -1003,7 +998,7 @@ <commandGroups>CommandGroup.Органайзер</commandGroups> <commandGroups>CommandGroup.ПараметрыОбменаДанными</commandGroups> <commandGroups>CommandGroup.Печать</commandGroups> - <constants>Constant.АдресАгентаСервиса</constants> + <constants>Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности</constants> <constants>Constant.АдресДляВосстановленияПароляУчетнойЗаписи</constants> <constants>Constant.АдресПубликацииИнформационнойБазыВИнтернете</constants> <constants>Constant.АлгоритмПодписи</constants> @@ -1015,6 +1010,7 @@ <constants>Constant.ВыполнитьРезервноеКопированиеОбластиДанных</constants> <constants>Constant.ВыполнятьЗамерыПроизводительности</constants> <constants>Constant.ВыполнятьПроверкуЭПНаСервере</constants> + <constants>Constant.ГлавныйУзел</constants> <constants>Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО</constants> <constants>Constant.ДатаПоследнегоСтартаКлиентскогоСеанса</constants> <constants>Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC</constants> @@ -1027,9 +1023,7 @@ <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> @@ -1058,11 +1052,13 @@ <constants>Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой</constants> <constants>Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете</constants> <constants>Constant.ИспользоватьЭлектронныеПодписи</constants> + <constants>Constant.ИспользуютсяПрофилиБезопасности</constants> <constants>Constant.КаталогОбменаФайламиВМоделиСервиса</constants> <constants>Constant.КаталогОбменаФайламиВМоделиСервисаLinux</constants> <constants>Constant.КаталогСообщенийОбменаДаннымиДляLinux</constants> <constants>Constant.КаталогСообщенийОбменаДаннымиДляWindows</constants> <constants>Constant.КлючОбластиДанных</constants> + <constants>Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных</constants> <constants>Constant.КонечнаяТочкаМенеджераСервиса</constants> <constants>Constant.КопироватьОбластиДанныхИзЭталонной</constants> <constants>Constant.ЛогинДляОтправкиSMS</constants> @@ -1070,13 +1066,10 @@ <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> @@ -1091,7 +1084,6 @@ <constants>Constant.ПараметрыРаботыПользователей</constants> <constants>Constant.ПараметрыСлужебныхСобытий</constants> <constants>Constant.ПарольДляОтправкиSMS</constants> - <constants>Constant.ПарольПользователяАгентаСервиса</constants> <constants>Constant.ПарольСлужебногоПользователяМенеджераСервиса</constants> <constants>Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском</constants> <constants>Constant.ПоддержкаРезервногоКопирования</constants> @@ -1101,9 +1093,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> <constants>Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы</constants> @@ -1128,6 +1120,7 @@ <commonForms>CommonForm.ВводПароляСОписаниями</commonForms> <commonForms>CommonForm.Вопрос</commonForms> <commonForms>CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами</commonForms> + <commonForms>CommonForm.ВосстановлениеСвязиСГлавнымУзлом</commonForms> <commonForms>CommonForm.ВходВОбластьДанных</commonForms> <commonForms>CommonForm.ВыборДаты</commonForms> <commonForms>CommonForm.ВыборДействияПриОбнаруженииОтличийФайла</commonForms> @@ -1157,7 +1150,6 @@ <commonForms>CommonForm.НастройкаОбменаСообщениями</commonForms> <commonForms>CommonForm.НастройкаОсновногоРабочегоКаталога</commonForms> <commonForms>CommonForm.НастройкаОтправкиSMS</commonForms> - <commonForms>CommonForm.НастройкиАгентаСервиса</commonForms> <commonForms>CommonForm.НастройкиКриптографии</commonForms> <commonForms>CommonForm.НастройкиПравОбъектов</commonForms> <commonForms>CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным</commonForms> @@ -1168,7 +1160,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> @@ -1202,7 +1194,6 @@ <catalogs>Catalog.ВариантыОтветовАнкет</catalogs> <catalogs>Catalog.ВариантыОтчетов</catalogs> <catalogs>Catalog.ВерсииФайлов</catalogs> - <catalogs>Catalog.ВидыДокументовФизическихЛиц</catalogs> <catalogs>Catalog.ВидыКонтактнойИнформации</catalogs> <catalogs>Catalog.ВнешниеПользователи</catalogs> <catalogs>Catalog.ВопросыШаблонаАнкеты</catalogs> @@ -1229,8 +1220,8 @@ <catalogs>Catalog.ПапкиФайлов</catalogs> <catalogs>Catalog.ПапкиЭлектронныхПисем</catalogs> <catalogs>Catalog.Пользователи</catalogs> + <catalogs>Catalog.ПользовательскиеНастройкиОтчетов</catalogs> <catalogs>Catalog.ПоставляемыеДанные</catalogs> - <catalogs>Catalog.ПоставляемыеДополнительныеОтчетыИОбработки</catalogs> <catalogs>Catalog.ПравилаОбработкиЭлектроннойПочты</catalogs> <catalogs>Catalog.ПредопределенныеВариантыОтчетов</catalogs> <catalogs>Catalog.ПроизводственныеКалендари</catalogs> @@ -1247,7 +1238,6 @@ <catalogs>Catalog.ТомаХраненияФайлов</catalogs> <catalogs>Catalog.УчетныеЗаписиЭлектроннойПочты</catalogs> <catalogs>Catalog.Файлы</catalogs> - <catalogs>Catalog.ФизическиеЛица</catalogs> <catalogs>Catalog.ШаблоныАнкет</catalogs> <catalogs>Catalog.ШаблоныЗаданийОчереди</catalogs> <catalogs>Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы</catalogs> @@ -1279,20 +1269,21 @@ <enums>Enum.ДополнительныеЗначенияДоступа</enums> <enums>Enum.ДоступныеПериодыОтчета</enums> <enums>Enum.ИсточникиПравилДляОбменаДанными</enums> + <enums>Enum.ОперацииСНаборамиРазрешений</enums> <enums>Enum.ПериодичностиРасписанийРассылокОтчетов</enums> - <enums>Enum.ПолФизическогоЛица</enums> <enums>Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении</enums> <enums>Enum.ПриоритетыОбъектовОбмена</enums> - <enums>Enum.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса</enums> <enums>Enum.ПровайдерыSMS</enums> <enums>Enum.РазмерыБумаги</enums> <enums>Enum.РазрешенияСканированногоИзображения</enums> <enums>Enum.РежимыВыгрузкиОбъектовОбмена</enums> <enums>Enum.РежимыИспользованияИнформационнойБазы</enums> + <enums>Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок</enums> <enums>Enum.РезультатыВыполненияОбмена</enums> <enums>Enum.СостоянияБизнесПроцессов</enums> <enums>Enum.СостоянияДокументаСообщениеSMS</enums> <enums>Enum.СостоянияЗаданий</enums> + <enums>Enum.СостоянияЗапросовНаИспользованиеВнешнихРесурсов</enums> <enums>Enum.СостоянияСообщенияSMS</enums> <enums>Enum.СпособыPOP3Аутентификации</enums> <enums>Enum.СпособыSMTPАутентификации</enums> @@ -1337,16 +1328,18 @@ <reports>Report.Задания</reports> <reports>Report.Задачи</reports> <reports>Report.ЗадачиИстекающиеНаДату</reports> + <reports>Report.ИспользуемыеВнешниеРесурсы</reports> <reports>Report.МестаИспользованияСсылок</reports> <reports>Report.ПраваДоступа</reports> <reports>Report.ПросроченныеЗадачи</reports> + <reports>Report.СведенияОПользователях</reports> <dataProcessors>DataProcessor.АвтоматическоеИзвлечениеТекстов</dataProcessors> <dataProcessors>DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных</dataProcessors> <dataProcessors>DataProcessor.АктивныеПользователи</dataProcessors> <dataProcessors>DataProcessor.БлокировкаРаботыПользователей</dataProcessors> <dataProcessors>DataProcessor.ВводКонтактнойИнформации</dataProcessors> <dataProcessors>DataProcessor.ВыполнениеОбменаДанными</dataProcessors> - <dataProcessors>DataProcessor.ГрупповоеИзменениеОбъектов</dataProcessors> + <dataProcessors>DataProcessor.ГрупповоеИзменениеРеквизитов</dataProcessors> <dataProcessors>DataProcessor.ЖурналРегистрации</dataProcessors> <dataProcessors>DataProcessor.ЗагрузкаКурсовВалют</dataProcessors> <dataProcessors>DataProcessor.ЗагрузкаПравилРегистрацииОбъектов</dataProcessors> @@ -1358,6 +1351,7 @@ <dataProcessors>DataProcessor.КонвертацияОбъектовИнформационныхБаз</dataProcessors> <dataProcessors>DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз</dataProcessors> <dataProcessors>DataProcessor.ЛегальностьПолученияОбновлений</dataProcessors> + <dataProcessors>DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов</dataProcessors> <dataProcessors>DataProcessor.НастройкаРезервногоКопированияИБ</dataProcessors> <dataProcessors>DataProcessor.НастройкаРезервногоКопированияПриложения</dataProcessors> <dataProcessors>DataProcessor.НастройкиПользователей</dataProcessors> @@ -1368,6 +1362,7 @@ <dataProcessors>DataProcessor.ПанельАдминистрированияБСП</dataProcessors> <dataProcessors>DataProcessor.ПанельАдминистрированияБСПВМоделиСервиса</dataProcessors> <dataProcessors>DataProcessor.ПереносФайловВТома</dataProcessors> + <dataProcessors>DataProcessor.ПоискИУдалениеДублей</dataProcessors> <dataProcessors>DataProcessor.ПолнотекстовыйПоискВДанных</dataProcessors> <dataProcessors>DataProcessor.ПомощникИнтерактивногоОбменаДанными</dataProcessors> <dataProcessors>DataProcessor.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса</dataProcessors> @@ -1399,17 +1394,16 @@ <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> <informationRegisters>InformationRegister.ИсполнителиЗадач</informationRegisters> - <informationRegisters>InformationRegister.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте</informationRegisters> - <informationRegisters>InformationRegister.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных</informationRegisters> <informationRegisters>InformationRegister.КалендарныеГрафики</informationRegisters> <informationRegisters>InformationRegister.КодировкиВерсийФайлов</informationRegisters> <informationRegisters>InformationRegister.КонтактыВзаимодействий</informationRegisters> @@ -1435,7 +1429,6 @@ <informationRegisters>InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз</informationRegisters> <informationRegisters>InformationRegister.ОтветыНаВопросыАнкет</informationRegisters> <informationRegisters>InformationRegister.ОчередьИзвлеченияТекста</informationRegisters> - <informationRegisters>InformationRegister.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных</informationRegisters> <informationRegisters>InformationRegister.ПодпискиПолучателей</informationRegisters> <informationRegisters>InformationRegister.ПользовательскиеМакетыПечати</informationRegisters> <informationRegisters>InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам</informationRegisters> @@ -1446,6 +1439,13 @@ <informationRegisters>InformationRegister.ПрисоединенныеФайлы</informationRegisters> <informationRegisters>InformationRegister.ПутиМодулейКриптографииСерверовLinux</informationRegisters> <informationRegisters>InformationRegister.РабочиеКаталогиФайлов</informationRegisters> + <informationRegisters>InformationRegister.РазрешенияПереходаВПривилегированныйРежим</informationRegisters> + <informationRegisters>InformationRegister.РазрешенныеCOMКлассы</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> diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 8ebfad4eb..f4ed8d467 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -14,11 +14,13 @@ Перем ПараметрыПриЗапускеИЗавершенииПрограммы Экспорт; // Структура параметров подтверждения закрытия формы. Перем ПараметрыПодтвержденияЗакрытияФормы Экспорт; +// Оповещение при подтверждении запроса внешних ресурсов. +Перем ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов Экспорт; // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.ЗавершениеРаботыПользователей -Перем РаботаПользователейЗавершается Экспорт; +Перем ПараметрыЗавершенияРаботыПользователей Экспорт; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей // СтандартныеПодсистемы.ОбновлениеКонфигурации diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index 8ebfad4eb..f4ed8d467 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -14,11 +14,13 @@ Перем ПараметрыПриЗапускеИЗавершенииПрограммы Экспорт; // Структура параметров подтверждения закрытия формы. Перем ПараметрыПодтвержденияЗакрытияФормы Экспорт; +// Оповещение при подтверждении запроса внешних ресурсов. +Перем ОповещениеПриПримененииЗапросовНаИспользованиеВнешнихРесурсов Экспорт; // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.ЗавершениеРаботыПользователей -Перем РаботаПользователейЗавершается Экспорт; +Перем ПараметрыЗавершенияРаботыПользователей Экспорт; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей // СтандартныеПодсистемы.ОбновлениеКонфигурации diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 3498cce9d..c6c33b12e 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,09fd0c7d-b8b9-4578-b82b-1395e59538e0,1,d89b8c93-e278-49ee-b8ef-11b158ebd816,"2.2.1.35","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",4418,1,0,28abc37f-78f7-42d8-8794-05a2bde17d21,28abc37f-78f7-42d8-8794-05a2bde17d21,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,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,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,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,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,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,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,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,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,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,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,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,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,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,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,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,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,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,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,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,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,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,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,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,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,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,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,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,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,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,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,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,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,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,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,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,7ea3206a-2a16-460d-ad6d-849103f50bdb,7ea3206a-2a16-460d-ad6d-849103f50bdb,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,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,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,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,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,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,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,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,f1bc5034-a4b5-4fa9-97db-d43c2b7e8d36,f1bc5034-a4b5-4fa9-97db-d43c2b7e8d36,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,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,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,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,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,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,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,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,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,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,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,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,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,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,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,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,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,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,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,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,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,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,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,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,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,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,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,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,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,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,0,1,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,0,1,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,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,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,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,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,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,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,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,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,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,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,0,1,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,0,1,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,0,1,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,0,1,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,0,1,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,0,1,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,0,1,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,0,1,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,0,1,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,0,1,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0,1,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,0,1,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,0,1,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,0,1,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,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,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,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,d5a13430-518a-4917-9de9-d00abbcce500,d5a13430-518a-4917-9de9-d00abbcce500,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,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,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,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0,1,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,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,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,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,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,0,1,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,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,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,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,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,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,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,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,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,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,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,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,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,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,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,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,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,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,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,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,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,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,0,1,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,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,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,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,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,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,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,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,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,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,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,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,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,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,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,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,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,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,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,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,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,0,1,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,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,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,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,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,0,1,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,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,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,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,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,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,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,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,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,0,1,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,0,1,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,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,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,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,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,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,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,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,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,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,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,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,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,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,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,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,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,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,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,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,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,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,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,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,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,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,0,1,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,0,1,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,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,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,0,1,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,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,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,184405d0-34a7-4668-9a64-d92a6a7da142,184405d0-34a7-4668-9a64-d92a6a7da142,0,1,bccf8909-6f99-44d8-9c91-688958fc95f4,bccf8909-6f99-44d8-9c91-688958fc95f4,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,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,0,1,fb07fd61-2aae-4759-b6ef-c44c2bba4036,fb07fd61-2aae-4759-b6ef-c44c2bba4036,0,1,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,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,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,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,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,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,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,0,1,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,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,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,0,1,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,0,1,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,0,1,e71f8f26-addf-4b12-a244-11610ed03bba,e71f8f26-addf-4b12-a244-11610ed03bba,0,1,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,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,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,0,1,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,0,1,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,0,1,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,0,1,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,0,1,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,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,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,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,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,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,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,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,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,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,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,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,0,1,7fffceb9-8725-46ab-b797-ad7aa67f1075,7fffceb9-8725-46ab-b797-ad7aa67f1075,0,1,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,0,1,005b3f60-d740-4670-b522-8c352958889e,005b3f60-d740-4670-b522-8c352958889e,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,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,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,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,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,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,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,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,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,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,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,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,0,1,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,0,1,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,0,1,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,0,1,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,0,1,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,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,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,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,0,1,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,0,1,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,0,1,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,0,1,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,0,1,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,0,1,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,0,1,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,0,1,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,0,1,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,0,1,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,0,1,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,0,1,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,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,bdc51d67-5fc2-4d28-8875-69e33e625be6,bdc51d67-5fc2-4d28-8875-69e33e625be6,0,1,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,94ca9aa0-f61f-496b-8fef-9e6fb7bd8f87,0,1,b494ca7b-6548-4fa2-932c-acdf8c62a78a,b494ca7b-6548-4fa2-932c-acdf8c62a78a,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,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,0,1,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,0,1,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,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,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,0,1,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,0,1,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,0,1,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,0,1,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,0,1,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,0,1,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,0,1,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,0,1,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,0,1,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,0,1,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,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,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,0,1,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,0,1,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,0,1,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,0,1,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,0,1,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,0,1,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,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,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,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,0,1,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,0,1,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,0,1,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,0,1,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,0,1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,0,1,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,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,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,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,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,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,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,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,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,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,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,0,1,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,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,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,0,1,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,0,1,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,0,1,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,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,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,0,1,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,0,1,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,0,1,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,0,1,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,0,1,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,0,1,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,0,1,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,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,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,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,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,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,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,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,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,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,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,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,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,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,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,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,0,1,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,0,1,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,0,1,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,0,1,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,0,1,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,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,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,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,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,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,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,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,e2088e81-4965-4f1f-b1c3-8762501109ca,1,314ecaf7-7507-4a6f-b7c8-39ef36c095cb,"2.2.2.48","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",4448,1,0,643640d5-800d-47bb-bc90-7c6235acc247,643640d5-800d-47bb-bc90-7c6235acc247,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,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,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,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,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,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,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,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,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,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,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,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,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,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,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,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,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,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,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,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,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,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,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,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,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,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,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,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,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,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,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,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,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,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,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,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,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,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,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,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,0,1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,0,1,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,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,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,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,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,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,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,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,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,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,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,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,f1bc5034-a4b5-4fa9-97db-d43c2b7e8d36,f1bc5034-a4b5-4fa9-97db-d43c2b7e8d36,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,2c97a626-cd7e-4796-b77c-0bc9d190680b,2c97a626-cd7e-4796-b77c-0bc9d190680b,0,1,498ab1ed-5042-4d73-9138-73ed547e46e2,498ab1ed-5042-4d73-9138-73ed547e46e2,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,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,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,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,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,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,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,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,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,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,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,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,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,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,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,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,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,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,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,0,1,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,0,1,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,0,1,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,0,1,b84401f2-b8df-4105-8049-6236423d177d,b84401f2-b8df-4105-8049-6236423d177d,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,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,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,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,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,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,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,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,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,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,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,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,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,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,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,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,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,0,1,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,0,1,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,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,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,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,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,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,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,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,0,1,77fe53c2-de9d-4483-97c9-f7d44e137d5e,77fe53c2-de9d-4483-97c9-f7d44e137d5e,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,a9a51e79-4c79-4a43-931b-c0321c1cd65b,a9a51e79-4c79-4a43-931b-c0321c1cd65b,0,1,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,e8644d90-ec2f-4ac0-8fbd-a7aa95c9bcec,0,1,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,048a1d86-bcf5-47aa-a36c-eb20c3f9f7e5,0,1,22f2696e-0ac1-4a74-bca9-987b267b2b59,22f2696e-0ac1-4a74-bca9-987b267b2b59,0,1,d705cacc-3485-46d7-9ff4-48c3c0757c81,d705cacc-3485-46d7-9ff4-48c3c0757c81,0,1,98f043ea-633c-4a03-a56f-efbc9e6ef288,98f043ea-633c-4a03-a56f-efbc9e6ef288,0,1,2033b92a-0750-478a-a12d-cf4f74d0a9da,2033b92a-0750-478a-a12d-cf4f74d0a9da,0,1,92fa2196-d8e5-45f9-9d2e-59d837b163ea,92fa2196-d8e5-45f9-9d2e-59d837b163ea,0,1,25dc2290-e283-4449-81c1-1ce15b58067f,25dc2290-e283-4449-81c1-1ce15b58067f,0,1,c534a865-a17f-41e7-88b9-c6af89c9d202,c534a865-a17f-41e7-88b9-c6af89c9d202,0,1,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0214bfe6-fb98-4487-8d98-6b10d24a3c4d,0,1,0127937c-94c0-43fe-9630-cc2ec6904ad8,0127937c-94c0-43fe-9630-cc2ec6904ad8,0,1,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,ce7c87b8-e4ab-47e2-b70a-7dcae8bfb8a8,0,1,8df5b3cd-7788-4198-a530-e88be83f1cdf,8df5b3cd-7788-4198-a530-e88be83f1cdf,0,1,ffaeea66-66d5-4741-a9b5-875afebfce7f,ffaeea66-66d5-4741-a9b5-875afebfce7f,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,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,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,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,d5a13430-518a-4917-9de9-d00abbcce500,d5a13430-518a-4917-9de9-d00abbcce500,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,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,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,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0,1,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,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,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,0,1,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,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,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,0,1,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,0,1,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,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,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,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,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,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,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,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,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,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,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,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,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,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,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,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,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,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,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,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,0,1,387d3bbf-cddd-4506-b14f-89c1f37adbbc,387d3bbf-cddd-4506-b14f-89c1f37adbbc,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,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,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,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,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,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,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,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,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,0,1,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,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,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,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,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,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,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,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,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,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,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,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,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,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,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,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,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,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,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,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,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,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,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,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,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,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,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,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,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,0,1,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,0,1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,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,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,0,1,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,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,ed5f4a2a-7dfc-4ebf-8656-020597eb24d9,ed5f4a2a-7dfc-4ebf-8656-020597eb24d9,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,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,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,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,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,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,0,1,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,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,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,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,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,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,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,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,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,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,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,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,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,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,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,0,1,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,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,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,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,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,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,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,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,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,0,1,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,0,1,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,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,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,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,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,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,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,0,1,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,0,1,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,0,1,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,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,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,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,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,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,0,1,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,0,1,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,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,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,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,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,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,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,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,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,0,1,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,0,1,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,0,1,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,0,1,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,0,1,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,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,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,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,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,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,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,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,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,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,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,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,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,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,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,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,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,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,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,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,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,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,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,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,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,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,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,0,1,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,0,1,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,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,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,0,1,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,0,1,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,0,1,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,0,1,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,0,1,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,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,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,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,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,0,1,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,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,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,0,1,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,0,1,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,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,34e19129-2ff9-40ac-a277-ea7ada6b977e,34e19129-2ff9-40ac-a277-ea7ada6b977e,0,1,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,0,1,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,0,1,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,0,1,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,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,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,184405d0-34a7-4668-9a64-d92a6a7da142,184405d0-34a7-4668-9a64-d92a6a7da142,0,1,bccf8909-6f99-44d8-9c91-688958fc95f4,bccf8909-6f99-44d8-9c91-688958fc95f4,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,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,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,8a904fa3-4a47-4e89-a2f9-e672b42729b0,8a904fa3-4a47-4e89-a2f9-e672b42729b0,0,1,ef80832f-963f-4b92-a446-015d7605c99e,ef80832f-963f-4b92-a446-015d7605c99e,0,1,72f2226e-7a71-4106-95a7-63242b48cabd,72f2226e-7a71-4106-95a7-63242b48cabd,0,1,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,0,1,fb07fd61-2aae-4759-b6ef-c44c2bba4036,fb07fd61-2aae-4759-b6ef-c44c2bba4036,0,1,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,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,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,0,1,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,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,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,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,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,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,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,0,1,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,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,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,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,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,0,1,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,0,1,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,0,1,e71f8f26-addf-4b12-a244-11610ed03bba,e71f8f26-addf-4b12-a244-11610ed03bba,0,1,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,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,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,0,1,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,0,1,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,0,1,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,0,1,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,0,1,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,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,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,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,0,1,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,0,1,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,0,1,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,0,1,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,0,1,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,0,1,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,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,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,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,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,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,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,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,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,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,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,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,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,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,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,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,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,04013c34-8d59-4f87-b272-732d5a6dd675,04013c34-8d59-4f87-b272-732d5a6dd675,0,1,7fffceb9-8725-46ab-b797-ad7aa67f1075,7fffceb9-8725-46ab-b797-ad7aa67f1075,0,1,f9df9b6b-5051-46ef-bb1f-1974f41054a7,f9df9b6b-5051-46ef-bb1f-1974f41054a7,0,1,005b3f60-d740-4670-b522-8c352958889e,005b3f60-d740-4670-b522-8c352958889e,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,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,0,1,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,0,1,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,0,1,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,0,1,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,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,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,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0e2107e2-8648-4b2e-9dfb-c23b1ff5b007,0,1,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,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,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,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,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,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,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,0,1,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,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,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,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,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,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,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,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,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,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,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,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,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,0,1,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,0,1,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,0,1,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,0,1,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,0,1,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,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,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,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,66b010d9-5294-4dd8-b69f-709e1410c105,66b010d9-5294-4dd8-b69f-709e1410c105,0,1,f922bcdb-bf1a-4381-a26a-15669deb15a2,f922bcdb-bf1a-4381-a26a-15669deb15a2,0,1,f641e65b-0580-4791-a642-95bdc8eb7c1a,f641e65b-0580-4791-a642-95bdc8eb7c1a,0,1,a480b235-eb2c-4f28-8c9d-a6d1455718d8,a480b235-eb2c-4f28-8c9d-a6d1455718d8,0,1,07d5d8d4-c684-4a39-93d3-46fe436e738e,07d5d8d4-c684-4a39-93d3-46fe436e738e,0,1,9e7dcb6e-7343-47aa-9757-d270aaa590b7,9e7dcb6e-7343-47aa-9757-d270aaa590b7,0,1,156c081f-4fbc-44e2-9f3b-df00393ee30f,156c081f-4fbc-44e2-9f3b-df00393ee30f,0,1,e00b724c-ab0f-4d37-9f02-05d22116b324,e00b724c-ab0f-4d37-9f02-05d22116b324,0,1,2fb5460d-c175-4650-9b00-a8af8ec47487,2fb5460d-c175-4650-9b00-a8af8ec47487,0,1,f5bc219e-dbc6-483e-9c33-ca84e556f459,f5bc219e-dbc6-483e-9c33-ca84e556f459,0,1,6bca52bc-8c91-43a9-9381-91b782972640,6bca52bc-8c91-43a9-9381-91b782972640,0,1,3eed74ae-d661-467f-a300-80cfa43b6056,3eed74ae-d661-467f-a300-80cfa43b6056,0,1,84aff2b4-233e-467e-bc00-0c4c745a5d5a,84aff2b4-233e-467e-bc00-0c4c745a5d5a,0,1,5238ef5b-f8cb-4387-b49f-6c46fa14e17f,5238ef5b-f8cb-4387-b49f-6c46fa14e17f,0,1,65dc6c73-94b1-408d-9c5b-82300a6ca1e4,65dc6c73-94b1-408d-9c5b-82300a6ca1e4,0,1,e5db7d04-bec6-4bee-b4d4-d1dadf8114f7,e5db7d04-bec6-4bee-b4d4-d1dadf8114f7,0,1,837c0e19-fe2b-4640-9506-ff36f9d77510,837c0e19-fe2b-4640-9506-ff36f9d77510,0,1,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,0,1,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,0,1,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,0,1,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,0,1,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,0,1,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,0,1,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,0,1,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,0,1,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,0,1,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,0,1,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,0,1,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,0,1,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,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,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,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,0,1,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,0,1,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,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,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,0,1,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,0,1,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,0,1,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,0,1,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,0,1,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,0,1,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,0,1,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,0,1,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,0,1,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,0,1,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,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,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,0,1,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,0,1,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,0,1,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,0,1,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,0,1,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,0,1,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,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,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,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,0,1,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,0,1,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,0,1,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,0,1,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,0,1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,0,1,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,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,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,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,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,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,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,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,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,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,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,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,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,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,0,1,88893c1e-afb4-4a08-abb2-6da0745b696a,88893c1e-afb4-4a08-abb2-6da0745b696a,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,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,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,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,0,1,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,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,f9c07de6-4765-4088-86af-09172d11ef5c,f9c07de6-4765-4088-86af-09172d11ef5c,0,1,3656d550-60d0-4933-a5d8-537e2d692ef1,3656d550-60d0-4933-a5d8-537e2d692ef1,0,1,a2c4aab7-01da-47d1-9ee6-3d705ed4e19a,a2c4aab7-01da-47d1-9ee6-3d705ed4e19a,0,1,4506a66c-7e8f-4fc1-b1e1-7cf02309a77f,4506a66c-7e8f-4fc1-b1e1-7cf02309a77f,0,1,f5d03455-753c-46db-a84a-f027edbe8ab8,f5d03455-753c-46db-a84a-f027edbe8ab8,0,1,f7c98be4-fb69-4b87-bbb1-920212852625,f7c98be4-fb69-4b87-bbb1-920212852625,0,1,59d7388b-8aa0-4f97-b86c-f34fcb08bf70,59d7388b-8aa0-4f97-b86c-f34fcb08bf70,0,1,36b704fc-bf9e-4ad4-aed9-4e6427699815,36b704fc-bf9e-4ad4-aed9-4e6427699815,0,1,c1899918-6087-460f-a7a1-142e4b914838,c1899918-6087-460f-a7a1-142e4b914838,0,1,07589ac7-152c-42a9-b6b8-c520e82349b0,07589ac7-152c-42a9-b6b8-c520e82349b0,0,1,86e5a214-083e-4907-9cf3-adf0156235de,86e5a214-083e-4907-9cf3-adf0156235de,0,1,4591f2a7-900e-4426-8e3e-50f2b6e02d3a,4591f2a7-900e-4426-8e3e-50f2b6e02d3a,0,1,71e79854-dade-4b5e-b7e4-5a0bc94168e3,71e79854-dade-4b5e-b7e4-5a0bc94168e3,0,1,d299c6a9-38b9-4d03-a480-3d15ede6ef2d,d299c6a9-38b9-4d03-a480-3d15ede6ef2d,0,1,8ddc148a-0bef-4dd8-8391-d98c5fd21a78,8ddc148a-0bef-4dd8-8391-d98c5fd21a78,0,1,accf0864-8bfe-4c40-a555-6ab423594313,accf0864-8bfe-4c40-a555-6ab423594313,0,1,128654ce-708d-4b85-b9fc-1790dc218ff1,128654ce-708d-4b85-b9fc-1790dc218ff1,0,1,857f4270-760b-4b1f-934c-386fad1eec58,857f4270-760b-4b1f-934c-386fad1eec58,0,1,49f781b8-8787-41de-b334-e9732845f542,49f781b8-8787-41de-b334-e9732845f542,0,1,214499fa-765a-4dbd-9f1b-a4ec401afc3f,214499fa-765a-4dbd-9f1b-a4ec401afc3f,0,1,5a54f871-2aa1-4cbd-9832-dae5f0c43718,5a54f871-2aa1-4cbd-9832-dae5f0c43718,0,1,e3673a14-8ee3-4642-945a-1858410d73a9,e3673a14-8ee3-4642-945a-1858410d73a9,0,1,2d4ec9be-b843-4c1d-ad1b-41ec3d1b14bf,2d4ec9be-b843-4c1d-ad1b-41ec3d1b14bf,0,1,97b4ad32-9cf1-4f25-9739-b21f4c33b29c,97b4ad32-9cf1-4f25-9739-b21f4c33b29c,0,1,f8ad793a-9362-4d58-94bf-53d6750f2089,f8ad793a-9362-4d58-94bf-53d6750f2089,0,1,29a3d9f3-88f5-4449-b9e2-56b517833726,29a3d9f3-88f5-4449-b9e2-56b517833726,0,1,41de2373-2d3f-4860-a8ab-88cf271ac6e3,41de2373-2d3f-4860-a8ab-88cf271ac6e3,0,1,e08a44a6-a3b2-49bd-8a47-abaf2631cd01,e08a44a6-a3b2-49bd-8a47-abaf2631cd01,0,1,2dcc72f7-453b-4248-a83e-6f49051bc639,2dcc72f7-453b-4248-a83e-6f49051bc639,0,1,fdb841f4-193a-4cd7-8569-37e0a68b970e,fdb841f4-193a-4cd7-8569-37e0a68b970e,0,1,96a3439e-9aa7-40f7-8b58-7d08d378010b,96a3439e-9aa7-40f7-8b58-7d08d378010b,0,1,f6590f9c-0365-4f32-93ce-258e2f8323b0,f6590f9c-0365-4f32-93ce-258e2f8323b0,0,1,c7a9c238-a830-46cc-b1b2-88d62328cd40,c7a9c238-a830-46cc-b1b2-88d62328cd40,0,1,723794c6-a391-4f82-a178-625781a136b2,723794c6-a391-4f82-a178-625781a136b2,0,1,7fd74e2d-7409-4f30-9ade-8d11dbf32a12,7fd74e2d-7409-4f30-9ade-8d11dbf32a12,0,1,026d090f-7c6f-4d77-8fe0-ff184dbd86b8,026d090f-7c6f-4d77-8fe0-ff184dbd86b8,0,1,2585cae2-5ebf-400b-8be9-a6207fcaefe3,2585cae2-5ebf-400b-8be9-a6207fcaefe3,0,1,f63d85ab-2524-4c7e-9647-0c18833c9c90,f63d85ab-2524-4c7e-9647-0c18833c9c90,0,1,0b81d0cb-e45a-41d7-89ec-ad056a5aa8bc,0b81d0cb-e45a-41d7-89ec-ad056a5aa8bc,0,1,f0dc2d0c-9904-48aa-9690-72a9d46658df,f0dc2d0c-9904-48aa-9690-72a9d46658df,0,1,76d3a71f-8b40-4e3e-9734-d9e998e685bf,76d3a71f-8b40-4e3e-9734-d9e998e685bf,0,1,3356b0cf-fa2c-40ca-8ec2-b3d72451d730,3356b0cf-fa2c-40ca-8ec2-b3d72451d730,0,1,79e0ab1a-228d-4aec-a873-8f379bb8930b,79e0ab1a-228d-4aec-a873-8f379bb8930b,0,1,0a87c592-6321-4519-a99e-620a5c1fda04,0a87c592-6321-4519-a99e-620a5c1fda04,0,1,2fd3d940-9254-4303-9d5f-fd334918b32a,2fd3d940-9254-4303-9d5f-fd334918b32a,0,1,e1ffbb33-35b2-450b-9795-15455574752b,e1ffbb33-35b2-450b-9795-15455574752b,0,1,7b817c44-3408-4473-8b09-d28d9afd0115,7b817c44-3408-4473-8b09-d28d9afd0115,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,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,0,1,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,0,1,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,0,1,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,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,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,0,1,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,0,1,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,0,1,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,0,1,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,0,1,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,0,1,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,0,1,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,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,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,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,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,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,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,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,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,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,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,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,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,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,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,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,0,1,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,0,1,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,0,1,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,0,1,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,0,1,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,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,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,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,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,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,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,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/Configuration/SessionModule.bsl b/SSL/src/Configuration/SessionModule.bsl index a299520af..fd6f36a84 100644 --- a/SSL/src/Configuration/SessionModule.bsl +++ b/SSL/src/Configuration/SessionModule.bsl @@ -9,5 +9,4 @@ КонецПроцедуры - #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl b/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl new file mode 100644 index 000000000..0dd43a7b7 --- /dev/null +++ b/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl @@ -0,0 +1,13 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ПриЗаписи(Отказ) + + Если Не Значение Тогда + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); + + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.mdo b/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.mdo new file mode 100644 index 000000000..df4fb406e --- /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="9893e2d6-f3f8-4d73-bb06-19bf26d216ab"> + <producedTypes> + <managerType typeId="e074ef73-c9c3-4914-8082-6d077cf9b49b" valueTypeId="36bb6959-78ca-4d40-a9a7-d3e2029b2bdb"/> + <valueManagerType typeId="ed77f50d-d908-4eb1-83bd-d81d32dbd9f1" valueTypeId="dd58b668-b7ba-4ca1-a721-eb53d55d3441"/> + <valueKeyType typeId="0664e2ae-ee42-5ac9-8777-fb7cddcc0ed3" valueTypeId="40cc7f7d-a684-57b4-b17f-071ad6f4e91f"/> + </producedTypes> + <name>АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности</name> + <synonym> + <key>ru</key> + <value>Автоматически настраивать разрешения в профилях безопасности</value> + </synonym> + <type> + <types>Boolean</types> + </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 deleted file mode 100644 index 6dbf2ade0..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="831f4abd-4f96-417f-a71a-9ff481c23922"> - <producedTypes> - <managerType typeId="91bbcc93-c4dc-4ae1-9fa9-9f2545c6eece" valueTypeId="ee9aaa6a-8c95-4ef9-bf90-126988ff2317"/> - <valueManagerType typeId="3ca8ce06-4263-4383-a1bc-d722cbbbd85d" valueTypeId="69d6ba53-1610-4c4f-b2f3-ca5e85b47918"/> - <valueKeyType typeId="928179a7-786a-5ca3-9705-ae0660661879" valueTypeId="e3749049-3de2-5bca-b7d7-563f2705d166"/> - </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..5d2060409 --- /dev/null +++ b/SSL/src/Constants/ГлавныйУзел/ГлавныйУзел.mdo @@ -0,0 +1,19 @@ +<?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="a1130128-cc48-4555-93a2-99e7f74f77dc"> + <producedTypes> + <managerType typeId="1585b11a-e2d2-4898-90cb-7b949cdac5d1" valueTypeId="ceb834aa-1917-443b-8a77-096ecf47d24c"/> + <valueManagerType typeId="942fc3ca-2f15-4b00-ba43-baef6b9751b0" valueTypeId="2d3b9793-5200-41a2-a808-cf639eabc277"/> + <valueKeyType typeId="dbd89555-1cd5-5e46-9b59-9abe87c90d0b" valueTypeId="1909978b-f9e2-581d-8e26-54531bed334f"/> + </producedTypes> + <name>ГлавныйУзел</name> + <synonym> + <key>ru</key> + <value>Главный узел</value> + </synonym> + <type> + <types>ExchangePlanRef</types> + </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 deleted file mode 100644 index c66c6bae4..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="b95681f4-8f91-483e-a9c5-c8a21058679a"> - <producedTypes> - <managerType typeId="3eb7e0b5-68d0-4046-8dfa-baff780e5647" valueTypeId="0ee48c15-efb1-4b1e-83fc-3b641de88c1e"/> - <valueManagerType typeId="44f2eae4-805c-462e-969d-d9daf8a7a774" valueTypeId="2496b361-5ac8-465e-9b96-dc5ff9a721e2"/> - <valueKeyType typeId="d849b7e8-5c9a-5436-a02f-4ee5a11f972a" valueTypeId="44e9a281-11de-56c1-be43-529a20f6abfa"/> - </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 deleted file mode 100644 index dd3e89ca3..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="9059defa-047f-4dac-9749-3d0a6a77308a"> - <producedTypes> - <managerType typeId="2d8e6bfc-4f27-427b-9826-d031a76ac4fc" valueTypeId="f99a5478-32ac-4fa8-9976-ee68fa68a2c9"/> - <valueManagerType typeId="11dc8b11-7b88-41d7-a7ca-3981467b6df0" valueTypeId="5ecdc621-2136-49bf-a57d-36005b2a6f7c"/> - <valueKeyType typeId="a52eeb6a-a7ef-52e1-bdd1-451eacbba98e" valueTypeId="91d28c93-17e1-5a08-84e4-b2c59c3ec82e"/> - </producedTypes> - <name>ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса</name> - <synonym> - <key>ru</key> - <value>Использование каталога дополнительных отчетов и обработок в модели сервиса</value> - </synonym> - <type> - <types>Boolean</types> - </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/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl index d57a1fd49..05787f1ae 100644 --- a/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -17,4 +16,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index 0182199a6..788900d99 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -2,8 +2,7 @@ Перем ЗначениеИзменено; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -31,4 +30,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl index 1f0284bc3..4b0578ae6 100644 --- a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -16,4 +15,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl similarity index 52% rename from SSL/src/Constants/ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl rename to SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl index d77f3fcf3..b9650acc0 100644 --- a/SSL/src/Constants/ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl @@ -2,7 +2,11 @@ Процедура ПриЗаписи(Отказ) - ДополнительныеОтчетыИОбработкиВМоделиСервиса.СинхронизацияЗначенийРегулирующихКонстант(Метаданные.Имя, Значение); + Если Значение Тогда + + РаботаВБезопасномРежимеСлужебный.ПриВключенииИспользованияПрофилейБезопасности(); + + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo new file mode 100644 index 000000000..46183b98f --- /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="a300ecc3-8031-4a50-a17d-b08cf3a72139"> + <producedTypes> + <managerType typeId="e715b70f-1f40-420c-8d37-ad2663fb522f" valueTypeId="9dc19863-0e22-4f6c-8866-7e1e5e559e48"/> + <valueManagerType typeId="7ba421ff-7c07-4974-bf8c-3ed0532c68f9" valueTypeId="7680a8d9-dee0-4d62-a168-40e5798336ef"/> + <valueKeyType typeId="233a0328-0172-5007-9bec-1a62c51fed49" valueTypeId="59e08f3f-0926-5dc2-af80-d6706897c6cd"/> + </producedTypes> + <name>ИспользуютсяПрофилиБезопасности</name> + <synonym> + <key>ru</key> + <value>Используются профили безопасности</value> + </synonym> + <type> + <types>Boolean</types> + </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/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl new file mode 100644 index 000000000..917f54cd4 --- /dev/null +++ b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl @@ -0,0 +1,9 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + ОбменДаннымиСервер.ЗапросВнешнихРесурсовДляКаталогаСообщенийОбменаДанными(ЗапросыРазрешений, ЭтотОбъект); + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl index e69de29bb..917f54cd4 100644 --- a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl +++ b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl @@ -0,0 +1,9 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + ОбменДаннымиСервер.ЗапросВнешнихРесурсовДляКаталогаСообщенийОбменаДанными(ЗапросыРазрешений, ЭтотОбъект); + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/КоличествоЭлементовВТранзакцииЗагрузкиДанных/КоличествоЭлементовВТранзакцииЗагрузкиДанных.mdo b/SSL/src/Constants/КоличествоЭлементовВТранзакцииЗагрузкиДанных/КоличествоЭлементовВТранзакцииЗагрузкиДанных.mdo new file mode 100644 index 000000000..c307c800b --- /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="df9db8d5-c5c2-4a9d-88fe-77247b2c417e"> + <producedTypes> + <managerType typeId="bfff7146-64cb-47c7-be8a-5cb72e070752" valueTypeId="234583fa-d5d8-45ee-85c9-dbbc4b3bf9c0"/> + <valueManagerType typeId="eba48257-3cd9-4c03-972a-71cdeb4b63e9" valueTypeId="f19cebce-5693-4bed-9d5e-adf7e4cb96ea"/> + <valueKeyType typeId="da430648-edd0-586a-bebb-ccf9729948c7" valueTypeId="92437b50-0469-5021-b69e-f563da057e10"/> + </producedTypes> + <name>КоличествоЭлементовВТранзакцииЗагрузкиДанных</name> + <synonym> + <key>ru</key> + <value>Количество элементов в транзакции загрузки данных</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>5</precision> + <nonNegative>true</nonNegative> + </numberQualifiers> + </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 deleted file mode 100644 index e91c93931..000000000 --- a/SSL/src/Constants/МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса/МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса.mdo +++ /dev/null @@ -1,24 +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="9039f720-5728-4918-87d5-8b2d07cabcfd"> - <producedTypes> - <managerType typeId="175a01b8-54f5-4969-b979-08b4404de16a" valueTypeId="8add504f-84b5-4357-bfcd-8342f02c4e20"/> - <valueManagerType typeId="a85e3776-ba93-4726-a428-38b891443f9c" valueTypeId="9c982179-c66f-4c86-8d8c-a0a3725c16c3"/> - <valueKeyType typeId="e74d128e-55e3-5eb2-8977-cfd5d4dcba62" valueTypeId="aa6b9ab8-4f64-5fbf-bc5f-86d0c7ab0a1c"/> - </producedTypes> - <name>МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса</name> - <synonym> - <key>ru</key> - <value>Минимальный интервал регламентных заданий дополнительных отчетов и обработок в модели сервиса</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>10</precision> - <nonNegative>true</nonNegative> - </numberQualifiers> - </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 deleted file mode 100644 index 81707b139..000000000 --- a/SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo +++ /dev/null @@ -1,19 +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="f3e2f35e-53f8-44e8-b24c-8385ba2c6974"> - <producedTypes> - <managerType typeId="a1a1a725-da7a-46d3-86dd-fee38a726da4" valueTypeId="1cd4439f-d8c8-48ec-94e8-080692638e94"/> - <valueManagerType typeId="85231e17-f71c-412d-9841-1b79dd797504" valueTypeId="5366a240-9bc1-434b-bc7c-a4735567d506"/> - <valueKeyType typeId="5def0957-6957-5620-931e-55f0cc9a8327" valueTypeId="bc0b3c47-e1dd-53ce-8a8d-218cacae8007"/> - </producedTypes> - <name>НастройкаАвтономногоРабочегоМестаЗавершена</name> - <synonym> - <key>ru</key> - <value>Настройка автономного рабочего места завершена</value> - </synonym> - <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/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl b/SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl deleted file mode 100644 index 7099ddacd..000000000 --- a/SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/ValueManagerModule.bsl +++ /dev/null @@ -1,9 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -Процедура ПриЗаписи(Отказ) - - ДополнительныеОтчетыИОбработкиВМоделиСервиса.СинхронизацияЗначенийРегулирующихКонстант(Метаданные.Имя, Значение); - -КонецПроцедуры - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo b/SSL/src/Constants/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo deleted file mode 100644 index 7ff396f87..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="3705a086-46e6-4090-a52a-535908eea8a5"> - <producedTypes> - <managerType typeId="73789c3c-170d-4b82-8389-ed58d798dc3f" valueTypeId="c4d719c5-7288-4313-8b47-9bac6b276fd8"/> - <valueManagerType typeId="0277c473-6263-4eec-aed5-cd7ead59d350" valueTypeId="1c7b8b11-3d24-41b0-9352-00465949008a"/> - <valueKeyType typeId="e5bc228e-d88c-5ee6-99c3-40df76e0036f" valueTypeId="e27ce567-5998-5dc5-b8e8-25fc625d8db0"/> - </producedTypes> - <name>НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса</name> - <synonym> - <key>ru</key> - <value>Независимое использование дополнительных отчетов и обработок в модели сервиса</value> - </synonym> - <type> - <types>Boolean</types> - </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/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index 78c05d788..a15bbedfd 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,14 +1,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Перем ОграничениеДоступаНаУровнеЗаписейВключено; // Флажок изменения значения константы с Ложь на Истина. // Используется в обработчике события ПриЗаписи. Перем ОграничениеДоступаНаУровнеЗаписейИзменено; // Флажок изменения значения константы. // Используется в обработчике события ПриЗаписи. -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -38,5 +36,6 @@ КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl index b579819e6..280fe6b7e 100644 --- a/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обновляет описание свойств видов доступа в // параметрах ограничения доступа при изменении конфигурации. @@ -86,8 +85,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает свойства видов доступа, заполняемых при внедрении // в процедуре ПриЗаполненииВидовДоступа общего модуля @@ -519,4 +519,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl index 48c6e961b..96f7f3462 100644 --- a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет общие параметры работы пользователей при изменении конфигурации. // @@ -135,8 +134,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция НедоступныеРолиПоТипамПользователей(НеразделенныеДанныеДоступныеДляИзменения) @@ -284,7 +284,6 @@ КонецЕсли; КонецЦикла; - КонецЕсли; ОбщаяТаблица.Индексы.Добавить("Роль"); @@ -363,4 +362,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ПараметрыСлужебныхСобытий/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыСлужебныхСобытий/ValueManagerModule.bsl index cf81bfb63..d55ee797f 100644 --- a/SSL/src/Constants/ПараметрыСлужебныхСобытий/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыСлужебныхСобытий/ValueManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет параметры программных событий при изменении конфигурации. // @@ -71,4 +70,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo b/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo deleted file mode 100644 index d35cb2460..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="5462f1ab-2095-4515-875e-471900f05db9"> - <producedTypes> - <managerType typeId="9d8c5ea5-db81-45a0-b2f1-fd94e8cf9609" valueTypeId="0a443877-cc8b-4a39-b497-77ceeaf6a01c"/> - <valueManagerType typeId="25db97d6-4f77-48f7-8a17-985dcac004d1" valueTypeId="e5c9155b-e704-4361-b521-a28e7b0089e8"/> - <valueKeyType typeId="4a7e7063-382b-50c7-8926-23142f4881e7" valueTypeId="10b048b3-7c43-5fcb-8b37-72eef1abbe66"/> - </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..a0cf09d56 --- /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="249b6436-bd44-4950-b118-7f40f7aaf794"> + <producedTypes> + <managerType typeId="6a0194a3-a0c6-4089-81bf-9af8a40e6192" valueTypeId="dfbef83a-16b5-4b60-a4cb-5bda1749be1c"/> + <valueManagerType typeId="4697f70a-1809-43c5-95e6-eb62a2043dbd" valueTypeId="2c5f313b-db00-480b-9a60-908ea0f6cf07"/> + <valueKeyType typeId="5fb2e0c0-353a-5592-8221-50d88fb9ae21" valueTypeId="e3af147f-6f30-5871-93e2-98387498120f"/> + </producedTypes> + <name>ПрофильБезопасностиИнформационнойБазы</name> + <synonym> + <key>ru</key> + <value>Профиль безопасности информационной базы</value> + </synonym> + <type> + <types>String</types> + <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 deleted file mode 100644 index 3c8025573..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="65dd4904-0837-4de5-a5e5-601151055d94"> - <producedTypes> - <managerType typeId="b9a78f14-1585-443d-9ab3-a4f6db65b94e" valueTypeId="3963eecd-8be4-4df0-b335-c1036deed8db"/> - <valueManagerType typeId="56abe531-f4c2-431d-ba0b-7e94e73b9836" valueTypeId="045d1cc3-a711-4876-b1a2-f27948507fb7"/> - <valueKeyType typeId="fb58ee65-a6d7-53b9-8791-cc6aebcc67df" valueTypeId="82916131-cd5f-5647-b416-a01cd1c25f66"/> - </producedTypes> - <name>РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса</name> - <synonym> - <key>ru</key> - <value>Разрешить выполнение дополнительных отчетов и обработок регламентными заданиями в модели сервиса</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <useStandardCommands>true</useStandardCommands> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataLockControlMode>Managed</dataLockControlMode> -</mdclass:Constant> diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl index 5818fa945..610e11f68 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.АвтоматическоеИзвлечениеТекстов.Форма", Новый Структура, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 838365edb..f28022689 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -59,8 +59,8 @@ Если ВключеноИзвлечениеТекста Тогда ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); - // Здесь ТекущаяДата не пишется в базу, а используется только на клиенте - // в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. + // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только + // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); ОбновлениеОбратногоОтсчета(); @@ -68,24 +68,26 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КоличествоФайловВПорцииПриИзменении(Элемент) ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции", КоличествоФайловВПорции); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Старт(Команда) ВключеноИзвлечениеТекста = Истина; - // Здесь ТекущаяДата не пишется в базу, а используется только на клиенте - // в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. + // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только + // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата(); ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); @@ -122,8 +124,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) @@ -141,8 +144,8 @@ &НаКлиенте Процедура ОбновлениеОбратногоОтсчета() - // Здесь ТекущаяДата не пишется в базу, а используется только на клиенте - // в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. + // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только + // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. Осталось = ПрогнозируемоеВремяНачалаИзвлечения - ТекущаяДата(); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -172,8 +175,8 @@ &НаКлиенте Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) - // Здесь ТекущаяДата не пишется в базу, показывается только на клиенте - // в информационных целях - поэтому не нужно заменять на ТекущаяДатаСеанса. + // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только + // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; Состояние(НСтр("ru = 'Начато извлечение текста'")); @@ -338,3 +341,4 @@ ВключеноИзвлечениеТекста = Ложь; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index 31236844f..de8b4f8a1 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.16470"></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.16476"></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 9844897a5..a8a269ab6 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -46,8 +45,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИнтервалВремениВыполненияПриИзменении(Элемент) @@ -64,8 +64,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗапуститьСейчас(Команда) @@ -74,8 +75,9 @@ #КонецЕсли КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) @@ -174,7 +176,6 @@ КоличествоВПорции = 100; - // Вызов исключения для каждой области. КоличествоОбластей = МассивОбластейДанных.Количество(); Для Каждого Область Из МассивОбластейДанных Цикл @@ -337,3 +338,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html index 31236844f..de8b4f8a1 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.16470"></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.16476"></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/ФормаСпискаАктивныхПользователей/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/ConditionalAppearance.dcssca deleted file mode 100644 index 6650d2b0a..000000000 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ -<?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:decimal">0</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 index fa5cd02bb..f007a8afc 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form @@ -348,41 +348,6 @@ </borderColor> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>ПараметрыАдминистрированияИнформационнойБазы</name> - <id>30</id> - <title> - <key>ru</key> - <value>Параметры администрирования информационной базы</value> - - true - true - - - true - Role.ПолныеПрава - - - false - - ПараметрыАдминистрированияИнформационнойБазыExtendedTooltip - 48 - Label - true - true - - Left - - - Form.Command.ПараметрыАдминистрированияИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -1008,6 +973,10 @@ Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1399,7 +1368,7 @@ ru Обновить - 3 + 2 ru Обновить @@ -1407,7 +1376,7 @@ true - Ctrl+Shift+R + F5 StdPicture.Refresh @@ -1425,7 +1394,7 @@ ru Сортировка по возрастанию - 5 + 3 ru Сортировка по возрастанию @@ -1450,7 +1419,7 @@ ru Сортировка по убыванию - 6 + 4 ru Сортировка по убыванию @@ -1475,16 +1444,13 @@ ru Завершить сеанс - 2 + 5 ru Завершить сеанс - - true - Role.ПолныеПрава - + true CommonPicture.РазорватьСоединение @@ -1498,28 +1464,6 @@ 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 deleted file mode 100644 index ade7739ad..000000000 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html +++ /dev/null @@ -1,4 +0,0 @@ -<!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 192a4c84b..3d08cb0b9 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl @@ -1,8 +1,12 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ПараметрыАдминистрирования, ЗапрашиватьПараметрыАдминистрированияИБ; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -13,18 +17,13 @@ НомерСеансаИнформационнойБазы = НомерСеансаИнформационнойБазы(); УсловноеОформление.Элементы[0].Отбор.Элементы[0].ПравоеЗначение = НомерСеансаИнформационнойБазы; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Если Элементы.Найти("ЗавершитьСеанс") <> Неопределено Тогда - Элементы.ЗавершитьСеанс.Видимость = Ложь; - Элементы.ЗавершитьСеансКонтекст.Видимость = Ложь; - КонецЕсли; - Если Элементы.Найти("ПараметрыАдминистрированияИнформационнойБазы") <> Неопределено Тогда - Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; - КонецЕсли; - Иначе - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; - КонецЕсли; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + Или Не ((Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() И Пользователи.ЭтоПолноправныйПользователь()) + Или Пользователи.ЭтоПолноправныйПользователь(, Истина)) Тогда + + Элементы.ЗавершитьСеанс.Видимость = Ложь; + Элементы.ЗавершитьСеансКонтекст.Видимость = Ложь; + КонецЕсли; Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -45,6 +44,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ЗапрашиватьПараметрыАдминистрированияИБ = Истина; +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии() Если ОповещатьОЗакрытии Тогда @@ -53,8 +57,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборИмяПриложенияПриИзменении(Элемент) @@ -69,31 +74,46 @@ ОткрытьПользователяИзСписка(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗавершитьСеанс(Команда) - Сообщение = ""; + ЗавершаемыйСеанс = Элементы.СписокПользователей.ТекущиеДанные.Сеанс; - НомерСеансаДляЗавершения = Элементы.СписокПользователей.ТекущиеДанные.Сеанс; - - Если НомерСеансаДляЗавершения = НомерСеансаИнформационнойБазы Тогда + Если ЗавершаемыйСеанс = НомерСеансаИнформационнойБазы Тогда ПоказатьПредупреждение(,НСтр("ru = 'Невозможно завершить текущий сеанс. Для выхода из программы можно закрыть главное окно программы.'")); Возврат; КонецЕсли; - Отключено = СоединенияИБКлиентСервер.ОтключитьСеанс(НомерСеансаДляЗавершения, Сообщение); - Если НЕ ПустаяСтрока(Сообщение) и Не Отключено Тогда - ПоказатьПредупреждение(,Сообщение); - КонецЕсли; + СтандартнаяОбработка = Истина; - Если Отключено Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Сеанс завершен.'")); - КонецЕсли; + ОбработчикиСобытия = ОбщегоНазначенияКлиент.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ЗавершениеРаботыПользователей\ПриЗавершенииСеанса"); - ЗаполнитьСписок(); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриЗавершенииСеанса(ЭтотОбъект, ЗавершаемыйСеанс, СтандартнаяОбработка); + КонецЦикла; + + Если СтандартнаяОбработка Тогда + + Если ЗапрашиватьПараметрыАдминистрированияИБ Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьСеансПродолжение", ЭтотОбъект); + ЗаголовокФормы = Нстр("ru = 'Завершение сеанса'"); + ПоясняющаяНадпись = Нстр("ru = 'Для завершения сеанса необходимо ввести параметры + |администрирования кластера серверов'"); + СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения, Ложь,, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); + + Иначе + + ЗавершитьСеансПродолжение(ПараметрыАдминистрирования); + + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -142,15 +162,30 @@ ОткрытьПользователяИзСписка(); КонецПроцедуры -&НаКлиенте -Процедура ПараметрыАдминистрированияИнформационнойБазы(Команда) - - ОткрытьФорму("ОбщаяФорма.ПараметрыАдминистрированияСервернойИБ"); - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПользователей.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокПользователей.Сеанс"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + +КонецПроцедуры &НаКлиенте Процедура ЗаполнитьСписок() @@ -385,3 +420,47 @@ КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьСеансПродолжение(Результат, ДополнительныеПараметры = Неопределено) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыАдминистрирования = Результат; + + Сообщение = ""; + НомерСеансаДляЗавершения = Элементы.СписокПользователей.ТекущиеДанные.Сеанс; + + Фильтр = Новый Структура("Номер", НомерСеансаДляЗавершения); + КлиентПодключенЧерезВебСервер = ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер(); + + Попытка + Если КлиентПодключенЧерезВебСервер Тогда + УдалитьСеансыИнформационнойБазыНаСервере(ПараметрыАдминистрирования, Фильтр) + Иначе + АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); + КонецЕсли; + Исключение + ЗапрашиватьПараметрыАдминистрированияИБ = Истина; + ВызватьИсключение; + КонецПопытки; + + ЗапрашиватьПараметрыАдминистрированияИБ = Ложь; + ТекстОповещения = НСтр("ru = 'Сеанс %1 завершен.'"); + ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОповещения, НомерСеансаДляЗавершения); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение сеанса'"),, ТекстОповещения); + + ЗаполнитьСписок(); + +КонецПроцедуры + +&НаСервере +Процедура УдалитьСеансыИнформационнойБазыНаСервере(ПараметрыАдминистрирования, Фильтр) + + АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index c75b8b651..60265d485 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html @@ -1,5 +1,23 @@ -<!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> -<p>В клиент-серверном режиме работы доступна команда <strong>Завершить сеанс</strong>, принудительно завершающая выбранные в списке сеансы пользователей. Для корректной работы этой команды необходимо предварительно задать параметры администрирования информационной базы (меню <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.16476"></meta></head><body> +<p>Содержит список <a href="Catalog.Пользователи/Help">пользователей</a>, работающих в данный момент времени в программе. </p> +<p>В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.</p> +<p>Список выводится по соответствующей команде раздела <strong>Администрирование - Поддержка и обслуживание</strong>.</p> +<p>В списке выводятся:</p> +<ul><li><strong>Пользователь</strong> - полное имя пользователя. Отображаются также <a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a>; +</li><li><strong>Приложение</strong> - указывается <strong>Тип приложения</strong>, например, <strong>Тонкий клиент</strong>. Режим подключения также указывается. Отображаются также сеансы, установленные в других режимах подключения, например, соединения (COM) или веб-сервисы; +</li><li><strong>Начало работы</strong> - дата и время начала работы; +</li><li><strong>Компьютер</strong> - сетевое имя компьютера, с которого выполнен вход в программу; +</li><li><strong>Сеанс</strong> - номер сеанса, а также разделение данных.</li></ul><p>В нижней строке списка подсчитывается общее количество активных пользователей. </p> +<p>Жирным шрифтом выделена строка, соответствующая тому сеансу работы пользователя, из которого открыт список активных пользователей. </p> +<p>Для удобства просмотра списка можно использовать сортировку по любой колонке. </p> +<p>Список активных пользователей не является динамическим списком. Для того чтобы увидеть активных пользователей, которые попали в список после его открытия, нажмите <img src="StdPicture.Refresh" width="16" height="16"></img> <strong>Обновить текущий список</strong> или клавишу <strong>F5</strong>. </p> +<h3>Отборы</h3> +<p>С помощью поля <strong>Показывать</strong> можно <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> из списка отбор по одному из предопределенных значений. По умолчанию выбрано значение <strong>Все сеансы</strong>.</p> +<h3>Просмотр пользователя</h3> +<p>Для того чтобы просмотреть сведения о выделенном пользователе, нажмите <strong>Открыть</strong>. </p> +<h3>Просмотр журнала регистрации</h3> +<p>Для анализа работы выбранного пользователя по команде <strong>Журнал регистрации</strong> можно перейти к <a href="DataProcessor.ЖурналРегистрации/Help">журналу регистрации</a>, отфильтрованному по выбранному пользователю. </p> +<h3>Завершение сеанса (клиент-серверный режим)</h3> +<p>В клиент-серверном режиме работы доступна команда <strong>Завершить сеанс</strong>, принудительно завершающая выбранные в списке сеансы пользователей. Для корректной работы этой команды необходимо предварительно <a href="CommonForm.ПараметрыАдминистрированияПрограммы/Help">задать параметры администрирования программы</a> (меню <strong>Все действия</strong>).</p> +<h3>См. также:</h3> +<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo b/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo index 88f8b3c07..55fe06a78 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo +++ b/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo @@ -22,11 +22,6 @@ <key>ru</key> <value>Активные пользователи</value> </synonym> - <help> - <pages> - <lang>ru</lang> - </pages> - </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 85c874e68..70a0305b6 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +21,9 @@ ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхСеансов", 30); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура АктивныеПользователиНажатие(Элемент) @@ -38,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗавершитьСеансыИПерезапуститьПрограмму(Команда) @@ -72,8 +74,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОбновитьКоличествоАктивныхСеансов() @@ -173,5 +176,4 @@ Возврат ТекстОшибки; КонецФункции - - +#КонецОбласти diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 30b22a1b5..000000000 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,93 +0,0 @@ -<?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:string">Запрещено</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> - <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:string">Запланировано</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:ПоясняющийОшибкуТекст</dcscor:value> - </dcscor:item> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:use>false</dcscor:use> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:nil="true"/> - </dcscor:item> - </appearance> - </item> - <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:string">Истекло</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:ЗаблокированныйРеквизитЦвет</dcscor:value> - </dcscor:item> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:use>false</dcscor:use> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:nil="true"/> - </dcscor:item> - </appearance> - </item> - <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:string">Разрешено</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:FormTextColor</dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form index 74e7bf17d..a3b8a1cea 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form @@ -77,169 +77,6 @@ <verticalAlign>Top</verticalAlign> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаПараметры</name> - <id>79</id> - <items xsi:type="form:Decoration"> - <name>НадписьПараметры</name> - <id>80</id> - <title> - <key>ru</key> - <value>Возможно не настроены параметры администрирования информационной базы.</value> - - true - true - - true - - - НадписьПараметрыExtendedTooltip - 90 - Label - true - true - - Left - - - - НадписьПараметрыКонтекстноеМеню - 81 - true - - Label - true - true - true - false - - Left - 2 - - - - Настроить - 82 - - <key>ru</key> - <value>Настроить</value> - - true - true - - true - - - НастроитьExtendedTooltip - 91 - Label - true - true - - Left - - - UsualButton - Form.Command.ПараметрыАдминистрированияИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаПараметрыExtendedTooltip - 89 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаComcntr - 73 - - НадписьОбновитьВерсиюКомпоненты - 74 - - <key>ru</key> - <value>При ошибке версии компоненты "comcntr", следует выполнить ее перерегистрацию (потребуется перезапуск сервера).</value> - - true - true - - true - - - ru - Возможно необходимо обновить версию компоненты "comcntr". При этом потребуется перезапустить сеанс 1С. Для этого нажмите здесь - - - НадписьОбновитьВерсиюКомпонентыExtendedTooltip - 93 - Label - true - true - - Left - - - - НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню - 75 - true - - Label - true - true - true - false - - Left - 2 - - - true - true - - true - - - ГруппаComcntrExtendedTooltip - 92 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - true true @@ -603,29 +440,45 @@ ГруппаЗапретитьРаботуРегламентныхЗаданий - 67 - - ЗапретитьРаботуРегламентныхЗаданий - 44 - - <key>ru</key> - <value>Также запретить работу регламентных заданий</value> - + 120 + + ГруппаВводаПараметровАдминистрирования + 124 + + ПараметрыАдминистрирования + 126 + true + true + + true + + + ПараметрыАдминистрированияРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыАдминистрирования + Normal + Auto + true + true + UserCmds + Auto + true true - - true - Role.ПолныеПрава - + true - - Объект.ЗапретитьРаботуРегламентныхЗаданий - - Right - ЗапретитьРаботуРегламентныхЗаданийExtendedTooltip - 104 + ГруппаВводаПараметровАдминистрированияРасширеннаяПодсказка + 125 Label true true @@ -633,30 +486,86 @@ Left - - ЗапретитьРаботуРегламентныхЗаданийКонтекстноеМеню - 45 - true - - CheckBoxField - Enter - true - Left - true - + Page + + Vertical + auto + + + + ГруппаУправлениеРегламентнымиЗаданиями + 122 + + ЗапретитьРаботуРегламентныхЗаданий + 44 + + <key>ru</key> + <value>Также запретить работу регламентных заданий</value> + + true + true + + + true + Role.ПолныеПрава + + + + Объект.ЗапретитьРаботуРегламентныхЗаданий + + Right + + ЗапретитьРаботуРегламентныхЗаданийExtendedTooltip + 104 + Label + true + true + + Left + + + + ЗапретитьРаботуРегламентныхЗаданийКонтекстноеМеню + 45 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + ГруппаУправлениеРегламентнымиЗаданиямиРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Page + + Vertical + auto + true true true - - <key>ru</key> - <value>Группа запретить работу регламентных заданий</value> - + true - ГруппаЗапретитьРаботуРегламентныхЗаданийExtendedTooltip - 103 + ГруппаЗапретитьРаботуРегламентныхЗаданийРасширеннаяПодсказка + 121 Label true true @@ -664,14 +573,8 @@ Left - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto + Pages + Auto @@ -1195,41 +1098,6 @@ UserCmds Auto - - ПараметрыАдминистрированияИнформационнойБазы - 43 - - <key>ru</key> - <value>Параметры администрирования ИБ</value> - - true - true - - - true - Role.ПолныеПрава - - - false - - ПараметрыАдминистрированияИнформационнойБазыExtendedTooltip - 84 - Label - true - true - - Left - - - Form.Command.ПараметрыАдминистрированияИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Left @@ -1377,6 +1245,74 @@ true + + ЭтоФайловаяБаза + + <key>ru</key> + <value>Это файловая база</value> + + 7 + + Boolean + + + true + + + true + + + + ЭтоАдминистраторСистемы + + <key>ru</key> + <value>Это администратор системы</value> + + 8 + + Boolean + + + true + + + true + + + + ВведеныКорректныеПараметрыАдминистрирования + + <key>ru</key> + <value>Введены корректные параметры администрирования</value> + + 9 + + Boolean + + + true + + + true + + + + СеансЗапущенБезРазделителей + + <key>ru</key> + <value>Сеанс запущен без разделителей</value> + + 10 + + Boolean + + + true + + + true + + Применить @@ -1425,28 +1361,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ПараметрыАдминистрированияИнформационнойБазы</name> - <title> - <key>ru</key> - <value>Параметры администрирования информационной базы</value> - - 3 - - ru - Параметры администрирования информационной базы - - - true - - - - ПараметрыАдминистрированияИнформационнойБазы - - - Auto - Auto - Остановить @@ -1473,6 +1387,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПараметрыАдминистрирования</name> + <title> + <key>ru</key> + <value>Включить возможность управления блокировкой регламентных заданий</value> + + 3 + + ru + Параметры администрирования + + + true + + + + ПараметрыАдминистрирования + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl index 94108ae5f..362072b08 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl @@ -1,20 +1,23 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ПараметрыАдминистрирования, ТекущееЗначениеБлокировки; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() - ИЛИ НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - - Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; - Элементы.ЗапретитьРаботуРегламентныхЗаданий.Видимость = Ложь; - Элементы.ГруппаComcntr.Видимость = Ложь; - Элементы.ГруппаПараметры.Видимость = Ложь; + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); + СеансЗапущенБезРазделителей = ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей(); + + Если ЭтоФайловаяБаза Или Не ЭтоАдминистраторСистемы Тогда + Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.Видимость = Ложь; КонецЕсли; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -31,7 +34,7 @@ Процедура ПриОткрытии(Отказ) КлиентПодключенЧерезВебСервер = ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер(); - Если РаботаПользователейЗавершается = Истина Тогда + Если СоединенияИБКлиент.РаботаПользователейЗавершается() Тогда Элементы.ГруппаРежим.ТекущаяСтраница = Элементы.СтраницаСостоянияБлокировки; ОбновитьСтраницуСостояния(ЭтотОбъект); КонецЕсли; @@ -44,7 +47,7 @@ НазванияСоединенийИБ = ""; ТолькоКлиентскиеПриложения = АктивныТолькоКлиентскиеПриложения(НазванияСоединенийИБ); - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ЭтоФайловаяБаза Тогда // Проверка возможности принудительно завершить сеансы при работе в файловом режиме. Если НЕ ТолькоКлиентскиеПриложения Тогда @@ -58,16 +61,6 @@ КоличествоСеансов = СтрЧислоСтрок(НазванияСоединенийИБ); Иначе - // Проверка возможности принудительно завершить сеансы при работе с клиента через веб-сервер. - // Невозможно установить блокировку, на сервере не установлена ОС Microsoft Windows и не включено разделение (локальный режим работы). - Если НЕ ТолькоКлиентскиеПриложения И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() И КлиентПодключенЧерезВебСервер - И Не СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Имеются активные сеансы, которые не могут быть завершены принудительно (т.к. сервер работает под управлением ОС, отличной от Microsoft Windows). Блокировка не установлена. - |%1'"), - НазванияСоединенийИБ); - ВызватьИсключение ТекстСообщения; - КонецЕсли; КоличествоСеансов = ПолучитьСеансыИнформационнойБазы().Количество(); @@ -103,14 +96,13 @@ |Подробности см. в Журнале регистрации.'"), 30); Закрыть(); КонецЕсли; - ИначеЕсли ИмяСобытия = "Запись_ПараметрыАдминистрированияИБ" Тогда - ПолучитьПараметрыБлокировки(Истина); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура АктивныеПользователи(Команда) @@ -119,13 +111,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПараметрыАдминистрированияИнформационнойБазы(Команда) - - ОткрытьФорму("ОбщаяФорма.ПараметрыАдминистрированияСервернойИБ"); - -КонецПроцедуры - &НаКлиенте Процедура Применить(Команда) @@ -173,15 +158,17 @@ КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПрименитьЗавершение", ЭтотОбъект, "Подтверждение"); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстВопроса, Объект.НачалоДействияБлокировки - 900, Объект.НачалоДействияБлокировки); + ТекстВопроса, Объект.НачалоДействияБлокировки - 900, Объект.НачалоДействияБлокировки); ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,, ЗаголовокВопроса); КонецЕсли; + Иначе + + Оповещение = Новый ОписаниеОповещения("ПрименитьЗавершение", ЭтотОбъект, "Подтверждение"); + ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.ОК); + КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ПрименитьЗавершение", ЭтотОбъект, "Подтверждение"); - ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.ОК); - КонецПроцедуры &НаКлиенте @@ -199,26 +186,44 @@ ИначеЕсли Ответ <> КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; - ИначеЕсли Вариант = "СлишкомБольшоеВремяБлокировки" Тогда + ИначеЕсли Вариант = "Подтверждение" Тогда Если Ответ <> КодВозвратаДиалога.ОК Тогда Возврат; КонецЕсли; КонецЕсли; - Если Не УстановитьСнятьБлокировку() Тогда - Возврат; + Если ВведеныКорректныеПараметрыАдминистрирования И ЭтоАдминистраторСистемы И Не ЭтоФайловаяБаза + И ТекущееЗначениеБлокировки <> Объект.ЗапретитьРаботуРегламентныхЗаданий Тогда + + Попытка + Если КлиентПодключенЧерезВебСервер Тогда + УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования); + Иначе + АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрирования,, Объект.ЗапретитьРаботуРегламентныхЗаданий); + КонецЕсли; + Исключение + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), "Ошибка", + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); + Элементы.ГруппаОшибка.Видимость = Истина; + Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + Возврат; + КонецПопытки; + КонецЕсли; - ПоказатьОповещениеПользователя(НСтр("ru = 'Блокировка работы пользователей'"), - "e1cib/app/Обработка.БлокировкаРаботыПользователей", - ?(Объект.ВременноЗапретитьРаботуПользователей, НСтр("ru = 'Блокировка установлена.'"), НСтр("ru = 'Блокировка снята.'")), - БиблиотекаКартинок.Информация32); - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей( - Объект.ВременноЗапретитьРаботуПользователей); - Если Объект.ВременноЗапретитьРаботуПользователей Тогда - ОбновитьСтраницуСостояния(ЭтотОбъект); + Если Не ЭтоФайловаяБаза И Не ВведеныКорректныеПараметрыАдминистрирования И СеансЗапущенБезРазделителей Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрированияПриБлокировке", ЭтотОбъект); + ЗаголовокФормы = Нстр("ru = 'Управление блокировкой сеансов'"); + ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой сеансов необходимо ввести + |параметры администрирования кластера серверов и информационной базы'"); + СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения,,, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); + Иначе - ОбновитьСтраницуНастройки(); + + ПослеПолученияПараметровАдминистрированияПриБлокировке(Истина, Неопределено); + КонецЕсли; КонецПроцедуры @@ -226,17 +231,99 @@ &НаКлиенте Процедура Остановить(Команда) - Если Не ОтменитьБлокировку() Тогда - Возврат; + Если Не ЭтоФайловаяБаза И Не ВведеныКорректныеПараметрыАдминистрирования И СеансЗапущенБезРазделителей Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрированияПриОтменеБлокировки", ЭтотОбъект); + ЗаголовокФормы = Нстр("ru = 'Управление блокировкой сеансов'"); + ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой сеансов необходимо ввести + |параметры администрирования кластера серверов и информационной базы'"); + СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения,,, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); + + Иначе + + ПослеПолученияПараметровАдминистрированияПриОтменеБлокировки(Истина, Неопределено); + КонецЕсли; - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Ложь); - ПоказатьПредупреждение(,НСтр("ru = 'Завершение работы активных пользователей отменено. - |Вход в программу новых пользователей оставлен заблокированным.'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ПараметрыАдминистрирования(Команда) + + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрирования", ЭтотОбъект); + ЗаголовокФормы = Нстр("ru = 'Управление блокировкой регламентных заданий'"); + ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой регламентных заданий необходимо + |ввести параметры администрирования кластера серверов и информационной базы'"); + СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения,,, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НачальныйСтатусЗапретаРаботыПользователей.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтатусЗапретаРаботыПользователей"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Запрещено'"); + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НачальныйСтатусЗапретаРаботыПользователей.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтатусЗапретаРаботыПользователей"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Запланировано'"); + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НачальныйСтатусЗапретаРаботыПользователей.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтатусЗапретаРаботыПользователей"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Истекло'"); + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗаблокированныйРеквизитЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НачальныйСтатусЗапретаРаботыПользователей.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтатусЗапретаРаботыПользователей"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Разрешено'"); + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаФормы); + +КонецПроцедуры &НаСервере Функция ПроверитьПредусловияБлокировки() @@ -276,7 +363,7 @@ ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); КонецЕсли; @@ -298,7 +385,7 @@ ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); КонецЕсли; @@ -314,12 +401,13 @@ &НаСервере Процедура ОбновитьСтраницуНастройки() + Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.Доступность = Истина; Элементы.КомандаПрименить.Видимость = Истина; Элементы.КомандаПрименить.КнопкаПоУмолчанию = Истина; Элементы.КомандаОстановить.Видимость = Ложь; Элементы.КомандаПрименить.Заголовок = ?(Объект.ВременноЗапретитьРаботуПользователей, НСтр("ru='Снять блокировку'"), НСтр("ru='Установить блокировку'")); - Элементы.ЗапретитьРаботуРегламентныхЗаданий.Заголовок = ?(Объект.ВременноЗапретитьРаботуПользователей, + Элементы.ЗапретитьРаботуРегламентныхЗаданий.Заголовок = ?(Объект.ЗапретитьРаботуРегламентныхЗаданий, НСтр("ru='Оставить блокировку работы регламентных заданий'"), НСтр("ru='Также запретить работу регламентных заданий'")); КонецПроцедуры @@ -327,6 +415,7 @@ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСтраницуСостояния(Форма) + Форма.Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.Доступность = Ложь; Форма.Элементы.КомандаОстановить.Видимость = Истина; Форма.Элементы.КомандаПрименить.Видимость = Ложь; Форма.Элементы.КомандаЗакрыть.КнопкаПоУмолчанию = Истина; @@ -345,7 +434,7 @@ КонецПроцедуры &НаСервере -Процедура ПолучитьПараметрыБлокировки(ТолькоПроверка = Ложь) +Процедура ПолучитьПараметрыБлокировки() Обработка = РеквизитФормыВЗначение("Объект"); Попытка Обработка.ПолучитьПараметрыБлокировки(); @@ -354,14 +443,14 @@ ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если ЭтоАдминистраторСистемы Тогда Элементы.ГруппаОшибка.Видимость = Истина; Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); КонецЕсли; КонецПопытки; - Если Не ТолькоПроверка Тогда - ЗначениеВРеквизитФормы(Обработка, "Объект"); - КонецЕсли; + + ЗначениеВРеквизитФормы(Обработка, "Объект"); + КонецПроцедуры &НаСервере @@ -396,3 +485,114 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеПолученияПараметровАдминистрирования(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + + ПараметрыАдминистрирования = Результат; + ВведеныКорректныеПараметрыАдминистрирования = Истина; + + Попытка + Если КлиентПодключенЧерезВебСервер Тогда + Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); + Иначе + Объект.ЗапретитьРаботуРегламентныхЗаданий = АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); + КонецЕсли; + ТекущееЗначениеБлокировки = Объект.ЗапретитьРаботуРегламентныхЗаданий; + Исключение; + ВведеныКорректныеПараметрыАдминистрирования = Ложь; + ВызватьИсключение; + КонецПопытки; + + Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.ТекущаяСтраница = Элементы.ГруппаУправлениеРегламентнымиЗаданиями; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПолученияПараметровАдминистрированияПриБлокировке(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда + ПараметрыАдминистрирования = Результат; + ВведеныКорректныеПараметрыАдминистрирования = Истина; + ВключитьУправлениеБлокировкойРегламентныхЗаданий(); + СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + ИначеЕсли ТипЗнч(Результат) = Тип("Булево") И ВведеныКорректныеПараметрыАдминистрирования Тогда + СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + КонецЕсли; + + Если Не УстановитьСнятьБлокировку() Тогда + Возврат; + КонецЕсли; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Блокировка работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + ?(Объект.ВременноЗапретитьРаботуПользователей, НСтр("ru = 'Блокировка установлена.'"), НСтр("ru = 'Блокировка снята.'")), + БиблиотекаКартинок.Информация32); + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей( Объект.ВременноЗапретитьРаботуПользователей); + + Если Объект.ВременноЗапретитьРаботуПользователей Тогда + ОбновитьСтраницуСостояния(ЭтотОбъект); + Иначе + ОбновитьСтраницуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПолученияПараметровАдминистрированияПриОтменеБлокировки(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда + ПараметрыАдминистрирования = Результат; + ВведеныКорректныеПараметрыАдминистрирования = Истина; + ВключитьУправлениеБлокировкойРегламентныхЗаданий(); + СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + ИначеЕсли ТипЗнч(Результат) = Тип("Булево") И ВведеныКорректныеПараметрыАдминистрирования Тогда + СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + КонецЕсли; + + Если Не ОтменитьБлокировку() Тогда + Возврат; + КонецЕсли; + + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Ложь); + ПоказатьПредупреждение(,НСтр("ru = 'Завершение работы активных пользователей отменено. + |Вход в программу новых пользователей оставлен заблокированным.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьУправлениеБлокировкойРегламентныхЗаданий() + + Если КлиентПодключенЧерезВебСервер Тогда + Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); + Иначе + Объект.ЗапретитьРаботуРегламентныхЗаданий = АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); + КонецЕсли; + ТекущееЗначениеБлокировки = Объект.ЗапретитьРаботуРегламентныхЗаданий; + Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.ТекущаяСтраница = Элементы.ГруппаУправлениеРегламентнымиЗаданиями; + +КонецПроцедуры + +&НаСервере +Функция БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования) + + Возврат АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); + +КонецФункции + +&НаСервере +Процедура УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования) + + АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрирования,, Объект.ЗапретитьРаботуРегламентныхЗаданий); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index ecefaaf99..cecda1b81 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -1,20 +1,81 @@ - -

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

      -

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

      -
      • Период (время) начала действия и окончания действия блокировки; -
      • -

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

        -
      • -

        Код разрешения - произвольная строка, используя которую в качестве параметра запуска "/UC" в дальнейшем можно будет войти в информационную базу, несмотря на установленную блокировку.

       

      -

      Для снятия блокировки до истечения срока блокировки нужно:

      + +

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

      +

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

      +

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

      +

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

      +

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

      +

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

      +

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

      +

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

      +

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

      • -

        войти в приложение и открыть эту форму, выполнив команду "Снять блокировку";

        -
      • открыть приложение, используя параметры запуска "/С РазрешитьРаботуПользователей" и "/UC" с кодом разрешения доступа, который был указан при установке блокировки.
        Примечание: запуск клиентского приложения с параметром "РазрешитьРаботуПользователей" предназначен только для снятия блокировки и не предназначен для работы с программой.

      Действия по завершению работы в клиентском приложении

      -
    • -

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

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

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

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

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

        Дополнительные возможности и ограничения

        -

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

        -

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

      • \ No newline at end of file +
        При наступлении времени блокировки будет автоматически выполнена попытка завершения сеансов работы всех пользователей, подключенных к информационной базе, с выдачей соответствующих запросов о сохранении данных и завершении работы. Войти в программу с этого момента будет невозможно, блокировка будет продолжаться до указанного администратором времени. При этом будут выполнены стандартные действия при завершении работы - запрос на завершение (если пользователь настроил себе подтверждение закрытия), отключение торгового оборудования и т.д.
        +
      • +
        нужно иметь в виду, что к моменту начала блокировки в программе могут существовать "зависшие" сеансы (например, если пользователи в конце рабочего дня забыли выйти из программы, программа зависла или был запущен сложный отчет). Для того чтобы посмотреть данные о текущих сеансах работы, нажмите Активные пользователи. Гарантированное завершение всех пользовательских сеансов возможно только в клиент-серверном варианте программы. В файловом варианте программы требуется завершить "зависшие" сеансы пользователей на их рабочих местах, а также, если необходимо, завершить другие программы, которые подключены к базе по внешнему соединению (COM) или с помощью веб-сервисов.
        +
      • +
        Если принудительное завершение сеансов по каким-то причинам невозможно (например, один из пользователей работает в Конфигураторе), выводится сообщение об ошибке со списком пользователей и блокировка не устанавливается.
        +
      • +
        После завершения работы всех активных пользователей в указанное время программа также выдает сообщение администратору о необходимости завершения сеанса. Для того чтобы остаться в программе и провести запланированные в ней работы, можно нажать кнопку Нет.
        +
      • +
        +
        При попытке войти в программу в период действия блокировки появится предупреждение с инструкцией для администратора. Для того чтобы разрешить работу пользователей, администратору предлагается произвести запуск программы с параметрами:
        +
        • +
          +
          Новое подключение к информационной базе, начиная с этого момента и до окончания действия блокировки, будет возможно только в том случае, если в параметре командной строки "/UC" или параметре строки соединения "UC" указан код разрешения доступа.

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

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

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

      +

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

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

      Дополнительные возможности и ограничения

      +
      • +
        В клиент-серверном варианте работы также есть возможность заблокировать выполнение регламентных и фоновых заданий. Для этого может потребоваться ввести дополнительные параметры для подключения к кластеру серверов по команде Параметры администрирования программы. Кроме того, для выполнения действий установки и снятия блокировки работы пользователей также можно использовать утилиту администрирования кластера серверов 1С:Предприятия. 
        +
      • +
        +
        В клиент-серверном режиме работы не гарантируется завершение всех регламентных и фоновых заданий (когда, в редких случаях, они не могут быть завершены принудительно).
        +
      • +
        В файловом режиме работы блокировка соединений не может быть установлена, если с базой в данный момент времени работают через COM (внешнее соединение), веб-сервисы или открыт Конфигуратор.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index 858d8cacf..392bca655 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Установить или снять блокировку информационной базы, // исходя из значений реквизитов обработки. @@ -45,10 +44,6 @@ НачалоДействияБлокировки = НачалоМинуты(ТекущаяДатаСеанса() + 5 * 60); КонецЕсли; - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - ЗапретитьРаботуРегламентныхЗаданий = СоединенияИБКлиентСервер.БлокировкаРегламентныхЗаданийУстановлена(); - КонецЕсли; - КонецПроцедуры Процедура ВыполнитьУстановкуБлокировки(Значение) @@ -69,22 +64,12 @@ Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда УстановитьБлокировкуСеансов(Блокировка); - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Попытка - СоединенияИБКлиентСервер.УстановитьБлокировкуРегламентныхЗаданий(ЗапретитьРаботуРегламентныхЗаданий); - Исключение - // откат установки блокировки при ошибке - Если Не УстановленаБлокировкаСоединений И Значение Тогда - Блокировка.Установлена = Ложь; - УстановитьБлокировкуСеансов(Блокировка); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - КонецЕсли; Иначе СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Блокировка); КонецЕсли; КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 2e9f8cecf..7fc147a43 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -71,8 +71,13 @@ true true true + false true + ShowInInputField + false + false false + false true true @@ -95,6 +100,7 @@ Style.ФонУправляющегоПоля Normal + DontUse @@ -488,6 +494,7 @@ true true false + ShowInDropList true true true @@ -631,6 +638,7 @@ true true true + ShowInDropList true true true @@ -847,6 +855,7 @@ true true true + ShowInDropList true true true @@ -1074,6 +1083,52 @@ ПредставлениеАдресаКонтекстноеМеню 8 + + ПредставлениеАдресаКонтекстноеМенюГруппа1 + 156 + + ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме + 154 + true + true + + true + + + ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФормеРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.ВвестиАдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ПредставлениеАдресаКонтекстноеМенюГруппа1РасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + true InputField diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index 780c32f7f..f6a5fac45 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -1,12 +1,13 @@ - +

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

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

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

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

      1. В поле "Город, населенный пункт" - Санкт-Петербург г.
      2. В поле "Улица" - Пискаревский пр-кт.
      3. В поле значения "Дом" указать 2. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 5ba69c256..ea84e9ae0 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -16,8 +16,7 @@ // // ------------------------------------------------------------------------------------------------- -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // &НаСервере @@ -123,24 +122,30 @@ Если АдресТолькоРоссийский Тогда Элементы.Страна.Доступность = Ложь; Элементы.Страна.ЦветФона = АвтоЦвет; - Если Страна<>СтранаРоссия Тогда + Если Страна <> СтранаРоссия Тогда Если Не ПустаяСтрока(Параметры.ЗначенияПолей) Тогда - // Считаем адрес российским, но введенным в свободной форме. - ПредставлениеАдреса = СокрЛП( + // Считаем адрес российским + ТестПредставленияАдреса = СокрЛП( СокрЛП(Страна) + " " + СокрЛП(ПредставлениеИностранногоАдреса) ); - РазрешитьВводАдресаВСвободнойФорме = Истина; - ПредставлениеАдресаИзменено = Истина; - Модифицированность = Истина; + Если Не ПустаяСтрока(ТестПредставленияАдреса) Тогда + ПредставлениеАдреса = ТестПредставленияАдреса; + РазрешитьВводАдресаВСвободнойФорме = Истина; + ПредставлениеАдресаИзменено = Истина; + КонецЕсли; КонецЕсли; Страна = СтранаРоссия; + Модифицированность = Истина; КонецЕсли; КонецЕсли; // По умолчанию все русские - Если Не ЗначениеЗаполнено(Страна) Тогда + Если ЗначениеЗаполнено(Страна) Тогда + КодСтраны = Страна.Код; + Иначе Если ПустаяСтрока(ИсходноеПредставлениеСтраны) Тогда - Страна = СтранаРоссия; + Страна = СтранаРоссия; + КодСтраны = СтранаРоссия.Код; Иначе // Не определили страну, но точно не Россия Если ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда @@ -154,7 +159,7 @@ КонецЕсли; // Инициализируем элементы - Если Страна=СтранаРоссия Тогда + Если Страна = СтранаРоссия Тогда Элементы.ТипАдреса.ТекущаяСтраница = Элементы.РоссийскийАдрес; ТекущийЭлемент = Элементы.НаселенныйПункт; Иначе @@ -197,8 +202,9 @@ ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -223,20 +229,14 @@ &НаКлиенте Процедура СтранаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Если Ожидание=0 Тогда + + Если Ожидание = 0 Тогда // Формирование списка быстрого выбора Если ПустаяСтрока(Текст) Тогда ДанныеВыбора = Новый СписокЗначений; КонецЕсли; Возврат; КонецЕсли; - -#Если ВебКлиент Тогда - // Обход особенности платформы - СтандартнаяОбработка = Ложь; - ДанныеВыбора = Новый СписокЗначений; - Возврат; -#КонецЕсли КонецПроцедуры @@ -256,16 +256,8 @@ &НаКлиенте Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) -#Если ВебКлиент Тогда - // Обход особенности платформы - Если ТипЗнч(ВыбранноеЗначение)<>Тип("СправочникСсылка.СтраныМира") Тогда - СтандартнаяОбработка = Ложь; - ВыбранноеЗначение = Неопределено; - Возврат; - КонецЕсли; -#КонецЕсли - УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); + КонецПроцедуры &НаКлиенте @@ -460,22 +452,25 @@ &НаКлиенте Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Если Ожидание=0 Тогда - // Формирование списка быстрого выбора - ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора = Новый СписокЗначений; + + Если Ожидание = 0 Тогда + // Формирование списка быстрого выбора, стандартную обработку не надо трогать Возврат; КонецЕсли; Элементы.НаселенныйПункт.ЦветФона = АвтоЦвет; - - СтандартнаяОбработка = Ложь; - Если СтрДлина(Текст)<3 Тогда + Если СтрДлина(Текст) < 3 Тогда + // Нет вариантов, список пуст, стандартную обработку не надо трогать ВизуализироватьКорректностьВыбора(); Возврат; КонецЕсли; АнализКлассификатора = РезультатыАвтоПодбораНаселенногоПункта(Текст, СкрыватьНеактуальныеАдреса, Истина); ДанныеВыбора = АнализКлассификатора.ДанныеВыбора; + + // Стандартную обработку отключаем, только если есть наши варианты + СтандартнаяОбработка = ДанныеВыбора.Количество() = 0; КонецПроцедуры &НаКлиенте @@ -531,7 +526,7 @@ Иначе // Родитель улицы неопределен, открываем форму в которой ничего нет ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса, КодКлассификатораНаселенногоПункта, Улица, Заголовок", - СкрыватьНеактуальныеАдреса, -1, Улица, НаселенныйПункт + " (не найден)"); + СкрыватьНеактуальныеАдреса, -1, Улица, НаселенныйПункт + " " + НСтр("ru = '(не найден)'")); КонецЕсли; УправлениеКонтактнойИнформациейКлиент.НачалоВыбораУлицы(Элемент, КодКлассификатораНаселенногоПункта, Улица, ПараметрыФормы); @@ -570,22 +565,25 @@ &НаКлиенте Процедура УлицаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Если Ожидание=0 Тогда - // Формирование списка быстрого выбора - ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора = Новый СписокЗначений; + + Если Ожидание = 0 Тогда + // Формирование списка быстрого выбора, стандартную обработку не надо трогать Возврат; КонецЕсли; Элементы.Улица.ЦветФона = АвтоЦвет; - - СтандартнаяОбработка = Ложь; - Если СтрДлина(Текст)<3 Или КодКлассификатораНаселенногоПункта<=0 Тогда + Если СтрДлина(Текст) < 3 Или КодКлассификатораНаселенногоПункта <= 0 Тогда + // Нет вариантов, список пуст, стандартную обработку не надо трогать ВизуализироватьКорректностьВыбора(); Возврат; КонецЕсли; АнализКлассификатора = РезультатыАвтоПодбораУлицы(КодКлассификатораНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, Истина); ДанныеВыбора = АнализКлассификатора.ДанныеВыбора; + + // Стандартную обработку отключаем, только если есть наши варианты + СтандартнаяОбработка = ДанныеВыбора.Количество() = 0; КонецПроцедуры &НаКлиенте @@ -616,8 +614,9 @@ ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Комментарий") КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -639,9 +638,12 @@ Возврат; КонецЕсли; + ПредупреждатьОбОтсутствииОшибок = Истина; + Контекст = КонтекстФормыКлиент(); - СписокОшибок = СписокОшибокЗаполнения(Контекст); - СообщитьОбОшибкахЗаполнения(СписокОшибок, Истина); + СписокОшибок = СписокОшибокЗаполнения(Контекст, ПредупреждатьОбОтсутствииОшибок); + СообщитьОбОшибкахЗаполнения(СписокОшибок, ПредупреждатьОбОтсутствииОшибок); + КонецПроцедуры &НаКлиенте @@ -654,7 +656,7 @@ &НаКлиенте Процедура ЗаполнитьПоПочтовомуИндексу(Команда) - Если ЕстьКлассификатор Тогда + Если ЕстьКлассификатор И Не ПустаяСтрока(Индекс) Тогда ПараметрыФормы = Новый Структура("Индекс, СкрыватьНеактуальныеАдреса", СокрЛП(Индекс), СкрыватьНеактуальныеАдреса); ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ПоискАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); КонецЕсли; @@ -696,8 +698,9 @@ ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru='Подтверждение'")); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -842,15 +845,30 @@ XDTOИнформация.Состав, Контекст.ВидКонтактнойИнформации); + // Подавляем перенос строк в возвращаемом отдельно представлении. + Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); + Возврат Результат; КонецФункции &НаСервереБезКонтекста -Функция СписокОшибокЗаполнения(Контекст) +Функция СписокОшибокЗаполнения(Контекст, ПредупреждатьОбОтсутствии) XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); - Возврат КонтактнаяИнформацияСлужебный.ОшибкиЗаполненияАдреса( - XDTOИнформация.Состав, - Контекст.ВидКонтактнойИнформации); + + // Получаем список значений: XPath - текст ошибки + Результат = КонтактнаяИнформацияСлужебный.ОшибкиЗаполненияАдреса( + XDTOИнформация.Состав, Контекст.ВидКонтактнойИнформации + ); + + Если Результат.Количество() = 0 // Нет ошибок + И ПредупреждатьОбОтсутствии // Но надо предупредить об их отсутствии + // Дополнительно проверяем на пустоту + И (Не КонтактнаяИнформацияСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOИнформация)) + Тогда + Результат.Добавить("/", НСтр("ru = 'Адрес пуст.'")); + КонецЕсли; + + Возврат Результат; КонецФункции &НаСервере @@ -942,12 +960,15 @@ &НаКлиенте Процедура ОбработкаИзмененияСтраныКлиент() - ЭтоРоссийскийАдрес = Страна=СтранаРоссия; + ЭтоРоссийскийАдрес = Страна = СтранаРоссия; + Элементы.Индекс.Видимость = ЭтоРоссийскийАдрес; Элементы.ТипАдреса.ТекущаяСтраница = ?(ЭтоРоссийскийАдрес, Элементы.РоссийскийАдрес, Элементы.ИностранныйАдрес); - // Проверять можем только российские адреса - Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоРоссийскийАдрес; + // Проверять, вводить в свободной форме и искать по индексу можем только российские адреса + Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоРоссийскийАдрес; + Элементы.ВвестиАдресВСвободнойФорме.Доступность = ЭтоРоссийскийАдрес; + Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоРоссийскийАдрес; // Загружать можем только российские адреса Если МожноЗагружатьКлассификатор Тогда @@ -957,8 +978,6 @@ КонецЕсли; КонецЕсли; - // Вводить в свободной форме можем только российские адреса - Элементы.ВвестиАдресВСвободнойФорме.Доступность = ЭтоРоссийскийАдрес; КонецПроцедуры &НаСервере @@ -966,7 +985,7 @@ ЭлементЗначение.КнопкаВыпадающегоСписка = Данные.МожноПодбиратьЗначения; СписокТипов = Данные.ВариантыТипа; - ЭлементВид.КнопкаВыпадающегоСписка = СписокТипов.Количество()>0; + ЭлементВид.КнопкаВыпадающегоСписка = СписокТипов.Количество() > 0; Если ЭлементВид.КнопкаВыпадающегоСписка Тогда ЭлементВид.СписокВыбора.ЗагрузитьЗначения(СписокТипов); КонецЕсли; @@ -1014,12 +1033,15 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьЗначениеИндекса(Контекст, XDTOКонтактная=Неопределено) - Инфо = ?(XDTOКонтактная=Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); +Процедура УстановитьЗначениеИндекса(Контекст, XDTOКонтактная = Неопределено) + Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); - ИндексПоКлассификатору = КонтактнаяИнформацияСлужебный.ОпределитьПочтовыйИндексАдреса(Инфо.Состав); + Адрес = Инфо.Состав; + ИндексПоКлассификатору = КонтактнаяИнформацияСлужебный.ОпределитьПочтовыйИндексАдреса(Адрес); Если Не Пустаястрока(ИндексПоКлассификатору) Тогда Контекст.Индекс = ИндексПоКлассификатору; + КонтактнаяИнформацияСлужебный.ПочтовыйИндексАдреса(Адрес, ИндексПоКлассификатору); + XDTOКонтактная.Представление = КонтактнаяИнформацияСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); КонецЕсли; КонецПроцедуры @@ -1090,6 +1112,10 @@ ДанныеАдреса.Состав.Адрес_по_документу = ""; КонецЕсли; КонецЕсли; + + Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда + Контекст.ПредставлениеАдреса = ДанныеАдреса.Состав.Адрес_по_документу; + КонецЕсли; Иначе Контекст.ПредставлениеИностранногоАдреса = Строка(ДанныеАдреса.Состав); КонецЕсли; @@ -1099,32 +1125,40 @@ // Синтетический "Населенный пункт" получаем как представление Контекст.НаселенныйПункт = КонтактнаяИнформацияСлужебный.ПредставлениеНаселенногоПункта(ДанныеАдреса); - АнализКлассификатора = КонтактнаяИнформацияСлужебный.НаселенныеПунктыПоПредставлению(Контекст.НаселенныйПункт); - Если АнализКлассификатора.ДанныеВыбора.Количество()=1 Тогда + Контекст.Улица = КонтактнаяИнформацияСлужебный.ПредставлениеУлицы(ДанныеАдреса); + + АнализКлассификатора = КонтактнаяИнформацияСлужебный.НаселенныеПунктыПоПредставлению(Контекст.НаселенныйПункт, , , Контекст.Улица); + НайденоНаселенных = АнализКлассификатора.ДанныеВыбора.Количество(); + Если НайденоНаселенных = 0 Тогда + // Не нашли, наименование населенного пункта не трогаем + Контекст.КодКлассификатораНаселенногоПункта = 0; + Контекст.НаселенныйПунктНайденТочно = Ложь; + + Иначе + // Нашли точно или несколько, берем первого ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; Контекст.КодКлассификатораНаселенногоПункта = ВыбранноеЗначение.Код; Контекст.НаселенныйПунктНайденТочно = Истина; Контекст.НаселенныйПункт = ВыбранноеЗначение.Представление; - Иначе - Контекст.КодКлассификатораНаселенногоПункта = 0; - Контекст.НаселенныйПунктНайденТочно = Ложь; - // Наименование населенного пункта не трогаем + КонецЕсли; СформироватьДетальныйНаселенныйПункт(Контекст, ДанныеАдреса); // Синтетическую "Улицу" получаем как представление - Контекст.Улица = КонтактнаяИнформацияСлужебный.ПредставлениеУлицы(ДанныеАдреса); + АнализКлассификатора = КонтактнаяИнформацияСлужебный.УлицыПоПредставлению(Контекст.КодКлассификатораНаселенногоПункта, Контекст.Улица); - Если АнализКлассификатора.ДанныеВыбора.Количество()=1 Тогда + НайденоУлиц = АнализКлассификатора.ДанныеВыбора.Количество(); + Если НайденоУлиц = 1 Тогда + // Найдено точно ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; Контекст.КодКлассификатораУлицы = ВыбранноеЗначение.Код; Контекст.УлицаНайденаТочно = Истина; Контекст.Улица = ВыбранноеЗначение.Представление; Иначе + // Не найдено или найдено несколько, наименование улицы не трогаем Контекст.КодКлассификатораУлицы = 0; Контекст.УлицаНайденаТочно = Ложь; - // Наименование улицы не трогаем КонецЕсли; // Дом, строение, помещение @@ -1542,15 +1576,27 @@ ОчиститьСообщения(); - Если СписокОшибок.Количество()=0 И ПредупреждатьОбОтсутствии Тогда + КоличествоОшибок = СписокОшибок.Количество(); + Если КоличествоОшибок = 0 И ПредупреждатьОбОтсутствии Тогда + // Нет ошибок ПоказатьПредупреждение(, НСтр("ru='Адрес введен корректно.'")); Возврат; + ИначеЕсли КоличествоОшибок = 1 Тогда + МестоОшибки = СписокОшибок[0].Значение; + Если ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда + // Одна ошибка на весь адрес, не привязанная к полю + ПоказатьПредупреждение(, СписокОшибок[0].Представление); + Возврат; + КонецЕсли; КонецЕсли; + // Сообщаем об ошибках с привязкой к полям Для Каждого Элемент Из СписокОшибок Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент.Представление,,, - ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Элемент.Представление,,,ПутьКДаннымФормыПоПутиXPath(Элемент.Значение) + ); КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -1764,7 +1810,7 @@ |Улица, КодКлассификатораУлицы, УлицаНайденаТочно, |ТипДома, Дом, ДомНайденТочно, ТипСтроения, Строение, ТипПомещения, Помещение, |РазрешитьВводАдресаВСвободнойФорме, ПредставлениеАдресаИзменено, - |Модифицированность + |Модифицированность |"; СписокКоллекций = "ДополнительныеЗдания, ДополнительныеПомещения"; @@ -1823,10 +1869,12 @@ СостояниеГруппыВвода(Элементы.СтранаАдреса, Не Режим); СостояниеГруппыВвода(Элементы.ТипАдреса, Не Режим); + // Пометка режима Элементы.ВвестиАдресВСвободнойФорме.Пометка = Режим; + Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Пометка = Режим; // Проверять адрес, введенный вручную нельзя - Если Страна=СтранаРоссия Тогда + Если Страна = СтранаРоссия Тогда Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не Режим; КонецЕсли; @@ -1941,3 +1989,5 @@ КонецЕсли; Возврат ВРег(Результат); КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index 21e496d78..6034f79f7 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -14,8 +14,7 @@ // "КонтактнаяИнформация, Представление, Комментарий" // -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // &НаСервере @@ -57,8 +56,9 @@ ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -86,8 +86,9 @@ ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Комментарий"); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -106,8 +107,9 @@ ОчиститьТелефонСервер(); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -296,3 +298,5 @@ ЗаполнитьПредставлениеТелефона(); Модифицированность = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html new file mode 100644 index 000000000..c4023be58 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html @@ -0,0 +1,4 @@ + +

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

        +

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

        +

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

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 564f8ac6f..573ed7d3a 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -12,9 +12,7 @@ // // ------------------------------------------------------------------------------------------------- -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -42,9 +40,9 @@ ПостроитьФормуПоЧастямАдреса(); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОК(Команда) @@ -73,9 +71,9 @@ КонецЕсли; КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПостроитьФормуПоЧастямАдреса() @@ -121,10 +119,12 @@ Функция ИмяЧастиАдресаЭлемента(Элемент) Возврат Сред(Элемент.Имя, 1 + СтрДлина(ПрефиксИмениЧастиАдреса)); КонецФункции + &НаКлиенте Функция ЧастьАдресаЭлемента(Элемент) Возврат ЧастиАдреса[ИмяЧастиАдресаЭлемента(Элемент)]; КонецФункции + &НаКлиенте Функция УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение) ЧастьАдреса = ЧастьАдресаЭлемента(Элемент); @@ -156,17 +156,22 @@ Процедура Подключаемый_ПолеПриИзменении(Элемент) Модифицированность = Истина; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ПолеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); УправлениеКонтактнойИнформациейКлиент.НачалоВыбораЭлементаАдреса( - Элемент, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПараметрыФормы); + Элемент, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПараметрыФормы + ); КонецПроцедуры + &НаКлиенте Процедура Подключаемый_Очистка(Элемент, СтандартнаяОбработка) Модифицированность = Истина; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ПолеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Перем МожноЗагружатьРегион; @@ -192,23 +197,27 @@ СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Если Ожидание=0 Тогда - // Формирование списка быстрого выбора - Если ПустаяСтрока(Текст) Тогда - ДанныеВыбора = Новый СписокЗначений; - КонецЕсли; + ДанныеВыбора = Новый СписокЗначений; + + Если Ожидание = 0 Тогда + // Формирование списка быстрого выбора, стандартную обработку не надо трогать Возврат; КонецЕсли; - СтандартнаяОбработка = Ложь; - Если СтрДлина(Текст)<3 Тогда + Если СтрДлина(Текст) < 3 Тогда + // Нет вариантов, список пуст, стандартную обработку не надо трогать Возврат; КонецЕсли; ДанныеВыбора = СписокАвтоПодбораЭлементаАдреса(Текст, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, Истина); + + // Стандартную обработку отключаем, только если есть наши варианты + СтандартнаяОбработка = ДанныеВыбора.Количество() = 0; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ПолеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) Модифицированность = Истина; @@ -230,13 +239,20 @@ Функция КодНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса) Возврат КонтактнаяИнформацияСлужебный.КодНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса); КонецФункции + &НаСервереБезКонтекста Функция СписокАвтоПодбораЭлементаАдреса(Текст, КодЧастиАдреса, Знач ЧастиАдреса, ПредупреждатьОНеактуальных) + Возврат КонтактнаяИнформацияСлужебный.СписокАвтоПодбораЭлементаАдреса( - Текст, КодЧастиАдреса, ЧастиАдреса, ПредупреждатьОНеактуальных); + Текст, КодЧастиАдреса, ЧастиАдреса, ПредупреждатьОНеактуальных + ); + КонецФункции + &НаСервереБезКонтекста Функция СписокВариантовЭлементаАдресаПоТексту(Текст, КодЧастиАдреса, ЧастиАдреса, ВыбиратьСтрок) Возврат КонтактнаяИнформацияСлужебный.СписокВариантовЭлементаАдресаПоТексту( Текст, КодЧастиАдреса, ЧастиАдреса, ВыбиратьСтрок); КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ПоискАдресаПоПочтовомуИндексу/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ПоискАдресаПоПочтовомуИндексу/Module.bsl index d7638d517..a3d4dde32 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ПоискАдресаПоПочтовомуИндексу/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ПоискАдресаПоПочтовомуИндексу/Module.bsl @@ -7,8 +7,7 @@ // При успешном выборе - структура с полями Код, Представление с данными классификатора // -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -46,8 +45,9 @@ ПроизвестиВыбор(Значение); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроизвестиВыбор(Знач НомерСтроки) @@ -99,3 +99,4 @@ ОповеститьОВыборе(Результат); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo index d6d430deb..5659ae51d 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo @@ -39,6 +39,11 @@ ru Населенный пункт адреса + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index 57658b709..a0a5b7180 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -6,58 +6,24 @@ ЗапросПароляПользователя 53 - - Декорация2 - 63 - - <key>ru</key> - <value>Введите пароль для входа в приложение в Интернете</value> - - true - true - - true - - - Декорация2ExtendedTooltip - 90 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 64 - true - - Label - true - true - true - - Left - - - Группа1 - 59 - - WSПароль - 54 + ГруппаЗапросаПароля + 131 + + Декорация2 + 63 + + <key>ru</key> + <value>Введите пароль для входа в приложение в Интернете</value> + true true true - - WSПароль - - WSПарольExtendedTooltip - 92 + Декорация2ExtendedTooltip + 90 Label true true @@ -66,41 +32,110 @@ - WSПарольКонтекстноеМеню - 55 + Декорация2КонтекстноеМеню + 64 true - InputField - true - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - true - Normal + Label + true + true + true + + Left - - ЗабылиПароль - 58 + + ГруппаВводаПароля + 59 + + WSПароль + 54 + true + true + + true + + + WSПароль + + + WSПарольExtendedTooltip + 92 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 55 + true + + InputField + true + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + true + Normal + + + + ЗабылиПароль + 58 + true + true + + true + + + ЗабылиПарольExtendedTooltip + 93 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Группа ввода пароля</value> + + + ru + Группа ввода пароля + - ЗабылиПарольExtendedTooltip - 93 + ГруппаВводаПароляРасширеннаяПодсказка + 91 Label true true @@ -108,23 +143,261 @@ Left - Hyperlink - Form.Command.ЗабылиПароль - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + true + true + Auto + Auto + true true true + + <key>ru</key> + <value>Группа запроса пароля</value> + + + ru + Группа запроса пароля + - Группа1ExtendedTooltip - 91 + ГруппаЗапросаПароляРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаПредупрежденияДолгойСинхронизации + 136 + + Группа2 + 146 + + Декорация3 + 143 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 144 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 147 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа1 + 141 + + Декорация1 + 133 + + <key>ru</key> + <value>В некоторых случаях синхронизация данных может занять длительное время: + - медленный канал связи; + - большой объем данных; + - доступно обновление приложения в Интернете.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 134 + true + + Label + true + true + false + + Left + + + + НеНапоминатьОДолгойСинхронизации + 138 + true + true + + true + + + НеНапоминатьОДолгойСинхронизации + + Right + + НеНапоминатьОДолгойСинхронизацииРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + НеНапоминатьОДолгойСинхронизацииКонтекстноеМеню + 139 + true + + CheckBoxField + Enter + true + Left + true + + + + Декорация4 + 148 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 149 + true + + Label + true + true + true + + Left + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 142 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждения долгой синхронизации</value> + + + ru + Группа предупреждения долгой синхронизации + + true + + ГруппаПредупрежденияДолгойСинхронизацииРасширеннаяПодсказка + 137 Label true true @@ -205,6 +478,7 @@ ru Командная панель закрыть + false КоманднаяПанельВыполненияОбменаExtendedTooltip 94 @@ -233,6 +507,7 @@ ru Загрузка данных + true ЗапросПароляПользователяExtendedTooltip 89 @@ -1388,6 +1663,7 @@ ru Выполнение обмена данными + true ВыполнениеОбменаДаннымиExtendedTooltip 88 @@ -1418,6 +1694,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel Help @@ -1430,6 +1710,7 @@ Yes 55 LockOwner + Use true true Vertical @@ -2018,6 +2299,23 @@ true + + НеНапоминатьОДолгойСинхронизации + + <key>ru</key> + <value>Больше не напоминать</value> + + 24 + + Boolean + + + true + + + true + + ПерейтиВЖурналРегистрации diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index 69676802c..9b8d22487 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,11 +18,8 @@ Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); - Иначе - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Не заданы параметры формы. Форма не может быть открыта.'"), Отказ); Возврат; КонецЕсли; @@ -36,7 +32,25 @@ Заголовок = НСтр("ru = 'Синхронизация данных с ""%1""'"); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Строка(УзелИнформационнойБазы)); - // + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных",, Ложь); + РольДоступнаПолныеПрава = Пользователи.ЭтоПолноправныйПользователь(,, Ложь); + + Элементы.ПанельТребуетсяОбновление.ТекущаяСтраница = ?(РольДоступнаПолныеПрава, Элементы.ТребуетсяОбновлениеПолныеПрава, Элементы.ТребуетсяОбновлениеОграниченныеПрава); + Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок, УзелИнформационнойБазы); + Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок, УзелИнформационнойБазы); + + Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); + + СинхронизацияДанныхОтключена = Ложь; + ВыполнитьОтправкуДанных = Ложь; + + МодульАвтономнаяРаботаСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРаботаСлужебный"); + Если МодульАвтономнаяРаботаСлужебный = Неопределено Тогда + НеНапоминатьОДолгойСинхронизации = Истина; + Иначе + НеНапоминатьОДолгойСинхронизации = МодульАвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() + И (Не МодульАвтономнаяРаботаСлужебный.ФлагНастройкиВопросаОДолгойСинхронизации()); + КонецЕсли; ВидТранспортаСообщений = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); @@ -44,97 +58,77 @@ // (пользователь и пароль), сохраненные в информационной базе. // При обмене через веб-сервис для не-РИБ обменов параметры аутентификации (пароль) переопределяем (запрашиваем) только, // если пароль не сохранен в информационной базе. - ИспользоватьТекущегоПользователяДляАутентификации = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); - ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); - ПарольСинхронизацииСохранен = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы).WSЗапомнитьПароль; - ИспользоватьСохраненныеПараметрыАутентификации = Не ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) И ПарольСинхронизацииСохранен; - РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных",, Ложь); - РольДоступнаПолныеПрава = Пользователи.ЭтоПолноправныйПользователь(,, Ложь); + ИспользоватьТекущегоПользователяДляАутентификации = Ложь; + ИспользоватьСохраненныеПараметрыАутентификации = Ложь; + ПарольСинхронизацииЗадан = Ложь; + WSПароль = ""; - Элементы.ПанельТребуетсяОбновление.ТекущаяСтраница = ?(РольДоступнаПолныеПрава, Элементы.ТребуетсяОбновлениеПолныеПрава, Элементы.ТребуетсяОбновлениеОграниченныеПрава); - Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок, УзелИнформационнойБазы); - Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок, УзелИнформационнойБазы); - - Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); - - СинхронизацияДанныхОтключена = Ложь; - ВыполнитьОтправкуДанных = Ложь; - - // Устанавливаем текущий сценарий работы обмена - Если ЕстьОшибки Тогда + Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - СценарийКогдаЕстьОшибкиПриНачалеРаботы(); - - ИначеЕсли ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ВыполнитьОтправкуДанных = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВыполнитьОтправкуДанных(УзелИнформационнойБазы); - - Если ИспользоватьСохраненныеПараметрыАутентификации Тогда - - Если ПарольСинхронизацииСохранен Тогда - - Если ВыполнитьОтправкуДанных Тогда - - СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка(); - - Иначе - - СценарийОбменаЧерезВебСервис(); - - КонецЕсли; - - Иначе - - Если ВыполнитьОтправкуДанных Тогда - - СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); - - Иначе - - СценарийОбменаЧерезВебСервисСЗапросомПароля(); - - КонецЕсли; - + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Тогда + // Это РИБ и обмен по WS, используем текущего пользователя и пароль из сессии + ИспользоватьТекущегоПользователяДляАутентификации = Истина; + ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); + Если ПарольСинхронизацииЗадан Тогда + WSПароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелИнформационнойБазы); КонецЕсли; Иначе - + // Это не РИБ, читаем данные из настроек транспорта + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы); + ПарольСинхронизацииЗадан = НастройкиТранспорта.WSЗапомнитьПароль; Если ПарольСинхронизацииЗадан Тогда - - Если ВыполнитьОтправкуДанных Тогда - - СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка(); - - Иначе - - СценарийОбменаЧерезВебСервис(); - - - КонецЕсли; - + ИспользоватьСохраненныеПараметрыАутентификации = Истина; + WSПароль = НастройкиТранспорта.WSПароль; Иначе - - Если ВыполнитьОтправкуДанных Тогда - - СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); - - Иначе - - СценарийОбменаЧерезВебСервисСЗапросомПароля(); - + // Используем данные из сессии, только если их нет в регистре + ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); + Если ПарольСинхронизацииЗадан Тогда + ИспользоватьСохраненныеПараметрыАутентификации = Истина; + WSПароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелИнформационнойБазы); КонецЕсли; - КонецЕсли; КонецЕсли; + КонецЕсли; + + // Устанавливаем текущий сценарий работы обмена + Если ЕстьОшибки Тогда + СценарийКогдаЕстьОшибкиПриНачалеРаботы(); + + ИначеЕсли ВидТранспортаСообщений <> Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + // Вид транспорта - не веб + СценарийОбменаОбычный(); + Иначе - СценарийОбменаОбычный(); + ВыполнитьОтправкуДанных = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВыполнитьОтправкуДанных(УзелИнформационнойБазы); + + Элементы.ГруппаПредупрежденияДолгойСинхронизации.Видимость = Не НеНапоминатьОДолгойСинхронизации; + Элементы.ГруппаЗапросаПароля.Видимость = Не ПарольСинхронизацииЗадан; + + Если ПарольСинхронизацииЗадан И НеНапоминатьОДолгойСинхронизации Тогда + // Сразу на выполнение обмена + Если ВыполнитьОтправкуДанных Тогда + СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка(); + Иначе + СценарийОбменаЧерезВебСервис(); + КонецЕсли; + + Иначе + Если ВыполнитьОтправкуДанных Тогда + СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); + Иначе + СценарийОбменаЧерезВебСервисСЗапросомПароля(); + КонецЕсли; + + КонецЕсли; КонецЕсли; + КлючСохраненияПоложенияОкна = ?(ПарольСинхронизацииЗадан И НеНапоминатьОДолгойСинхронизации, "ПарольСинхронизацииЗадан", "") + "/" + ?(НеНапоминатьОДолгойСинхронизации, "НеНапоминатьОДолгойСинхронизации", ""); КонецПроцедуры &НаКлиенте @@ -144,8 +138,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ПриЗакрытии() + + СохранитьФлагВопросаОДолгойСинхронизации(Не НеНапоминатьОДолгойСинхронизации); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПерейтиВЖурналРегистрации(Команда) @@ -408,13 +410,13 @@ // // Параметры: // -// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника +// ПорядковыйНомерПерехода (обязательный) - Число. Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации (обязательный) - Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации (необязательный) - Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка. Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника // ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. // @@ -541,6 +543,36 @@ Возврат Результат; КонецФункции +&НаКлиенте +Процедура СохранитьФлагВопросаОДолгойСинхронизации(Знач Флаг) + + Настройки = Неопределено; + Если СохранитьФлагВопросаОДолгойСинхронизацииСервер(Флаг, Настройки) Тогда + ИзмененныеНастройки = Новый Массив; + ИзмененныеНастройки.Добавить(Настройки); + Оповестить("ИзмененыНастройкиПользователя", ИзмененныеНастройки, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СохранитьФлагВопросаОДолгойСинхронизацииСервер(Знач Флаг, Настройки = Неопределено) + + МодульАвтономнаяРаботаСлужебный = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРаботаСлужебный"); + + НадоСохранять = МодульАвтономнаяРаботаСлужебный <> Неопределено + И МодульАвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() + И Флаг <> МодульАвтономнаяРаботаСлужебный.ФлагНастройкиВопросаОДолгойСинхронизации(); + + Если НадоСохранять Тогда + + МодульАвтономнаяРаботаСлужебный.ФлагНастройкиВопросаОДолгойСинхронизации(Флаг, Настройки); + + КонецЕсли; + + Возврат НадоСохранять; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ @@ -607,12 +639,12 @@ Функция Подключаемый_ЗапросПароляПользователя_ПриПереходеДалее(Отказ) Если ПустаяСтрока(WSПароль) Тогда - НСтрока = НСтр("ru = 'Не указан пароль.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); - + Возврат Неопределено; КонецЕсли; + СохранитьФлагВопросаОДолгойСинхронизации(Не НеНапоминатьОДолгойСинхронизации); КонецФункции &НаКлиенте @@ -632,14 +664,14 @@ Новый Структура("ИспользоватьТекущегоПользователя, Пароль", ИспользоватьТекущегоПользователяДляАутентификации, ?(ПарольСинхронизацииЗадан, Неопределено, WSПароль))); - WSПароль = ""; // Сбрасываем пароль после проверки подключения - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, ПараметрыПодключения, СообщениеОбОшибкеПользователю) Тогда СинхронизацияДанныхОтключена = Истина; КонецЕсли; + // Сбрасываем пароль после проверки подключения + WSПароль = ""; КонецПроцедуры &НаКлиенте @@ -1004,3 +1036,5 @@ ТаблицаПереходовНоваяСтрока(1, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl deleted file mode 100644 index 46a89ec14..000000000 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl +++ /dev/null @@ -1,5 +0,0 @@ - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("Обработка.ГрупповоеИзменениеОбъектов.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss deleted file mode 100644 index 61e6fb4bb..000000000 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> - <filter> - <viewMode>Normal</viewMode> - <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> - </filter> - <order> - <viewMode>Normal</viewMode> - <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> - </order> - <conditionalAppearance> - <viewMode>Normal</viewMode> - <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> - </conditionalAppearance> - <itemsViewMode>Normal</itemsViewMode> - <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> -</Settings> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Help/ru.html deleted file mode 100644 index 7b425c04e..000000000 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Help/ru.html +++ /dev/null @@ -1,5 +0,0 @@ -<!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> -<p>Служебные реквизиты, в том числе и реквизиты табличных частей, по умолчанию скрыты. Для того, чтобы включить отображение этих реквизитов на форме, необходимо установить флажок <strong>Показывать служебные реквизиты и табличные части</strong>. Редактирование служебных реквизитов может нарушить работоспособность программы, поэтому рекомендуется использовать эту возможность крайне осторожно и только в ремонтных целях.</p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 3b14d997e..000000000 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ -<?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:Color">#C0C0C0</dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html deleted file mode 100644 index 8b6f0a43a..000000000 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html +++ /dev/null @@ -1,9 +0,0 @@ -<!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>Для очистки значения реквизита, нужно проставить напротив него флажок и, оставив колонку <strong>Новое значение </strong>пустой, нажать на кнопку <strong>Изменить</strong>. </p> -<p>Если дополнительно необходимо настроить список обрабатываемых элементов, то можно воспользоваться кнопкой <strong>Далее</strong>. В открывшемся списке можно откорректировать состав элементов, а также посмотреть текущие значения их реквизитов. По кнопке <strong>Открыть элемент</strong> или двойным щелчком мыши в списке можно перейти к карточке элемента.</p> -<p>С помощью команды <strong>История</strong> можно выбрать ранее сохраненные настройки по изменению элементов. </p> -<p>Дополнительно можно <a href="DataProcessor.ГрупповоеИзменениеОбъектов.Form.ДополнительныеПараметры/Help">задать особые настройки</a> с помощью команды <strong>Настроить параметры изменения</strong>. </p> -<p><strong>Особые случаи:</strong></p> -<ul><li>Нужно иметь в виду, что в списке реквизитов могут быть реквизиты, недоступные для изменения и отображающиеся серым цветом. В случае особой необходимости изменения их изменения, можно воспользоваться командой <strong>Разрешить редактирование реквизитов</strong>. -</li><li>При изменении проведённых документов не выполняется их перепроведение. </li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl new file mode 100644 index 000000000..39f900441 --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl @@ -0,0 +1,5 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form similarity index 99% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Form.form rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form index 690ce6366..cc75d2907 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form @@ -239,7 +239,7 @@ <excludedCommands>SaveValues</excludedCommands> <excludedCommands>Yes</excludedCommands> <width>45</width> - <height>9</height> + <height>20</height> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> @@ -253,7 +253,7 @@ <name>Объект</name> <id>1</id> <valueType> - <types>DataProcessorObject.ГрупповоеИзменениеОбъектов</types> + <types>DataProcessorObject.ГрупповоеИзменениеРеквизитов</types> </valueType> <view> <common>true</common> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl similarity index 96% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Module.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index 97c41b081..5c957c1a9 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -45,8 +45,9 @@ Закрыть(Элементы.ДоступныеОбъектыДляИзменения.ТекущиеДанные.Значение); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -56,8 +57,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) @@ -245,11 +247,11 @@ // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр<n> - Строка - подставляемый параметр. // // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами. +// Строка - текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". @@ -335,3 +337,4 @@ Возврат Результат; КонецФункции +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form similarity index 99% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Form.form rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form index 0ad71111e..060a28a0c 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form @@ -637,7 +637,7 @@ <name>Объект</name> <id>1</id> <valueType> - <types>DataProcessorObject.ГрупповоеИзменениеОбъектов</types> + <types>DataProcessorObject.ГрупповоеИзменениеРеквизитов</types> </valueType> <view> <common>true</common> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl similarity index 91% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Module.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl index da8ff03ea..85f0bced8 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ВыбранныеЭлементы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,8 +22,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомпоновщикНастроекНастройкиОтбор +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекНастройкиОтбор &НаКлиенте Процедура КомпоновщикНастроекНастройкиОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) @@ -40,8 +41,9 @@ ОтключитьОбработчикОжидания("ОбновитьСписокВыбранных"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -49,8 +51,9 @@ Закрыть(Результат); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализироватьКомпоновщикНастроек() @@ -111,5 +114,4 @@ ОбновитьСписокВыбранныхНаСервере(); КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form similarity index 100% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Form.form rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html new file mode 100644 index 000000000..11273aeb9 --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html @@ -0,0 +1,18 @@ +<!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.16476"></meta></head><body> +<p>После ввода значений <a href="DataProcessor.ГрупповоеИзменениеРеквизитов/Help">для изменения реквизитов</a> можно задать особые настройки с помощью команды <strong>Дополнительные параметры</strong>:</p> +<ul><li> +<div><strong>Изменять в транзакции</strong> (по умолчанию флажок установлен) - программа позволяет обрабатывать выбранные для изменения элементы списка в транзакции. Если в процессе записи при установленном флажке не удается записать один из объектов (например, потому что объект редактируется другим пользователем), то будут отменены изменения во всех объектах.</div> +</li><li> +<div><strong>Прерывать по ошибке</strong> - если изменение объектов выполняется не в транзакции, то рекомендуется установить этот флажок (по умолчанию этот флажок установлен). В этом случае, если запись объекта по каким-либо причинам невозможна, программа выдаст предупреждение и предложит либо продолжить изменение оставшихся объектов, либо прервать обработку для выяснения причин проблемы. Если флажок не установлен, а объект записать нельзя, то программа пропустит такой объект и продолжит изменение оставшихся объектов.</div> +</li><li> +<div> +<p><strong>Обрабатывать дочерние элементы</strong> - установка флажка (по умолчанию флажок не установлен) позволяет изменять дочерние элементы выбранных групп и родительских объектов без неободимости установки флажков у всех элементов групп и дочерних объектов. Если флажок снят, то программа обрабатывает саму группу, а не ее дочерние элементы.</p></div></li></ul><h3>Дополнительные параметры для администратора</h3> +<p>При работе администратора по команде <strong>Групповое изменение реквизитов</strong> раздела <strong>Администрирование - Поддержка и обслуживание</strong> предусмотрен следующий дополнительный параметр:</p> +<ul><li> +<div> +<p><strong>Показывать служебные реквизиты и табличные части</strong> - служебные реквизиты, в том числе и служебные реквизиты табличных частей, по умолчанию скрыты. Для того, чтобы включить отображение этих реквизитов в окнах объектов программы, необходимо включить этот флажок. Редактирование служебных реквизитов может нарушить работоспособность программы, поэтому рекомендуется использовать эту возможность крайне осторожно и только в ремонтных целях.</p></div> +</li><li> +<div> +<p>Параметр <strong>Обрабатывать дочерние элементы </strong>недоступен в данном режиме.</p></div></li></ul><h3>См. также:</h3> +<ul><li> +<div><a href="DataProcessor.ГрупповоеИзменениеРеквизитов/Help">Групповое изменение объектов</a></div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl similarity index 84% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Module.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl index 431dafb9a..355a14a78 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/ДополнительныеПараметры/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,9 +23,7 @@ Элементы.ГруппаПоказыватьСлужебныеРеквизиты.Видимость = Ложь; КонецЕсли; - Если НЕ Параметры.УчитыватьИерархию Тогда - Элементы.ОбрабатыватьГруппыРекурсивно.Доступность = Ложь; - КонецЕсли; + Элементы.ГруппаОбрабатыватьРекурсивно.Видимость = Параметры.КонтекстныйВызов И Параметры.УчитыватьИерархию; КонецПроцедуры @@ -36,8 +34,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИзменятьВТранзакцииПриИзменении(Элемент) @@ -46,8 +45,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -65,8 +65,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УстановитьЭлементыФормы() @@ -78,3 +79,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form similarity index 91% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index 3d9781991..8ce6137e3 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -68,6 +68,9 @@ <segments>КомпоновщикНастроек.Settings.Filter</segments> </dataPath> <titleLocation>None</titleLocation> + <excludedCommands>Detailed</excludedCommands> + <excludedCommands>SetPresentation</excludedCommands> + <excludedCommands>UserSettingItemProperties</excludedCommands> <autoCommandBar> <name>КомпоновщикНастроекНастройкиОтборКоманднаяПанель</name> <id>172</id> @@ -139,10 +142,10 @@ </handlers> <searchStringAddition> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоиска</name> - <id>216</id> + <id>232</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоискаРасширеннаяПодсказка</name> - <id>218</id> + <id>234</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -152,7 +155,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоискаКонтекстноеМеню</name> - <id>217</id> + <id>233</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиОтбор</source> @@ -162,10 +165,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотра</name> - <id>219</id> + <id>235</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка</name> - <id>221</id> + <id>237</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -175,7 +178,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотраКонтекстноеМеню</name> - <id>220</id> + <id>236</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -186,10 +189,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоиском</name> - <id>222</id> + <id>238</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоискомРасширеннаяПодсказка</name> - <id>224</id> + <id>240</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -199,7 +202,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоискомКонтекстноеМеню</name> - <id>223</id> + <id>239</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -221,7 +224,58 @@ <contextMenu> <name>КомпоновщикНастроекНастройкиОтборКонтекстноеМеню</name> <id>171</id> - <autoFill>true</autoFill> + <items xsi:type="form:Button"> + <name>КомпоновщикНастроекНастройкиОтборКонтекстноеМенюДобавитьЭлементОтбора</name> + <id>225</id> + <title> + <key>ru</key> + <value>Добавить условие отбора</value> + + true + true + + true + + + КомпоновщикНастроекНастройкиОтборКонтекстноеМенюДобавитьЭлементОтбораРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Form.Item.КомпоновщикНастроекНастройкиОтбор.StandardCommand.AddFilterItem + Normal + Auto + true + true + UserCmds + Auto + + + КомпоновщикНастроекНастройкиОтборКонтекстноеМенюГруппа1 + 229 + true + true + + true + + + КомпоновщикНастроекНастройкиОтборКонтекстноеМенюГруппа1РасширеннаяПодсказка + 230 + Label + true + true + + Left + + + + Item.КомпоновщикНастроекНастройкиОтбор + + Tree true @@ -615,10 +669,10 @@ РеквизитыОбъектаСтрокаПоиска - 233 + 249 РеквизитыОбъектаСтрокаПоискаРасширеннаяПодсказка - 235 + 251 Label true true @@ -628,7 +682,7 @@ РеквизитыОбъектаСтрокаПоискаКонтекстноеМеню - 234 + 250 true РеквизитыОбъекта @@ -638,10 +692,10 @@ РеквизитыОбъектаСостояниеПросмотра - 236 + 252 РеквизитыОбъектаСостояниеПросмотраРасширеннаяПодсказка - 238 + 254 Label true true @@ -651,7 +705,7 @@ РеквизитыОбъектаСостояниеПросмотраКонтекстноеМеню - 237 + 253 true ViewStatusAddition @@ -662,10 +716,10 @@ РеквизитыОбъектаУправлениеПоиском - 239 + 255 РеквизитыОбъектаУправлениеПоискомРасширеннаяПодсказка - 241 + 257 Label true true @@ -675,7 +729,7 @@ РеквизитыОбъектаУправлениеПоискомКонтекстноеМеню - 240 + 256 true SearchControlAddition @@ -815,7 +869,6 @@ 197 true - true Label true 2 @@ -1090,10 +1143,10 @@ ОбъектыКоторыеНеУдалосьИзменитьСтрокаПоиска - 253 + 269 ОбъектыКоторыеНеУдалосьИзменитьСтрокаПоискаРасширеннаяПодсказка - 255 + 271 Label true true @@ -1103,7 +1156,7 @@ ОбъектыКоторыеНеУдалосьИзменитьСтрокаПоискаКонтекстноеМеню - 254 + 270 true ОбъектыКоторыеНеУдалосьИзменить @@ -1113,10 +1166,10 @@ ОбъектыКоторыеНеУдалосьИзменитьСостояниеПросмотра - 256 + 272 ОбъектыКоторыеНеУдалосьИзменитьСостояниеПросмотраРасширеннаяПодсказка - 258 + 274 Label true true @@ -1126,7 +1179,7 @@ ОбъектыКоторыеНеУдалосьИзменитьСостояниеПросмотраКонтекстноеМеню - 257 + 273 true ViewStatusAddition @@ -1137,10 +1190,10 @@ ОбъектыКоторыеНеУдалосьИзменитьУправлениеПоиском - 259 + 275 ОбъектыКоторыеНеУдалосьИзменитьУправлениеПоискомРасширеннаяПодсказка - 261 + 277 Label true true @@ -1150,7 +1203,7 @@ ОбъектыКоторыеНеУдалосьИзменитьУправлениеПоискомКонтекстноеМеню - 260 + 276 true SearchControlAddition @@ -1243,37 +1296,6 @@ Normal - - ПерейтиВЖурналРегистрации - 160 - - <key>ru</key> - <value>Технические подробности</value> - - true - true - - true - - - ПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 161 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрации - Normal - Auto - true - true - UserCmds - Auto - true true @@ -1444,6 +1466,143 @@ auto + + ВсеГотово + 215 + + ГруппаУспешноЗавершено + 217 + + КартинкаУспешноЗавершено + 219 + + <key>ru</key> + <value> </value> + + true + true + + true + + + КартинкаУспешноЗавершеноРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + + КартинкаУспешноЗавершеноКонтекстноеМеню + 220 + true + + 6 + true + 3 + true + + + CommonPicture.Успешно32 + + + + + НадписьУспешноЗавершено + 222 + + <key>ru</key> + <value>Реквизиты выбранных элементов были изменены. +Всего изменено элементов: %1</value> + + true + true + + true + + + НадписьУспешноЗавершеноРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + НадписьУспешноЗавершеноКонтекстноеМеню + 223 + true + + Label + true + 3 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаУспешноЗавершеноРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Все готово</value> + + + ВсеГотовоРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true @@ -1685,7 +1844,7 @@ Объект 1 - DataProcessorObject.ГрупповоеИзменениеОбъектов + DataProcessorObject.ГрупповоеИзменениеРеквизитов true @@ -2136,12 +2295,10 @@ Number AnyRef - 10 + 20 - - Date - + true @@ -2606,28 +2763,6 @@ Auto Auto - - ПерейтиВЖурналРегистрации - - <key>ru</key> - <value>Перейти в журнал регистрации</value> - - 5 - - ru - Перейти в журнал регистрации - - - true - - - - ПерейтиВЖурналРегистрации - - - Auto - Auto - НастроитьПараметрыИзменения @@ -2656,7 +2791,7 @@ <key>ru</key> <value><Нет></value> - 12 + 7 ru Заглушка diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl similarity index 96% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index 48ccef198..0c68936b0 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -1,17 +1,20 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + ПроверитьВерсиюИРежимСовместимостиПлатформы(); + Параметры.Свойство("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка); ЗагрузитьНастройкиОбработки(); - Элементы.ПерейтиВЖурналРегистрации.Видимость = ПравоДоступа("Администрирование", Метаданные) И ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность"); КонтекстныйВызов = ТипЗнч(Параметры.МассивОбъектов) = Тип("Массив"); Элементы.ОтборОбъектов.Видимость = Не КонтекстныйВызов; Элементы.ФормаНазад.Видимость = Ложь; @@ -28,7 +31,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ГрупповоеИзменениеОбъектов.Форма.ДополнительныеПараметры") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ГрупповоеИзменениеРеквизитов.Форма.ДополнительныеПараметры") Тогда ПерезаполнитьСтруктуруРеквизитовОбъекта = Ложь; Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда @@ -96,8 +99,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВидИзменяемыхОбъектовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -109,8 +113,9 @@ ОткрытьФорму(ПолноеИмяФормы("ВыборВидаОбъектов"), ПараметрыФормы, , , , , ОписаниеОповещения); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомпоновщикНастроекНастройкиОтбор +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекНастройкиОтбор &НаКлиенте Процедура КомпоновщикНастроекНастройкиОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) @@ -138,8 +143,9 @@ ОтключитьОбработчикОжидания("ОбновитьНадписи"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ОбъектыКоторыеНеУдалосьИзменить +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОбъектыКоторыеНеУдалосьИзменить &НаКлиенте Процедура ОбъектыКоторыеНеУдалосьИзменитьПередНачаломИзменения(Элемент, Отказ) @@ -156,8 +162,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Далее(Команда) @@ -185,11 +192,10 @@ КонецЕсли; Если НазначениеКнопки = "Прервать" Тогда + ТекущееСостояниеИзменения.ПрерватьИзменение = Истина; Если Не РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда ОтключитьОбработчикОжидания("ПроверитьВыполнениеИзменения"); ЗавершитьИзменениеОбъектов(); - Иначе - ТекущееСостояниеИзменения.ПрерватьИзменение = Истина; КонецЕсли; Возврат; КонецЕсли; @@ -224,15 +230,7 @@ &НаКлиенте Процедура Назад(Команда) - Если Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений; - КонецЕсли; - - ОбъектыКоторыеНеУдалосьИзменить.Очистить(); - Элементы.ФормаНазад.Видимость = Ложь; - Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Изменить реквизиты'"); - - ОбновитьНадписи(); + НазадСервер(); КонецПроцедуры @@ -255,15 +253,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПерейтиВЖурналРегистрации(Команда) - Если ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда - НастройкаОтбора = Новый Структура("Пользователь", ТекущийПользователь()); - МодульЖурналРегистрацииКлиент = ОбщийМодуль("ЖурналРегистрацииКлиент"); - МодульЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(НастройкаОтбора, ЭтаФорма); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура РазрешитьРедактированиеРеквизитовОбработчикКоманды(Команда) @@ -312,8 +301,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыОбъектаПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.ЗаблокированныйРеквизит"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(192, 192, 192)); + +КонецПроцедуры &НаКлиенте Процедура ВыполнитьИзменениеПроверкаОтбораВыполнена(РезультатВопроса = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -396,14 +407,6 @@ ЗагрузитьМетаданныеОбъекта(); КонецПроцедуры -&НаСервере -Функция ТекущийПользователь() - Если ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда - МодульПользователи = ОбщийМодуль("Пользователи"); - Возврат МодульПользователи.АвторизованныйПользователь(); - КонецЕсли; -КонецФункции - &НаКлиенте Процедура ВыполнитьИзменениеПроверкиВыполнены(РезультатВопроса = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -432,7 +435,7 @@ // Представление - представление настройки пользователю Настройки = ХранилищеОбщихНастроекЗагрузить( "ГрупповоеИзменениеОбъектов", - "ИсторияИзменений/"+ВидИзменяемыхОбъектов); + "ИсторияИзменений/" + ВидИзменяемыхОбъектов); Если Настройки = Неопределено Тогда Настройки = Новый Массив; @@ -451,7 +454,7 @@ Настройки.Удалить(19); КонецЕсли; - ХранилищеОбщихНастроекСохранить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/"+ВидИзменяемыхОбъектов, Настройки); + ХранилищеОбщихНастроекСохранить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидИзменяемыхОбъектов, Настройки); ЗагрузитьИсториюОпераций(); ЗаполнитьПодменюРанееИзмененныеРеквизиты(); @@ -569,7 +572,7 @@ ПоказыватьСлужебныеРеквизиты = Ложь; СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( - "Обработка.ГрупповоеИзменениеОбъектов", + "Обработка.ГрупповоеИзменениеОбъектов", ВидИзменяемыхОбъектов); Если СтруктураНастроек <> Неопределено Тогда @@ -853,8 +856,9 @@ ОбработкаЗавершена = ТекущееСостояниеИзменения.КоличествоИзмененных = ТекущееСостояниеИзменения.КоличествоОбъектовДляОбработки; Если ОбработкаЗавершена Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение реквизитов элементов'"), , НСтр("ru = 'Изменение элементов завершено.'")); - Закрыть(); + ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение реквизитов элементов'"), , + ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменены элементы (%1).'"), ТекущееСостояниеИзменения.КоличествоИзмененных)); + ПерейтиНаСтраницуВсеГотово(); Возврат; КонецЕсли; @@ -873,7 +877,7 @@ Если Объект.ИзменятьВТранзакции И Не ОбработкаЗавершена Тогда КоличествоПропущенных = ТекущееСостояниеИзменения.КоличествоОбъектовДляОбработки - ТекущееСостояниеИзменения.КоличествоОшибок; - Если КоличествоПропущенных > 0 Тогда + Если КоличествоПропущенных > 0 И Не ТекущееСостояниеИзменения.ПрерватьИзменение Тогда СтрокаТаблицы = ОбъектыКоторыеНеУдалосьИзменить.Добавить(); СтрокаТаблицы.Объект = ПодставитьПараметрыВСтроку(НСтр("ru = '... и другие элементы (%1)'"), КоличествоПропущенных); СтрокаТаблицы.Причина = НСтр("ru = 'Пропущены, так как не были изменены один или более элементов.'"); @@ -893,6 +897,35 @@ КонецПроцедуры +&НаСервере +Процедура НазадСервер() + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов + Или Элементы.Страницы.ТекущаяСтраница = Элементы.ВсеГотово Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений; + КонецЕсли; + + ОбработкаЗавершена = Ложь; + ОбъектыКоторыеНеУдалосьИзменить.Очистить(); + Элементы.ФормаНазад.Видимость = Ложь; + Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Изменить реквизиты'"); + + ОбновитьНадписиСервер(); + +КонецПроцедуры + +&НаСервере +Процедура ПерейтиНаСтраницуВсеГотово() + + Элементы.Страницы.ТекущаяСтраница = Элементы.ВсеГотово; + Элементы.НадписьУспешноЗавершено.Заголовок = ПодставитьПараметрыВСтроку( + НСтр("ru = 'Реквизиты выбранных элементов были изменены. + |Всего изменено элементов: %1'"), ТекущееСостояниеИзменения.КоличествоИзмененных); + Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Готово'"); + Элементы.ФормаНазад.Видимость = Истина; + +КонецПроцедуры + &НаСервере Функция ТипИзменяемыхОбъектов() МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); @@ -1041,7 +1074,7 @@ &НаСервере Функция ИзменяемыеРеквизиты(ИмяТабличнойЧасти = "РеквизитыОбъекта") - ТаблицаРеквизитов = ЭтаФорма[ИмяТабличнойЧасти]; + ТаблицаРеквизитов = ЭтотОбъект[ИмяТабличнойЧасти]; Возврат ТаблицаЗначенийВМассив(ТаблицаРеквизитов.Выгрузить(Новый Структура("Изменять", Истина))); КонецФункции @@ -1205,7 +1238,7 @@ КонецЦикла; Для Каждого ТабличнаяЧасть Из ТабличныеЧастиОбъекта Цикл - Для Каждого Реквизит Из ЭтаФорма[ТабличнаяЧасть.Значение] Цикл + Для Каждого Реквизит Из ЭтотОбъект[ТабличнаяЧасть.Значение] Цикл Реквизит.Значение = Неопределено; Реквизит.Изменять = Ложь; КонецЦикла; @@ -1655,7 +1688,7 @@ ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты); Для Каждого ОписаниеРеквизита Из ДоступныеДляИзмененияРеквизиты Цикл - Реквизит = ЭтаФорма[ТаблицаОбъекта.Ключ].Добавить(); + Реквизит = ЭтотОбъект[ТаблицаОбъекта.Ключ].Добавить(); Реквизит.Имя = ОписаниеРеквизита.Имя; Реквизит.Представление = ?(ПустаяСтрока(ОписаниеРеквизита.Синоним), ОписаниеРеквизита.Имя, ОписаниеРеквизита.Синоним); Реквизит.ДопустимыеТипы = ОписаниеРеквизита.Тип; @@ -2317,7 +2350,6 @@ КонецПроцедуры - &НаСервере Процедура ЗаполнитьПодменюРанееИзмененныеРеквизиты() @@ -2391,7 +2423,7 @@ СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Имя", ИзменяемыйРеквизит.Имя); Если Элементы.Найти("ТабличнаяЧасть" + ТабличнаяЧасть.Ключ) <> Неопределено Тогда - НайденныеСтроки = ЭтаФорма["ТабличнаяЧасть" + ТабличнаяЧасть.Ключ].НайтиСтроки(СтруктураПоиска); + НайденныеСтроки = ЭтотОбъект["ТабличнаяЧасть" + ТабличнаяЧасть.Ключ].НайтиСтроки(СтруктураПоиска); Если НайденныеСтроки.Количество() > 0 Тогда НайденныеСтроки[0].Значение = ИзменяемыйРеквизит.Значение; НайденныеСтроки[0].Изменять = Истина; @@ -2710,11 +2742,11 @@ // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр - Строка - подставляемый параметр. // // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами. +// Строка - текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". @@ -2909,13 +2941,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "Справочник" +// Определяет принадлежность объекта метаданных к общему типу "Справочник". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // &НаСервереБезКонтекста Функция ЭтоСправочник(ОбъектМетаданных) @@ -2929,7 +2961,8 @@ &НаСервереБезКонтекста Функция ЭтоСсылка(Тип) - Возврат Справочники.ТипВсеСсылки().СодержитТип(Тип) + Возврат Тип <> Тип("Неопределено") + И (Справочники.ТипВсеСсылки().СодержитТип(Тип) ИЛИ Документы.ТипВсеСсылки().СодержитТип(Тип) ИЛИ Перечисления.ТипВсеСсылки().СодержитТип(Тип) ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) @@ -2938,7 +2971,7 @@ ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) ИЛИ БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(Тип) ИЛИ Задачи.ТипВсеСсылки().СодержитТип(Тип) - ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип); + ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип)); КонецФункции @@ -3001,13 +3034,13 @@ КонецФункции -// Определяет принадлежность объекта метаданных к общему типу "План видов характеристик" +// Определяет принадлежность объекта метаданных к общему типу "План видов характеристик". // // Параметры: -// ОбъектМетаданных – объект метаданных, для которого необходимо определить принадлежность к заданному типу +// ОбъектМетаданных - объект метаданных, для которого необходимо определить принадлежность к заданному типу. // // Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// Булево. // &НаСервереБезКонтекста Функция ЭтоПланВидовХарактеристик(ОбъектМетаданных) @@ -3086,9 +3119,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры сведений" +// Возвращает значение для идентификации общего типа "Регистры сведений". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаРегистрыСведений() @@ -3097,9 +3131,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры накопления" +// Возвращает значение для идентификации общего типа "Регистры накопления". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаРегистрыНакопления() @@ -3108,9 +3143,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры бухгалтерии" +// Возвращает значение для идентификации общего типа "Регистры бухгалтерии". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаРегистрыБухгалтерии() @@ -3119,9 +3155,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Регистры расчета" +// Возвращает значение для идентификации общего типа "Регистры расчета". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаРегистрыРасчета() @@ -3130,9 +3167,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Документы" +// Возвращает значение для идентификации общего типа "Документы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаДокументы() @@ -3141,9 +3179,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Справочники" +// Возвращает значение для идентификации общего типа "Справочники". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаСправочники() @@ -3152,9 +3191,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Перечисления" +// Возвращает значение для идентификации общего типа "Перечисления". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПеречисления() @@ -3163,9 +3203,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "ПланыОбмена" +// Возвращает значение для идентификации общего типа "ПланыОбмена". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПланыОбмена() @@ -3174,9 +3215,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы видов характеристик" +// Возвращает значение для идентификации общего типа "Планы видов характеристик". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовХарактеристик() @@ -3185,9 +3227,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Бизнес-процессы" +// Возвращает значение для идентификации общего типа "Бизнес-процессы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаБизнесПроцессы() @@ -3196,9 +3239,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Задачи" +// Возвращает значение для идентификации общего типа "Задачи". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаЗадачи() @@ -3207,9 +3251,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы счетов" +// Возвращает значение для идентификации общего типа "Планы счетов". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПланыСчетов() @@ -3218,9 +3263,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Планы видов расчета" +// Возвращает значение для идентификации общего типа "Планы видов расчета". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПланыВидовРасчета() @@ -3229,9 +3275,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Константы" +// Возвращает значение для идентификации общего типа "Константы". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаКонстанты() @@ -3240,9 +3287,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Журналы документов" +// Возвращает значение для идентификации общего типа "Журналы документов". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаЖурналыДокументов() @@ -3251,9 +3299,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "Последовательности" +// Возвращает значение для идентификации общего типа "Последовательности". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаПоследовательности() @@ -3262,9 +3311,10 @@ КонецФункции -// Возвращает значение для идентификации общего типа "РегламентныеЗадания" +// Возвращает значение для идентификации общего типа "РегламентныеЗадания". // -// Тип: Строка +// Возвращаемое значение: +// Строка. // &НаСервереБезКонтекста Функция ИмяТипаРегламентныеЗадания() @@ -3573,9 +3623,9 @@ // Прочитаем первый узел и проверим его Если Не Чтение.Прочитать() Тогда - ВызватьИсключение("Пустой XML"); + ВызватьИсключение НСтр("ru = 'Пустой XML'"); ИначеЕсли Чтение.Имя <> "Items" Тогда - ВызватьИсключение("Ошибка в структуре XML"); + ВызватьИсключение НСтр("ru = 'Ошибка в структуре XML'"); КонецЕсли; // Получим описание таблицы и создадим ее @@ -3596,7 +3646,7 @@ ИначеЕсли Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда Продолжить; ИначеЕсли Чтение.Имя <> "Item" Тогда - ВызватьИсключение("Ошибка в структуре XML"); + ВызватьИсключение НСтр("ru = 'Ошибка в структуре XML'"); КонецЕсли; новСтр = ТаблицаЗначений.Добавить(); @@ -3675,4 +3725,25 @@ Результат = Результат * 1000 + Число(ЧастьНомера); КонецЦикла; Возврат Результат; -КонецФункции \ No newline at end of file +КонецФункции + +&НаСервере +Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() + + Информация = Новый СистемнаяИнформация; + Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" + И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать + Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_2_16"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]))) Тогда + + ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + |1С:Предприятие 8.3 с отключенным режимом совместимости или выше'"); + + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html new file mode 100644 index 000000000..462f62078 --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html @@ -0,0 +1,49 @@ + +

        Групповое изменение реквизитов

        +

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

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

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

        +

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

        +

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

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

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

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

        Результат изменения с ошибками

        +

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

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

        Выбор ранее сохраненных настроек по изменению реквизитов

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

        Изменение заблокированных реквизитов

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

        Особенности изменения проведенных документов

        +
        • +
          При изменении проведенных документов выполняется их перепроведение. 

        Настройка параметров изменения реквизитов

        +

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

        +

        Групповое изменение реквизитов (для администратора)

        +

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

        +

        Выбор элементов для изменения

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

        См. также

        + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ManagerModule.bsl similarity index 100% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ManagerModule.bsl diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl similarity index 96% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index bf6909d06..3d84d028d 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -1,8 +1,8 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции +// Для внутреннего использования. Функция СведенияОВнешнейОбработке() Экспорт Перем ПараметрыРегистрации; @@ -27,6 +27,7 @@ КонецФункции +// Для внутреннего использования. Функция ТекстЗапроса(ОбъектМетаданных) Экспорт ТекстЗапроса = ""; @@ -67,6 +68,7 @@ КонецФункции +// Для внутреннего использования. Функция СхемаКомпоновкиДанных(ТекстЗапроса) Экспорт СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; @@ -83,6 +85,7 @@ Возврат СхемаКомпоновкиДанных; КонецФункции +// Для внутреннего использования. Процедура ВыполнитьИзменениеОбъектов(Параметры, АдресРезультата) Экспорт ОбрабатываемыеОбъекты = Параметры.ОбрабатываемыеОбъекты.Получить().Строки; @@ -315,8 +318,22 @@ /////////////////////////////////////////////////////////////////////////////////////// Отказ = Ложь; + + РежимЗаписи = Неопределено; + ЭтоДокумент = Метаданные.Документы.Содержит(ИзменяемыйОбъект.Метаданные()); + Если ЭтоДокумент Тогда + РежимЗаписи = РежимЗаписиДокумента.Запись; + Если ИзменяемыйОбъект.Проведен Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + КонецЕсли; + КонецЕсли; + Попытка - ИзменяемыйОбъект.Записать(); + Если РежимЗаписи = Неопределено Тогда + ИзменяемыйОбъект.Записать(); + Иначе + ИзменяемыйОбъект.Записать(РежимЗаписи); + КонецЕсли; Исключение Инфо = ИнформацияОбОшибке(); Отказ = Истина; @@ -469,14 +486,14 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности -// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов +// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. // // Параметры: -// СтандартныеРеквизиты – ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; -// ИмяРеквизита – Строка – реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; +// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; +// ИмяРеквизита - Строка - реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; // // Возвращаемое значение: -// Тип: Булево. Истина - реквизит входит в подмножество стандартных реквизитов; Ложь – нет. +// Булево. // Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт @@ -817,11 +834,11 @@ // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр - Строка - подставляемый параметр. // // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами. +// Строка - текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". @@ -919,4 +936,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Templates/ФильтрРеквизитов/Template.txt b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt similarity index 83% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Templates/ФильтрРеквизитов/Template.txt rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt index 009ec2915..e22940913 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Templates/ФильтрРеквизитов/Template.txt +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt @@ -6,25 +6,28 @@ + - + + + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo similarity index 96% rename from SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo rename to SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo index 6759bdb78..82e722943 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo @@ -4,12 +4,12 @@ - ГрупповоеИзменениеОбъектов + ГрупповоеИзменениеРеквизитов ru - Групповое изменение объектов + Групповое изменение реквизитов - DataProcessor.ГрупповоеИзменениеОбъектов.Form.Форма + DataProcessor.ГрупповоеИзменениеРеквизитов.Form.Форма true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 135242dd2..98b1a1295 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -12,7 +12,7 @@ 101 <key>ru</key> - <value>Количество отбираемых событий</value> + <value>Показывать</value> true true @@ -52,6 +52,7 @@ Left true + 8 true true true @@ -63,6 +64,9 @@ 1 + + 10000 + ru @@ -105,6 +109,81 @@ Normal
        + + Критичность + 170 + true + true + + true + + + Критичность + + + OnChange + КритичностьПриИзменении + + + КритичностьРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + КритичностьКонтекстноеМеню + 171 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + true + + + ru + Ошибки + + + Ошибки + + + + + ru + Предупреждения + + + Предупреждения + + + + + ru + Все события + + + ВсеСобытия + + + Normal + + ПредставлениеОтбора 35 @@ -142,8 +221,13 @@ true Left + + Click + ПредставлениеОтбораНажатие + true true + true true @@ -1078,10 +1162,477 @@ true - None ЖурналКоманднаяПанель 50 + + ПросмотрТекущегоСобытияВОтдельномОкне + 38 + true + true + + true + + false + + ПросмотрТекущегоСобытияВОтдельномОкнеExtendedTooltip + 126 + Label + true + true + + Left + + + Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ОткрытьДанныеДляПросмотра + 40 + true + true + + true + + false + + ОткрытьДанныеДляПросмотраExtendedTooltip + 127 + Label + true + true + + Left + + + Form.Command.ОткрытьДанныеДляПросмотра + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + КомандыОтбора + 105 + + УстановитьИнтервалДатДляПросмотра + 108 + true + true + + true + + + УстановитьИнтервалДатДляПросмотраExtendedTooltip + 122 + Label + true + true + + Left + + + Form.Command.УстановитьИнтервалДатДляПросмотра + Normal + PictureAndText + true + true + UserCmds + Auto + + + УстановитьОтбор + 42 + true + true + + true + + false + + УстановитьОтборExtendedTooltip + 123 + Label + true + true + + Left + + + Form.Command.УстановитьОтбор + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + УстановитьОтборПоЗначениюВТекущейКолонке + 43 + true + true + + true + + false + + УстановитьОтборПоЗначениюВТекущейКолонкеExtendedTooltip + 124 + Label + true + true + + Left + + + Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ОтключитьОтбор + 44 + true + true + + true + + false + + ОтключитьОтборExtendedTooltip + 125 + Label + true + true + + Left + + + Form.Command.ОтключитьОтбор + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды отбора</value> + + + ru + Команды отбора + + + КомандыОтбораExtendedTooltip + 121 + Label + true + true + + Left + + + + + + КомандыПоиска + 109 + + ФормаНайти + 110 + true + true + + true + + + ФормаНайтиExtendedTooltip + 131 + Label + true + true + + Left + + + Form.Item.Журнал.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 111 + true + true + + true + + + ФормаОтменитьПоискExtendedTooltip + 132 + Label + true + true + + Left + + + Form.Item.Журнал.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды поиска</value> + + + ru + Команды поиска + + + КомандыПоискаExtendedTooltip + 130 + Label + true + true + + Left + + + + + + КомандаОбновить + 106 + + ОбновитьТекущийСписок + 46 + true + true + + true + + false + + ОбновитьТекущийСписокExtendedTooltip + 129 + Label + true + true + + Left + + + Form.Command.ОбновитьТекущийСписок + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + true + + true + + + <key>ru</key> + <value>Команда обновить</value> + + + ru + Команда обновить + + + КомандаОбновитьExtendedTooltip + 128 + Label + true + true + + Left + + + + + + ИзменитьФорму + 104 + true + true + + true + + false + + ИзменитьФормуExtendedTooltip + 133 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВывестиСписок + 82 + true + true + + true + + false + + ВывестиСписокExtendedTooltip + 134 + Label + true + true + + Left + + + Form.Item.Журнал.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ЖурналСправка + 173 + true + true + + true + + + ЖурналСправкаРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -1090,10 +1641,10 @@ ЖурналСтрокаПоиска - 172 + 178 ЖурналСтрокаПоискаРасширеннаяПодсказка - 174 + 180 Label true true @@ -1103,7 +1654,7 @@ ЖурналСтрокаПоискаКонтекстноеМеню - 173 + 179 true Журнал @@ -1113,10 +1664,10 @@ ЖурналСостояниеПросмотра - 175 + 181 ЖурналСостояниеПросмотраРасширеннаяПодсказка - 177 + 183 Label true true @@ -1126,7 +1677,7 @@ ЖурналСостояниеПросмотраКонтекстноеМеню - 176 + 182 true ViewStatusAddition @@ -1137,10 +1688,10 @@ ЖурналУправлениеПоиском - 178 + 184 ЖурналУправлениеПоискомРасширеннаяПодсказка - 180 + 186 Label true true @@ -1150,7 +1701,7 @@ ЖурналУправлениеПоискомКонтекстноеМеню - 179 + 185 true SearchControlAddition @@ -1511,450 +2062,7 @@ ФормаКоманднаяПанель -1 - - КомандыОтбора - 105 - - УстановитьИнтервалДатДляПросмотра - 108 - true - true - - true - - - УстановитьИнтервалДатДляПросмотраExtendedTooltip - 122 - Label - true - true - - Left - - - Form.Command.УстановитьИнтервалДатДляПросмотра - Normal - Auto - true - true - UserCmds - Auto - - - УстановитьОтбор - 42 - true - true - - true - - false - - УстановитьОтборExtendedTooltip - 123 - Label - true - true - - Left - - - Form.Command.УстановитьОтбор - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - УстановитьОтборПоЗначениюВТекущейКолонке - 43 - true - true - - true - - false - - УстановитьОтборПоЗначениюВТекущейКолонкеExtendedTooltip - 124 - Label - true - true - - Left - - - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОтключитьОтбор - 44 - true - true - - true - - false - - ОтключитьОтборExtendedTooltip - 125 - Label - true - true - - Left - - - Form.Command.ОтключитьОтбор - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды отбора</value> - - - ru - Команды отбора - - - КомандыОтбораExtendedTooltip - 121 - Label - true - true - - Left - - - - - - ПросмотрТекущегоСобытияВОтдельномОкне - 38 - true - true - - true - - false - - ПросмотрТекущегоСобытияВОтдельномОкнеExtendedTooltip - 126 - Label - true - true - - Left - - - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОткрытьДанныеДляПросмотра - 40 - true - true - - true - - false - - ОткрытьДанныеДляПросмотраExtendedTooltip - 127 - Label - true - true - - Left - - - Form.Command.ОткрытьДанныеДляПросмотра - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - КомандаОбновить - 106 - - ОбновитьТекущийСписок - 46 - true - true - - true - - false - - ОбновитьТекущийСписокExtendedTooltip - 129 - Label - true - true - - Left - - - Form.Command.ОбновитьТекущийСписок - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Команда обновить</value> - - - ru - Команда обновить - - - КомандаОбновитьExtendedTooltip - 128 - Label - true - true - - Left - - - - - - КомандыПоиска - 109 - - ФормаНайти - 110 - true - true - - true - - - ФормаНайтиExtendedTooltip - 131 - Label - true - true - - Left - - - Form.Item.Журнал.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтменитьПоиск - 111 - true - true - - true - - - ФормаОтменитьПоискExtendedTooltip - 132 - Label - true - true - - Left - - - Form.Item.Журнал.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды поиска</value> - - - ru - Команды поиска - - - КомандыПоискаExtendedTooltip - 130 - Label - true - true - - Left - - - - - - ИзменитьФорму - 104 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 133 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВывестиСписок - 82 - true - true - - true - - false - - ВывестиСписокExtendedTooltip - 134 - Label - true - true - - Left - - - Form.Item.Журнал.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - Left - true ChoiceProcessing @@ -1982,7 +2090,9 @@ Retry SaveValues Yes - LockOwner + 120 + 15 + DontBlock true true Vertical @@ -2475,6 +2585,24 @@ Разделение данных сеанса 24 + + String + + + + true + + + true + + + + РазделениеДанныхСеанса + + <key>ru</key> + <value>Разделение данных сеанса</value> + + 25 ValueList @@ -2643,11 +2771,46 @@ true + + Критичность + + <key>ru</key> + <value>Критичность</value> + + 13 + + String + + + + true + + + true + + + + ЗапускатьНеВФоне + + <key>ru</key> + <value>Запускать не в фоне</value> + + 14 + + Boolean + + + true + + + true + + ПросмотрТекущегоСобытияВОтдельномОкне <key>ru</key> - <value>Просмотр текущего события</value> + <value>Открыть</value> 1 @@ -2697,7 +2860,7 @@ УстановитьИнтервалДатДляПросмотра <key>ru</key> - <value>Установить интервал дат для просмотра</value> + <value>Интервал</value> 3 @@ -2831,6 +2994,38 @@ СобытиеЖурналаРегистрации + + ЗапускатьНеВФоне + + Boolean + + + + ДатаНачала + + Date + + + + + ДатаОкончания + + Date + + + + + Данные + + + + Сеанс + + + + Уровень + + diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 262e377e0..83ebeaf9d 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -41,21 +41,26 @@ ОтборЖурналаРегистрации.Вставить("Событие", ОтборПоСобытию); КонецЕсли; - Если Параметры.Свойство("ДатаНачала") Тогда + Если ЗначениеЗаполнено(Параметры.ДатаНачала) Тогда ОтборЖурналаРегистрации.Вставить("ДатаНачала", Параметры.ДатаНачала); КонецЕсли; - Если Параметры.Свойство("ДатаОкончания") Тогда + Если ЗначениеЗаполнено(Параметры.ДатаОкончания) Тогда ОтборЖурналаРегистрации.Вставить("ДатаОкончания", Параметры.ДатаОкончания); КонецЕсли; - Если Параметры.Свойство("Данные") Тогда + Если Параметры.Данные <> Неопределено Тогда ОтборЖурналаРегистрации.Вставить("Данные", Параметры.Данные); КонецЕсли; - Если Параметры.Свойство("Сеанс") Тогда + Если Параметры.Сеанс <> Неопределено Тогда ОтборЖурналаРегистрации.Вставить("Сеанс", Параметры.Сеанс); - КонецЕсли; + КонецЕсли; + + // Уровень - список значений. + Если Параметры.Уровень <> Неопределено Тогда + ОтборЖурналаРегистрации.Вставить("Уровень", Параметры.Уровень); + КонецЕсли; КоличествоПоказываемыхСобытий = 200; @@ -66,6 +71,11 @@ ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", ОтборПоУмолчанию); Элементы.ПредставлениеРазделенияДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + Критичность = "ВсеСобытия"; + + // Взводится в значение Истина, если нужно, чтобы формирование журнала регистрации проходило не в фоне. + ЗапускатьНеВФоне = Параметры.ЗапускатьНеВФоне; + КонецПроцедуры &НаКлиенте @@ -84,8 +94,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) @@ -98,8 +109,31 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Журнал" +&НаКлиенте +Процедура КритичностьПриИзменении(Элемент) + + Если Критичность = "ВсеСобытия" Тогда + ОтборЖурналаРегистрации.Удалить("Уровень"); + ОбновитьТекущийСписок(); + ИначеЕсли Критичность = "Ошибки" Тогда + ОтборПоУровню = Новый СписокЗначений; + ОтборПоУровню.Добавить("Ошибка", "Ошибка"); + ОтборЖурналаРегистрации.Удалить("Уровень"); + ОтборЖурналаРегистрации.Вставить("Уровень", ОтборПоУровню); + ОбновитьТекущийСписок(); + ИначеЕсли Критичность = "Предупреждения" Тогда + ОтборПоУровню = Новый СписокЗначений; + ОтборПоУровню.Добавить("Предупреждение", "Предупреждение"); + ОтборЖурналаРегистрации.Удалить("Уровень"); + ОтборЖурналаРегистрации.Вставить("Уровень", ОтборПоУровню); + ОбновитьТекущийСписок(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыЖурнал &НаКлиенте Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -123,6 +157,12 @@ Для Каждого ЭлементСписка Из ВыбранноеЗначение.Отбор Цикл ОтборЖурналаРегистрации.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); КонецЦикла; + + Если ОтборЖурналаРегистрации.Свойство("Уровень") + И ОтборЖурналаРегистрации.Уровень.Количество() > 1 Тогда + Критичность = ""; + КонецЕсли; + ОбновитьТекущийСписок(); КонецЕсли; @@ -131,8 +171,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьТекущийСписок() @@ -158,6 +199,7 @@ Процедура ОтключитьОтбор() ОтборЖурналаРегистрации = ОтборЖурналаРегистрацииПоУмолчанию; + Критичность = "ВсеСобытия"; ОбновитьТекущийСписок(); КонецПроцедуры @@ -187,15 +229,15 @@ &НаКлиенте Процедура УстановитьОтбор() - ОтборФормы = Новый СписокЗначений; - Для Каждого КлючИЗначение Из ОтборЖурналаРегистрации Цикл - ОтборФормы.Добавить(КлючИЗначение.Значение, КлючИЗначение.Ключ); - КонецЦикла; + УстановитьОтборНаКлиенте(); - ОткрытьФорму( - "Обработка.ЖурналРегистрации.Форма.ОтборЖурналаРегистрации", - Новый Структура("Отбор, СобытияПоУмолчанию", ОтборФормы, ОтборЖурналаРегистрацииПоУмолчанию.Событие), - ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеОтбораНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + УстановитьОтборНаКлиенте(); КонецПроцедуры @@ -218,9 +260,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УстановитьИнтервалДатДляПросмотраЗавершение(ИнтервалУстановлен, ДополнительныеПараметры) Экспорт @@ -273,7 +315,8 @@ ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); - Если ИБФайловая Тогда + Если ИБФайловая + Или ЗапускатьНеВФоне Тогда АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); @@ -359,3 +402,20 @@ Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); КонецФункции + +&НаКлиенте +Процедура УстановитьОтборНаКлиенте() + + ОтборФормы = Новый СписокЗначений; + Для Каждого КлючИЗначение Из ОтборЖурналаРегистрации Цикл + ОтборФормы.Добавить(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + + ОткрытьФорму( + "Обработка.ЖурналРегистрации.Форма.ОтборЖурналаРегистрации", + Новый Структура("Отбор, СобытияПоУмолчанию", ОтборФормы, ОтборЖурналаРегистрацииПоУмолчанию.Событие), + ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form index 3d65e986e..bc86a16ce 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form @@ -3,62 +3,24 @@ ГруппаДаты 192 - - Группа1 - 198 - - ИнтервалОтбора - 189 - true - true - - true - - - ИнтервалОтбора - - - OnChange - ИнтервалОтбораПриИзменении - - - ИнтервалОтбораExtendedTooltip - 202 - Label - true - true - - Left - - - - ИнтервалОтбораКонтекстноеМеню - 190 - true - - InputField - Enter - true - Left - true - - 10 - true - true - true - true - true - Normal - - + + ИнтервалОтбора + 189 true true true + + ИнтервалОтбора + + + OnChange + ИнтервалОтбораПриИзменении + - Группа1ExtendedTooltip - 201 + ИнтервалОтбораExtendedTooltip + 202 Label true true @@ -66,18 +28,28 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + ИнтервалОтбораКонтекстноеМеню + 190 + true + + InputField + Enter + true + Left + true + + 10 + true + true + true + true + true + Normal - Группа2 + ПроизвольныйПериод 199 ДатаНачала @@ -191,7 +163,7 @@ true - Группа2ExtendedTooltip + ПроизвольныйПериодРасширеннаяПодсказка 203 Label true @@ -246,178 +218,152 @@ Группа 195 - Группа3 - 196 - - Пользователи - 150 - true - true - - true - - - СписокПользователей - - - ПользователиExtendedTooltip - 208 - Label - true - true - - Left - - - - ПользователиКонтекстноеМеню - 151 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Приложения - 154 - true - true - - true - - - Приложения - - - ПриложенияExtendedTooltip - 209 - Label - true - true - - Left - - - - ПриложенияКонтекстноеМеню - 155 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Компьютеры - 152 - true - true - - true - - - Компьютеры - - - КомпьютерыExtendedTooltip - 210 - Label - true - true - - Left - - - - КомпьютерыКонтекстноеМеню - 153 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - Группа3ExtendedTooltip - 207 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - auto - Auto - Auto - - - - Группа4 + ГруппаВажность 197 + + ГруппаЗаголовокСпискаВажность + 238 + + Заголовок + 240 + + <key>ru</key> + <value>Важность:</value> + + true + true + + true + + + ЗаголовокРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + + ЗаголовокКонтекстноеМеню + 241 + true + + Label + true + true + + Left + + + + ГруппаФлажки + 247 + + УстановитьФлажки + 243 + true + true + + true + + + УстановитьФлажкиРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + Form.Command.УстановитьФлажкиВажности + Normal + Auto + true + true + UserCmds + Auto + + + СнятьФлажки + 245 + true + true + + true + + + СнятьФлажкиРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + Form.Command.СнятьФлажкиВажности + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа флажки</value> + + + ГруппаФлажкиРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Группа заголовок списка важность</value> + + + ГруппаЗаголовокСпискаВажностьРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + Важность 41 @@ -430,7 +376,7 @@ Важность false - Left + None ПометкаВажности 108 @@ -510,7 +456,7 @@ Normal - None + Top ВажностьКоманднаяПанель 143 @@ -518,10 +464,10 @@ ВажностьСтрокаПоиска - 244 + 266 ВажностьСтрокаПоискаРасширеннаяПодсказка - 246 + 268 Label true true @@ -531,7 +477,7 @@ ВажностьСтрокаПоискаКонтекстноеМеню - 245 + 267 true Важность @@ -541,10 +487,10 @@ ВажностьСостояниеПросмотра - 247 + 269 ВажностьСостояниеПросмотраРасширеннаяПодсказка - 249 + 271 Label true true @@ -554,7 +500,7 @@ ВажностьСостояниеПросмотраКонтекстноеМеню - 248 + 270 true ViewStatusAddition @@ -565,10 +511,10 @@ ВажностьУправлениеПоиском - 250 + 272 ВажностьУправлениеПоискомРасширеннаяПодсказка - 252 + 274 Label true true @@ -578,7 +524,7 @@ ВажностьУправлениеПоискомКонтекстноеМеню - 251 + 273 true SearchControlAddition @@ -619,6 +565,7 @@ false Auto Auto + true Style.BorderColor @@ -632,8 +579,12 @@ true + + <key>ru</key> + <value>Группа важность</value> + - Группа4ExtendedTooltip + ГруппаВажностьРасширеннаяПодсказка 211 Label true @@ -646,9 +597,288 @@ Vertical Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаОсновныеОтборы + 196 + + События + 171 + true + true + + true + + + СобытияОтображаемые + + + СобытияExtendedTooltip + 222 + Label + true + true + + Left + + + + СобытияКонтекстноеМеню + 172 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + + Clearing + СобытияОчистка + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Пользователи + 150 + true + true + + true + + + СписокПользователей + + + ПользователиExtendedTooltip + 208 + Label + true + true + + Left + + + + ПользователиКонтекстноеМеню + 151 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Приложения + 154 + true + true + + true + + + Приложения + + + ПриложенияExtendedTooltip + 209 + Label + true + true + + Left + + + + ПриложенияКонтекстноеМеню + 155 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Компьютеры + 152 + true + true + + true + + + Компьютеры + + + КомпьютерыExtendedTooltip + 210 + Label + true + true + + Left + + + + КомпьютерыКонтекстноеМеню + 153 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Сеансы + 78 + true + true + + true + + + СтрСеансы + + Left + + ru + Номера сеансов задаются через ; + + + СеансыExtendedTooltip + 226 + Label + true + true + + Left + + + + СеансыКонтекстноеМеню + 79 + true + + InputField + Enter + true + Left + true + Left + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа основные отборы</value> + + + ГруппаОсновныеОтборыРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation true true - auto Auto Auto @@ -671,16 +901,15 @@ UsualGroup Auto - WeakSeparation true true - auto + LeftNarrowest Auto Auto - ГруппаОсновные + ГруппаДанные 191 ГруппаДанныеСвойства @@ -723,6 +952,7 @@ true true + true true true true @@ -863,182 +1093,6 @@ Auto - - ГруппаОсновныеСвойства - 149 - - ГруппаОсновныеСтроковые - 156 - - События - 171 - true - true - - true - - - СобытияОтображаемые - - None - - СобытияExtendedTooltip - 222 - Label - true - true - - Left - - - - СобытияКонтекстноеМеню - 172 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - - Clearing - СобытияОчистка - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Комментарий - 43 - true - true - - true - - - Комментарий - - Top - - КомментарийExtendedTooltip - 223 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 44 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа основные строковые</value> - - - ru - Группа основные строковые - - - ГруппаОсновныеСтроковыеExtendedTooltip - 221 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Событие</value> - - - System.DefaultGUIFont - true - false - false - false - - - ru - Основные свойства - - - ГруппаОсновныеСвойстваExtendedTooltip - 220 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - auto - Auto - Auto - - true true @@ -1046,14 +1100,10 @@ <key>ru</key> - <value>Группа основные</value> + <value>Группа данные</value> - - ru - Группа основные - - ГруппаОсновныеExtendedTooltip + ГруппаДанныеРасширеннаяПодсказка 215 Label true @@ -1065,7 +1115,7 @@ UsualGroup Auto - WeakSeparation + NormalSeparation true true Equal @@ -1076,265 +1126,142 @@ ГруппаПрочиеСвойства 164 - - ГруппаСеансы - 59 - - Сеансы - 78 - - <key>ru</key> - <value>Номера</value> - - true - true - - true - - - СтрСеансы - - Left - - ru - Номера сеансов задаются через ; - - - СеансыExtendedTooltip - 226 - Label - true - true - - Left - - - - СеансыКонтекстноеМеню - 79 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - true - - Style.BorderColor - - Normal - - - - РабочиеСерверы - 165 - true - true - - true - - - РабочиеСерверы - - Left - - РабочиеСерверыExtendedTooltip - 227 - Label - true - true - - Left - - - - РабочиеСерверыКонтекстноеМеню - 166 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ОсновныеIPПорты - 167 - true - true - - true - - - ОсновныеIPПорты - - - ОсновныеIPПортыExtendedTooltip - 228 - Label - true - true - - Left - - - - ОсновныеIPПортыКонтекстноеМеню - 168 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ВспомогательныеIPПорты - 169 - true - true - - true - - - ВспомогательныеIPПорты - - - ВспомогательныеIPПортыExtendedTooltip - 229 - Label - true - true - - Left - - - - ВспомогательныеIPПортыКонтекстноеМеню - 170 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИсполнениеВыбора - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сеанс</value> - - - System.DefaultGUIFont - true - false - false - false - - - ГруппаСеансыExtendedTooltip - 225 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - LeftNarrowest - auto - Auto - Auto - - ГруппаТранзакция 56 - - Транзакция - 76 - - <key>ru</key> - <value>Идентификатор</value> - + + ГруппаЗаголовокСпискаСтатусТранзакции + 261 + + НадписьСтатусТранзакции + 252 + + <key>ru</key> + <value>Статус транзакции:</value> + + true + true + + true + + + НадписьСтатусТранзакцииРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + + НадписьСтатусТранзакцииКонтекстноеМеню + 253 + true + + Label + true + true + + Left + + + + ГруппаФлажки2 + 255 + + УстановитьСтатусы + 257 + true + true + + true + + + УстановитьСтатусыРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Form.Command.УстановитьСтатусыТранзакции + Normal + Auto + true + true + UserCmds + Auto + + + СнятьСтатусы + 259 + true + true + + true + + + СнятьСтатусыРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Form.Command.СнятьСтатусыТранзакции + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа флажки2</value> + + true + + ГруппаФлажки2РасширеннаяПодсказка + 256 + Label + true + true + + Left + + + CommandBar + + Right + + true true true - - Транзакция - - Left + + <key>ru</key> + <value>Группа заголовок списка статус транзакции</value> + + + ru + Группа заголовок списка статус транзакции + - ТранзакцияExtendedTooltip - 231 + ГруппаЗаголовокСпискаСтатусТранзакцииРасширеннаяПодсказка + 262 Label true true @@ -1342,28 +1269,13 @@ Left - - ТранзакцияКонтекстноеМеню - 77 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Auto + true + true + Auto + Auto @@ -1371,7 +1283,7 @@ 74 <key>ru</key> - <value>Статус завершения</value> + <value>Статус транзакции</value> true true @@ -1382,7 +1294,7 @@ СтатусТранзакции false - Left + None ПометкаСтатуса 118 @@ -1470,10 +1382,10 @@ СтатусТранзакцииСтрокаПоиска - 273 + 293 СтатусТранзакцииСтрокаПоискаРасширеннаяПодсказка - 275 + 295 Label true true @@ -1483,7 +1395,7 @@ СтатусТранзакцииСтрокаПоискаКонтекстноеМеню - 274 + 294 true СтатусТранзакции @@ -1493,10 +1405,10 @@ СтатусТранзакцииСостояниеПросмотра - 276 + 296 СтатусТранзакцииСостояниеПросмотраРасширеннаяПодсказка - 278 + 298 Label true true @@ -1506,7 +1418,7 @@ СтатусТранзакцииСостояниеПросмотраКонтекстноеМеню - 277 + 297 true ViewStatusAddition @@ -1517,10 +1429,10 @@ СтатусТранзакцииУправлениеПоиском - 279 + 299 СтатусТранзакцииУправлениеПоискомРасширеннаяПодсказка - 281 + 301 Label true true @@ -1530,7 +1442,7 @@ СтатусТранзакцииУправлениеПоискомКонтекстноеМеню - 280 + 300 true SearchControlAddition @@ -1579,6 +1491,56 @@ None true + + Транзакция + 76 + + <key>ru</key> + <value>Идентификатор</value> + + true + true + + true + + + Транзакция + + Left + + ТранзакцияExtendedTooltip + 231 + Label + true + true + + Left + + + + ТранзакцияКонтекстноеМеню + 77 + true + + InputField + Enter + true + Left + true + Left + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + true true @@ -1609,6 +1571,7 @@ Vertical Auto + NormalSeparation true true auto @@ -1616,6 +1579,285 @@ Auto + + ГруппаПрочее + 59 + + РабочиеСерверы + 165 + true + true + + true + + + РабочиеСерверы + + Left + + РабочиеСерверыExtendedTooltip + 227 + Label + true + true + + Left + + + + РабочиеСерверыКонтекстноеМеню + 166 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОсновныеIPПорты + 167 + true + true + + true + + + ОсновныеIPПорты + + + ОсновныеIPПортыExtendedTooltip + 228 + Label + true + true + + Left + + + + ОсновныеIPПортыКонтекстноеМеню + 168 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ВспомогательныеIPПорты + 169 + true + true + + true + + + ВспомогательныеIPПорты + + + ВспомогательныеIPПортыExtendedTooltip + 229 + Label + true + true + + Left + + + + ВспомогательныеIPПортыКонтекстноеМеню + 170 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + РазделениеДанныхСеанса + 249 + true + true + + true + + + РазделениеДанныхСеанса + + + РазделениеДанныхСеансаРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + + РазделениеДанныхСеансаКонтекстноеМеню + 250 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИсполнениеВыбора + + true + true + true + true + true + true + true + Normal + + + + Комментарий + 43 + true + true + + true + + + Комментарий + + Left + + КомментарийExtendedTooltip + 223 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 44 + true + + InputField + Enter + true + Left + true + Left + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Прочее</value> + + + System.DefaultGUIFont + true + false + false + false + + + ГруппаПрочееРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + LeftNarrowest + auto + Auto + Auto + + true true @@ -1634,10 +1876,9 @@ UsualGroup Auto - WeakSeparation true true - Equal + LeftNarrowest Auto Auto @@ -2207,7 +2448,7 @@ ИнтервалОтбора <key>ru</key> - <value>Интервал отбора</value> + <value>Интервал</value> 22 @@ -2278,7 +2519,7 @@ СобытияОтображаемые <key>ru</key> - <value>События отображаемые</value> + <value>События</value> 21 @@ -2314,6 +2555,44 @@ + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 24 + + String + + + + true + + + true + + + + РазделениеДанныхСеанса + + <key>ru</key> + <value>Разделение данных сеанса</value> + + 25 + + ValueList + + + true + + + true + + + + + УстановитьОтборИЗакрытьФорму @@ -2336,6 +2615,108 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>УстановитьФлажкиВажности</name> + <title> + <key>ru</key> + <value>Установить флажки</value> + + 2 + + ru + Установить флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьФлажкиВажности + + + Picture + Auto + Auto + + + СнятьФлажкиВажности + + <key>ru</key> + <value>Снять флажки</value> + + 3 + + ru + Снять флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьФлажкиВажности + + + Picture + Auto + Auto + + + УстановитьСтатусыТранзакции + + <key>ru</key> + <value>Установить флажки</value> + + 4 + + ru + Установить флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьСтатусыТранзакции + + + Auto + Auto + + + СнятьСтатусыТранзакции + + <key>ru</key> + <value>Снять флажки</value> + + 5 + + ru + Снять флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьСтатусыТранзакции + + + Auto + Auto + Отбор diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 764e1fd84..11940fe9b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,6 +16,8 @@ СобытияОтображаемые = События.Скопировать(); КонецЕсли; + Элементы.РазделениеДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + КонецПроцедуры &НаКлиенте @@ -41,6 +43,8 @@ ОсновныеIPПорты = Параметр; ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда ВспомогательныеIPПорты = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РазделениеДанныхСеанса.Имя Тогда + РазделениеДанныхСеанса = Параметр; КонецЕсли; КонецЕсли; @@ -57,9 +61,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИсполнениеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -94,6 +98,11 @@ ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда РедактируемыйСписок = ВспомогательныеIPПорты; ОтбираемыеПараметры = "ВспомогательныйIPПорт"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РазделениеДанныхСеанса.Имя Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УстановленныйОтбор", РазделениеДанныхСеанса); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.РазделениеДанныхСеанса", ПараметрыФормы, ЭтотОбъект); + Возврат; Иначе СтандартнаяОбработка = Истина; Возврат; @@ -135,9 +144,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УстановитьОтборИЗакрытьФорму(Команда) @@ -149,9 +158,37 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьФлажкиВажности(Команда) + Для Каждого ЭлементСписка Из Важность Цикл + ЭлементСписка.Пометка = Истина; + КонецЦикла; +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура СнятьФлажкиВажности(Команда) + Для Каждого ЭлементСписка Из Важность Цикл + ЭлементСписка.Пометка = Ложь; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтатусыТранзакции(Команда) + Для Каждого ЭлементСписка Из СтатусТранзакции Цикл + ЭлементСписка.Пометка = Истина; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьСтатусыТранзакции(Команда) + Для Каждого ЭлементСписка Из СтатусТранзакции Цикл + ЭлементСписка.Пометка = Ложь; + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьВажностьИСтатус() @@ -209,7 +246,7 @@ ИначеЕсли ВРег(ИмяПараметра) = ВРег("Комментарий") Тогда // Комментарий/Comment Комментарий = Значение; - + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Метаданные") Тогда // Метаданные/Metadata Метаданные = Значение; @@ -264,6 +301,13 @@ КонецЕсли; КонецЦикла; + ИначеЕсли ВРег(ИмяПараметра) = ВРег("РазделениеДанныхСеанса") Тогда + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + РазделениеДанныхСеанса = Значение.Скопировать(); + КонецЕсли; + + КонецЕсли; КонецЦикла; @@ -279,7 +323,6 @@ ЭлементСпискаЗначений.Пометка = Истина; КонецЦикла; КонецЕсли; - КонецПроцедуры @@ -384,6 +427,11 @@ Отбор.Добавить(ВспомогательныеIPПорты, "ВспомогательныйIPПорт"); КонецЕсли; + // РазделениеДанныхСеанса + Если РазделениеДанныхСеанса.Количество() > 0 Тогда + Отбор.Добавить(РазделениеДанныхСеанса, "РазделениеДанныхСеанса"); + КонецЕсли; + // Уровень/Level СписокУровней = Новый СписокЗначений; Для Каждого ЭлементСпискаЗначений Из Важность Цикл @@ -409,3 +457,5 @@ Возврат Отбор; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form new file mode 100644 index 000000000..a0c47a1e3 --- /dev/null +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form @@ -0,0 +1,640 @@ + + + + <key>ru</key> + <value>Разделение данных сеанса</value> + + + РазделениеДанныхСеанса + 1 + true + true + + true + + + РазделениеДанныхСеанса + + None + + ГруппаФлажокПредставление + 27 + + РазделениеДанныхСеансаФлажок + 5 + true + true + + true + + + РазделениеДанныхСеанса.Флажок + + None + + РазделениеДанныхСеансаФлажокРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + РазделениеДанныхСеансаФлажокКонтекстноеМеню + 6 + true + + CheckBoxField + Auto + true + Left + true + + + + РазделениеДанныхСеансаПредставлениеРазделителя + 24 + + <key>ru</key> + <value>Разделитель</value> + + true + true + + true + + + РазделениеДанныхСеанса.ПредставлениеРазделителя + + + РазделениеДанныхСеансаПредставлениеРазделителяРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + РазделениеДанныхСеансаПредставлениеРазделителяКонтекстноеМеню + 25 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа флажок представление</value> + + + ГруппаФлажокПредставлениеРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + РазделениеДанныхСеансаЗначениеРазделителя + 11 + true + true + + true + + + РазделениеДанныхСеанса.ЗначениеРазделителя + + + ru + Значения вводятся через запятую + + + РазделениеДанныхСеансаЗначениеРазделителяРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + РазделениеДанныхСеансаЗначениеРазделителяКонтекстноеМеню + 12 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + РазделениеДанныхСеансаКоманднаяПанель + 3 + Left + true + + + РазделениеДанныхСеансаСтрокаПоиска + 29 + + РазделениеДанныхСеансаСтрокаПоискаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + РазделениеДанныхСеансаСтрокаПоискаКонтекстноеМеню + 30 + true + + РазделениеДанныхСеанса + + true + + + + РазделениеДанныхСеансаСостояниеПросмотра + 32 + + РазделениеДанныхСеансаСостояниеПросмотраРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + РазделениеДанныхСеансаСостояниеПросмотраКонтекстноеМеню + 33 + true + + ViewStatusAddition + РазделениеДанныхСеанса + + true + + + + РазделениеДанныхСеансаУправлениеПоиском + 35 + + РазделениеДанныхСеансаУправлениеПоискомРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + РазделениеДанныхСеансаУправлениеПоискомКонтекстноеМеню + 36 + true + + SearchControlAddition + РазделениеДанныхСеанса + + true + + + + РазделениеДанныхСеансаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + РазделениеДанныхСеансаКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
        + + ГруппаКоманднаяПанель + 14 + + КомандаОк + 20 + true + true + + true + + + КомандаОкРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.КомандаОк + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена + 22 + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + CommandBar + + Right + + + Top + true + + ФормаКоманднаяПанель + -1 + + ФормаОтметитьВсе + 16 + true + true + + true + + + ФормаОтметитьВсеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.Command.ОтметитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСнятьФлажки + 18 + true + true + + true + + + ФормаСнятьФлажкиРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ЖурналРегистрации + + + true + + + true + +
        true
        +
        + + РазделениеДанныхСеанса + + <key>ru</key> + <value>Разделение данных сеанса</value> + + 2 + + ValueTable + + + true + + + true + + + Флажок + + <key>ru</key> + <value>Флажок</value> + + 1 + + Boolean + + + 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> + + 1 + + ru + Отметить все флажки + + + true + + + StdPicture.CheckAll + + + + ОтметитьВсе + + + Auto + Auto + + + СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 2 + + ru + Снять все флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьФлажки + + + Picture + Auto + Auto + + + КомандаОк + + <key>ru</key> + <value>ОК</value> + + 3 + + true + + + + КомандаОк + + + Auto + Auto + + + КомандаОтмена + + <key>ru</key> + <value>Отмена</value> + + 4 + + true + + + + КомандаОтмена + + + Auto + Auto + + + УстановленныйОтбор + + ValueList + + + + + + + +
        diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl new file mode 100644 index 000000000..a36b3eb6a --- /dev/null +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl @@ -0,0 +1,75 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТесты") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + УстановленныйОтбор = Параметры.УстановленныйОтбор; + РазделениеДанныхСоответствие = Новый Соответствие; + Если УстановленныйОтбор.Количество() > 0 Тогда + + Для Каждого РазделительСеанса Из УстановленныйОтбор Цикл + РазделениеДанныхМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РазделительСеанса.Значение, "="); + РазделениеДанныхСоответствие.Вставить(РазделениеДанныхМассив[0], РазделениеДанныхМассив[1]); + КонецЦикла; + + КонецЕсли; + + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + СтрокаТаблицы = РазделениеДанныхСеанса.Добавить(); + СтрокаТаблицы.Разделитель = ОбщийРеквизит.Имя; + СтрокаТаблицы.ПредставлениеРазделителя = ОбщийРеквизит.Синоним; + ЗначениеРазделителя = РазделениеДанныхСоответствие[ОбщийРеквизит.Имя]; + Если ЗначениеРазделителя <> Неопределено Тогда + СтрокаТаблицы.Флажок = Истина; + СтрокаТаблицы.ЗначениеРазделителя = РазделениеДанныхСоответствие[ОбщийРеквизит.Имя]; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаОк(Команда) + Результат = Новый СписокЗначений; + Для Каждого СтрокаТаблицы Из РазделениеДанныхСеанса Цикл + Если СтрокаТаблицы.Флажок Тогда + ЗначениеРазделителя = СтрокаТаблицы.Разделитель + "=" + СтрокаТаблицы.ЗначениеРазделителя; + ПредставлениеРазделителя = СтрокаТаблицы.ПредставлениеРазделителя + " = " + СтрокаТаблицы.ЗначениеРазделителя; + Результат.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя); + КонецЕсли; + КонецЦикла; + + Оповестить("ВыборЗначенийЭлементовОтбораЖурналаРегистрации", + Результат, + ВладелецФормы); + + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтметитьВсе(Команда) + Для Каждого ЭлементСписка Из РазделениеДанныхСеанса Цикл + ЭлементСписка.Флажок = Истина; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + Для Каждого ЭлементСписка Из РазделениеДанныхСеанса Цикл + ЭлементСписка.Флажок = Ложь; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + Закрыть(); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index 8dcba1d83..10c0ac518 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,16 +20,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПометкаПриИзменении(Элемент) ОтметитьЭлементДерева(Элементы.Список.ТекущиеДанные, Элементы.Список.ТекущиеДанные.Пометка); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыбратьСоставОтбора(Команда) @@ -51,8 +53,9 @@ УстановкаПометок(Ложь); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УстановитьПараметрыРедактора(РедактируемыйСписок, ОтбираемыеПараметры) @@ -384,3 +387,5 @@ КонецЕсли; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form index f12afccda..51b75d0bf 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form @@ -89,13 +89,10 @@ true true - false + true true true true - - Style.BorderColor - Normal @@ -180,7 +177,7 @@ - ПредставлениеРазделенияДанныхСеанса + РазделениеДанныхСеанса 107 true true @@ -188,10 +185,10 @@ true - ПредставлениеРазделенияДанныхСеанса + РазделениеДанныхСеанса - ПредставлениеРазделенияДанныхСеансаExtendedTooltip + РазделениеДанныхСеансаРасширеннаяПодсказка 115 Label true @@ -201,7 +198,7 @@ - ПредставлениеРазделенияДанныхСеансаКонтекстноеМеню + РазделениеДанныхСеансаКонтекстноеМеню 108 true @@ -2940,7 +2937,7 @@ - ПредставлениеРазделенияДанныхСеанса + РазделениеДанныхСеанса <key>ru</key> <value>Разделение данных сеанса</value> diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html index 76f49a76c..ab21a3535 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html @@ -1,3 +1,44 @@ -<!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></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.16476"></meta></head><body> +<p>Просмотр свойств события в программе, отраженного в <a href="DataProcessor.ЖурналРегистрации/Help">журнале регистрации</a>.</p> +<p>Отображает полную информацию о событии в программе, а не только те данные, которые показываются в журнале регистрации:</p> +<ul><li> +<div> +<div><strong>Пользователь</strong> - полное имя пользователя;</div></div> +</li><li> +<div> +<div><strong>Дата, время</strong> - точное время события; </div></div> +</li><li> +<div> +<div><strong>Приложение</strong> - например, <strong>Тонкий клиент</strong>; </div></div> +</li><li> +<div><strong>Компьютер</strong> - сетевое имя компьютера;</div> +</li><li> +<div>Группа полей <strong>Данные</strong>:</div> +<div> +<ul><li> +<div><strong>Метаданные</strong> - тип объекта программы и его наименование: список, вид документа и т.п.;</div> +</li><li> +<div><strong>Данные</strong> - указание объекта программы: указывается конкретный элемент списка, документ и т.п.;</div> +</li><li> +<p><strong>Представление данных</strong> - указание объекта программы.</p></li></ul></div> +</li><li>Группа полей <strong>Событие</strong>: +<ul><li> +<div> +<div><strong>Событие</strong> - тип события; </div></div></li></ul><ul><li><strong>Комментарий</strong> - краткое описание события; </li></ul></li><li> +<div>Группа полей <strong>Сеанс</strong> - полная информация о сеансе, в котором произошло данное событие: </div> +<ul><li> +<div><strong>Номер</strong> - номер сеанса; </div> +</li><li> +<div><strong>Рабочий сервер</strong>;</div> +</li><li> +<div><strong>Основной IP порт</strong></div> +</li><li> +<div><strong>Вспомогательный IP порт</strong></div> +</li><li> +<div>Группа полей <strong>Транзакция</strong>:</div> +</li><li> +<div><strong>Идентификатор</strong>;</div> +</li><li> +<div><strong>Статус завершения транзакции</strong> - например, <strong>Зафиксирована</strong>.</div></li></ul></li></ul><p>В журнале регистрации предусмотрена возможность управления составом отображаемых колонок, что позволяет настроить отображение только важной информации.</p> +<h3>См. также:</h3> +<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 ec5c4265d..6f962dd7f 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,8 +25,8 @@ ОсновнойIPПорт = Параметры.ОсновнойIPПорт; ВспомогательныйIPПорт = Параметры.ВспомогательныйIPПорт; - Если Параметры.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда - ПредставлениеРазделенияДанныхСеанса = Параметры.ПредставлениеРазделенияДанныхСеанса; + Если Параметры.Свойство("РазделениеДанныхСеанса") Тогда + РазделениеДанныхСеанса = Параметры.РазделениеДанныхСеанса; КонецЕсли; // Для списка метаданных включается кнопка открытия @@ -123,13 +123,13 @@ Элементы.ПростыеДанные.Видимость = Истина; КонецЕсли; - Элементы.ПредставлениеРазделенияДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + Элементы.РазделениеДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПредставлениеМетаданныхОткрытие(Элемент, СтандартнаяОбработка) @@ -141,12 +141,13 @@ &НаКлиенте Процедура РазделениеДанныхСеансаОткрытие(Элемент, СтандартнаяОбработка) - ПоказатьЗначение(, ПредставлениеРазделенияДанныхСеанса); + ПоказатьЗначение(, РазделениеДанныхСеанса); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "ТаблицаДанныхОтказаДействияДоступа" +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДанныхОтказаДействияДоступа &НаКлиенте Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -155,9 +156,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений) @@ -183,4 +184,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 3a3d78c9a..f66569d1f 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,8 +1,92 @@ -<!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">Список событий не является динамическим списком. Для того, чтобы увидеть события, которые попали в журнал регистрации после открытия формы, необходимо выполнить команду <strong>Обновить текущий список</strong>. Журнал отображает фиксированное количество записей, которое указывается в поле <strong>Количество отбираемых событий</strong>. Кроме предопределенных значений (200, 500, 1000 и 10000 событий) можно ввести произвольное количество событий, которое будет запомнено.</p> -<p class="Usual">Для того, чтобы отобрать события по некоторому критерию, служит команда <strong>Установить отбор</strong>, которая позволяет задать отбор записей журнала регистрации. Будут отображены записи, удовлетворяющие заданному отбору в количестве, не большем, чем значение поля <strong>Количество отбираемых событий</strong>. Для того, чтобы отключить отбор, служит команда <strong>Отключить отбор</strong>.</p> -<p class="Usual">Из журнала регистрации можно открыть список активных пользователей, для этого служит команда <strong>Список активных пользователей</strong>.</p> -<p class="Usual">Если необходимо просмотреть сохраненный журнал (файл в формате <strong>.lgf</strong>), необходимо воспользоваться командой <strong>Загрузить из файла</strong>,  которая расположена в меню <strong>Все действия</strong>. Для просмотра будет открыто новое окно.</p> -<p class="Usual">Для того, чтобы настроить количество, видимость и взаимное расположение колонок журнала, следует воспользоваться командой <strong>Изменить форму</strong>, которая расположена в меню <strong>Все действия</strong>.</p> -<p class="Usual">Если с событием связаны некоторый объект информационной базы, то этот объект можно открыть для просмотра. Для этого необходимо встать в колонку <strong>Данные</strong> или <strong>Представление данных</strong> соответствующего события и выполнить команду <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.16476"></meta></head><body> +<p>Администратору программы часто требуется выяснить, какие события происходили в программе в определенный момент времени или какие действия выполнял тот или иной <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a>. Для этих целей предназначен журнал регистрации. </p> +<p>В журнале регистрации могут фиксироваться основные действия, выполняемые по модификации данных, выполнению регламентных операций, подключению и отключению от программы и т.д. Настройка журнала производится в Конфигураторе. </p> +<p>Открыть журнал регистрации можно по соответствующей команде раздела <strong>Настройка и администрирование - Поддержка и обслуживание</strong>.</p> +<p>При работе с программой могут возникать события следующих видов, каждый из которых отображается в журнале регистрации специальным значком: </p> +<table border="0" cellspacing="0" cellpadding="3" width="700"><tbody><tr valign="middle"><td width="20"><img src="StdPicture.Stop" width="16" height="16"></img></td> +<td>- Ошибка;</td></tr><tr valign="middle"><td><img src="CommonPicture.Предупреждение" width="16" height="16"></img></td> +<td>- Предупреждение;</td></tr><tr valign="middle"><td><img src="CommonPicture.Информация"></img></td> +<td>- Информация;</td></tr><tr valign="middle"><td><img src="CommonPicture.ИнформацияПоНедоступнымПолям"></img></td> +<td>- Информация по недоступным полям;</td></tr><tr valign="middle"><td><img src="CommonPicture.ПримечаниеЖурналаРегистрации"></img></td> +<td>- Примечание.</td></tr></tbody></table>Каждое событие фиксируется в отдельной строке журнала. +<p>В списке выводится:</p> +<ul><li> +<div><strong>Дата, время</strong> - помимо даты и времени проставляется значок, отображающий вид события; </div> +</li><li> +<div><strong>Пользователь</strong> - полное имя пользователя;</div> +</li><li> +<div><strong>Компьютер</strong> - сетевое имя компьютера;</div> +</li><li> +<div><strong>Приложение</strong> - например, <strong>Тонкий клиент</strong>; </div> +</li><li> +<div><strong>Сеанс</strong> - номер сеанса; </div> +</li><li> +<div><strong>Событие</strong> - тип события; </div> +</li><li> +<div><strong>Комментарий</strong> - краткое описание события; </div> +</li><li> +<div><strong>Статус транзакции</strong>, например, <strong>Зафиксирована</strong>; </div> +</li><li> +<div><strong>Транзакция</strong> - идентификатор транзакции (дата, время и номер транзакции); </div> +</li><li> +<div><strong>Метаданные</strong> - тип объекта программы и его наименование: список, вид документа и т.п.;</div> +</li><li> +<div><strong>Данные</strong> - указание объекта программы: указывается конкретный элемент списка, документ и т.п.;</div> +</li><li> +<p><strong>Представление данных</strong> - указание объекта программы.</p></li></ul><p>Для того чтобы настроить количество, видимость и взаимное расположение колонок журнала, нажмите <strong>Все действия - </strong><strong>Изменить форму</strong>.</p> +<h3>Обновление списка событий</h3> +<p>Список событий не является динамическим списком. Для того чтобы увидеть события, которые попали в журнал регистрации после его открытия, нажмите <img src="StdPicture.Refresh"></img> <strong>Обновить текущий список</strong> или клавишу <strong>F5</strong>. </p> +<h3>Количество событий</h3> +<p class="Usual">Журнал отображает фиксированное количество записей, которое указывается в поле <strong>Показывать</strong> (По умолчанию равно 200). Кроме предопределенных значений (200, 500, 1000 и 10000 событий) можно ввести произвольное количество событий, которое будет сохранено.</p> +<h3>Отборы</h3> +<p>С помощью отборов можно отфильтровать события в журнале регистрации.</p> +<ul><li> +<div>В поле быстрого отбора <strong>Критичность</strong> выберите значения <strong>Ошибки</strong> или <strong>Предупреждения</strong>, для того чтобы увидеть определенные виды событий. По умолчанию в журнале показаны <strong>Все события.</strong></div> +</li><li> +<div>Для быстрой установки периода просмотра событий журнала нажмите  <img src="StdPicture.SetDateInterval"></img> <strong>Установить интервал дат для просмотра</strong>. Также к установке интервалов дат можно перейти с помощью двойного щелчка по содержимому колонки <strong>Дата, Время</strong>.</div> +</li><li> +<div>Выделите данные в одной из колонок журнала, нажмите <strong>Установить отбор по значению в текущей колонке</strong>. Будут отобраны события журнала, содержащие эти данные. Также можно найти эту команду в контекстном меню по правой кнопке мыши.</div> +</li><li> +<div>Для того чтобы отобрать события по одному или нескольким критериям, нажмите<strong><img src="StdPicture.FilterCriterion"></img>Установить отбор</strong>. Также можно пройти по гиперссылке в поле <strong>Отбор</strong>. Если заданы какие-либо отборы (в том числе и быстрые), гиперссылка принимает значение критериев отбора, если никаких отборов не установлено, то принимает значение <strong>Не установлен</strong>. Производится установка фильтров отбора:</div> +<ul><li> +<div>В поле <strong>Интервал</strong> выберите период, укажите <strong>Начало</strong> и <strong>Окончание периода</strong>;</div> +</li><li> +<div>В поле <strong>Важность</strong> с помощью флажков выберите один или несколько видов событий  <strong>(Ошибка</strong>, <strong>Предупреждение</strong>, <strong>Информация</strong>, <strong>Примечание</strong>), по которым нужно произвести отбор. По умолчанию установлены все флажки;</div> +</li><li> +<div>В поле <strong>События</strong> выберите значения из списка с помощью флажков (по умолчанию установлены все флажки);</div> +</li><li> +<div>В поле <strong>Пользователи</strong> выберите значения из списка с помощью флажков (в этом списке указываются только пользователи, отраженные в журнале регистрации. По умолчанию флажки сняты);</div> +</li><li> +<div>В поле <strong>Приложения</strong> выберите значения из списка с помощью флажков (<strong>Конфигуратор</strong>, <strong>Тонкий клиент</strong>, <strong>Фоновое задание</strong>. По умолчанию флажки сняты);</div> +</li><li> +<div>В поле <strong>Компьютеры</strong> выберите нужные значения из списка с помощью флажков (по умолчанию флажки сняты);</div> +</li><li> +<div>В поле <strong>Сеансы</strong> перечислите через "<strong>;</strong>" нужные номера сеансов;</div> +</li><li>В группе полей <strong>Данные</strong> можно выбрать для поиска один из видов отбора: +<ul><li> +<div>В поле <strong>Метаданные </strong>выберите нужные значения из списка (список упорядочен по типу данных) для отбора с помощью флажков:  выберите нужное наименование списка, документа и т.д. например, "справочник Классификатор банков РФ";</div> +</li><li>В поле <strong>Данные</strong> можно произвести выбор элементов для поиска из списков программы: +<ul><li> +<div>выберите <strong>Тип данных</strong>, например, "Банк"; </div> +</li><li> +<div>Из соответствующего списка программы, например, "Классификатора банков РФ", выберите конкретный объект программы, например, "Сбербанк";</div></li></ul></li></ul></li><li> +<div>в поле <strong>Представление данных</strong> наберите данные для поиска вручную или скопируйте из списка;</div> +</li><li> +<div>В группе полей <strong>Транзакция</strong> выберите из списка с помощью флажков <strong>Статус транзакции</strong> (<strong>Нет транзакции</strong>, <strong>Зафиксирована</strong>, <strong>Не завершена</strong>, <strong>Отменена</strong>). По умолчанию установлены все флажки. Также возможен отбор по полю <strong>Идентификатор</strong> транзакции.</div> +</li><li> +<div>В группе полей <strong>Прочее</strong> можно выбрать с помощью флажков для отбора <strong>Рабочие серверы</strong>, <strong>Основные IP-порты</strong>, <strong>Вспомогательные IP-порты</strong>, также можно провести отбор по полю <strong>Комментарий</strong>.</div></li></ul></li><li> +<div>После указания полей для отбора нажмите <strong>ОК</strong>. После этого события будут отобраны и гиперссылка примет вид перечисления критериев отбора.</div> +</li><li> +<div>Отображаются записи, удовлетворяющие заданным критериям отбора в количестве, не большем, чем значение поля <strong>Показывать</strong>. </div> +</li><li> +<div>Для того чтобы отключить все отборы (в том числе и быстрые), нажмите <strong>Отключить отбор</strong> или выполните команду <strong>Все действия - Отключить отбор</strong>. Эту команду также можно найти в контекстном меню по правой кнопке мыши.</div></li></ul><h3>Просмотр события</h3> +<ul><li> +<div>Для просмотра детальной информации о <a href="DataProcessor.ЖурналРегистрации.Form.ФормаСобытия/Help">событии</a> выделите его в списке, нажмите <img src="StdPicture.Properties"></img> <strong>Открыть</strong>. Можно найти эту команду в контекстном меню по правой кнопке мыши.</div> +</li><li> +<div>Также можно просмотреть событие с помощью двойного щелчка мыши по нужной строке. </div></li></ul><h3>Просмотр объекта программы</h3> +<p class="Usual">Если с событием связан некоторый объект программы, то этот объект можно открыть для просмотра. </p> +<ul><li> +<div>Выделите нужные данные в колонке <strong>Данные</strong> или <strong>Представление данных</strong> соответствующего события и нажать <img src="StdPicture.ShowData"></img> <strong>Открыть данные для просмотра</strong>. Также можно найти эту команду в контекстном меню по правой кнопке мыши.</div> +</li><li> +<div>Открыть данные для просмотра можно также двойным щелчком мыши по содержимому колонки <strong>Данные</strong> или <strong>Представление данных</strong>.</div></li></ul><h3>См. также:</h3> +<p><a href="v8help://frame/form_common">Работа с формами</a>.</p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl index f83f8a684..fcfcde125 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Возвращает значение перечисления соответствующе строковому имени статус события. // @@ -77,4 +76,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo index a6038442a..a66c4af47 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo @@ -58,6 +58,15 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="73afaad8-dfa9-43e3-bdaf-543c3545d788"> + <name>РазделениеДанныхСеанса</name> + <synonym> + <key>ru</key> + <value>Разделение данных сеанса</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <commands uuid="c264441d-4805-4968-baa2-37b8970049c7"> <name>ЖурналРегистрации</name> <synonym> diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 38ffc531d..000000000 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,26 +0,0 @@ -<?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="v8:StandardBeginningDate"> - <v8:variant xsi:type="v8:StandardBeginningDateVariant">Custom</v8:variant> - <v8:date>1980-01-01T00:00:00</v8:date> - </right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="xs:string"/> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index aded6b087..708f1d5db 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -776,7 +776,7 @@ <key>ru</key> <value>Загрузить</value> - 3 + 1 ru Загрузить курсы выбранных валют с веб-сайта РБК @@ -799,7 +799,7 @@ ru Выбрать все валюты - 5 + 2 ru Выбрать все валюты @@ -824,7 +824,7 @@ ru Снять выбор - 6 + 3 ru Снять выбор @@ -849,7 +849,7 @@ ru Отключить загрузку курса этой валюты из сети Интернет - 1 + 4 ru Отключить загрузку выбранной валюты из сети Интернет. Включить или отключить загрузку из сети Интернет также можно из карточки валюты. diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 5ccfdb1a7..821ee2577 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -42,8 +44,9 @@ ПодключитьОбработчикОжидания("ПроверитьСписокЗагружаемыхВалют", 0.1, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВалют &НаКлиенте Процедура СписокВалютПередНачаломИзменения(Элемент, Отказ) @@ -57,8 +60,9 @@ ПереключитьЗагрузку(); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьКурсыВалют() @@ -114,8 +118,30 @@ УстановитьДоступностьЭлементов(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатаКурса.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СписокВалют.ДатаКурса"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Новый СтандартнаяДатаНачала(Дата('19800101000000')); + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ""); + +КонецПроцедуры &НаКлиенте Процедура УстановитьВыбор(Выбор) @@ -261,3 +287,5 @@ Элементы.СписокВалют.ТекущиеДанные.Загружать = Не Элементы.СписокВалют.ТекущиеДанные.Загружать; УстановитьДоступностьЭлементов(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index d0cbe379b..74e74ef24 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html @@ -1,25 +1,24 @@ - -

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

        -

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

        -

        Реквизиты:

        -

        -

        -

      A%l(O!2#t5OiABL6@j+|4u5#n}XF%x(BSM+OVBkoLGqWM>SPE^@iiD zia*Y(_~XjDJ6IJjPD?Zc%e7}jdwAZG+ITZ-;|b!e=yf=Y)s9|fD^e@PSwD}5J)OjZ z{oR*i27g+Ug!))j+Xr2V#r4G=ZR>^g%e)U_qR&Ue0Clf`(sS#@na>*bK?q1+5pIaA zRt=N;AWm!hAeLMwc6;1tGOC8%+SZGTFL9Qi(6TfqX31MGRvNSXgds~rRuwHveYeM7 z2Z`Mt*yM`$0oUpNyN2s~QiQ)DYNJyC`58w!6A(Cl?3yI)_OCqTsF2I!Q`ns*BV++K>CjB1T*~>;hhC- z*A`O5jv%|(5hRYf(`jU>mdo!iC*(pfwYMKhy= z#OVY~8Nccl165D|)&Pg_B)@q7(5T;{P&rrZI45&1|4@fY@_qJl)3NzfVTmJk5&s=Sj}SJk%KdY)61Le z?BQ}vCQ;gXmXbV~wHF|{te?RyHM6)1gIL@a$FiJzoA+d?X20g0Q9WNJw)Hn7$(J$& z^Z5&JoTemJPdLf-g7a3Ds`a9otM!;xt;t;p)l$I=zEy?9hl^@GW~de-t9Rd^v7h1G z_dC>)8G`++5kloAcV@lWfMAoNFBJm%e7fKq4?qr`X3|&CBi`1M_};#96Bg>qImZ8{ z$Nf`Q=>8HEe>$HCxbZhk94&;z|Dq@1Lm}Ap8Ash#MIxam9=~y%@hCjvHE8Zp8kn@a z4I!`aDtWVS`yZHFe^x_R`uSwmIYoV@(txhd8qkHvsx3>R>$rxl5BiDSj&szhm3k}Q zSt(laC?HPt6WmF-F}2Bas?7S<;12aQhBzdgZhotubh;_`N0Nw{bP(Dfxo>5r_MeMl zTX6X(@dDpsqTSfw0>bk*;r+FzydxaO`UgutvVQw3_$?CdFH-wc(2qlw{?d5`wcI4! z-B9@^s8R{vj8z>^^9axB;Dwlfg!G?-am1;Ch)o|&BiyIpB+9OyuV5c**}Tc$KE~5T z&3vQxRLG--ynIHmRA@fPsFeMgC3b#=215887>#Gj zbj;DPyZy$4K!rFi+403ks0Qlv|1Z^U_qH;yYjFo=cHgZ2|S2nC) z*9S4Ho=IZe{y)jKLGC2ljv#rLn(rY__|Mx}|4oU_q{PI|qM&M$WhIGs1dXfIlEc(- ztCFfD`f|8Kok1a?ym-pDfhbOwK;y@<;6MIH7GN(9pY`q?;oS!ZN&VFKR)RP%%=dc! zpEysiH{aL1G9wOKPT{M3(;TO!BoNLOsHJLYkW@^{h8+3e*to=mWvEW}@AWhuu$+<8 z_J;hdmdl*$lGB&IV`dJt zrglxOyO~Q&)+#*j%(vyVolB9bvDEAkwf9n|F7T$A={Y$yc2lp#&4~t57nmL82)mG8 z3vKPaZEMcd)EqPSTHG8KzWVM(gGMvOqVZldbF^)p=tn1j=?6HiVbn3JZ@k z+d6vA(d;XdUHSspcM3Nop}ssYE^@$N!uHCXpw$`Dq}=#<_I3*Peke8@N?n_mt+>9jA~_w+D~9aAHiMT_|;y5=)NW zA%j{9{5k4_PiaFXCcwpZcD&RTDv}Y#oArRRCjSEzbfmzl#G%hRaZVObo{McErzj1( z6YdH}-; z{WdhEY=j+uH8z5%taA(w$n56Sgp#idN1f1HRURy3_C#x+ZXxt;_JtS3o zMoYt*N{n#{tz~o!;n*yggsv@X$NDprgN)0&^fHINojB@dNUC;?LhHgBx+MS4!FJZq zN8qnDb~#o{eGS+Tew9V1R`ol|71(Orf#;VMNL|6#g=6<@e5$8UMe@w%?l)ygjz@d4?vT{p=&-4@r1M|6`0Pq9AhO_Xv{wR=Ivkqm* zkxp0x*TFvk{9LuFL%2@O(LxF^1%^0wqc@#GNcWY?tiHP~dXrnpnry zs{W3Hn;_J-s!dler#@e!SkBG^#C>gr>ju*OQ#eoD#+tKkNL#Fmqeo|SfRrB3US^CX zB}l0~^6)$oWipQWJ>h^YTy5V|_~TFQc130@n{G{S-PG5ATY7_kMDVaFc*Hd2&y{_q z{BgC}{HG~L=;=**Iy|K%kP&P%1x`#jHl@Yi4|D2RrTP53;l@WFUv#X8ya87tb8?&+ zN8ybl(2w4&=g%B;D)Y{tVJ{grxTLU%r!$s!lH5(`=RFj~m2`@WuM+ zIM=?jSiSk>E3s7LsUiIgmS`#c?2k~tE3H?ppCcCg(E43V{>k+_q}A`9mp-(9W3I^b zb3deh68^K-03U3p?$YJkhDqIEzc~Kkj-F@Q(fDGmzMc|$>R487V-e2uQuo2-@gZyU zy|B&ud4oW~+`Vh(_-=L&Pc(F}a4u_`yjcyYRrLPG;2} zM7$F9Q5nzZUr1~3JA|6)h%yzpBP14D^K>jG_w1he9Z?qafWA8Ytv}m4{psoTMjtwU zFbSEiC1O*0mXGKU!i`j;M@U+s*&?xj`ZnDjYYHD#2P-_NCdZD`%frG^o(g+Rrn7et z^sehA?M3R~(c*Xrlx4XPC)sgC zw>UN@RsN~yVP(rz`OzOPr{+iHF`sRL#c;G~&*L#Y?Zx5aI3zRr4)}4q`puJ9baEi0}D?T<(eI!u=Og-|nWmlYW<6_Eld!f$G}E94&^xi7yX; zJf>-@O5N&ELWpBG+yae^pFh~GR-J&z^VJ1113PDMfH7q3X9jv;`fR!!BRZ_Ik#MYT zW>nkMS@dy?TO96*6B4WXVDlB9nVRpl1xCK|>KH4lKrN8ODB^7tfk%4Gg47%6Ejk?q zWm#DzGEN#7oV$X(r+gvsYf}hqRLQlJz+|_r z@;bb%XyW19QkY47b9JBbd?@2ilTHN*^!ffpHpn}owCMb^DTyQY>_617roc_UE{ij`y-8XdU2j&K+ z**4;k(qXUQmyZN)4-X6t##mXp0wrZ0e1Q)S{aIa`|fg zJth9;{`P9)Wq6iVwR=JRADj?yz3Bgte{AraWZiXA_~MGIhtL0z@CChw^LX49oK{p} zb*5L{^$LE&_PY7NG>yrF@s1TbexRXRKPy!ncxZ`vyQ7VU{flyZC-L&DLMwbknZ$!o zCs8~-IB9x^5r38~^njI~k4(2K=>o98xtRM#XRt9-{h|f?5US_-a{E9z^?D~2NG;DN zjFyk}wWmR7?NZb6uIA(e!_EoE0yq2AG+tmD=c`C#Jy!GY46~ENX^ZQuP7|_^pKmSN z7g@HO#bDVuR$XFBvB;MUzk(f0bgNcL?TO)I)$INmYG8Pup-LM|1Mfgw0clp5003aGaksx^9x7+V>V zT}dh-cMAYsWq_6x{2F{wYQBh1^OLvx$aI^KX|!fY7$4SU2&prFmUZ1Q-=w~*!TcZ0 zXm<1w_8-4Z&|oIUu$P;B&nZd+%L5Qw%@h!^*7ua(<(UX9t;PnwYV1ea`RF#$8H!eq zfpORF=bNJJs;Ys0d;^reHR_v_Xw=N|J%Z;wc(zB=eQ5AhW|wozD(EG z>H0ohiY5MM(x1$Rug2#O|4S)P1E1wtVnkQdcV3Yrbs{|{oQG`~FA=S)NI!;hkmf;t zkYLD3N5IF=W8GjASc4_H)WhMJqrQAsYV;xID&wEviK*--SpMN96U<1u4o|m|Am+yL z?n5Dd+{Y^_%)P4nF(=QtTNg-dJ^X9R{2aSySxL%)O_aLP*x&X1B*ZXZhoHsDSm~?p z%d}YXZjx5j#^Z@rj5KJAs4QJLxj0^>r25WJS>J^6VGov#bHCq^`>AF_?h_gUG`R^J z2hpdiH;4|##}Qw3{vpSZ6#2ihiv|W9d}5{|emXufWCFLb!9{#1L3fEfp1_!i!G5ji z^}S$jpSoVIc6Akt58oZEV~IH1Hm+Owc%RG06}$ACq(utFGA9|qT!xsJ%D$Tw4D_GO#MuWH*fO@{sXJQoO9Cp1LwX0>mm<4P>1zSfr~q&NOu z8u+VsqP6SVDNI5%0D?bIwiDh~J5I9tDxr|NeVvxYC_`E8Jc$tH{bm-UO?~RhHPly= zFSC0akDS~$g#i$zuE;{O-G)xQ1ih#sQ*RjmQ(<>z$lVdF?%)HEJNO*I4jh1-6KCky zu|zE0$}{3S!SM^MtRWsb0c5*IbecE8z-8;+^y`F9(~XIWO>YsWqP0h^)zBWDk~1By z>%blcU(CV+W!>Mf*Fqi5XJEtSs@yCAeY4O(WEBb1a$AYI-6Hh}j*Z`fvCe*mc0333 z##-@0Svn#(VMsKUvb(iFY=I9=^(P9UiH~7t1KIvX{l#3Z290w?v%P*^tHBTPCDJULE$}S&tn3JragopU zEU%UFKS|s~3DN$^@J_naO8BXJI|NRg8h3HOHAr(}{$|<;)`{Q9rpoMUeDwFJd2|X8PD9QmHYd zvMDhY8}URrWGIgKKs8JbRKB1g>O&`z#wy3g;{u!NDgMn0VVeLbNu>BVr^sB@u@SRn zs-_9YtFf$6KZ^UEe-u;?Kg|M*#erNM!8KL|yJWh;UT6OEIrM#XADm8)-UF$> z{Z3BJyLA4ePb<2#X+pCl2vA#jRe)5Ww+q2iICvP+ssf7P(@K&G`uORF>?tz(qdNu<@K zr?qP|rPV-b9pjw>*byLBvGugpYH8i@c2Cj$6vN82d`RnLU>7ElwtSD%k7e0>Z|3?t z`6xLw6v*-U|Gg~C1(=^uWS*Cf87*d?o{o@>%>r;<*9Y&4&V#*o&d|UpT(#u8GuLA~ zDs-O@X9`O_uPtO|D+rd$V7@d(Px$1ho~!4&{G4r+pS#rEICw`2$Le?Q*GAdc;8U1N zhWqcO=|ypP@ILw}@xe;n2N{wE#w!pJcKk%hMec6(>HD?Ob?N;=K6tc48(oX>Wec)^ zd=S_~O&jy~tF7)vTI)vfWIPgSMG@{Rgtb8^qSA}6eTLN;*@DLs^``18F`uFoXn6}Z z{b%AUJ59u4X!sp-B%#_p^czm2egh^l-6-Y%{+$)b@nthj0gbWUtAzE5J7|EOw5*A|8CqtQLd=1|Il2rC+h5z*L%ao))MtMf9EnL@JB9R zOfF8x^*hfx`4Lv}6i^l_B*BM3%R-x-=2SNJl76zx#`zaD6bYg@A*!x}9(;YwEbvGE z&W<-Hf1UY)Aek*4n%~9P;2cb5ad6ZJmu?_L*P4*B@oleR}Ni{g_BkEDc6?^oVwyI6Y)uG zdF~m=lilhZC9xH*SzmXgz^*7gTQGrM)W1H&I21!k0dKm@Dp9jKWVOHE9@Et89(!n( zlQZBF>V%tU|G{oPyK5UE%BaOLvD(5?N2;?g5|`)4nLb~m7;hJWIPk(?b^{+EfjN1$s8e| z)Q+_Z1tt~!**vREZz3XU+0HbefMV27va;fi%KTs5nqb~z{UQyqiiAZ*;`v8cd<%#v z`gRU8>5DjrcFlYE5$=+Ay1RHOr$bxn-GQ8TsD-R+-Vt1r!@in!1lNvL{5Sgw>^$6M z`;KPta5wsJf~s1&He``6;%+S}H@ z<0MmQ`@TtIy7nTXajKn_a*o9YuYg+0vm;cP6ZY;1eufH|)`kP;H94h4%({HHkcdxJ z2+zu)lzpt#+7X&QmTNT@ksf4owS5%2j6!RxTlP@Cj=C>$JM7@7V?z&Qb1vD6KcBy3 zt6*4l4gRrIhH!Cqm__j-yv)v4&tcMx$kWFbsgJSQ9rT!KZGT|OVVM6giS!@HR)5A5 zB&tfbj1wEYSk#W+vqObr+xXmePeaJFtG0UAEXu1YBkbK}!LE~C(e`pHZ%)AR<6NGx zB;PIkG~?8a4RfeNu@BMI0glUJ`|_(eK-SN@i^HB*)jz>Otb03p(RM+0JHnprp;@9# z*!JHU>lIgZ9EMviyZ=1ZX7-= znB=Bi8B9oijgZc~nV>srmD@uo56AA}+`5y20@-f<>-Bmvs@yw{6pR)9l87`1;V5TL zJb@#HJPm%6zHgciH_6%(qd4WuFs2&qMW~n6qgV2zrHeakSLj)M3F}*H6X#2lt}ZLKzoapNkxAnMs>5iRZXTn((^8ntGd07=l2+Lh>yvj? z`Uuw)^j6w$Qh6JTchaBQD_p5imPZa+? zQT%vechjN%=70I@g(GGm40WluUSK7>7OgL@>~`V|)`#`Nzry2;x_K1q3TV)`JP+WI zw^e6|I5in#%0h9-vf$Ge9R1T3s>QSP&jbGvExe@_y9Cp#?hU(JH0o?+|4*ljeRx&h z?k5>&bFjKuL7#0_N1X>Un!r4H$71xg@^n<|t z)6|p_lPvGVkf$l^ZZguJ&8%;83wxT>d4C2L#GF_s!><`g!kkbto_#c_)zF=a8NOqq zplD4Te2w>`c2P?QO}ZmxaZV8UaR7B?BdHiw zzV8~!v~qs}w%XOlsJZIhQO9mivC9es(t!OGCl>D zC?Mlg>X-fjWF2SUg>f?OR9^xaS6wkm>W>IkaJW{Ay@qAjB>HZ!6(x}LdIt!7Em3_R zqHTMWI|`;C8kMJtpBuMb38b@LP)t=4_06E?0s}o4T#cTg&!cwI#*gt0ZJ*O7_{5L? z+@({cf0bxz4|_t#{=_Z@@n49O`=B^xrco19cb>|lPNo=jg9oi8q7p34cZF;~>viz= z^k4Cq7J82>WU0`xk?n{g$2;}SqANO^Pv2{ESep->Cs0>T;70by5G$ zw!xW#q0X6xBpI_VzkHsrf@1p?;?_YOg%{N@-^6r}6J*uje%_jF zFH*O2Z_et)-iC+GOw}Py(ayJ3v+Bv)9Zgp+nS^yow`vlmJ7KoqNU{gW68mvF)a>Jz z*)%NY?aOitPKTQH_T|JaI2~%*+pw^)a;evDmfLL9=+JVjFr4pD|9BiWH{buF7RDQF z+Y$1WKC+2rOBC^fz8bIbPFn~#Lo<=CPtBin^g7Q?}-kDPDB zv9JE?Hkqh5Zfx*R6CVQaQ@H7;u`5^BTbhC$u?Yu>MSNE=nQHxNxUic5M{I2M5B)C9 zV-){@?_$pAH%H%&tc^wcN7i16+9GQ&M=g=H-Pj5u^SEi#K;&`KUsiv8@Q6ufbS|0} zqE{>D6*kG-!UOgE&QOer8$a;hcK#seHVD6*-I37s*h{kL%`)+D_7Iz)AH<( zifQxdslkb-1@u%i2u};?sl|b(#q`uM5KqhW7;vV#_*Oivz&DNo=cg^43Vf$3PTgWi zvnRU6w|Ojejb*qgd{Zon4>R_1Mcs2fFB}x9U-%jKie&wX+_LWE?qo}~UXm&3y4|858r1T;|*iabJ@&PpZveU(YJKS6g@5~sei!o^)}{8HgVY5 zFnD*u5mTjX(a)}H-Tn-{;L-nUY{`GX$A6h;*RQQ>G(pyP1m8TMo|8sB12}>^x zFn>^o4bjfz6oU#4dPP=}Bz2h161D&JahT3fPxItBeH#4l)H8ESJRd%;yk&*k>4@ie z$kQUv-7X&jPaF~VaZ2MfG|FL9kyb&{Y+crYeO>5%NJ4Enbvf=W#l(Jh^4-oGkHH;(1LY$emk5DR=2M-RPXqF4 zyWNn_cN6nr_a$qL`LK7fYMc`eAC2yP(VN4bmI)_=lgBw;I7pwy97K&X701^b$28*X za~9t+i6#g+`v}1;6B>e32)M!Gw(Fpl#v=98+@6|O3HEY-*i0>RG@2WBXY&TW7K)!$ z5;pkiV0-A`A)1jM#i{44NM7)R_>zWfzXCbafgJ?4O8)%NWutQ|;k!g{nF$7rJ@{I( z`;r26&o~3dbYS1E+qIUt@14ui`4fPU;l!WwM$NXrn?*C(MKd+Wn`xpU(_jB6A=74L zI^CG*#KcUwnNFOPnI6|NeFGYG_wlxB&XgDKzSa;_O(WdSU_(E>5T~dR1-Ek{rWy)S zoLGocD8&A;amOujU{MGpq0Z3?adfyW#1t;X(KhTWavX4HlN57X*psD^jD-awS-P(` z2>-Kp4b<1`FrUZ@P8t_*K;vT?r+Yd?g!SWuf_PK037!lk=RvNWZyLE5K%Dj9O%}J) zaln&({@ojo5!bgg3Tpt8KyAM`P_x$_@-{>Vu;Vy5&l+=-dJ)xfQDQCY@l-Po5@G{8 zDObNcK+1%hcL|vgQy(+0kHWqK8gR2)FC3hG7K_7G^Bfz$%`=HC%~fO9TFSo*j)%H> z)V6Ecx>4}<{Q5GAbN+(kKoeAI2W*zN2&g{Y5Jc%1AlBG?-7q$3Pm7>ZUH=D zxBr@u)rsTPTqI13@&^W&TiEp7#2cX1UmfQaTixkSt2*r<8vjs|eGmApX1nGr(Z#0C z7h_4%gT8*YRSb1(E7t`3IQ{S-d9V;$h`%nprh85waqlvy;U}CdqpHa>ar6^%q@sSG zU<=vA78=waKy5>qJR)ky^tJCNWcn&Hz1f&)G%-`=5#Rr%%ygTU>B|ks zbX(h#d^Cmqup*rHXRwUz98>OSBB=s9|7j}Jv&XUMw| zGdgEbHHX|AF<5}QHkODJkOhHlV40ER@_oVTeF_Pca)j9za=(beeDMtw=Eb&0xiC0I z*$n^x4#vwkgTFkAmZ!VGr2c#U-J!>7&a~7tuAwmWDH&8=%H{{xr)l2#cuGy8TGsjZ zhMufB+fs9|Li8^142y7wsTJu36sh|Fiu6L;QL6zz_o{)xlwyks*r|i>)sVL)yaf*# z-WvZ$FRw9Z3EcRen-cQwHMGm+OhdcW`H}OMHPC==NTZCw(ij!WS?VD6)*};bZ$t+?Cb+gZuGOaeS_Vm2Yh7CAo~_ z4HEKb0_|;AZ(av22)t%F-f*9;Yj8XlWSY!W)>ms-6Pb)~t0MsAIjz2a9ecL#a_sST z1rO$dH#zpWyMkSl*Jn8Pc)Bc}y=CHXx=rpb%uh5la-Ki3s%x%;u3hBnJsmt}E#re- zGTF>Jv+dK^+DjSH6ydqowz!stwrE(w>*chF_aA2052V(uu_LlR_VNYxDghI@j67aOL=&*~aE{_xQz*kv| zO2bs;bmD|6@4150u$B@vV<5z!hG0WpVnH=HcWV*kTy+E=49_lOU>vn8Fo2Vu$>m&D zITc=rbl}}iB-%vOLLkNJG&NzL{3jfGiXMBuCo#ozPBC2vUdAaN4L0T_aWnvF zb=jb&Na8|Ek1C1bSrNz8`_?XJUye4b67e_fY6 z|H7n;XG+vdGA+}sDdt^8sdkTD=Tf+67P5`1 zzOjeh>a^`)Ke72D?`<+fR^a0NFRNHi( z?|8H7PU3Jk(BUM)expTdVY>3YP8<E!I(-$zjWIPJq+kn&4!hr= z*feu%22W@qo^X_?_>jgE4%m`;0^8!miEx#nuNHqJfgbjvukOFeKo2^wZ-GvPbKW%c z)#ZsgnO$+Zt1#r#_DVuNyO599m`_DwK1_G52a|L^MCV$EJ012m8#+6Soy;)cHDM=C z#MXo96Xv-)aUzaTtLzj_)M}Odp#faVKR`|m+zo9nu#nI!rmT~_ryW}x>fLYXUxXvr z?se33UryC}@ueY$zW+Qpw*B;*wN{Nn)#m>jLo7zWsoV90K zx;wfZ8|$^Dh=Ew-Q0MfETT)MG@b~Z+168a?vshR1cyaztU;Q0S>9MaRJ7^rIJ~hg6}$WFEbP%W=Kl@C`PDRku_B{9W-`Z2Q#oe>%VDNOY_#&W$*w?%IiU zwo~f9A7LR)?pi`}P$R>RPyG_6T!&o3v1u^`4)qO#*Y&PoizP6L%@&3b8?!JQJEczj zk#Nvf9vw9&2 z?Ro<-3rOFgJZ)^q+i&36IpzeJq$BQVe3F(!)5{4tbRdVR#vCRYa^O+nm-`Gk92C~0 zhs`~8zb0Mx3%~6PL^qwL<+~s;U-sL6Xo$gM_cTMkh^#&=^F=s&DMyZ(0)Kp7Fy%5y zW&Dco1@w6t$H%^{#I-{?%1O*veS$7XMj$zLGiFFe&Cdsqq#XNX&&v|fb z;yhMcV!M+dSzO|oZ)T{_N+J`l>Y1lzThN4 zik$1)c_(3gD{cjJi|~w3th}hNvqN_pzPEi<>bsp(J6Ks^?7+O>H!tXYP3vER%hX`c z19sop9eaxV)Sm6wpeT(Op}*)Bhb8x^Jp<3c!ojJXFgB7kG_c{YhX;nds$&mMB;=`s ze@Jb0E9UbgA{4zI+rZH}qD#0hj$(?Uf!20px>d@D`hJtLu(!P|RBUVeKC5%w-D#$& ztP0VXVKm#Z$J1Tg22C?1+D*vmu00sLmk*BW2)jEQTQV}h_|(R>!5NJhfv^)srO%Mr z;R+RHM~wsdSRpO8o;b_fov42F5z7zf-_1Ayu2aO@mIiWo$Vsi#QATveRoUy<<87xJ zcVsm20anF57cl2NG9eb8nd8i8sLs4UJU_>NzWMxn!Db~y-$L|CVObP*9R+2^gR&?n zGovAJV|Y$ZCZbO`dH!$oYp46c2`3*~J2yHn+{}UVbDRh`5k2wliE}5KGkzQBB%q_` zm*r$V&#pI5R1U}|pw%||CBSEFV`k=L-Z(!ei+=6&>wIW!-}CRCZw|hvEK2sydHnbz z56|NYWNH;~#!HzQ5}9XfVOjC8Yzm`_1+u7+S%}XyfE!RJ{k{_|uz~4EGEj-2-LpFvl4l z1|#Z@4i(WT6{N3~)*LUblaJ>WKvpH$O^k+5W{mLk6FlSeXHfQV&L;RGp~{9&z?HR3 zns5+?Ge9qdVm+c+i|EuNnzV>68IdYQ$kO7PWnAJ)TyI7yRdn@G`G8$28d7m$>#fo0 zcmxW@MDHd(+KsHD0-pt(d7@7guMhBo+gcdvVPn2vV%!h~w{h89`zyC(* z*WW)pnk%DA<{QnD(aj=yl=wGx+-W7JZ2VddP61M;<2ddg#6I#Ci_H?EVde*qvELNl zZ^-?G`hsl)>nqPUjUb9|0+aW2tx1BzGP6i6aq%mq#=c)P|3Rt8 zYr8I9+r+`u@eU&z#mwKdE+Z;thh)vp?1%#^x89!xJX307v)3`a_pI&&L?QIw?mS7`miF? z7M=x{?hIgVY{5yMRBTg2EEbrg?UVDIE>_R7#>rYIlnN|`T^I45E>S}wfIh%bxLhG36w#n|!>RUM9(OUBI zpdFD*Cr>ZnK_Gv+b;DE0jMIHpQ(ZR81dFX>koh5+d=_zfpVErt3{SU-PuH8`pRkT1 zzTPPS6Elvkm${nPO=qaEMX(j`Y3>#^j8m$oU6iL?SEa(B(P?=glUiL<%8X};ywd_p z>~5rR7Ke5vrSLtAEJl}{|Kr?%MiU>iJ>~?9yVMCf-f78zmbx9Hs}N!{8bj_=I6Lk$ z&H^~Imxqk(M z@lF^b?Ujn83MwyLzd}QHPLUE(NARr}#}|=DWY&s@5IuO?#ffi*Z9>G|EY*%Mll~Fw zCMH;l+L3y{7FEnpjV>OJxE8a5M_USB=UNOt&N#1@>oSz*Y&(LZQzr&9WtxW@8yNUU}MtDT}ek<8i>;aLNlz{1u| zMe4(XWpKN7iA5jmDe4kNO<;%XMzQI`hqDjxCS+5OpZx-Vt(dWmgH? zj<}DC)AXdhSiAVyEPkZHNsIV7ZorXbNOEh@5jU1S_^`RKzFgdpgnHd~InsoNw*5BrI3XH#hrHXPM&cIc6)yiU z%`l^%e~6}#O2;y;0O%huM~?-oUr2Xstm-4wUAB79%LaAV3!%C-Z1946hU4@111y4< zSWcw%ev8v_!25FW;+^Ymb{ufO9PFCBVK5=V!rVYA!rIVO01LZwX!NNSX7!E(ru-&2 zl79iaprea7d0wuMz&faAKkj4vH;IRF{t@CKk0ip;1TMVn(Suo$HhbHm!{zHVJM-U)<9YNZ_sjKcT2-@ug~VzyhR1V6um5xixwK(NHChL;|A)!TWs zMXw|EcKomj^KHFXI6z{52PfMR{Vk-I?o9*hK`65GiB`&6H%V)yI~Xq{U7TWoQw-3S z7xr$2>US%D+=~60C{aiB2cpu;xYEnCO7jC7n{lO=iAwJhmEQ4BR{B}9UR$jdZ`4|G zkVL)?9j6NKb|TR>w^$cF)n`{XMc5g=y?jJAk5jMtDMA3VrpD9{-?+i2eQw`||ip;k)h1iC(c0cY#nToRB zE>bL}=cqaQs)zvbulM9LwB*gv-zIaL=(1q7OYzUuD!QGkxqz#=fSd3}@i30+d&7q| z7}q}ql7knp5g0C+LuNihbK_)_cHrzC{B)e2M)K3CtY^kx@jrMWZC$@j-ZyFvn(Do8 z&~VLOuBjKPS})>V&*;RC&#~({?^fom;5>1#t-SUF>%&w0>69Kb`fh~HfltxwYe%tK zNEZhp0fsgM zI+ssj8{TWSFh+Vy7$e!rXkt{x9@DVtdb*i+eKm)Q`yd9DW*aYpl!c}f}nGq{~0k;v7QP5xP#fEzSzMeowH+>H2TF zI_Od?iqV<4!Ik)j_!2jpH{V5hjiYN8U5Z&Tr~EUSQh$$!ZyrNs9ZuJ@8UIo``g}KT zzqGfAgxjFHSo6!A*7kKCtn5nlbzzSki?sHi?(`GPxy5qZO8~|VSP(L?rAH-m$N6Fr zE!fhRclX*GFIXrhFN2w*zoB{aQzz{f2$Vzut&Tmm+6$1W){O|$2Q!5J2dvl>USeaC z`YZRIzeYUmynfm$=E^sVxpK5#7~8zRrZ@Y)IePsB#kTA6cXNVN&4M?t$Q7r90I33H z;aT+PX>#mgdTg4|RC`uPe^?9is6z1s@+Jrh6K~!oNr_FCMl9qZcI`!kRbP)(rtzbl z06JsXeIF#5VAP9QHKEUET?2t8Ez;UhU|Z_Qt)6vSB!b z*ffx&CC0YjoB3#RweDD8av8}*Wi)t+l|x&27CVoRZ3y7Z0a)KX!b#FAhmFA4IZD9&)C_!D5}3y-LyVR1V}2@FR83TzUkJ!&x9tb032 zIsZ&^M1CaL_=z*@F8?@^`YEK#F`%2H06)rf!A7I&*HA7N*!vu!0$9AqL*54B4v{%& z#69+gy@wooh)*;)_6&6V@L!t?u|2CgWX zve5jr)2!n#vkB?(;5l>1d%SHedr70|Iniuq+f;~4Xw$YU_losj#~a>`x|8d3!tNHa z{yH?`X)acm$+a?WjC0%=(Nm5$+#Pid8;XsKt|ET*Si*j@T-lOhZ^YYNqCTgkoSyPK)KOv*H+#-s!m1*_kS1&WTi-&44k|DLs= zzsC#3KU;eN;zQv2pGt~9n~)Lp4bNFg3TGj3|DJ`S-=ksP<92*c5IBf^-5viFfk(#) zHvgW+=1*&EzD2Nk>QbKeIGd*-<8Ae?{$vJV@Qxl`}omHExG1<#n``pJ;cVobMEGa^6ESSW#z>Ny=1$n>0+hg^+6Ckx?B z&EM9)C4TU}aK!y$=b#za9dmXfk(shWgpVM`i zt|N3ErRx}7Z(Ta<{>8n-9U((d(>u#p8)N6Oo*46HYKQibaxT0J4We^H;*H*2btj?j z&OTgV9vAH!_GBL}G`m0rBoTRd8|nQl$rNJv$fn@~aca*YJ_37Bi43yqi_9F^ zVhVe+4^Ow|ahhogE2G*rTbWkd1(`YOO6jXm6S^r)XKghL9f3Z`%1=GMnVX{^;4W9n z*ZF2mgl#)+>IAx-rd#%?Fe%GkcLCgK6>2d_~B8@33_>fUiR|K81IWDHIt~^c)a7PrAP9@tlj)@Q+nOpu5Y#2wiuP-zUM4Gsn zhzNlZjR-T$Y|cA)J$7miX1btaox>{ib=Ge$%1dc>&bxlDbqx?Wi?Vmz^E7vIyGvq(&A81nhM;NR=b44!7*=3Y!eiNspv6E_qYNr%vql2{LTDe$iuA>He156u_h&?YyMeOj(FSI;$D4CL}`P{npZY$ zN?}_G9;MW$sh6gsDb7mam02Cr@7T?y`Mn$?#j11 z+s4hh5=(+_X?xKK-%Rk=1Agkg1b_Md9`LPgJ|lb!!T-6O;I|hL{M*U!I$S%!y#ctE zLW29221kV0*7cYny-tGrPr%t`5L|W7{5#qfd_I;4|0Lii0^ZXje@Z|1_3k))2f^PB zczuebb{Z0|wAC?o`KEVC_K12O>7}IMdxIKVV0r%A& z>7jnf<^4S1Gu;ILbWeDjs2}B1V9W>Y@(|+9LcCAt<|gkw^peySBl9?2gID^gqT+w`n{4s2^3!km3W~^t2H1UqJlnBEH+!rtVE{e*iTA z=%(cIF@Jh}XVB_Y2X2hTd$&iXe@mEBXaQ`g2CIc(^@;n@iPVK3pYuS4jMo~6<&OHltClj`rn*XM8St^TjqAb#O< zXdgg6nG|1~a&Y25(LM;jKPg`34euQTtd}zw>dW2^o{Nh(rg>OZ8Hp1Ua8U8B5U0nZ^ z;rkGt!}U)Y-h}X6u7Aq#R)mk``lk%}C9>%Z0Z8qWOsMDO8(U)S{-p2z&G z_i*OcfBS8(NCfx z45e!1v{@g{}|ia(XC?u3PCEPuEPkis)KF*BZJ$N7t9= z`W{`o={ic+DY{g;y68%uYgMx78co+!y5`XJ1YK+Bs;BEky1q@ z?1axOx^n57Le~RyeTptCm9=vg;gibOI!oZZkD}DjQ;psxpRzbR9_} zOqY|s<DozG6TVY;16?h2DUVs4F1iZnT1;0BUEAntpsR&0<#7t9tAMV> zbk)$cjjjf|TIf<1Q8--%bSUmqHTHPAX#)%1M`2?iRbr*|gf^+_r^& zzhlzBS1dL;Tbj(yyaDlV#=kk{M@Wy%y~p|Xtr7b?#vOBKJe zivCw9RrJ18sigNs$`kaC@G7O0p33OU8fB7lmkxoDN_s{*Pbg2)9dNhPmkRn9e~Xmq z${gh(Wrp$~Jxhb@g!Yb+c5elm$sO5A$N$-2BEY4Tys;?65@$bM}CDq-} zcvBP)<-C+jQ$<%9eRmO-meX5+O16UDW+-Fm-$ghprPu+A?;;#7r{_v8`&xMN&2N)0$kP2bD7_XjA)QcB04 zqNK*$s<^i+4E=Nu`kcqL0-Vj-s&9bmc1JiH7s& zX&k>@Jw*Wp7_>>L{vGrAL;t|nt@Q8u81ezVmQmO$uCqTyUdU}7{k#4R^_up7Sg+)~ zM(KQG5w-dg)S7;7LD147zE*IJb7>4*MWtBAR62?%NYMBy9uE?0WTf&qOfp0+Q>cJi zMB$^ThIh(TZ%u$6^`YgvH6g#=OPhC<^5pfBv&aj%iu^_2>OBwif~#R;Q3`DJh706h zHf7R+{LMb*NkmHtIftXQ_Ns&qx!qBWE5!iR-bl}i_{t}6AfShaM??Mr2Q zrY`qChpAL$9Zw~jsN7B0B;r+f@w4CytC>e9V)o;fqmuIwvQ)=ptFvgJkP)9)vdpz) z1yCUc#B0alvK1@nF;AdyQ3?#Mpv%W)tl-h;uuzbNj5K_R{M8@wRt7 zhZVA|S2EYHOxe}~@2JlrDMOd?XpOO95#_Uj$6^=PY7xuN^QcWrl=~C#?IOsPj3pPx z5>ls-r4!Q~CAoyi5tv^?_orEQEoFLG!qk+@DUQ-Hzewf|n!1mEF(35My^!AL(bxDG zH;mJLn(hIfi!JRn?NO2+=1QFP9HSLw#){>oEB%Tx`^lB7Dv97{l+0J=uBv=`2{qn* zm8Iwc%8pu^i_^80t{3QfjxKj)<*LdluBS_%URAl)z&)n8z)j@mC+O=_F8|t!(%T`4 z&tCb=k`>F1yv9|v{4=FfTq9=(Tu-d^msT;DGO|i5m&>8oscVt^yr{C2 zp>suw|8!qV_auN)K2#9u2Du}bjiN4aE&cFAl1S)#m8IiScF_-o>7|SI#B5K_{^5N` z)0lmDpNT^%AF657V)YE^8TX&1V`J=(Lcg=zg+;Cz50#X7i{{UMXs&Cfd%kWrMA*T;(ry`B&*g z$O)FNT;^I;Ci?mlfwHpFN@lSCPn6@s2>7bye4@0BM#GP@pfbfO|B_07DxCd4Rh|#Q zov~k+k&KWyDt{dO52*^~hdFF~o+rjymJz@);)UZ}mRH3&7zM6;QWoeMVLy~&dT$>> zuzytr@Ccbnw$Vpvoh8PG5U{`<@UiR~=;Z&X93O(InT4Lh``t5@MMz_*?qdY?&O@0UEfh&eXqiuV!UFHD+U z^h`(0NAgJK%;VW7{>8WTJg-R1p^(Q!tRrDA>gIXFOv=f{=_fIj_(q_LNf|dZL{An`>F%X^6v5SFE7^hjf<`+fC@6V_j8&Cm_DL zMy?s#laHVm^s#yQa|di2ERyvE(^I`#6&-v3%u| zu2o#8D%ZGs(iPXtCH^H-TvJC@-QyZrmCmwOrNoTDSzJ!iq&eovw~t>y*(ftLek2=d zMd^~Ks)!+6qyA|T#7AhKv^j36)XDdp=_)ZsbTW@XIo33n{EMq|SPDNs{XS*k_hiQKwZ@VSuB3duCCJ=eYvG(sNk1+>Le->aG z5SqMP);E1hjtbChx|BN%TE#f6$J1HFy0Ao@!%}{)`Zv}io`a~zqJ(cf%T)1<)p?Yz zYve6YgNK5*d_3hAE6||qZ1xCp=zEt{kKSTU``;|Xw_4anTj-<#^ z&g62WDr0=LP}C+BClT?4<{f{PlAkP>E4`({`*se zz!u{n?rnfb6^_3WUWcAQ|M-fP^g=3;pZQA#(}l3D(CiL8oZ}qH55>4u#_2w-2nz$z z)|#!r(~N!CXe?uk1kKuHrL->)d_JDma@Id1MCi&sW3WR=CroJRi&bvTs-slq>C){# zmh-q0x2Z^N2XZ@WKm0m{KF$3c?|^)Y>1C}Fx11369N$-`4W~&pAIg`ueVOtQ?Q)_dr zy~peA4UXn#`dG=>dXh)zDk||3N?)|ENIh}AJhfFzaz1x{2wnATZ=Zfxu^#$XMU|&F7@m=T3?K(sHHdYBb0v;r;70r zCBH*blz4OTtV6V7&+^}?OulM+Yf^W-Kd+ME;DXOEHKtBCk&a5)3aylJAb5*LGgs&L zcN*v?bvjQ=F1MU}TwD&1Yr3zV{zsvg#GIDNnVm>oOE=yRfm2}-mdkw9$77C|Ta+eH zL(l%0XK0^mFCQQT4Wi97J2_+d@(k^B?digb^htx|T~!bI%`@=pGHwIWd&Gzn*BiKa zbgIy;JmaMhah4_E0)MboZvL9ZiOsP!^b7Z8x%3N&makfzFv6{;-+}l}zwl1pven|e z4&Uh)-nFvm_Xhes`m)72lztb`FOE}JU$Qu}>GwtYg~y)-^b3cuo4;alLc+# ztL0SX{dc$1)k>+gVb78d*XPu8Sr&yZ^btyHHpwn-<>Q_=iT6BN2ThlRKOw0m($#4B zbqVLM*-*!A0*!48x-x2RdO``ByHl_4BDRA~w13lN)sMU0npC4%qlubdqb^|i%H@7v z>52+Abo=-1bMPm$$H%iH0OO!$%i!Xkzl7UU$PbmeB%YX}lCuBwwx41Azi~&yM=QV9 zr|>6M;9V)LVPW4XZ2p9X@>=V6wVfSTvrUcnvyZY*1aO*FK_cX+e<|I6=k62ObIBEi zkyQ!xkB^_d*Q;kqj;wTDaF zRRZ}@j4v+v`(e<-^foK3sw%D2ZFNeQ4NLJ2>qLuYRQhK=@nlJ9#i~mG6xTd|C02-t zoAT-sY`$hcB$knStAA>&{a;cj<%buLtTw^vW(XG^Y`vwReOb`9+> zt<9GDmQ*fT>MyOVaxGse0smQk*pm+G&1H0%sSz{a;V7GC>abSJJx{{+=4&{|bMf^G|a4Yk@cL_z#8ra2Vr0%GCA0 zHvaza-2p3kyy7z0WMaQyeEmGt{y^CN2%R5#@C>QV7W$wM+dDml-?h{e$A{Jb2jc_w z6V6yw>0YzkUsSnjX=zoJ!ZW_5iqOtO7r#ud>wVn&ah5B>+CZCKYIX=l4lBY}No0jOim&RscZZmsj8O&u6@Q8>rXGxX6 zaH)U!Go?kVDgqV!O}vX_6c44ilH)%D>! zpW?d`(JAv9bqD_C%lu285N1lseJiSXTMhlrEA>AN^G7`2Z+I?* zDH`hgAXDL7w%1Fh#W^z;&7bXY<9Dvt<1U#!gTHwmn(LllSn^3c&zS$oBDaK{@z9(( zh4bC~TsTK=jav5;;kUsx#q6x0=azD-6VJ=!bHzlnbAfzr8f$jWk*;uZ) zoEX=xFV&xhQ(cB%rQT1Qor(EWK#o9_T*GOKwwE)J&Wy1~U6o${Kk}Y7x{l+jk);e2@tTG1~3pP_uiS=nSJj`dTR8Xa(Jt& zJ2N|T=g!B@&d%I>N3D1(`R(OnZchDgUGAIHzO8CoU%$)tH@Slok*pfdWl^FO_b|sY z->li(mrqrHOjAHC~d&$}vRGRe|X1eDSA7}XN&8y^L?K#y1&?Xx|o%W zdgEMnlxUKRn&gxa6U?r{5(F?!EcA`_^UE zsgG+Jm-A3>X7xr1GVf*{FKEK|5SN^i^yU6tqw~escDy;ht+;|TW>}b8Q5tg!vXO>P z(DwUxi#9;>?`^{Ui01wPxZ8#MgPQw8n)?CG{b9}hpyqx^b3eI8xj(MCv0r=_r^nVc zUZ!&1B6a6$%dmnR1S}I{mUg{ zWZp7go=+vsTjneCl=&bXY^{V=Nld}RKH^sSQSvvT@mYl(Vz^rB(VIzzP71Ae=^qwr zurkdA@uvIvmmAMd<|AoKdXkPz4}Ijo_2u&Q5p@n5ep`)U_!;P^z>f_NZ?o-f70P4` zn!RTj_0=q=oOh^kNBp_eJqn{0IwzbUmVrG9i&3>aj=dx0&WL>U&eJexTg( zPLbv+`i`lu=Y~51z09Dseuub=7S%_Sc7!_X-c>e_vifSPTQA%yQ6wa(lsy^U>QFP@ zcRGEZYgbnntKRX(e8qM?J7k6)ZsMN#Ol$5mz)65%*9!f}pNWlI+$b?iM&Fh#M!%C! z3dWF|52=@P@72+UwQI*hzYv;b6b-3=tzFwO7CKR6j5~2yLDh7dQdeoNQ$wsB_U)wP zpjZN1iyQOcT8rEIh}Qz&^8u0~%PACp?LI#=T(wz%`twEqh*9yA&c8ujQ_bhT3S8Vm$h~B)k65n3Y%CTG5Q= z5hd}2=f&y@wiEhrHA2^$mCrdJ18~N|M~Q3FSxeS-gxa0robo*Cg9zx#wBwK}q`RX=aOBMrg)!TWtqH z&0OT0uMQ85uC0WQS?;o$!uJg0k{9}jvy{~eKE}$PRL|yUGv=T2owlNVPpCD!i;oRB zhu}Lti}zyee=?t1J^d+`wH>h9<5|{f0AogfQXkz2ramlUvHc+L@Yh_;=ZArX)a8!4e|9Pp1% zP7Y$;0|(f2V#mT*7JO>Ky_(w5_^GY$`t7RX)vdlvTP)gt+%U%P9ovmm6_w4PPCu;M z-pjS$a_tsDm6;*0auhjMghan|X3V4%FH%)n{)?pN%x6NUBNAHX_cPC|cvvwUm!$m} zK?C~+mNhS07Q<#z_Yd5_*j)hE0PNXw1KYdz26i>Lw*hnlYyr3y}Hf_WDJs!wBjD5!B93A(gSqvy%y#kKm*+f@NWxvuBCg7`2nv>Kl?Er5)-;YI0 z@XB+oxu*dh2RH_BE5KHO+;hDC-gp-B19%$XB)|gzN=`=Civ9gU;TQEt8!3waccF3 zo6&A@O)iRqdNK;DFQ2NcS$EO?NC!z5`P54ivHM~(T^FBQJ_?w$gkv*l{Xxyz%}k%F zmO+wp_3C}8tjuYY={fc1#dB19%8K4hja2XI))(fd=cZ(~vv#5C*^$zvwAqrSYwU~z zS^jM4r3~;=($|aEosuBt--rcTx#Q~(IyaM=L>kjhKj6C0F4UhagC3$zKVXYe;dk$CjeU<-q5e(m0d9)$JcL2i`C0f78jjKXQ@# zt)8FSpI>P|td;IoeW|)cvN!QsIikk!24!QCI7s3y^)A~4ls7S>s&7Za!iy_*twON| zjVtwev5Hpx^sRRN>av@GR(E$V9Ym+1j5>RQv_rFy`dy_PFKUhCn~efqtIi!92W^*35x zRqpDLmKN*<3wPi1!^iHu??;aR=#Rbs{ttZcLl1oT!G|9H@kf5*BR~05KmF*>{Or%2 z`1z0i!ehVqOTYa1$A0BkPyX7k|Hc!)`CGsJ8Jnf%x6CP=THB|=l=4U&wt^so_+3%UwZz_U-|17zWO(Rd-lbz{oPA1fBo-Y`G-!J^ffBx4S|NTGTVsBRAW^sj@h7@kz>hizU`M>G4=c7Wh0@Ga zs02KY-HB_|4?e47*1ibq^{*x%sn1?PVvi zUOam4uu%8z1+&|ESsf`P>h==eu1tQ?fw85bo!Wf(s1;&GQ@hyjW$typ}vMXuC9 zChtL#H?8^8Fr!Wwy03h_H8(JFkhKf^`Zqa#g>Vl$3wUIxmpx1VKK2aY!v_wqrwI?T zrvUdIm|#zc@JEIJxVRsaf0EgP&X}OzFX-u+d<^iu@m>}a?qk!0hu9e533emk{(&C0m2e-sg76S)Cp^I} ze1qrz3gE%X3HAcukM&Kt2kFZApk4^Tn;~0Npg3S}|Wkte6Y?AOOyOD4o+eo;d zttY&XF~S4v)$@q=v*!sPU}p#qvr~je*kgnT*~5f;*aG3hEFe72ZYO+@4H3SL?IwH+ z>i|4)%RXkD=jFQcJg=`S&hvU&FYr3R2Z3%I;QhVh?2U8SZX@h<#D{^ub3FV7fuB8x z?b*-H06uW@e)cK!A0A?-1U@O!pAh(Az+>Zs?EZ7e&&}*Ez=wPGu>kPRP@mJnKPmh- z0-l^4C4Mo#ZjrBXj`Mki;CJ1+cdWZCx3g_sduLl~+qzt?{d?L+(lK)+9Y^cw`31sG z6W?oEiSA~jX&2M>Z!C3I@9`?qD+%e8m;%tlxSbGIp?xu2vz|?L<&|dqox%>VT;;TB zZM9n4d$s3jJoh`(9U?w&9qk)qJpd=lYv?>|XWnuGaUAxkcemwEn``K->?yGd8`CVW zIrB(GpL4gEZJQprr|j1BkiIJ4eH8M!UQ#N7^HTh4VJyd5FJ+gm$+Zm(3|xZ0cXzWf zifHT}yY;emwyV4Q(AZ^+83w85wNDqP;m6o~Fb}_Wh`}yn?d^ct;X<#_GhOP`q{i3A zqZyRNmuHE~Uc#kfb&1gC^b09{%dOAqE8eSbKSx@)k>}R%zBom@leX9`?qd6?28OgJ z0&91(__E?(J)Bz%LAvs*c#3usaDR&LLT+br53>1ry|ZcUqf32u&~9z4^}XyqDs^j$ zr6g0iWb*rjl_flHdz?<3>u2&jIv%QQFUvD-s%3Z8DPPrlT$tm`B3vo?=&N9i#T{|f zFE|J}?IZ2*os6Glg3msexpk<|^YN7PFJtd!Qt}{cMcxroyWFCdl(9sOr)>U%>AttL z!KK?wllAAb>B80W7F=jLksX8f|u3U*l|c^bSxZSfK&`#SH)tnz5TNJAUF~PnfH_& z5A?Gd`BObX^3?oHWt6HOs*%{J7k`r7MtT^VGvkdqZ!e^0&!SbQ<@R>I{nh~S35|CC(H z>gu7WJmfQ5pRdL0wh#I;_Gf%oY-~b(I%3sVm&>a+ZZh#c9A=B3nz?5u%&lMGbL%m1 zpZF?wpU~U|$HPSdb{@jIzqTg#%!_Ms=K;>Xye2md_{7;YxnNgY&H((xrx}5MZ?)xN zbomnexjt7LLHDs;ipTDkvpmXphCq(cqm3$2>_F;gAZ_mJYjUSwt}P#){qimG%iXr^ z6CKXyFMs56#x8vC+unBehN0{HJzu!|?jK^OM=M7^`Pq-1zT=}0w)H;H`qJm7E`Ray zrOJ=~UG#p;lONx(sIPZBjaDUS%Nfz?y!1R&;wW`V-BA7f!rC?cIcrzR%}2LKMK`$J zj7#Mii<>8jO9&DEL%H8BD*zG$|6!F`b-=7luCN{f;W-t8b z(FlNa=2@-IUG^?Yx0PvLA}zgPc}&K&50@Wj-(2}rZ@_YGAWrh)>ta?&!m>p|SBJ0V z`YUqF&zZv$xZJ99H~EN_Fx@^2-#5B?g6oc_XBtp^ex{4XxHdJX5x_WH-=ZUaA$W^g z?rmnf$lW;JE>}lWS9i}d2K}B?^2zWhDg{iT^8BzF;AzhzX4xSlyVlh9?rw}b8Jd=O zNQOztCY%x`d3$Wzv9-wXGe!LUIEI_0)ZaHcoVwpLsN#(~1s7M1L#Bt#SbpNgIz4W- zmz$7JY5HCq!Z4%9I{;%Y#*+U2-aa}ZTaVM<3;fTyHX7}aVH2Ji;0BiTkNELmIZ*tI zx}pUl88)D;8Og9ox9sS7^_f=D(fkv!<5_M=^K-lS(hseWx(~)=HbljBtOUlfN+zu0 zS-O94qGxPS^W#DitMb3I%Kxq^Kk7i|$!dy~>Eq3QPNfvLT%(XrC?8LXWQ!(9pDG?2 zWTciSX!g#ZD%9uAKG%GV#1O7yspj!+oo82$sMSw9u7^~|Ru=p^s;n&4qs+f6lzq61 zG5+y0owx-fRVQUyY2Yiop%^6?jaA6OEPbzJ$HRJ~oPM9Ndh6R#w?m!7bsgKmwy<}> zoNEhwIrCLzHK&XqCC;{ax+#%T(%}*ln>D$7r4iDs?+KN|%IpKf%nxUMw8*Jh4Cx!6 zyxxE@#&A48DHM&eQ}(&J6HDr*qOueQq$Jp2spJ%ZK)wREBj?Tph7ufG`rVL}+bV{K z6w3h&5&II4PjoN{_x4C(kK1z@;gh1sFy~CSg!3fE@C`sFO5{-<5O3Ux{3NtcE6%iO z8fDJ;Fl^fV9%|cBY}`*qy8V9Hgn5;m=Ca<l>*O{ko~ZKJ3N zh;IjjYrf$qo$>%d9_1U=3&Xi#4L^_znRr2-2BGE*TUI*q7-s^I=fo;XRvElVLga$V z&UjrL&OE&LBE60&@Sl(d-Sr%2DtH^P<+UQ*~uFFz;9f-+@SZ>In-_lqlBwO18{+4vgd) z>o7>-ZCn&y5*dWf7=}pzUDBA5eO2fON?L-o)K9#j4yUSmHY!_}I(mRL6k|7sG-*G? zw;1xF)>2t!6?TYD-NUdEm{a4|bU%e`XxrPit8GVHcUy1UP}_T8*7gnv*+C`~uV~xT zHrlok?p@dReefT{_S4#+LnAGYkeEW+55=FfL?dnc$RCQClE5muxtH+}CM8-~ODf=< zi6`PPnSeX>e=@erN5oVFnV=>-Ez+0aAPrFj^enlYEXOjJmTWn++_Hsfk*Qn6{S46- zNiQX@@h3~B6Od(VNeiXwFO#fAuf+f5?ONcfs?z;;9wOmui>OFM2wGf6?La<|ED!Ps z3K0cE9hyMSK`1=ucsL;1i{^4myG}!oDKe*_riXTIqOz`))6mTtn_iSuOjE`!o1vy_ z+;YmvviW~&zc=R`?cS!nf8W_>y}tFW@B6Q{_g;HF6m8keKV-~YjjO4XOvTcrSHrXv z15c17JxP)aR0axwxnPTn799EkUN<^5eJ zgLofT-m^8GAN(?~@>V-%h6BC}ILnV?)y4d@!sGbEej8a5V~*ucaFCN?PA1|{1@ zgCtNQC>4aq7@HeZ9l6}ra$3t3L%JPRTdMX{ZK~RpX|zIP6q1xO#Vh&78p<1^q#dE8 zbt-8cN?Mj{tRm+)L*A;4s_ZsHSh(<5NYP1>ZI7+ZUhQx@2b@xjdt^s!YFx*t>M`|W zS4#Eq*$JB`^(PJ{rJfcz-IdloZQ#t_83VKW&pMiwJ+E^?;<g0w>8`2n z^rGpVXAaJ2ot5D_nl(7LE4%j`_j%p9?t-DBdg_LRZMGp>wY|q4aHKkWon0dWF+je0577O)N2BuJU+=yg;(hrlx<=4i~|$o|;;cTC$@N$Qol;=3m7 zNEn=0G5PL6%qvmIGYO~6iFqXoE=kInd{XBaq>NWMGQR}DB?-R?;Hz>>F-R3% zzVQg31lcAjk}!uv;g={%FY`+lyrc0^&yiF~AJR?q3p$K9oQcC5w5UfM9mAbuHs0-8 zU=cU{M7*<}>@fy5>_q+K9!(EjiZ{!j(%bY3ZN<~iiH~tW&VM53AJZRzk+bnWmqY)9 zv{wLE{3R{=A>m!F9&fMwZhRM>?i}FrJGz;6(&O}B^xp`Lc8mwM{~eN+;`%9Fj(=|= zZ6fl$mCmHkaVOmzC3QT#MIY0h(AFN@gIeeTJWW0YP256X)1#1n4OP?a5mP51_k~E2 zg|hz|wtfob-%amA=5olgo$jGNoO|i%u&F1}>+~P=C4EL0)1T22tV7DVv>%p;rCrFm zjQ&K|QWx}hFa2d$>O^2=BVC8OcmVI$$LK2h74qH**?Z`HIt1(SxYuSH1gfg>9AU;& z58=e?!hQ;M+$VP{!$K^)45wQ|Moi`;CyaAMM^v7}@1w^c<6-3ZE3|TjK<)_Crv&6! z2K`@5Pr?ST(-Y9oLFncZl(h!PydACbPhedytiA;>u*NHR4muqz^c8dzb?Eod={c~^ zC-fZMhMHAJFVVlDeVeg8rAjg}wg-TwaL!lL-{=LwhtI)_DiW zsHETE&hb;+5wg%q?5Cfh%^C|dWK#gPdYA48?(f5$;BHz)j{u#Y(cfXyXXy^0;UZwV zfUXA$;%OQcQ3vYGCOQI?e2H3mjQ&b5q8^Vzt(ZwG(Gp!rU(rYODxQW<#l5Bx2zU^0 zY&XFA-+s#&m;w}JL37W;y6-_VhY_zH`nnL<@Iace(CN>R`!$g78QAYAx>o`hXF~obfS_%Vx)oYI1TEeNEd36Wu7NGy z1){!zMLU6|M}fy1VbRTywimd11-QEvn*1$v`Z{n~g_2~8mN^BsdK`Fo7FxIpn!OD8 z&4As$f@PnCR{j7~-2o)V!JZqTxl-WsLujuFdb%Gr7zu6nKx9weFCJ9Mh*D_wz>J{2y|Qm3vUN@yMUHaz`!Kfe-rBKOdxS7Q1%9F|7X;r2T`v> zs7FUolXsvtu0-A8=U(HxdV!ej?^RZ+l-CgFaP#{;_XUQFN#ZHzG~i&m7*Cf8JS>0} zauK^&JlCv%ycdIqS9}%ZQL!6=j%#48EkM|f(BthW>0QwJPRRSPz^C~hV{P}%N0P;z zVsWQg+%e#AhRK~M){WBLNn)Q8-JNV0^~dfMWo2&F&8u1%-D%1Wn?`<%O>URrZouv= zV9?CJ)a1^FJ&f)gV9cD~YKy!@Vl6Er|1}o=b%yx!fQ?H{<*87ttLGQg+;V;`!}xEq z@V`n6p942P6B*0X2vn>57J`2O?TR_S8!Y+VG>rePB-<|wEmIxp^EOj?+EM$A<=Kqd zC(APr`TLOHeU|(lP|BqA=#bhkLRvSF*5_pC%2B&U^gb!YTkXwKyRp|!0ke*cQurmDB zi>qkD+^MJKL29>@&eYUhrFB1P9bKj%O-shUDXlMTnBGXsOf!R)olO@`>nE}qBI~-< zy1|2sVo`wY-)Q@1#2$R3&!O9sbok%vc}wdxX5vdBEQ!W>ZmJ%S47C5DW@uZDiQmGpLQv7iL?@Ec_<5u_-Wjm#z1d@6tlGK$<(g3bQAn7!c<{+#r zUA%Bgy?7}u!?j~F;)2|8_b9|+1EAC?;0fvl4NVa*(~<;A1)pm0X-gJeS3iK=zWdk* zpBQt|B&?#Z)+K-GLZDX^?%T9S($?SSDj-o#3-;k49A51+r)zvz^Rg711xm=k{{68}@)0L@=qi`wL z4Y)}a=jT@N|Kftue7=^IREQ52q2;CA%}Z-8JYV>S3Ra5mQ=2N}YlCtP@y4+@0!6FD zhy3EAd~x$E@q4^wrRP(YEAwpEoXolG$K%ZcIl#ra!j{$NPyBKbt^>2tX)@V|<5-zbHZtiVMrE&6pv+C%kkgzy^Z4D^jh52j|^@HmS?_1_lz6HBb7hU4a zRIV|Fw|5ij((8E&--+`>&d3lvzid%C*G0lG!XVrkvL=i(0EA!(0M7C<0HqtuUINjl^tes8r-Z2@<=(t)^NA$`v>%KXpuGh!$=aO-cQ={#& z6zhFAIWiS~bCj!|FT3U$*7KM1sWFW2R{iS2`l<5herrwf!qv5ZChp|1B|Z&-?3Qzm zydS*2YIv&R&wDnR*EkD^SsUTk{`>B@$PjmvwPLS{U|6{NC4# zH|Ahn-_BTXgNA#Vz6-9|SKsfqM(Eiu<|Xjzobsq26@Rjh<+%n~KUn)zr{t)X@^nY6 z7!NC#X06DRQ)Oys|L4hNeSQchgK`;@-f75z z@A{W0a~jIT?+<~?R*|n2n?>}0KlZF~NJO)4h4jzKL-NJ|CsbdO^`Fkw< z+7NHIh2K87`z-w0BJkU7;dc+>Ip>?pn80&aKnoTBdm`wD)Ajnp+ic~0vz_Y={EP>u zUup3_0>4g+OgrG-ZQyYvf=rzjUa0}6bZEX=Uq|3}W}C~%@xtj#O{>n?3$1rbRoSwi zGmIaF@nbo8JVYbh?Vztgef*A%>pmq8$5;6o^EdL~@a_od_pI0DG^U@4czx@2d5vKq zgmog!5hmX*OL>?-^HSX`&qBEK7nt+6@-e32gJlU>__V{lRq^YKz$awka}@FRTKK%Q zK-P;I9*)mm3!m+1OPo1otR=u*k)zioZg0ZzGPXgSe~BRt^9@^PEbT@=;ICfvIaWJp9;kk`gTfuh6*>BptLnb~S-F2jb?>%>m%M5Yx29kFnmK&GA^gJw2 zbx>C6kkUrnJcV_&>zv_jimFGI&pt~&yADT}BRFIZ@3(|M{G~bkB}@3N$IanAmhkBg zTh#Q|I-`e=8fgyiwS?!yMNi)zZ_{*EiT{!0+?fzPpPI?h!`CNA51%$QdiYb*@olwwxwfy-|9fhq%Xv;qbiF^b#TKz1^7Xu}Hc=1T4E1o% zq7&CcYd*2tqsvkBSoHGeKM`Hd6?>zHU;T9Sdh*GE=;;^!#T>rJ5dO!HY|`f+MYhAv z33llrP^9pS6YNqgi1plU(DQb8WIglIRU`B4cgxQ+hj0z$>CeA>RqrD_E^`R+Bk6Zc zoy_Z9uU-1stHJ^7_vvkq0=MY8j$Ep{#bv!U?i{0Q0 z>?%3j?H_Ij>0LRjSGjgBmY>UZ;M%xYw_$adv_qD(eM;Ixmb7hQ(zYE`bhuK-80AIA z7{_%P;?9f`S1tD~7CpRYcbJ~5jPlTPq&+`b!(8bkFx`=-m&rX|j=xKB@3Ev)pQ%}% z{T5jd!Oiii4dwaz1ZD3q#LdW$9@i*`%@8K!HpYK~Ot@~^BbQSh!_8?zhP+h2_Iw%J zT*iugxxU|$KOEaE!+=5VffL9rt!Y?lHujRv10*kfN8P2ECM>AWiCOhrr{HR_kfn zPmrd1wJy`1C~^4+*KTcC;gIeJdCqrg@dHbpBn2E)Veoqdegwb%BHgbCe(meSzaw-Y z>?%;#QaS$2Vka#GEeCl(Ay7ML8|V?xe$d;Xk3q*l@fSF0HmC$t4GMtTK%Jm&P(Nr0 z^fhSog-%KV%>k8wsz8^5+CVpf?gQ-x?F03K4uU=beF2IoaZ(a!Cg?m+8K@4_#{Q6F z2dL7#z+gGNK2iJ%Nn4(I~VYLFAM9)WGPLB2zZjbhNe<6j&9 zFSQjm_&n;&yGqJ+l=y2jH_`YJl?@(mUVTll!oQ@sG1RblW5`PnJIfn3dHr>Iyb7eN zy-atnb!f3G{3;9DYCqo_st_B8^4_J5JYqE8Tg%^b{S7>`jy|RWpV6JbDdb7~{4JYj z`BxJC)h_1Y@!U?Y2MmH6~20KY4m!uN%Rnl1*LnP<=#-_U`KJ2SiE4Z zH&_<*HnF&G*^9h2fs1&Y1~Ml4(q7!On3Z4SDGMRVVdw&B^OQ9}%H<_Mh!!|XyfrP} zVg4ULE9$xAeZPH6WkkV66I$*Rv) zr(`DTXpjX%tSPpF)&|W&iv)g48rB4Bf*TR~oU@{_Ni2du^n3mf2GDr3m-e%(Ty;Iq zuEL<#OHFJ?12*;z!xY~19m{JPnv4r6_&Jp=^DnDe>!n2J@=)Un-v%@?ymkfk2^Y6F zM6ZeeqI`z+MTuS&{=$4z$ChB3)h2{`99*RYtf|sg*x1}u&yK~-b#>k#P_<2N9|SVF zM7s=bmX7$d+YeFnVDRr@3~(s-sm+DDB)BTY;~6ovc>bs|m60uq$h( z=F7XlmgE)Z6U}mzSOOP*c3-g_26}j=p8yUNclgRJ;``-jY{EF)wMRSy_4aduDeJAj;3a-&P1U z_+UrO5SWwK!Zoa##nbx@&p=;i2?72+Jo|(=W4iNoiPpX$Y8hzK=08qb$Xobc32A1) z;^$y41Q-N(3E~W(d!UKXEiPa%@{QBqXK4i+{Z8NY7Vm+p9jJ{vcTz>nApY(CQf@$! zK3DIidcJ{=OAf=^{@U$Cnvw3DYdih>*UApy^z!NYd>i{!KF`$+WUD!+O>0fgxvu%! z{q26M>wU?-b$#pY+UFA0*U?0^_|wvBqCYMF)BOJi=j^w*e>v^QA69Xgj%`$`K3j0+ zZAIwsZn5n;wr$5Y?%38HKaZ+!_zeudp+S453azDaE%uuj<(i4geF2&o!0E0=I%~u| zjkuQ)4>Ya`GSY($zpqh#KjXJ!jC8y|jD^78sbLF7Li;MrX`_$xrx|rlH~fhPeUd?+ zY?Lz>fWLgnG2%;%`YbnoZ>5p`xlzA^2K|IVZ&j~y4*|@V2UU2Ve@TDlk=F33V*Hbw zxkjhcEj7A7wc5X%tNHLfonG_daDQ&Se^2-ST?Y*J7gvQs2h7u4O!b$;06%Er=!vdI zdhS`>U$R2?(-)QB!@hldn&z*9{5zJNTxO}E-1G;!Z#VqUeq(-5!`}q?4=ug0^dH2< zrI(k!S#$a0muR8a;fD13$+u2gh_I8xPEwEOKU#XG{5C<5?5muhcddehWN>YXf6+;C@u~ znj0%?nOE(v{ls?V_ZBYDDnjg8Q2DDaWI`qQo_=QIT9oXUE|CyY*vjvAV5=^XL0g%m}~ow8aP z%iz(Lz;3U0vjoP3r$jjtyINwRBOGx_jz~=Lj*c6i5<4Ji){=#3uUpd9%POy)U&3_x--lX*ZhY*T46TLH}h1mHqbleq+t4_F1r1S9|k z0D1vrKvzIpfEhplZkSExazF_nAFvRR0f;o~c|*XLaTw4Xfd6haF_|v|jy2KqbVkrz+F_RBJe1As&8KoTuPP=_7>f`rr z{nTmu(tQKV(&GI0f3(0d-6d#HQAh2(*aO7}igkBa9f2C2SeAhQ-BSBUN@oLREr@G2 z>1TD<(XNixUxz;b`Qabbk|ymZ`?T>{y?f<#)tB!v_krdGAFfr;L~Y3wdwlxh`a_v& zhxU8E&fg-D;WNgl;eGn;7{5MvT(hlV>WS+fv+5Sid#A-+Z?%KE;)=MU)3*~=y`sLo zddY?S$Z;oNjI_l~Xgn23&EWZ`Prb=qNJqR)an;{FNgbVg|X zHtR2+pORZ!+B3OF_j;Q?Na0U)v(Y2k9%+Ayy6!utznD9kgIXJxIyZubd3(xF)`|jmEFXnuc(ZBCpd3)d_w^qIV9E0yq zdUtKz%(t6fa6hx?;E{c%vfR@D+NThIyFcFPUro4Z&&Mng6UPwN_=kL#~PF zUnO4Y+G%^zkJ9$>(f2K=x_^X4vk#2ZED7-marmSTyaT&Kvonk&TnTrgoyl%uO_a&c z)C+uMQcM;?Hd#$Jlcz~A;gDqV*V0*_@DQ?^e6*Z`mcjsCfS4bIJx$%AGzG2|Os;T8 zslG?C1tu+iCI+sPv=VSx0g$SgNR5uK_t(n7W%hz{6evNj52m{kZ3%D9#xz-Lp?>xp zK9ODDS>Aa?h`ySwvd*zb&(hLu_H{m{Y8HL2F#EF*A=)W? z7LBT(suymYRe&vM!!;{FOs}*oPSWz=a&_xoY<)-?_K5gDO>`%aCJ7dJsLO$ey5jmG z2zzOqr8K@_9%0_tHQCurJ%L-8VeM5wvp6je zlmNWaH4vkxrl$(F9&Vy6}Li~GEBuDJvn9-I|u`zK;$Sox?&XyE0)Dat=>B zM-Oo%CBqsNuV|1P+0E*vJloJ>k&_cslC+a^e`9I1ejQwyWSp^L#33aSAG82#(#XKX z=+x*KN0cL}f>@P|cgjz}s{?;Wsw2h{ga0G9@Fd^3)cE0!L^n%Hv}XkVd<3}-36Du~ zxGAzn4HsAbxJS*uE_*yuSJ|VY(GZtCocvS*Jp(;g82UCy@WQiZVsAvO_vi+#nGwvM*3w#BwDr1R1($p;0aO=u4~i*BICN-Kp^ ze3cKC)5%79lW5KWD9&I!pabxzU~31U8u+#g1ds*vV`L+mP?Y`}2W( z2p`H1;0N(|0)_3@6Qn$pj|x!{+J}l!3Hn4iulT6z)QxJMny(fDXZESZYKeMGEmcpe zqdvG0vVZvM?MNAWqh*P8m(nBd;?x)O93Y7+`m-@E)xr!%%cy9QjHN(1r z+6NkWmhuN}JVWO&XPCyIZ%5eAxdJYMU&j~nyZJBpLwsk!U7!R}*edK5E`c645-nm^ z(Fb%fLL4v77C#jCh+m7>#RpIDwWEl?+wKB-JMN|>>4RwziP0yqY>Em=Xlgq4S z{tfLr&otsb;0|y+e^!_V_1+-v5<5s%X`nP%ijs1rHBw92O%9Ml}qx$yOGUf^VveSA!p{AbFH|x+(d2`w~AZKZRGN}e6EbE$BVq3_kKjH zbNSUEjg5RB-&*J-FraVCg?wSXm=An^&elqLLGq9yq~TJsG+CMht=J%Kl?tW((sAhw zXh3V3lO;J?o-Ch|%jIr}NAIE!K|eo18=;5ng#J;2zCx$b1@tp|fb1}S3|7*WmYDZ9 zK>cAIP~ZBjwVm~$wLaODbS2$MFERi|wztSAGKm}qyx&ZIMV=yCP#iUnT1#!DjzdqS zXoa3i&!>;l=jd=|7?aARGt-!POg6}34YQRgV!mLGGNmAsOU!pnQ`Q~&^GvpcJ;`2T zT{sK(3deD;bA7o%+z4(oH=7IP2lDZt;pO}l{xo{6$p0F;jeM0pN`3WNwVg_<^V9|ELKsbU zsAtsks=mg$sf`(RtZvp$);`uP);-ok)~2K#M&7mL8L}ny8a0C2N&P_eqW$SW7%_*^ zvGfGs)0gxK+Qc+q8Z&L+Uf{=s!&scm{0!REihY6gVEeG)>}+;Eo5dEeciCKSFL#yu zg&W1c&A-cUg`Rqa_Y}qm(}mB36GBJPQw$b|i%Z1&Fp~J$rrE|ytEKhQCh5BLvg|Jp zki+Gb@*eps`Lg_jd|$4Mnxhv`7epc(>V<+}#2JF#M~l!AbR9KR+A2uttqfI0C}WjR zlwYCsO;vZ*58D1IZnL=-(Fk;;75M_`0e6=v?iDT(1NpUZLSgMfW+Ck4Co_^xKi#M z_Y805Tkr+^Uj7IE7yd5qD!d|u2>pb&gsH+DVT-U`C=z_dK4O-X4KhA0U6h*0&E?ke zPWemuXZeo&P+kqP%mZl_p)b&37@^OiOCZ;q=q{?QJfl3Pv{O1O?g|ZU_ECbBFeOq+ zg?6VaQ(=6{Rmzm_lwXv_Y76N7L)0WSO`WB#&_=3n;LbrO0X*Z@TlfsN=mareQ$Jl?fXINM6Wo`%;4euR%ErWnyube zamQysuA(*6I?$SGRmmP?Kj`xj0a-*IhMs?#45bEAgQ+Ykn_5b(q)x&N z=SS*S7=OFcB+b#o=&^Jf{SG}HWS&QFgSp24u=nM0Ii>yocXgw*h*F`rha#z5XW!3> zLI@!v+b9)9DJ?2Onk36uLueiuA$v@W8QHfO5o5^+AtT0;ne5^BIVVi!dA`r{{9do$ z_mAJ})#Wvs?(LlGbG<+B<+^Y8X-5tw1Iba~GqQmXz9UP>3*dTsP<^NYR3a$*Oe%xg zMD3y~sS)%O+7`HQD3i|2W0o-+nVq0V7n!R}Pu7pk1}5CYe$CC{zU98-Hge~^I4B&0TKyrs5Nd^C z;y2Ph4*?cfD{TPQJS$z1%;Z$rR^gN=K)_-pTlobLa9`1R z8R>kXW@g9=*?_(-M5obtbPYX1FOWUv2;8{<%fjsO4)`p5H(rKU;LmXr!W5hsA}GQe z`Xhw6M>qi>lN?A}Xs8$q9Nl>vEY8o|% zT1n+n-%~$P2Iv`y?m_#}GwBR^DVt~2^DSq_)4afY@xuX6zw=M|9KchakPqxp02OKkN+N+WW{O$jDsczk=@*SN z?}?AaKgE}#v1BG$NjAVGZch#-sj5YAfk1Q43@bYM%#He2q*%d2o!u60sQ=hj+&#fk`LhJTZnC zL_Q|dsYTR&>Ik?-Q_$87dI^1yK1QFSCD2k;HJsSa?3e5aHi&)2HsS2KwlHgw^MWpl z;GzLROSx=7(ME17x0Bn)9pa7ynp73J!#(7lfwNIDWyRY9s@n0+yc^$@r+As~!Ta&S zd^jJ)$MIA68T>4MKEIe>&VS2)#~1NOpf5|o2R-DQ33i~;Uf?mJg~`G+VV1B^$QIT> zuNDg>phSNPuRx2si$UUgU@2p%o#ZX`2GorQrLF>gdN19O+bA8Cbl{s8ih5BQ^{tjh z$O73RC*+I}Vvr2pXc!7YNoX1%FAwFTL+CiVfWomTsMsm&5@w7y!7XrK{3`wgCy5@! z3E~29&>hGi&j<^0Hz|QzNuy3v=YWT5nd59vt}o}$H5U>gXABax51O~>G;?9EBqbceJ-(( z$RchNT}T8tp8|O!ojgxoCa;nGs6o_FY964tih4x7ry{^3C)26)pMc)+p#I6sVrDs0 z&b(l18DrKI9BD7MKk)up;KP@!0g%jdrhFSveLsF6Ka8KqGr~Y&s&G_jDs~a)i#No( zqMg)15~LAQ1o-q-(sr0d8~F;%1f$-ZTqaX1&sP3C5DD}l*&z$`2QXK}z>6}*|yR`3x92qT0! z!d~G4^x-SP1bE#VoT@uG)qL>>@ecIgTd}?5E)A4^l$y!oMu zoK@Hr&;>L2dHg8wP~QM{k3jy6fg?Wzm+U76Du1ZR)ai1Kv_0wXQ7O8F782QnIb}~R z2VEaVkD=$&i|OU`RptiM1o(R|%>6yPh&#*OfIh3@9%*jHpAUqdxy>61ZG=vOAoK!n z9xF^2RtlSduWx~>nSr9ah^bn zsnIzS!UowV4A>tpvM>m4UKVV3k-EWcX@~ z$GvbL=p8?N7rr03`zBrqIqV^BNiakN5ktfiNkj_hTsn~nspB$HPE-(;L>1vn_9I7= zYaxFeATN?{$);3G$_*012FO{rsMa(~kA^fjot{l+(XOEM3bTaS4J!X9^OAYXbYx|~ zcnUj{%>aknifhkp;&yYt0VBEcJvH8$!SCU(LbWV}=D;zc5CB@qOhn zmw`Vy@`Yr)U912;Pqe83!RJ0{@6!RvP>2qKVJMyw%D6D?r2>0}FD{w3>pfbJrP?&+W&`R(Ye1(4CTXqV=!Fw*1vLQj2 zOO|pgxu@J$_LsNIKgsvNdp(sqDqkuY%6a9wmJRFprYUNMY>_`2iRPdMXep@fFUWv7 zLppTF5JqAwCc-)UV7{0i=8x^g_G9O;=6E|Cht-^iufuLy_4QUmxGq-7#6g&I}^bqFx!}2%n!^1rUl#fgT7?2N7-|r zF&12N&JWhBguBW$=k0)(z66cPhqW>j7-5pI3{u)Np{?jDdO-)*imfFY5`Q+h)63Ex zSdY`P39N;#!bn%FaXpJ>1Fv31O|Wp#zyiQ!W4t|}G9Ax@M6r$dfjCUOCq_c`*O7tL zC@PxT2|RwCYC+pW&g@PPr$fLEd`o{vU!$8dt(jD21ycgb*obxDoVc!>FE@f82b`JB zujPLR-MYkoA-Dmah6!H@>x3=9JbwyKz&V}795GKk4?1Ncc}O_q$(?Wjl|X90&UYm% z*)i{p*fwjS%@&5Q= zJP>?jE~vUU;gAT2oshFD})?SiFZO55s4Hy{~yGIA|~a5cYOzWjse%z4HC^9c^;_t0p+MttUOYl zYgx`%+bc967vzS*P!!sQ_MyAz0eXTw!FdHkik*PTcpsQc3O*CJCE5@!;P6GF8}$Du zBAPHIEy;EyO-is*W2p0xWu8;bVK(ZE8f$xIp5V8>=brI8!2%L_2Vn?wLI#}k0f7;R zK=qf3yTEmKh1#n*y6$``P$ZU#eT!`Z4^sxo!VcVW01-zlA$Ag_kf5wc57LiJCZCfQ zR41xCVE;DNlyzp)xE0(ws7eL*m>Vxvf|GhERYTS*SLf8 zp*J57xuZW*g>=+-N^3bGV(gCf-}{R zN}yC!uLL{~p(oMPAcYjtMG@<-;bXSSuP*6?gFUYD9CRZBw2L_aRB(ZOlh~akN8x2E4j&CWfD|B z7V>%?I65aqQ7%EQxT$$JV_g>fIE2oiSLhui3KA2rBiLE&4W`2z;WfC9@E~wd^dO=e zAh-zpTovg^$*|hv!N>hX9fJ-XLQkew&`&{~2XdB>lPdXS@bh}`UV&1ov_m>C>10Cg zE{Dmp<-_ttxlAsXE96SKN)A#&m2f3eiBaNVg;F3prh`8-*8W|LgnFVFlz^sybN&(C zK~<0%ACk|=c7VOk)MzT4T0*U$a;W)?dgKIlA*A10E{ad)H}Tu~?|B*&bT0J$ZQ(I! zN(WGt@#180gSbU35Cf$7peeVd7QoPs;0?>*Y;2WQ;BkwUbDC!});?Tt9aSO+(8cHY zVL;_sNSsZnX3zsqs95mfYw3LY3Vnl47H5gO#h-vvtR-8?L2{G~lC$Ir^G6aXvA~;N zlFx^I>u@Pj$_3`h2Oceu3Z>8Y`Du zb{`{f1&_w#Aw?X+{fVK(STc%SOXX9u=>EX@Gudyn{lAm!I<6!1!VrEWKNnJ%y3oeD zhw#G{kth^JpoypmGSM+q4C`NtE}}A24s2ZswSI`Iktt?@S!1@CgXR+ca?0UYBo>3k zV@X&FmWrigG_c(;;wMN?&cNW$Nn>gp)UvK7Sxi^Wn4s2$WP>ORHMJ?L0EkxrqP(mUwAG{#D7 z5nIfL3!6nZX$bhnrr@f_Ls}}5kH`;X3#Em^D{;ye<+7q(A)%tK$E?s-C=*|SHzN{= z9;6*`Xm9Ym1scEoO5did>3z&K<_*&ZUcU!qfg$WyY&iQJtm9?&I{SdtbCz5Oa84DF z3YzfN{2RWB5CX|#p>Rkz2C4asFhxukpNO-;E#8zG$<5`_aw6o>WzhHg<+JiFI5!{Y zwHnQP80*w)hYyAIFGjT}0XQ@QeBU+VC1D1BT%-n2BdA1bF65L`)N#g~bz*ro5g4fp zFi|3x${pp-a9d%GF7wyxs66LX0MC$u8tR@+6rAOzBULq>s_1bQokUFSa*(g}uX0 zfMeg{+<{@7h5Le|$cTQRkaNX_VwSiXsxvv86zJOc>=W+(JxCwNiSGeN#F3exeTT^tke{nTeLGX06hU2Qeq*fJmTYS_ zf=%W&1H)Yh=X?)xPD??7JltDIhZOpQP$V3#=S(>*Iee#i2NRvMDx260P`eCf6Vp-l z13oU1U(4?y>nztifQj~RAP)m7+T)#ZdsvrBriyvUR5LY@ziJsBt7lDF3)Y&oWgS>Y z)&TxK6mXi)Zep(!Ak!rbJu_)sRd=$ zgis+|hy;#{2aKf%snBPc!hB&7WTkAO{(i8^t0vm#30*-4S<;L2CH=`jGKdT(W5^^j z75aJ+nN8-B`D6jPmpnuklci)Cxa}(F^OxYVO~GM1fHJs(vu43n`+}nmq=LZf#8638 zDy7yp8)}=c?VlZjik4DkR0UNr&LaIa|(wbL0%1Gv~^=a|jfM zTp&Lx>?CpaRovlWLq85>p~$1sL3Xriqt+kkqLEG(W>IKj4Icv zs-yL^Bkc~=B%zjmph!WVKBbTj341Hl@ers~F@1)|(nvOjjc1eC6gHjB(Rfu| zn0NRp31wFm-3jOWTW5y=6M6lgfvCf%&R{^9;ajzQAKKppWzMEIbF##q;p3_#wO) zFU89sGgjbLcrADcYXU*~iXoDS`9v0xPZSV^L=kZeIIjwPjgGX?aGVM~mq?5OD1s{bh`wUJxEB<$3>4AgZ+S&cD*mv#f$~T>NDc)JjD(ermy@*B&XIE=L*|3m zE|3dh?TbJc&%pZE&vYslY!xph2+~}hQd;LXWAxg41O`-y_Ws+LB0&Haiy7mI5 zbPc0nG>nGPFd9a~Xc!HnVKj_}(J&fD!)O={qhU0RhS4w@M#E?r4WnT+jE2!L8b-rt z7!9LgG>lIJso!pGY^+0Rt(+U1xn=lfys$KCVw{`SswLdi+}OwnGe>5P8+EZVF>c*R zhr$~-?b6stZZlX7KLd1QbaA?9?Q81PuUC`R zKj@2kuc^2F<%wl#b!y5kKgTYq)m5ur@9R&R<)+y>p)`}n@ZZo}6JsM|W9#Wle}9v5 zqW`c5eOD!3Y+NfK%TH%))CkUP<~;3OO@`My1?7DLsq>583b@D7d% z!)#Ft_2wov<~|9rV}d76j);s5!c_Ldlq;W&o0G2Gq~M;J~ZoS-<0 z8;-uJcd|nUe>_}M8{5IjQNa`A!$J(+(Xlbnv2}+-$g}Qnoj%>I9?&rO;}Hjk#ZHb0 z35$b68$1lXaFk}$zJ7s>8tF{ZjGDnh8#OgfGcwZc-1>d*fW9jnTQn_mNnYH3s9SXT z-j2t-<0c$A=;=TFjqQ=i3%re7ybIUf?om_q!_=ekXWCyW%+eXZ==bPg;SWB}6G}$+ z5YGFY^==VopEfU|u*=UY+is0*)3M*Ab~~}_Zw3Y%58kl(S#S47Nj=tgopbiy%6sqT z-yW(+Czh1=c{!D+Om6z7Iw7-L&imsg16OXo61iq+#O$!nU(Y%cWP7amlwkYop_$d~ zEaPu1X}{(4i#PEpoql`Kr_GFwNB`lmeeQz|zisYhH!b)@_N3-TxBb`ly*ujlU8{}m zYc_`&ekogCRh+WEzpu~xR=0hcEHS?lo}M~td{StSlAxZ`0}k7y98Z3F>hL6EK&sKY znXl2z7ur%fS?TTcwxd@)n>g~!nfO%~uTOiTTzlx3>UkaEjZFdKjT$vEGSYWM&Zzyz z-;q&=Trl>LeFgDU5MZK+^o<%ewbMai1 z;rZdoA+eG5p4+t!QS|}k-OUpoqv6@fMQ?$cemnycQ)H#y*i1c=9{Qv)a#eqCuKxnH z%L7nht&n{ka;()C)bQegBa-#N{?h`pxcA%SBEN2iM?mL*){%Z13SKb zi**BAeLZ~-O4F}{j-U6T#)(M_dculYpa8s4qjT2eQle2 zvp&ZszRwT`4{6r&tX}EzcGL3ZR}Tayn~ylmQGO9h%i@zf0<^stfJcm;PitWo_cp5n)Fk z+s7Am%Wx|<^_#zB{$h`RB>J=qznmYRc+F}AKJUwU#Qv)x#l64fj~{K&`(>Lb(Hw{>6ddu21c5_KxAEy}&g^CPD7N6SA z80nCm)-URB|E6V{q@uWb4L%NqA-8%B-u6R}#>aVRJ)Rin8TVoNv_@w>J=Qp*%U_QT zjtKtyL*eE)kC0%GakytlSS%9j*nmO=!g9OjdencmN(lev*+2#VZI|Qq$gSszh;>$d zY};P)`*l!=z48@ZWceFvr{3K`?||%5|26yljU`mfB?*O#-E@A{3&$WPX((Hc;jF9;Du2KYur1A5S6_{qbz?rI?n1vqdY1y zWscp6`@3%Lx_{kpVp6k`W%1>EM&8)ZwDV5-Eopa&tKP6~^V7b^GCMD}NAr!z*FNvlWPwmWSzGfL;l zTIP3N=zeQg&G1b|J6h(rckSKgTKj!R-z8-YJesjHEpt@0R5);LGSS6z>W}3HGn+}j zk8d^NT-ACs)O}8G<;Qa~P92onhldPawLc<$>v1P>#*&JoMUG|q1eDe&7N~0Y2bywk zd*pm)F640MWmIIZ{Y5$dWK0S_=Lvh%vW_RLz6^_vP@CP|(0gKt=SNdvZe#cH4nu(Y z&7p?=VeyI4u@f)>adi*C)r)z@8KTD;65_%P!SMzaJ8=M>#Kc6;$?)Vjc(MkY*qC7T z8XUl4p2)opBQBp_UAuCtfdHBc4bxahr6J%r^wGf(h{Whm><9l#;p9j5o4LE*v<3~q z?2v7p-?Ho%9TyUvXc!bWPUXE1)~bn366Fe~)leLC`sZl-= z<09gNBMrTMKAoS3q2I@EhBXX^ztn4l7(QH891dZajDLJl^Uq%N!;L2OZ~TvpdRTuy z<*NVX*M`s{-@;#4z8uf)^jvY{&*8H=O)I^#s(YWB`2H{N84aj;8QV`vjln%eJo>uz z>_7K*!;iebJaT8FzRL!8?_GK;EA{=K_=+AQOT&lz?>4)B^Sj%n%7HK3Z-y-Df8L_e zIHRQ`@!N4SzF^ua^YX6`v=PtTH*ayG?Sp;3?UTfc{0XnZZDv1rc$(J1b#&`fajpE{ zOf3=K%rT5UoX|OaPqVH+gqwZ8*Er1VXV0Z~JGUFQ{nne&=eN0>j$Irysq2`7=ZuqQ zntoMUh*>;|NqF0>kLfi3{q}bYtTRG-Z8{Kyt*+R$vNY_`sIHUCJl!sv2{y@&jiQ$I z?zd>kp8NTY?|fv`sZfzbZGoL^G&=n|ZF5`{MI!Z5>kO}9+cs0l<~5MQ4@O;>U3cy#JLgGC`B-ae5dE zLC*C!-J!l|tN(IHsK@62JR6nN|EJjiqt~a>b1OGJnA)+X@2Ld~uT(ec_~g!ojo$(o z&FbdZ9Zm{rsJ8}*`YS%Qsq>0DsPMmH-3OCL+^Mqp{tk!k)^0js{>zvyS94EdsVBEQ zYx}Hw^0)7|b&eQvXu+fM+9l2IwE^&V?HA=U)@z>G*K6L8xg*{e4jaT;CA_%rU7mUD zm+I+rw+vge{q(}iue$Emw>aI$%c0BElH5fd+{f-7u^~IH|BU{_T@z|jR!0cHMY!!`!^ebM=k2I`@N;Z`j5I11E0k>~kmG>Fq1G)SF)&O^o&UMf7On zHprv%JqM9eZJYO3;go zKNtUbYumGvmwkG%<4z@64Zl<{yjw!$>h#nZqk4FiM?ZB*MQM$j0_*Y@?^*9+gfG6%l~#-)^mD-^_7H~Xofy~#?M_6 z+Lkz(&c7LvwUJquGc~nh<*mm|ztLv}+s7FfOP_V3id@Xujq^jkwO?nteoMidlJR5G z{4Ra*Yn!W2@1zTJ-3H7WvB+q^sg0AZXLK@2Ik0{Dw8Ph5H7aW3n-g*GP@X7u)5$lN z-#uQLHRX$>Uo(8E>#Vze_Wh@ic$>F$<&2vpPx2C;JZbs7*S(jmV#_?q)*A{p`c2=zZ-9j~ z^eMW$fnIPqb@G)~p6g4dlOA(EQt>;e$m@TZDP!swGy;Kd{hUF+{4W_aBqr`J!)t7e z+P41pZ2R}T8TE;1E%d=?^x9FmBhWB36b-R617ME}>pCuCECQd3nta&u(c3P(`%CML zt=}w|aP(a2_=~;{?o(TNA{V<39|$)xdR+A9$DJIf-KM@0StmLks0-?x+bP#2qeHzA z{n?XZLV^j8ag-)BWIZ)-MIHZ3HE^mE7S-5%6c*$EGo&g8XB!-r_heQ(-|YTi!1>wP@)y&3V_+i;OKlLQ^vq<*k;Ky;I~mu8tw`a&*)#FT z?lU}3*H$f1s=x1U;ia2%vA$5M=1sxMjUW7<@bd)!5{>&;GQ(4)wNXuGqKNwjpX8q1 z3r(&ZbA7?vs#eT=VP#KB?w!I(&sOq_dWIN7F}UD;ympwT~D;JmWh8E=Kt6Xauid`wQ++<0n!Eq|%P zUX#~qH`nn#KRWCC!Yzsujq}@HMC?|rDdCIwS1O%sf6lOGcE9wrc}IiGTB7Hyo%n0b z+sV6PPbdZ-Y6?zXFT@+rE+}mq5;Uz#XO8V8DUMmJddDX(^_Y0su!#lK2G3(+WHe|z zIYbLUEPV&W!03Vk0|BJg0goZ54JHXs37pJ^JjkQ51~N!IZbLo;WLZ%IWrRi+LtsKw z@t2j2Xsla*E&ojnmyb{7Jlz&ww6d6`iIG9W$-lZs#_f98$<8T)Iv?cbDD9ZrxnQ&4 z>wBy||97qJ5O}v#-KdE(RaGQe@#|gg`)wJs^K}fl4xOmb*;aQ+ck?nPuTu^G?!Oe+ zeZcqJjw`!&rG&|CJrK&nu*!6u#5}E-W_6w0zuNY2DOMX^;rp*^KS%b_LOz+?Gr4Kg z70vR)qBD1xXncQtnQit_kry@7wjcD9a-Xj$bKqaIZSe;aAD5TC*EF1;S}x_%coCPp zw4$s?z$X8_|D{9u_h-!WO}t)za*^gOW!Ce4B5_NW{OedEqs~A1fav;tlU8nCw7GG{ zM}_H0lXCaU3w1d^Rql${Wqtp5_Eas+9XdjCk-e-6&8B}_7dA0*8#FPoBSMeOu!->p zusr?(N_j=J9)rR%2!@nGVhtpa(*rkR2%iy{9N;pnhWwzuoS}h{iJ_s9fstVpMsk>W zc#bERam5dgdGVa|ZM zftXC?vh!=o+Nx`>8@qojf9AJsi;d%&bKj*VG|k!&DA}mH)b+vY;)RB?vka6bG}ukD zRQ*-nv1QXHd#e*Or#Nn%;Z>P?t^FB;zeD${+@d$9j_U1MU-sb5Mg2+}^E1;X{;v-D zx!IO!(`|#D!LyG4U+Z+4Klj?NS@owrNF3V8YX5A_XXDcj5)z-+-`n#}o4-kgCB}FA z#U%@C<)*IA{Oj~$o=lT$(~LXsrezl%yggqm#?kv}l2lIBz%W6MxuzM+n73Ykyvz zLMruW#7Sh*0%wq((Y1iQA|91vxp`ga4=q4JDL7Xc(|WW^Y1C z)$Ey!b`+tpgvJpXPbh_umXMB6DxvghV=@RC2u-PmnFv`3*$6p+Wf7W2XeOcAgm@+A zRvUv5;PME)i|-2wy@&6M3B6A!pU^Tw%Ym;T^gsB%lF%pkz8Y--q4oH_3GHUIUsjuc zE1~U#b`aVHY&W4jguX@pAfZF}egy4NLdOUlC-gm`lfZu<^dq64(08Hz8SO74+mp5fzK4>w6QM9dU4V5bZ4Z3!N!s3oA_zqiiXs$Es2_gsPuc;56odwe))7Pc zNxakMGVpxq11`4$@!yHqr*X-SBc`Y_F4d|J62o>=y6C^?WYv z@>}&JcX34Fkg%N_zDZkX2$|M(=SLsLeY3wu2iuMLUn-I|?hIUNY;}Fg&%x4}MdN2) z=yG9T!#(dk4BUP(xZ=k8E2mm>R~P&+OZxr{Ny&*#1&6ZcR90Skr}*0vbI_6r$yayX zf96>+w=(LdRr!w^ciS6s_VajEQI4_eaNC!oxAsdPxnbPMqUR+~Wr?1b7w=7e`*EB{ zV(QhPn9QJA2C1k)t1UJAK%y+>6)9A z_sfr;y`S^iERApbL$6Hko)USAFPTH2eyT@dHRaQFNKlRN|zo@J?H9w_kMH}neJKsqt z-@a%2hWVud%Rer!Y&_?Sy`@iLm1pm*zg)hpaYoaM4mRD?^Dzy|W{;SAcBDUx!{U7X102BzpBBx&I>o3Z8lh1JW^*rcQJXy z(u?~xulN0S$>hB$&ByK-9skwP0au?%CP?FkdbHQ(X2niuld*5JXTkK5KFXq;6DJn- zv-KMCO6c$nj`fHbetpFAQzb2$#qKV!E*ulmB|Xf4(dA8x zW}Ug6Fu%w6l~I5Gv}S7knIBDGSzcc6E&JxClUpX_?7q5ZbYgI7@#vmUO72{ox~AcmuI+z3`0Q5UuT#ggzF4$+@s^p-ou}XI zbEt84=wGTKt3KO%vIUuomql??A0_PxocwWOe*Hz;6Lue6y{hqtArDL5?eR*|pNlRBSN19?nQ-*X zbDRCWpYy%UntPX%qQ3p%Sk67y*+FX_9cz1C>L?vuE^ikx@QCW`+#cN8c6Uzy5jdh( zkIXMFUrh-0K7J-S#<7rd^QlLwhzHq1ERB>mLDl+K(VBdOcq@O}=Cl>!uOSZ|^b+Da zv{S-JzO07J(Dn!w@_&RjGf;@{K{m?EH$-mF^6v>~30`R5?PeFUMlhDpirjJN|Jof8-ksKTJ z+$G}w5v{Sa5T6D)N|D{znK`G05MKb?OJtwhXq$Ad*-wn2LR^hjCDNbW6vwb#-)^!Q3BD7|^we+r8 zPDL&Hydm;iIoi>p^?Jk4r-<~~fObGw&2h9sWFJ4s2@9-Qe?{k-{q~{AA9|v_RbPm= zX5&Qqr((adMRAmcedq5z)$s$sXN&xHDcTf2A?^kFn?-uYp_Pi{_^@?}>|YOZu8ZU! z0iGiA+fHb|s9LWdS3Hg~_6NSF3&jiU6xTscX#k(w8vX zC|;zX0@^^%k*@rHHRB4NQ910sT_B_U;Tp;~8o0^>dgju8Fz~lp0l!H5>^`>56LO#r zj#Ez3nBuO_XumD+zKtj@g#c!&LG}6kM)Y4o`@X=VI)Hx?)sx-hdUv7rDSk-T)g1U= zu%|kk^6TqS+!O09o=9=#!%w>ce~aQQ$NKwGeWY+G_NKA69>w!TdVbG=Uxc4-!0Q>n zJy}ZSv;As;{bC1;68jY-p|}hcPX_p@rb}NG2SiC&OzALt1oxsbXj~bV23nnOrJ_XQ+ z)iW*$_V)or3V_e^r21$@`b=(!dGV-l0`^?!N98E)Q#mUb-X8O6DKG(YR!OM*@DFIe zA@KX1seNRhQ2ub>Wg)O94S=6473$fw1=UA}_cs}EV-qSTA9iEsLUY*7ib9OZ zpXm+zLq62y7D(Y&Fc`~w1F&8v^lSzGVXa|@YeKu7M!Xl{K-&iX;+BXPJbsvghqQzL zTd05p;BA8`zqXL}`vM=^9QH9&{tm#`_+x)XcDqy$a*$^b)?76FQ1K>}lLh=!%&Ugt z%+LAZJYI3bI1L{9coC^~6hJyGl62ln8Mt#I}9__Qg7la{C7A_U$hiy1F6^KXXw_GUZ)l>en zNZbK|ICtPDOwUSI7sXKien?DBLU1nNe7TFfmy7zxdW!a$pR7P0E*8aa57gm`v8WG$ z55{>Hj{5dP;A2=G#^e8=n0Hq$x@6;p_npJ2Tf*@NB6coxW_9C6+GpMSh9!2pS7|w-rP$9DCK%BFM2WWpHaDV72 zgPyED9}E8CqgX%iLilsRDWU$yeE3*v&Ru~0+231RLLZq(pU3d$0u&mh@SpXtPa*6x z9{lHF2d&5s3*d+0qWth?N31Ii^#kO83I8cH3GZtkAphjU->{wBBo2BaUfBJpy)Wt< z-0u{?=lejQCCP25L)0z zP_J4=_3B{wvli!34DgOPfAfo>59}6=I4X1s?-z3+rx0>jT&xR&{~IX(Uf}z&FAC(_ zZoo^h?^@CM<$ygENO)UE-y8QYr}+K_J6mDr-oP7nq35g?_d6Nz z-*FB~QBdF-!(H^D@;OocnT15n@P*)5?U8;Vc_E}we z4(lxv<^MCt4_48AM9uEk*moW9)ofj&`ZKte^KmueU0Oo>fxvg6jw(hS#qKp}EWV%* zyDwO~Q2r%bg?0XH)Pd@GLj6OakE~LtPfye{G8~vP;1jT}2e_X;2kt=rFBaVka!`+{ zr&4{cV1GN|yw1me-be#~Z{#H|O<0!(Bfb=TdTDBvkL9}7`8vUmQCEs+OMm$LnR z%=MlR{SBGTO&=np=ZBV6_YHWm(YEivQfQ67$}}Ija@j>o3FpMWXlEJJ8>S zcSRPb3GDtQx<7`=;8&vi4hbWI`*Y3bLlI^lyek&qU6IvYy%2Z#h&z@KrR>}k%{v

      Настройка
      - - -
      -
    • Список валют
    • -

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

      -
    • С
    • Начало периода загрузки курсов валют.
      -
    • По
    • Конец периода загрузки курсов валют.

      Команды:

      -

      -

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

       

      -

      См. также: Валюты, Валюта, Общероссийский классификатор валют, Общая информация о формах.

      -

       

      \ No newline at end of file + +

      Загрузка курсов валют производится с сайта РБК.

      +

      Окно загрузки курсов состоит из двух частей:

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

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

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

      См. также: 

      + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl index 34c3db2a6..4976aea30 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура заполняет табличную часть списком валют. В список попадают только // валюты, курс которых не зависит от курса других валют. @@ -33,4 +32,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl index 5526a5a06..7f3b56598 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Инициализирует колонки таблицы правил регистрации объектов // @@ -102,4 +101,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index a579afd4c..428676ed8 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -15,8 +15,7 @@ Перем БулевоЗначениеКорневойГруппыСвойств; // булево значение для корневой группы свойств Перем СообщенияОбОшибках; // Соответствие. Ключ - код ошибки, Значение - описание ошибки -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -688,7 +687,6 @@ КонецЕсли; - ТекстЗапроса = ТекстВыборкиПолей + Символы.ПС + "ИЗ" + Символы.ПС + ТекстТаблицДанных + Символы.ПС + "ГДЕ" + Символы.ПС + ТекстУсловия @@ -1234,4 +1232,6 @@ ИнициализацияРеквизитовИМодульныхПеременных(); +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/ConditionalAppearance.dcssca deleted file mode 100644 index ad60aff3b..000000000 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/ConditionalAppearance.dcssca +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - МестаИспользованияОсновной - - - - - Список.Код - NotEqual - ЦелевойЭлемент - - - - - false - Шрифт - - - - false - Видимость - false - - - Отображать - false - - - - - - - МестаИспользованияСсылка - - - МестаИспользованияКод - - - МестаИспользованияМестИспользования - - - - - Список.Код - Equal - ЦелевойЭлемент - - - - - Шрифт - - - - - - - - МестаИспользованияМестИспользования - - - - - Список.ПометкаУдаления - Equal - 0 - - - - - false - ЦветТекста - #C0C0C0 - - - Текст - - - ru - Не используется - - - - - - - - - МестаИспользованияМестИспользования - - - - - Список.ПометкаУдаления - Equal - -1 - - - - - false - ЦветТекста - #C0C0C0 - - - Текст - - - ru - Не рассчитано - - - - - - - - - НеудачныеЗаменыКод - - - - - НеудачныеЗамены.Код - NotFilled - - - - - Видимость - false - - - false - Отображать - false - - - - diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Form.form index ba383c23a..5ab612275 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Form.form @@ -2082,7 +2082,7 @@ ru Далее > - 3 + 1 ru Продолжить выполнение @@ -2104,7 +2104,7 @@ ru < Назад - 4 + 2 ru Вернутся на предыдущий шаг @@ -2126,7 +2126,7 @@ ru Отмена - 5 + 3 ru Прекратить работу мастера @@ -2148,7 +2148,7 @@ ru Развернуть все - 6 + 4 ru Развернуть все неудачные замены @@ -2173,7 +2173,7 @@ ru Свернуть все - 7 + 5 ru Свернуть все неудачные замены @@ -2198,7 +2198,7 @@ ru Изменить - 9 + 6 ru Открыть элемент diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Help/ru.html index 8e7748f9b..f390e294b 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Help/ru.html @@ -1,3 +1,19 @@ - -

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

      -

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

      \ No newline at end of file + +

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

      +

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

      +

      Командой Заменить во всех местах использования можно воспользоваться из окна Удаление помеченных объектов.

      +

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

      +

      Замена элементов

      +

      Выводятся все элементы соответствующего списка, в том числе помеченные на удаление.

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

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

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Module.bsl index a1d0f2e7d..84afbd16c 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ЗаменаЭлементов/Module.bsl @@ -8,11 +8,12 @@ &НаКлиенте Перем ПодтверждениеЗакрытияФормы; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -113,8 +114,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) @@ -123,8 +125,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НеудачныеЗамены +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНеудачныеЗамены &НаКлиенте Процедура НеудачныеЗаменыПриАктивизацииСтроки(Элемент) @@ -147,8 +150,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ШагМастераНазад(Команда) @@ -189,8 +193,16 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + +КонецПроцедуры // Общий обработчик подтверждения закрытия &НаКлиенте @@ -331,12 +343,8 @@ МодульМенеджера = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ЦелевойЭлемент); // Проверяем присутствие метода в менеджере - ТестовыйОбъект = ЦелевойЭлемент.ПолучитьОбъект(); Попытка - // Тестовым обработчиком должно быть событие, у которого на один параметр меньше, чем у тестируемого метода - // (первым параметром передается сам объект). Например ПриЗаписи имеет один параметр, тогда у обработчика должно быть два - ДобавитьОбработчик ТестовыйОбъект.ПриЗаписи, МодульМенеджера.ВозможностьЗаменыЭлементов; - ЕстьМетод = Истина; + ЕстьМетод = (Истина = МодульМенеджера.ИспользоватьЗаменуЭлементов()); Исключение ЕстьМетод = Ложь; КонецПопытки; @@ -440,6 +448,9 @@ ИначеЕсли ТипОшибки = "ОшибкаЗаписи" Тогда СтрокаОшибки.Причина = СтрокаРезультата.ТекстОшибки; + ИначеЕсли ТипОшибки = "ОшибкаУдаления" Тогда + СтрокаОшибки.Причина = НСтр("ru = 'Невозможно удалить данные.'"); + Иначе СтрокаОшибки.Причина = НСтр("ru = 'Неизвестная ошибка.'"); @@ -1561,3 +1572,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/МногострочноеПредупреждение/Module.bsl b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/МногострочноеПредупреждение/Module.bsl index 69acd2c5d..40b608e19 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/МногострочноеПредупреждение/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/МногострочноеПредупреждение/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,10 +32,13 @@ КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОК(Команда) Закрыть(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/ConditionalAppearance.dcssca deleted file mode 100644 index 4bab1ef30..000000000 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/ConditionalAppearance.dcssca +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - МестаИспользованияОсновной - - - - - МестаИспользования.Ссылка - NotEqual - ОсновнойЭлемент - - - - - false - Шрифт - - - - false - Видимость - false - - - Отображать - false - - - - - - - МестаИспользованияСсылка - - - МестаИспользованияКод - - - МестаИспользованияМестИспользования - - - - - МестаИспользования.Ссылка - Equal - ОсновнойЭлемент - - - - - Шрифт - - - - - - - - МестаИспользованияНеИспользуется - - - - - МестаИспользования.МестИспользования - LessOrEqual - 0 - - - - - false - ЦветТекста - #C0C0C0 - - - false - Шрифт - - - - false - Текст - - - ru - Не используется - - - - - Видимость - true - - - Отображать - true - - - - - - - МестаИспользованияНеИспользуется - - - - - МестаИспользования.МестИспользования - Greater - 0 - - - - - false - ЦветТекста - #C0C0C0 - - - false - Шрифт - - - - false - Текст - - - ru - Не используется - - - - - Видимость - false - - - Отображать - false - - - - - - - МестаИспользованияМестИспользования - - - - - МестаИспользования.МестИспользования - LessOrEqual - 0 - - - - - false - ЦветТекста - #C0C0C0 - - - false - Шрифт - - - - false - Текст - - - ru - Не используется - - - - - Видимость - false - - - Отображать - false - - - - - - - НеудачныеЗаменыКод - - - - - НеудачныеЗамены.Код - NotFilled - - - - - Видимость - false - - - false - Отображать - false - - - - - - - МестаИспользованияМестИспользования - - - - - МестаИспользования.МестИспользования - Greater - 0 - - - - - false - ЦветТекста - #C0C0C0 - - - false - Шрифт - - - - false - Текст - - - ru - Не используется - - - - - Видимость - true - - - Отображать - true - - - - diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Form.form index 324a17074..15a495a14 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Form.form @@ -2771,7 +2771,7 @@ УстановитьОсновным <key>ru</key> - <value>Объединить в</value> + <value>Отметить как оригинал</value> 1 diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Help/ru.html index eb0fd044a..c18612b37 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Help/ru.html @@ -1,5 +1,25 @@ - -

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

      -

      Если пользователь обладает административными правами, то вместо пометки на удаление он может удалить элементы непосредственно.

      -

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

      -

       

      \ No newline at end of file + +

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

      +

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

      +

      В списке элементов для объединения выводится:

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

      Объединение элементов

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

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

        +
      • +

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

        +
      • +

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

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

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

      Просмотр элементов

      +
      • Выделите нужный элемент, нажмите Открыть.

      Просмотр ссылок на элементы списка

      +

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

      +

      Настройка удаления элементов (для администраторов)

      +

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

      +

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Module.bsl index 168afbdd5..b2bf44cdd 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаСсылок/Forms/ОбъединениеЭлементов/Module.bsl @@ -8,11 +8,12 @@ &НаКлиенте Перем ПодтверждениеЗакрытияФормы; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -82,8 +83,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ МестаИспользования +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыМестаИспользования &НаКлиенте Процедура МестаИспользованияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -132,7 +134,7 @@ Код = Строка(ТекущиеДанные.Код); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить из списка элементов для объединения ""%1""?'"), + НСтр("ru = 'Удалить из списка для объединения элемент ""%1""?'"), Строка(Ссылка) + ?(ПустаяСтрока(Код), "", " (" + Код + ")" ) ); @@ -156,8 +158,9 @@ СформироватьПодсказкуОбъединения(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НеудачныеЗамены +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНеудачныеЗамены &НаКлиенте Процедура НеудачныеЗаменыПриАктивизацииСтроки(Элемент) @@ -180,8 +183,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ШагМастераНазад(Команда) @@ -250,8 +254,122 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияОсновной.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОсновнойЭлемент"); + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияСсылка.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияКод.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияМестИспользования.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОсновнойЭлемент"); + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияНеИспользуется.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.МестИспользования"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияНеИспользуется.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.МестИспользования"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияМестИспользования.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.МестИспользования"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НеудачныеЗаменыКод.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НеудачныеЗамены.Код"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МестаИспользованияМестИспользования.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестаИспользования.МестИспользования"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); + +КонецПроцедуры &НаСервере Процедура ИнициализироватьОбъединяемыеСсылки(Знач МассивСсылок) @@ -410,8 +528,8 @@ Элементы.ПодсказкаВыбораОсновногоЭлемента.Заголовок = ФорматированнаяСтрока( НСтр("ru = 'Объединить элементы (%1) в ""%2"". - |Все остальные элементы из списка будут %3 и заменены во всех местах - |использования на ""%2""'"), + |Все элементы из списка будут %3 и заменены во всех местах + |использования на ""%2"" (отмечен стрелкой)'"), МестаИспользования.Количество(), ОсновнойЭлемент, Гиперссылка @@ -634,6 +752,9 @@ ИначеЕсли ТипОшибки = "ОшибкаЗаписи" Тогда СтрокаОшибки.Причина = СтрокаРезультата.ТекстОшибки; + ИначеЕсли ТипОшибки = "ОшибкаУдаления" Тогда + СтрокаОшибки.Причина = НСтр("ru = 'Невозможно удалить данные.'"); + Иначе СтрокаОшибки.Причина = НСтр("ru = 'Неизвестная ошибка.'"); @@ -727,6 +848,10 @@ &НаСервереБезКонтекста Функция ОписаниеМетаПоСсылке(Знач Ссылка, КэшМетаданных) + Если Ссылка = Неопределено Тогда + Возврат Новый Структура("ЕстьКод, ЕстьВладелец", Ложь, Ложь); + КонецЕсли; + Мета = Ссылка.Метаданные(); Данные = КэшМетаданных[Мета]; @@ -790,12 +915,8 @@ МодульМенеджера = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ОсновнойЭлемент); // Проверяем присутствие метода в менеджере - ТестовыйОбъект = ОсновнойЭлемент.ПолучитьОбъект(); Попытка - // Тестовым обработчиком должно быть событие, у которого на один параметр меньше, чем у тестируемого метода - // (первым параметром передается сам объект). Например ПриЗаписи имеет один параметр, тогда у обработчик должно быть два - ДобавитьОбработчик ТестовыйОбъект.ПриЗаписи, МодульМенеджера.ВозможностьЗаменыЭлементов; - ЕстьМетод = Истина; + ЕстьМетод = (Истина = МодульМенеджера.ИспользоватьЗаменуЭлементов()); Исключение ЕстьМетод = Ложь; КонецПопытки; @@ -1738,3 +1859,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаменаСсылок/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаменаСсылок/ManagerModule.bsl index 1cb7decb2..4427dfde0 100644 --- a/SSL/src/DataProcessors/ЗаменаСсылок/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаменаСсылок/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +#Область СлужебныйПрограммныйИнтерфейс // Возвращает имя события для оповещения о замене // @@ -9,4 +8,6 @@ Возврат "ПроизведенаЗаменаСсылок"; КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index d4a52ca99..000000000 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Журнал - - - - - Журнал.Событие - InList - _$Session$_.AuthenticationError - _$Access$_.AccessDenied - - - - - ЦветФона - style:СобытиеОтказ - - - - diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index 8878299ea..c3d7920e5 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -2714,7 +2714,7 @@ ru Установить интервал дат для просмотра - 3 + 2 ru Установить интервал дат для просмотра @@ -2739,7 +2739,7 @@ ru Установить отбор по значению в текущей колонке - 5 + 3 ru Установить отбор по значению в текущей колонке @@ -2764,7 +2764,7 @@ ru Отключить отбор - 6 + 4 ru Отключить отбор @@ -2789,7 +2789,7 @@ ru Обновить текущий список - 8 + 5 ru Обновить текущий список diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index 242cb97bd..93b0de768 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -52,8 +54,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьТекущийСписок() @@ -120,8 +123,33 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Журнал.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Журнал.Событие"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить(НСтр("ru = '_$Session$_.AuthenticationError'")); + СписокЗначений.Добавить(НСтр("ru = '_$Access$_.AccessDenied'")); + ОтборЭлемента.ПравоеЗначение = СписокЗначений; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.СобытиеОтказ); + +КонецПроцедуры &НаКлиенте Процедура УстановитьИнтервалДатДляПросмотраЗавершение(ИнтервалУстановлен, ДополнительныеПараметры) Экспорт @@ -291,3 +319,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 34df86909..1dc380275 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура заполняет номер картинки для события 152-ФЗ журнала регистрации // @@ -65,4 +64,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl index aa9dd6213..6c48f54f3 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -47,17 +47,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДоступныеВидыОбъектов -// +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДоступныеВидыОбъектов &НаКлиенте Процедура ДоступныеВидыОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ВыполнитьВыбор(ВыбраннаяСтрока); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -65,8 +66,9 @@ ВыполнитьВыбор(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаСервере @@ -140,3 +142,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl index 7ebd038b7..20bf6f2ae 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -21,3 +21,5 @@ Заголовок = СтрЗаменить(Заголовок, "%1", НаименованиеУзла); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form index 7ca7149c3..a0b41169b 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form @@ -534,10 +534,7 @@ АдресХранилищаФормы - - String - - + true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl index 7903d974c..783f10d06 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -28,7 +28,7 @@ Параметры.Свойство("ПериодДанных", ПериодДанных); Если Параметры.ВыборПериода Тогда - ВыгружатьЗаПериод = ЗначениеЗаполнено(ПериодДанных); + ВыгружатьЗаПериод = Истина; Иначе ВыгружатьЗаПериод = Ложь; // Отключаем выбор периода совсем @@ -42,8 +42,9 @@ УстановитьДоступностьПериодаОтбора(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -51,8 +52,9 @@ СтандартнаяОбработка = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -60,8 +62,9 @@ ОповеститьОВыборе(РезультатВыбора()); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -89,3 +92,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl index b6abf245a..9399e607c 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -33,8 +33,9 @@ ПрочитатьСохраненныеНастройки(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВариантыНастроек +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВариантыНастроек // &НаКлиенте @@ -68,8 +69,9 @@ ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -103,8 +105,9 @@ ВыполнитьВыбор(ПредставлениеТекущейНастройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаСервере @@ -173,3 +176,5 @@ ЗакрыватьПриВыборе = Истина; ВыполнитьВыбор(ПредставлениеТекущейНастройки); КонецПроцедуры; + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html new file mode 100644 index 000000000..3028fc6a0 --- /dev/null +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html @@ -0,0 +1,15 @@ + +

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

      +

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

      +

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

      +

      Состоит из колонок:

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

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

      +

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

      +

      В нижней части списка приводятся также:

      +

      Правила синхронизации данных - подробная формулировка правил синхронизации, которые были приняты для этой информационной базы;

      +

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

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl index 6fc1fac4a..f7f9aeb06 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl @@ -1,10 +1,9 @@ // Необязательные параметры формы: // -// УпрощенныйРежим – Булево - флаг того, что будет отчет будет формироваться в упрощенном виде +// УпрощенныйРежим - Булево - флаг того, что будет отчет будет формироваться в упрощенном виде // -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // &НаСервере @@ -60,8 +59,9 @@ ПриЗакрытииНаСервере(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -75,7 +75,7 @@ Если ТипРасшифровки = Тип("Массив") Или ТипРасшифровки = Тип("СписокЗначений") Тогда // Расшифровка списка - ПараметрыРасшифровки.Вставить("АдресОбъекта", АдресЭтогоОбъекта()); + ПараметрыРасшифровки.Вставить("НастройкиОбъекта", Объект); ПараметрыРасшифровки.Вставить("УпрощенныйРежим", УпрощенныйРежим); ОткрытьФорму(БазовоеИмяДляФормы + "Форма.СоставВыгрузки", ПараметрыРасшифровки); @@ -88,7 +88,7 @@ ИначеЕсли Не ПустаяСтрока(ПараметрыРасшифровки.ПредставлениеСписка) Тогда // Открываем себя же с новыми параметрами - ПараметрыРасшифровки.Вставить("АдресОбъекта", АдресЭтогоОбъекта()); + ПараметрыРасшифровки.Вставить("НастройкиОбъекта", Объект); ПараметрыРасшифровки.Вставить("УпрощенныйРежим", УпрощенныйРежим); ОткрытьФорму(БазовоеИмяДляФормы + "Форма.СоставВыгрузки", ПараметрыРасшифровки); @@ -97,8 +97,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -114,8 +115,9 @@ Элементы.КомпоновщикНастроекПользовательскиеНастройки.Видимость = Элементы.ФормаНастройкиОтчета.Пометка; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -280,8 +282,4 @@ КонецЦикла; КонецПроцедуры -&НаСервере -Функция АдресЭтогоОбъекта() - Возврат ЭтотОбъект().СохранитьЭтотОбъект(УникальныйИдентификатор); -КонецФункции - +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index 04af581ef..518da31f2 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -41,8 +41,9 @@ ОстановитьРасчетКоличеств(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -148,8 +149,9 @@ ОбновитьНадписьОбщегоКоличества(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -193,8 +195,9 @@ ПоказатьВыборИзМеню(Оповещение, СписокВариантов, Элементы.НастройкиОтборов); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -521,3 +524,5 @@ Функция АдресОбъектаДополнительнойВыгрузки() Возврат ЭтотОбъект().СохранитьЭтотОбъект(УникальныйИдентификатор); КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html new file mode 100644 index 000000000..4c915935c --- /dev/null +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html @@ -0,0 +1,16 @@ + +

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

      +

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

      +

      Отбор данных для отправки

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

      Просмотр состава данных выгрузки

      +

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

      +

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

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

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

      +
      • В нижней части списка в поле Будет отправлено нажмите на гиперссылку, для того чтобы рассчитать количество отправляемых объектов. После подсчета в колонке списка К отправке/Всего соответственно проставляется количество элементов и гиперссылка принимает значение итоговой суммы отправляемых элементов.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index b8622de9f..14069a877 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // // Возвращает технический отчет в виде табличного документа. @@ -260,7 +259,6 @@ КонецЦикла; ДанныеКомпоновщика = КомпоновщикНастроекОбщегоОтбора(); - Данные.Вставить("АдресКомпоновщикаВсехДокументов", ПоместитьВоВременноеХранилище(ДанныеКомпоновщика, АдресХранилища)); Возврат ПоместитьВоВременноеХранилище(Данные, АдресХранилища); @@ -642,8 +640,9 @@ Возврат ТаблицыСостава; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // // Конструктор таблиц значений. Генерирует таблицу с колонками произвольного типа. @@ -784,35 +783,40 @@ Продолжить; КонецЕсли; - Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + ИмяНабораПоМетаданным = СтрЗаменить(ПолноеИмяМетаданных, ".", "_"); + ИмяНабора = "Автоматически_" + ИмяНабораПоМетаданным; + Если ЭлементыНабораИзменения.Найти(ИмяНабора) = Неопределено Тогда + Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.АвтоЗаполнениеДоступныхПолей = Ложь; + Набор.ИсточникДанных = ИсточникДанных; + Набор.Имя = ИмяНабора; + Набор.Запрос = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ + | " + ИмяНабора + "_Изменения.Ссылка КАК ОбъектРегистрации, + | ТИП(" + ПолноеИмяМетаданных + ") КАК ОбъектРегистрацииТип, + | &ПричинаРегистрацииАвтоматически КАК ПричинаРегистрации + |ИЗ + | " + ПолноеИмяМетаданных + ".Изменения КАК " + ИмяНабора + "_Изменения + |ГДЕ + | Узел=&УзелИнформационнойБазы + |"; + КонецЕсли; - // В отбор попадет только если не строим отбор - Набор.АвтоЗаполнениеДоступныхПолей = Не ОграничиватьИспользованиеОтбором; + ИмяНабора = "Количество_" + ИмяНабораПоМетаданным; + Если ЭлементыНаборыКоличества.Найти(ИмяНабора) = Неопределено Тогда + Набор = ЭлементыНаборыКоличества.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.ИсточникДанных = ИсточникДанных; + Набор.Имя = ИмяНабора; + Набор.Запрос = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТИП(" + ПолноеИмяМетаданных + ") КАК Тип, + | КОЛИЧЕСТВО(" + ИмяНабора + ".Ссылка) КАК ОбщееКоличество + |ИЗ + | " + ПолноеИмяМетаданных + " КАК " + ИмяНабора + " + |"; + КонецЕсли; - Набор.ИсточникДанных = ИсточникДанных; - Набор.Имя = "Автоматически" + Формат(ЭлементыНабораИзменения.Количество()-1, "ЧН=; ЧГ="); - Набор.Запрос = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ - | Ссылка КАК ОбъектРегистрации, - | ТИП(" + ПолноеИмяМетаданных + ") КАК ОбъектРегистрацииТип, - | &ПричинаРегистрацииАвтоматически КАК ПричинаРегистрации - |ИЗ - | " + ПолноеИмяМетаданных + ".Изменения - |ГДЕ - | Узел=&УзелИнформационнойБазы - |"; - - Набор = ЭлементыНаборыКоличества.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - Набор.АвтоЗаполнениеДоступныхПолей = Истина; - Набор.ИсточникДанных = ИсточникДанных; - Набор.Имя = "Количества" + Формат(ЭлементыНаборыКоличества.Количество()-1, "ЧН=; ЧГ="); - Набор.Запрос = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТИП(" + ПолноеИмяМетаданных + ") КАК Тип, - | КОЛИЧЕСТВО(Ссылка) КАК ОбщееКоличество - |ИЗ - | " + ПолноеИмяМетаданных + " - |"; КонецЦикла; // Варианты дополнительных изменений @@ -848,25 +852,28 @@ Продолжить; КонецЕсли; - Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - Набор.ИсточникДанных = ИсточникДанных; - Набор.АвтоЗаполнениеДоступныхПолей = Истина; - Набор.Имя = "Дополнительно_" + СтрЗаменить(ИмяДобавляемойТаблицы, ".", "_"); - - Набор.Запрос = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Ссылка КАК ОбъектРегистрации, - | ТИП(" + ИмяДобавляемойТаблицы + ") КАК ОбъектРегистрацииТип, - | &ПричинаРегистрацииДополнительно КАК ПричинаРегистрации - |ИЗ - | " + ИмяДобавляемойТаблицы + " - |"; + ИмяНабора = "Дополнительно_" + СтрЗаменить(ИмяДобавляемойТаблицы, ".", "_"); + Если ЭлементыНабораИзменения.Найти(ИмяНабора) = Неопределено Тогда + Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.ИсточникДанных = ИсточникДанных; + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.Имя = ИмяНабора; - // Добавляем дополнительные наборы для получения данных их табличных частей отбора - ПараметрыДобавления = Новый Структура; - ПараметрыДобавления.Вставить("ИмяДобавляемойТаблицы", ИмяДобавляемойТаблицы); - ПараметрыДобавления.Вставить("СхемаКомпоновки", СхемаКомпоновки); - ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(Строка.Отбор.Элементы, ПараметрыДобавления) + Набор.Запрос = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | " + ИмяНабора +".Ссылка КАК ОбъектРегистрации, + | ТИП(" + ИмяДобавляемойТаблицы + ") КАК ОбъектРегистрацииТип, + | &ПричинаРегистрацииДополнительно КАК ПричинаРегистрации + |ИЗ + | " + ИмяДобавляемойТаблицы + " КАК " + ИмяНабора + " + |"; + + // Добавляем дополнительные наборы для получения данных их табличных частей отбора + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ИмяДобавляемойТаблицы", ИмяДобавляемойТаблицы); + ПараметрыДобавления.Вставить("СхемаКомпоновки", СхемаКомпоновки); + ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(Строка.Отбор.Элементы, ПараметрыДобавления) + КонецЕсли; КонецЦикла; КонецЦикла; @@ -876,13 +883,13 @@ Параметры.Найти("УзелИнформационнойБазы").Значение = УзелИнформационнойБазы; ПараметрАвтоматически = Параметры.Найти("ПричинаРегистрацииАвтоматически"); - ПараметрАвтоматически.Значение = "По общим правилам"; + ПараметрАвтоматически.Значение = НСтр("ru = 'По общим правилам'"); ПараметрДополнительно = Параметры.Найти("ПричинаРегистрацииДополнительно"); - ПараметрДополнительно.Значение = "Дополнительно"; + ПараметрДополнительно.Значение = НСтр("ru = 'Дополнительно'"); ПараметрПоСсылке = Параметры.Найти("ПричинаРегистрацииПоСсылке"); - ПараметрПоСсылке.Значение = "По ссылке"; + ПараметрПоСсылке.Значение = НСтр("ru = 'По ссылке'"); Если ОграничиватьИспользованиеОтбором Тогда Поля = СхемаКомпоновки.НаборыДанных.РегистрацияИзменений.Поля; @@ -990,10 +997,10 @@ КонецЕсли; Для Каждого Элемент Из ЭлементыИсточника Цикл - // Ветка разбора аналогична ветке в ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей - Если ТипЗнч(Элемент)=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(ЭлементыИсточника, ПараметрыДобавления) + Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(Элемент.Элементы, ПараметрыДобавления); + Продолжить; КонецЕсли; // Это элемент, смотрим чтобы попало на нашу табличку @@ -1027,28 +1034,35 @@ Псевдоним = СтрЗаменить(ИмяДобавляемойТаблицы, ".", "") + ИмяТаблицы; ИмяНабора = "Дополнительно_" + Псевдоним; Набор = ОбщийНабор.Элементы.Найти(ИмяНабора); - Если Набор=Неопределено Тогда + Если Набор = Неопределено Тогда Набор = ОбщийНабор.Элементы.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); Набор.АвтоЗаполнениеДоступныхПолей = Истина; Набор.ИсточникДанных = ИсточникДанных; Набор.Имя = ИмяНабора; + + ВсеПоляТабличнойЧасти = РеквизитыТабличнойЧастиДляЗапроса(МетаТабличнаяЧасть, Псевдоним); Набор.Запрос = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ | Ссылка КАК ОбъектРегистрации, | ТИП(" + ИмяДобавляемойТаблицы + ") КАК ОбъектРегистрацииТип, | &ПричинаРегистрацииДополнительно КАК ПричинаРегистрации - | " + РеквизитыТабличнойЧастиДляЗапроса(МетаТабличнаяЧасть, Псевдоним) + " + | " + ВсеПоляТабличнойЧасти.ПоляЗапроса + " |ИЗ | " + ИмяДобавляемойТаблицы + "." + ИмяТаблицы + " |"; - КонецЕсли; - - ПутьКДанным = Псевдоним + ПутьКДанным; - Поле = Набор.Поля.Найти(ПутьКДанным); - Если Поле=Неопределено Тогда - Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); - Поле.ПутьКДанным = ПутьКДанным; - Поле.Поле = ПутьКДанным; + + Для Каждого ИмяПоля Из ВсеПоляТабличнойЧасти.ИменаПолей Цикл + Поле = Набор.Поля.Найти(ИмяПоля); + Если Поле = Неопределено Тогда + Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + Поле.ПутьКДанным = ИмяПоля; + Поле.Поле = ИмяПоля; + КонецЕсли; + Поле.ОграничениеИспользованияРеквизитов.Условие = Истина; + Поле.ОграничениеИспользованияРеквизитов.Поле = Истина; + Поле.ОграничениеИспользования.Условие = Истина; + Поле.ОграничениеИспользования.Поле = Истина; + КонецЦикла; КонецЕсли; КонецЕсли; @@ -1103,44 +1117,74 @@ ИмяТаблицы = Лев(ИмяПоля, Позиция-1); МетаТабличнаяЧасть = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТаблицы); - Если Позиция=0 Тогда - // Отбор к шапке, получим через ссылку + Если Позиция = 0 Тогда + // Отбор к шапке, будет получен через ссылку ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации." + ИмяПоля); Продолжить; - ИначеЕсли МетаТабличнаяЧасть=Неопределено Тогда - // Табличная часть есть, но не наша + + ИначеЕсли МетаТабличнаяЧасть = Неопределено Тогда + // Табличная часть указана, но не наша. Усиливаем отбор. + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолноеИмяМетаданных"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Истина; + ЭлементОтбора.ПравоеЗначение = ""; + Продолжить; КонецЕсли; // Отбор к табличной части - ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); - ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); - ПутьКДанным = Сред(ИмяПоля, Позиция + 1); - Если Лев(ПутьКДанным + ".", 7)="Ссылка." Тогда + Если Лев(ПутьКДанным + ".", 7) = "Ссылка." Тогда // Переадресуем на головную таблицу + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации." + Сред(ПутьКДанным, 8)); + + ИначеЕсли ПутьКДанным <> "НомерСтроки" И ПутьКДанным <> "Ссылка" + И МетаТабличнаяЧасть.Реквизиты.Найти(ПутьКДанным) = Неопределено + Тогда + // Табличная часть совпадает, но реквизит не наш. Усиливаем отбор. + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолноеИмяМетаданных"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Истина; + ЭлементОтбора.ПравоеЗначение = ""; + Иначе // Корректируем имя + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); ПутьКДанным = СтрЗаменить(ИмяДобавляемойТаблицы + ИмяТаблицы, ".", "") + ПутьКДанным; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКДанным); КонецЕсли; + КонецЦикла; КонецПроцедуры -Функция РеквизитыТабличнойЧастиДляЗапроса(Знач МетаТабличнаяЧасть, Знач Префикс="") - Результат = ""; +Функция РеквизитыТабличнойЧастиДляЗапроса(Знач МетаТабличнаяЧасть, Знач Префикс = "") + + ПоляЗапроса = ", НомерСтроки КАК " + Префикс + "НомерСтроки + |, Ссылка КАК " + Префикс + "Ссылка + |"; + + ИменаПолей = Новый Массив; + ИменаПолей.Добавить(Префикс + "НомерСтроки"); + ИменаПолей.Добавить(Префикс + "Ссылка"); + Для Каждого МетаРеквизит Из МетаТабличнаяЧасть.Реквизиты Цикл - Имя = МетаРеквизит.Имя; + Имя = МетаРеквизит.Имя; Псевдоним = Префикс + Имя; - - Результат = Результат + "," + Символы.ПС + Имя + " КАК " + Псевдоним; + ПоляЗапроса = ПоляЗапроса + ", " + Имя + " КАК " + Псевдоним + Символы.ПС; + ИменаПолей.Добавить(Псевдоним); КонецЦикла; - Возврат Результат; + Возврат Новый Структура("ПоляЗапроса, ИменаПолей", ПоляЗапроса, ИменаПолей); КонецФункции // Возвращает параметры-ключи для сохранения настроек в разрезе плана обмена для всех пользователей @@ -1273,5 +1317,6 @@ КонецЦикла; КонецПроцедуры +#КонецОбласти #КонецЕсли diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs index cd46dce53..74396de4c 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs @@ -141,7 +141,6 @@ Тип Тип - true true true true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo index d3750eff7..076d1472d 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo @@ -10,6 +10,11 @@ Интерактивное изменение выгрузки
      DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.Форма + + + ru + + ВариантВыгрузки @@ -211,6 +216,11 @@ ru Состав выгрузки + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index f9e35aa2a..19c3fdce9 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -59,8 +59,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВебСодержимоеПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) @@ -88,8 +89,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Вперед(Команда) @@ -106,22 +108,26 @@ ПросмотрСтраницы("КомандаИзКоманднойПанели", Команда.Имя); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОпределитьКаталогВременныхФайлов() + // Определение пути. ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла("extras")); СоздатьКаталог(ПутьККаталогу); - ИмяВременногоФайла = ПутьККаталогу + "null.tmp"; + // Проверка права записи. + ИмяВременногоФайла = ПутьККаталогу + "null.tmp"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Вывод = ИспользованиеВывода.Разрешить; ТекстовыйДокумент.Записать(ИмяВременногоФайла); ТекстовыйДокумент = Неопределено; + УдалитьФайлы(ИмяВременногоФайла); - Найденные = НайтиФайлы(ПутьККаталогу, "*", Истина); - КаталогВременныхФайлов = Найденные[0].Путь; + // Результат. + КаталогВременныхФайлов = ПутьККаталогу; КонецПроцедуры &НаСервере @@ -356,12 +362,13 @@ КонецЕсли; // Извлечение страницы + АрхивПолноеИмя = КаталогВременныхФайлов + "tmp.zip"; Попытка ДвоичныеДанные = РеквизитФормыВЗначение("Объект").ПолучитьМакет(СтрокаТаблицы.ИмяМакета); - ДвоичныеДанные.Записать(КаталогВременныхФайлов + "tmp.zip"); + ДвоичныеДанные.Записать(АрхивПолноеИмя); Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Стандартные подсистемы. Дополнительная информация'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Информация при запуске'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -369,41 +376,47 @@ Возврат; КонецПопытки; - ЧтениеZipФайла = Новый ЧтениеZipФайла(КаталогВременныхФайлов + "tmp.zip"); + ЧтениеZipФайла = Новый ЧтениеZipФайла(АрхивПолноеИмя); ЧтениеZipФайла.ИзвлечьВсе(КаталогВременныхФайлов, РежимВосстановленияПутейФайловZIP.Восстанавливать); - УдалитьФайлы(КаталогВременныхФайлов, "tmp.zip"); + + УдалитьФайлы(АрхивПолноеИмя); Картинки = Новый Соответствие; // Ключ - относительное имя, Значение - адрес в хранилище. // Регистрация ссылок страниц и создание списка картинок. - Найденные = НайтиФайлы(КаталогВременныхФайлов, "*", Истина); - Для Каждого Файл Из Найденные Цикл - Если Файл.ЭтоКаталог() Тогда - Продолжить; - КонецЕсли; + КаталогиФайлов = Новый СписокЗначений; + КаталогиФайлов.Добавить(КаталогВременныхФайлов, ""); + Осталось = 1; + Пока Осталось > 0 Цикл + Осталось = Осталось - 1; + Каталог = КаталогиФайлов[0]; + КаталогПолныйПуть = Каталог.Значение; // Полный путь в формате файловой системы. + КаталогОтносительныйПуть = Каталог.Представление; // Относительный путь в URL формате. + КаталогиФайлов.Удалить(0); - ОтносительноеИмя = СтрЗаменить(Файл.ПолноеИмя, КаталогВременныхФайлов, ""); - ОтносительноеИмя = СтрЗаменить(ОтносительноеИмя, "\", "/"); - - Расширение = СтрЗаменить(НРег(Файл.Расширение), ".", ""); - - Если Расширение = "htm" ИЛИ Расширение = "html" Тогда - ОтносительныйКаталог = ""; - Каталоги = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОтносительноеИмя, "/"); - Каталоги.Удалить(Каталоги.ВГраница()); - Для Каждого Каталог Из Каталоги Цикл - ОтносительныйКаталог = ОтносительныйКаталог + Каталог + "/"; - КонецЦикла; + Найденные = НайтиФайлы(КаталогПолныйПуть, "*", Ложь); + Для Каждого Файл Из Найденные Цикл + ФайлОтносительноеИмя = КаталогОтносительныйПуть + Файл.Имя; - РазмещениеФайла = СтрокаТаблицы.ВебСтраницы.Добавить(); - РазмещениеФайла.ОтносительноеИмя = ОтносительноеИмя; - РазмещениеФайла.Адрес = Файл.ПолноеИмя; - РазмещениеФайла.ОтносительныйКаталог = ОтносительныйКаталог; - Иначе - АдресКартинки = ПоместитьВоВременноеХранилище(Новый Картинка(Новый ДвоичныеДанные(Файл.ПолноеИмя)), УникальныйИдентификатор); - Картинки.Вставить(ОтносительноеИмя, АдресКартинки); - КонецЕсли; - + Если Файл.ЭтоКаталог() Тогда + Осталось = Осталось + 1; + КаталогиФайлов.Добавить(Файл.ПолноеИмя, ФайлОтносительноеИмя + "/"); + Продолжить; + КонецЕсли; + + Расширение = СтрЗаменить(НРег(Файл.Расширение), ".", ""); + + Если Расширение = "htm" ИЛИ Расширение = "html" Тогда + РазмещениеФайла = СтрокаТаблицы.ВебСтраницы.Добавить(); + РазмещениеФайла.ОтносительноеИмя = ФайлОтносительноеИмя; + РазмещениеФайла.Адрес = Файл.ПолноеИмя; + РазмещениеФайла.ОтносительныйКаталог = КаталогОтносительныйПуть; + Иначе + Картинка = Новый Картинка(Новый ДвоичныеДанные(Файл.ПолноеИмя)); + АдресКартинки = ПоместитьВоВременноеХранилище(Картинка, УникальныйИдентификатор); + Картинки.Вставить(ФайлОтносительноеИмя, АдресКартинки); + КонецЕсли; + КонецЦикла; КонецЦикла; // Регистрация картинок и ссылок на страницы встроенной справки. @@ -416,15 +429,12 @@ ЧтениеТекста = Неопределено; // Регистрация картинок - ФайлВПодкаталоге = ЗначениеЗаполнено(РазмещениеФайла.ОтносительныйКаталог); + Длина = СтрДлина(РазмещениеФайла.ОтносительныйКаталог); Для Каждого КлючИЗначение Из Картинки Цикл ПутьККартинке = КлючИЗначение.Ключ; АдресКартинки = КлючИЗначение.Значение; - Если ФайлВПодкаталоге Тогда - Если Найти(ПутьККартинке, "/") = 0 Тогда - Продолжить; - КонецЕсли; - ПутьККартинке = СтрЗаменить(ПутьККартинке, РазмещениеФайла.ОтносительныйКаталог, ""); + Если Длина > 0 И Лев(ПутьККартинке, Длина) = РазмещениеФайла.ОтносительныйКаталог Тогда + ПутьККартинке = Сред(ПутьККартинке, Длина + 1); КонецЕсли; ТекстHTML = СтрЗаменить(ТекстHTML, ПутьККартинке, АдресКартинки); КонецЦикла; @@ -502,3 +512,4 @@ КонецЦикла; КонецФункции +#КонецОбласти diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html index 6b1a09ea9..500791f3e 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/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index 8e29fa7db..205b7e27e 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,8 +19,9 @@ ОбновитьКартуМаршрута(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура БизнесПроцессПриИзменении(Элемент) @@ -32,8 +33,9 @@ ОткрытьСписокЗадачТочкиМаршрута(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьВыполнить(Команда) @@ -45,8 +47,9 @@ ОткрытьСписокЗадачТочкиМаршрута(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьКартуМаршрута() @@ -115,3 +118,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index aab668e8a..a892a7542 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -171,7 +171,8 @@ // Функция-свойство: флаг ошибки выполнения обмена данными // -// Тип: Булево +// Возвращаемое значение: +// Булево - флаг ошибки выполнения обмена данными. // Функция ФлагОшибки() Экспорт @@ -187,7 +188,8 @@ // Функция-свойство: результат выполнения обмена данными // -// Тип: ПеречислениеСсылка.РезультатыВыполненияОбмена +// Возвращаемое значение: +// ПеречислениеСсылка.РезультатыВыполненияОбмена - результат выполнения обмена данными. // Функция РезультатВыполненияОбмена() Экспорт @@ -203,7 +205,8 @@ // Функция-свойство: результат выполнения обмена данными // -// Тип: Строка - Строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена +// Возвращаемое значение: +// Строка - Строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена. // Функция РезультатВыполненияОбменаСтрокой() Экспорт @@ -213,7 +216,8 @@ // Функция-свойство: номер принятого сообщения обмена данными // -// Тип: Число +// Возвращаемое значение: +// Число - номер принятого сообщения обмена данными. // Функция НомерПринятогоСообщения() Экспорт @@ -229,7 +233,8 @@ // Функция-свойство: соответствие с таблицами данных входящего сообщения обмена // -// Тип: Соответствие +// Возвращаемое значение: +// Соответствие - соответствие с таблицами данных входящего сообщения обмена. // Функция ТаблицыДанныхСообщенияОбмена() Экспорт @@ -245,7 +250,8 @@ // Функция-свойство: таблица значений со статистической и дополнительной информацией о входящем сообщении обмена // -// Тип: ТаблицаЗначений +// Возвращаемое значение: +// ТаблицаЗначений - таблица значений со статистической и дополнительной информацией о входящем сообщении обмена. // Функция ТаблицаДанныхЗаголовкаПакета() Экспорт @@ -276,7 +282,8 @@ // Функция-свойство: строка, которая содержит сообщение об ошибке при обмене данными // -// Тип: Строка +// Возвращаемое значение: +// Строка - строка, которая содержит сообщение об ошибке при обмене данными. // Функция СтрокаСообщенияОбОшибке() Экспорт @@ -292,7 +299,8 @@ // Функция-свойство: количество объектов, которые были загружены // -// Тип: Число +// Возвращаемое значение: +// Число - количество объектов, которые были загружены. // Функция СчетчикЗагруженныхОбъектов() Экспорт @@ -308,7 +316,8 @@ // Функция-свойство: количество объектов, которые были выгружены // -// Тип: Число +// Возвращаемое значение: +// Число - количество объектов, которые были выгружены. // Функция СчетчикВыгруженныхОбъектов() Экспорт @@ -714,7 +723,11 @@ Возврат; КонецЕсли; - ИнициализироватьОбработки(); + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; Если ЭтоОбменЧерезВнешнееСоединение() Тогда @@ -842,9 +855,11 @@ КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; КонецЕсли; - // выполняем очистку правил обмена - Правила.Очистить(); - ТаблицаПравилКонвертации.Очистить(); + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; НачатьЧтениеСообщения(ЧтениеСообщения); @@ -1294,6 +1309,16 @@ ОбъектУзла.НомерПринятого = НомерСообщения(); ОбъектУзла.ДополнительныеСвойства.Вставить("Загрузка"); + Попытка + ОбъектУзла.Заблокировать(); + Исключение + ЗаписатьИнформациюОбОшибкеВПротокол(173, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ОбъектУзла); + КонецПопытки; + + КонецЕсли; + + Если Не ФлагОшибки() Тогда + ОбъектУзла.Записать(); Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда @@ -1616,13 +1641,12 @@ СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; Если ТолькоПолучитьУзелСсылки Тогда - СтрокаПользователю = "Конвертация ссылки на объект: "; + СтрокаПользователю = НСтр("ru = 'Конвертация ссылки на объект: %1%2'"); Иначе - СтрокаПользователю = "Конвертация объекта: "; + СтрокаПользователю = НСтр("ru = 'Конвертация объекта: %1%2'"); КонецЕсли; - ЗаписатьВПротоколВыполнения(СтрокаПользователю + ПрОбъекта + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); - + ЗаписатьВПротоколВыполнения(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаПользователю, ПрОбъекта, СтрокаНазванияПКО), , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); КонецЕсли; ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь; @@ -2327,7 +2351,6 @@ Отказ = Ложь; Свойства = Неопределено; - ВходящиеДанные = Неопределено; ПриоритетОбъектовОбмена = Правило.ПриоритетОбъектовОбмена; Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда @@ -2507,11 +2530,27 @@ // Параметры: // Приемник - xml-узел объекта приемника // Тип - Строка - выгружаемый тип +// - Массив - содержит список выгружаемых строковых типов +// СписокАтрибутов - Структура - Ключ содержит имя атрибута // -Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип) Экспорт +Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип, СписокАтрибутов = Неопределено) Экспорт УзелТипов = СоздатьУзел("Типы"); - одЗаписатьЭлемент(УзелТипов, "Тип", Тип); + + Если СписокАтрибутов <> Неопределено Тогда + Для Каждого ЭлементКоллекции Из СписокАтрибутов Цикл + УстановитьАтрибут(УзелТипов, ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение); + КонецЦикла; + КонецЕсли; + + Если ТипЗнч(Тип) = Тип("Строка") Тогда + одЗаписатьЭлемент(УзелТипов, "Тип", Тип); + Иначе + Для Каждого ТипСтрокой Из Тип Цикл + одЗаписатьЭлемент(УзелТипов, "Тип", ТипСтрокой); + КонецЦикла; + КонецЕсли; + ДобавитьПодчиненный(Приемник, УзелТипов); КонецПроцедуры @@ -5386,31 +5425,31 @@ Правила.Очистить(); - Если РежимОбмена = "Выгрузка" Тогда + Для Каждого СтрокаТаблицы Из ТаблицаПравилКонвертации Цикл - Для Каждого СтрокаТаблицы Из ТаблицаПравилКонвертации Цикл + Если РежимОбмена = "Выгрузка" Тогда ПолучитьЗначенияПредопределенныхДанных(СтрокаТаблицы); - Правила.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы); - - Если СтрокаТаблицы.Источник <> Неопределено Тогда - - Попытка - Если ТипЗнч(СтрокаТаблицы.Источник) = ТипСтрока Тогда - Менеджеры[Тип(СтрокаТаблицы.Источник)].ПКО = СтрокаТаблицы; - Иначе - Менеджеры[СтрокаТаблицы.Источник].ПКО = СтрокаТаблицы; - КонецЕсли; - Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(СтрокаТаблицы.Источник)); - КонецПопытки; - - КонецЕсли; - - КонецЦикла; + КонецЕсли; - КонецЕсли; + Правила.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы); + + Если РежимОбмена = "Выгрузка" И СтрокаТаблицы.Источник <> Неопределено Тогда + + Попытка + Если ТипЗнч(СтрокаТаблицы.Источник) = ТипСтрока Тогда + Менеджеры[Тип(СтрокаТаблицы.Источник)].ПКО = СтрокаТаблицы; + Иначе + Менеджеры[СтрокаТаблицы.Источник].ПКО = СтрокаТаблицы; + КонецЕсли; + Исключение + ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(СтрокаТаблицы.Источник)); + КонецПопытки; + + КонецЕсли; + + КонецЦикла; КонецПроцедуры @@ -6112,7 +6151,7 @@ + """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; - // если в запрос попадает более 256 таблиц – разбиваем его на две части + // если в запрос попадает более 256 таблиц - разбиваем его на две части // (вариант документа с проведением по 512 регистрам считаем нежизненным) счетчик_таблиц = счетчик_таблиц + 1; Если счетчик_таблиц = 256 Тогда @@ -6128,7 +6167,7 @@ // приводится к строка(200) ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); - // если количество таблиц не превысило 256 – возвращаем таблицу + // если количество таблиц не превысило 256 - возвращаем таблицу Если счетчик_таблиц = МетаданныеДокумента.Движения.Количество() Тогда Возврат ТаблицаЗапроса; КонецЕсли; @@ -6200,8 +6239,7 @@ Если НЕ ПравоДоступа("Изменение", Набор.Метаданные()) Тогда // отсутствуют права на всю таблицу регистра - ВызватьИсключение "Нарушение прав доступа: " + СтрокаДвижения.Имя; - Возврат; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Нарушение прав доступа: %1'"), СтрокаДвижения.Имя); КонецЕсли; Набор.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка); @@ -6219,7 +6257,11 @@ СтрокаДвижения.НаборЗаписей.Записать(); Исключение // возможно «сработал» RLS или подсистема даты запрета изменения - ВызватьИсключение "Операция не выполнена: " + СтрокаДвижения.Имя + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операция не выполнена: %1 + |%2'"), + СтрокаДвижения.Имя, КраткоеПредставлениеОшибки( ИнформацияОбОшибке() ) + ); КонецПопытки; КонецЦикла; @@ -6499,7 +6541,7 @@ ИначеЕсли ИмяУзла = "Пусто" Тогда Значение = одПолучитьПустоеЗначение(Тип); - НаличиеСвойств = Истина; + НаличиеСвойств = Истина; Иначе @@ -7450,7 +7492,7 @@ Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", - ТипОбъекта, Неопределено, "Последовательность полей поиска"); + ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'") ); КонецПопытки; @@ -8268,9 +8310,9 @@ Если ФлагКомментироватьОбработкуОбъектов Тогда Если Нпп <> 0 Тогда - СтрокаСообщения = "Загрузка объекта № " + Нпп; + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка объекта № %1'"), Нпп ); Иначе - СтрокаСообщения = "Загрузка объекта № " + ГНпп; + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка объекта № %1'"), ГНпп ); КонецЕсли; ЗП = ПолучитьСтруктуруЗаписиПротокола(); @@ -9919,15 +9961,19 @@ Исключение - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных. - |Имя файла ""%1"". - |Описание ошибки: - |%2'"), - Строка(ИмяФайлаЗаписей), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных. + |Имя файла ""%1"". + |Описание ошибки: + |%2'"), + Строка(ИмяФайлаЗаписей), ПодробноеПредставлениеОшибки( ИнформацияОбОшибке() ) ); + ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, ОписаниеОшибки(), ИмяФайлаЗаписей + ": Ошибка при создании временного файла для выгрузки данных"); + + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, ОписаниеОшибки(), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1: Ошибка при создании временного файла для выгрузки данных'"), ИмяФайлаЗаписей ) + ); КонецПопытки; @@ -11427,7 +11473,10 @@ ПрОбъекта = ТипЗнч(Объект); КонецПопытки; - ЗаписатьВПротоколВыполнения("ВЫГРУЗКА ОБЪЕКТА: " + ПрОбъекта, , Ложь, 1, 7); + ЗаписатьВПротоколВыполнения( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'ВЫГРУЗКА ОБЪЕКТА: %1'"), ПрОбъекта), , Ложь, 1, 7 + ); + КонецЕсли; @@ -12048,7 +12097,9 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), "ПередОтправкойИнформацииОбУдалении (конвертация)"); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), + НСтр("ru = 'ПередОтправкойИнформацииОбУдалении (конвертация)'") + ); Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -12099,8 +12150,12 @@ Возврат Неопределено; КонецЕсли; - // получаем таблицу реквизитов регистрации для механизма выборочной регистрации объектов - ТаблицаРеквизитовРегистрацииОбъектов = ПолучитьТаблицуРеквизитовРегистрацииОбъектов(); + Если РежимОбмена = "Загрузка" Тогда + ТаблицаРеквизитовРегистрацииОбъектов = Неопределено; + Иначе + // получаем таблицу реквизитов регистрации для механизма выборочной регистрации объектов + ТаблицаРеквизитовРегистрацииОбъектов = ПолучитьТаблицуРеквизитовРегистрацииОбъектов(); + КонецЕсли; // сохраняем запросы ЗапросыДляСохранения = Новый Структура; @@ -12509,7 +12564,7 @@ // Возвращаемое значение: // СтрокаИнформации - Строка - строка с информацией о правилах // -Функция ПолучитьИнформациюОПравилах() Экспорт +Функция ПолучитьИнформациюОПравилах(ЭтоПравилаКорреспондента = Ложь, РежимСовместимости = Ложь) Экспорт // возвращаемое значение функции СтрокаИнформации = ""; @@ -12518,15 +12573,18 @@ Возврат СтрокаИнформации; КонецЕсли; - СтрокаИнформации = НСтр("ru = 'Правила обмена - |Дата создания: %1 - |Конфигурация источник: %2 - |Конфигурация приемник: %3'"); + РежимСовместимости = (Конвертация.РежимСовместимости = "" + Или Конвертация.РежимСовместимости = "РежимСовместимостиСБСП20"); + + СтрокаИнформации = НСтр("ru = 'Правила конвертации %1 от %21: + |Конфигурация источник: %3 + |Конфигурация приемник: %4'"); ПредставлениеКонфигурацииИсточника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Источника"); ПредставлениеКонфигурацииПриемника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Приемника"); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИнформации, + ?(ЭтоПравилаКорреспондента, НСтр("ru = 'корреспондента'"), НСтр("ru = 'этой программы'")), Конвертация.ДатаВремяСоздания, ПредставлениеКонфигурацииИсточника, ПредставлениеКонфигурацииПриемника); @@ -12937,20 +12995,17 @@ ПравилаОбмена = Источник; - КонецЕсли; - + КонецЕсли; Если Не ((ПравилаОбмена.ЛокальноеИмя = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента)) Тогда СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); Возврат; КонецЕсли; - ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("ПравилаОбмена"); - Пока ПравилаОбмена.Прочитать() Цикл ИмяУзла = ПравилаОбмена.ЛокальноеИмя; @@ -13175,7 +13230,11 @@ СтрокаТиповДляПриемника = СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных); - ИнициализироватьОбработки(); + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; // нужно вызвать событие после загрузки правил обмена ТекстСобытияПослеЗагрузкиПравилОбмена = ""; @@ -13210,7 +13269,7 @@ КонецПроцедуры -Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки) +Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки = Неопределено) УвеличитьСчетчикЗагруженныхОбъектов(); @@ -13410,7 +13469,7 @@ одПропустить(ФайлОбмена, "УдалениеОбъекта"); - ОбработатьОкончаниеЧтенияНовогоЭлемента("Удаление объекта"); + ОбработатьОкончаниеЧтенияНовогоЭлемента(); ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда @@ -13569,7 +13628,7 @@ // обработка удаления объекта из информационной базы ПрочитатьУдалениеОбъекта(""); - ОбработатьОкончаниеЧтенияНовогоЭлемента("Удаление объекта"); + ОбработатьОкончаниеЧтенияНовогоЭлемента(); Иначе // загрузка в таблицу значений @@ -13802,7 +13861,7 @@ одПропустить(ФайлОбмена, "УдалениеОбъекта"); - ОбработатьОкончаниеЧтенияНовогоЭлемента("Удаление объекта"); + ОбработатьОкончаниеЧтенияНовогоЭлемента(); ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда @@ -14025,7 +14084,9 @@ КонецЕсли; Исключение - ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), "ПослеПолученияИнформацииОбУзлахОбмена (конвертация)"); + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), + НСтр("ru = 'ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'") + ); КонецПопытки; КонецЕсли; @@ -14170,8 +14231,6 @@ ДокументПроведенУспешно = Ложь; - ОписаниеОшибки = НСтр("ru = 'Ошибка заполнения реквизитов документа'"); - КонецЕсли; Исключение @@ -14345,12 +14404,12 @@ Для Каждого Реквизит Из МетаданныеОбщегоУзла.ТабличныеЧасти[Свойство].Реквизиты Цикл - ПКС = ПКС.ПравилаГруппы.Добавить(); - ПКС.ЭтоГруппа = Ложь; - ПКС.ВидИсточника = "Реквизит"; - ПКС.ВидПриемника = "Реквизит"; - ПКС.Источник = Реквизит.Имя; - ПКС.Приемник = Реквизит.Имя; + ПКГС = ПКС.ПравилаГруппы.Добавить(); + ПКГС.ЭтоГруппа = Ложь; + ПКГС.ВидИсточника = "Реквизит"; + ПКГС.ВидПриемника = "Реквизит"; + ПКГС.Источник = Реквизит.Имя; + ПКГС.Приемник = Реквизит.Имя; КонецЦикла; @@ -14856,7 +14915,9 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), "ПередПолучениемИзмененныхОбъектов (конвертация)"); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), + НСтр("ru = 'ПередПолучениемИзмененныхОбъектов (конвертация)'") + ); Возврат; КонецПопытки; @@ -15456,14 +15517,14 @@ // Свойство "Значения" не используется // Колонки.Добавить("Значения", одОписаниеТипа("Соответствие")); - // Тип: Соответствие - // Ключ – значение предопределенного элемента в этой базе; - // Значение – строковое представление предопределенного значения в приемнике. + // Соответствие. + // Ключ - значение предопределенного элемента в этой базе; + // Значение - строковое представление предопределенного значения в приемнике. Колонки.Добавить("ЗначенияПредопределенныхДанных", одОписаниеТипа("Соответствие")); - // Тип: Структура. - // Ключ – строковое представление предопределенного значения в этой базе; - // Значение – строковое представление предопределенного значения в приемнике. + // Структура. + // Ключ - строковое представление предопределенного значения в этой базе; + // Значение - строковое представление предопределенного значения в приемнике. Колонки.Добавить("ЗначенияПредопределенныхДанныхПрочитанные", одОписаниеТипа("Структура")); Колонки.Добавить("Выгруженные", одОписаниеТипа("ТаблицаЗначений")); @@ -15592,31 +15653,39 @@ ТаблицаОписанияСвойствОбъекта = ОбщегоНазначения.ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, "Имя, Тип"); Для Каждого ОписаниеСвойства Из ТаблицаОписанияСвойствОбъекта Цикл - - Колонки.Добавить(ОписаниеСвойства.Имя, ОписаниеСвойства.Тип); - + ТипыКолонки = Новый ОписаниеТипов(ОписаниеСвойства.Тип, "NULL"); + Колонки.Добавить(ОписаниеСвойства.Имя, ТипыКолонки); КонецЦикла; + ТаблицаДанныхСообщенияОбмена.Индексы.Добавить(ИмяКолонкиУникальныйИдентификатор()); + Возврат ТаблицаДанныхСообщенияОбмена; КонецФункции -Процедура ИнициализироватьОбработки() +Функция ИнициализироватьОбработки() + + ИмяПланаОбмена = ИмяПланаОбмена(); + ИдентификаторПланаОбмена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.ПланыОбмена[ИмяПланаОбмена]); + ИмяПрофиляБезопасности = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(ИдентификаторПланаОбмена); Если РежимСовместимостиСБСП20() Тогда - Возврат; + Возврат Неопределено; КонецЕсли; - ИмяПланаОбмена = ИмяПланаОбмена(); МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; Если РежимОбмена = "Выгрузка" Или РежимОбмена = "" Тогда Если ОтладкаОбработчиковВыгрузки Тогда - ОбработкаВыгрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); + Если ИмяПрофиляБезопасности = Неопределено Тогда + ОбработкаВыгрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); + Иначе + ОбработкаВыгрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиВыгрузки, ИмяПрофиляБезопасности); + КонецЕсли; Иначе @@ -15629,7 +15698,6 @@ Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(18); - Возврат; КонецПопытки; @@ -15641,7 +15709,11 @@ Если ОтладкаОбработчиковЗагрузки Тогда - ОбработкаЗагрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); + Если ИмяПрофиляБезопасности = Неопределено Тогда + ОбработкаЗагрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); + Иначе + ОбработкаЗагрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиЗагрузки, ИмяПрофиляБезопасности); + КонецЕсли; Иначе @@ -15654,7 +15726,6 @@ Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(18); - Возврат; КонецПопытки; @@ -15664,7 +15735,9 @@ КонецЕсли; -КонецПроцедуры + Возврат ИмяПрофиляБезопасности; + +КонецФункции // Инициализирует переменную СообщенияОбОшибках, содержащую соответствия кодов сообщений их описаниям // @@ -15760,6 +15833,7 @@ СообщенияОбОшибках.Вставить(83, НСтр("ru = 'Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.'")); СообщенияОбОшибках.Вставить(84, НСтр("ru = 'Коллизия дат запрета изменения.'")); + СообщенияОбОшибках.Вставить(173, НСтр("ru = 'Ошибка блокировки узла обмена. Возможно синхронизация данных уже выполняется'")); СообщенияОбОшибках.Вставить(174, НСтр("ru = 'Сообщение обмена было принято ранее'")); СообщенияОбОшибках.Вставить(175, НСтр("ru = 'Ошибка в обработчике события ПередПолучениемИзмененныхОбъектов (конвертация)'")); СообщенияОбОшибках.Вставить(176, НСтр("ru = 'Ошибка в обработчике события ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); @@ -16122,24 +16196,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ОБРАБОТЧИКОВ -// Возвращает интерфейс обработчика во внешней обработке -// -// Параметры: -// ИмяОбработки - Строка - Имя подключенной внешней обработки -// ИмяОбработчика - Строка - Имя вызываемой процедуры -// ПараметрыОбработчика - Строка - Список параметров вызываемой процедуры -// -Функция ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика) - - СтрокаВызова = "[ИмяОбработки].[ИмяОбработчика]([ПараметрыОбработчика]);"; - СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ИмяОбработки]", ИмяОбработки); - СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ИмяОбработчика]", ИмяОбработчика); - СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ПараметрыОбработчика]", ПараметрыОбработчика); - - Возврат СтрокаВызова; - -КонецФункции - Функция ИмяСвойстваПКС(СтрокаТабличнойЧасти) Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Источник) Тогда @@ -16179,63 +16235,96 @@ Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена() - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиПравилОбмена; - ПараметрыОбработчика = ""; - - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПослеЗагрузкиПравилОбмена); КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередВыгрузкойДанных(ФайлОбмена, Отказ) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередВыгрузкойДанных; - ПараметрыОбработчика = "ФайлОбмена, Отказ"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередВыгрузкойДанных, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередПолучениемИзмененныхОбъектов(Получатель, УзелДляФоновогоОбмена) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередПолучениемИзмененныхОбъектов; - ПараметрыОбработчика = "Получатель, УзелДляФоновогоОбмена"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Получатель); + ПараметрыОбработчика.Добавить(УзелДляФоновогоОбмена); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередПолучениемИзмененныхОбъектов, ПараметрыОбработчика); + + Получатель = ПараметрыОбработчика[0]; + УзелДляФоновогоОбмена = ПараметрыОбработчика[1]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиДанных(ФайлОбмена) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеВыгрузкиДанных; - ПараметрыОбработчика = "ФайлОбмена"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПослеВыгрузкиДанных, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередВыгрузкойОбъекта; - ПараметрыОбработчика = "ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(Объект); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередВыгрузкойОбъекта, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + ИмяПКО = ПараметрыОбработчика[2]; + Правило = ПараметрыОбработчика[3]; + ВходящиеДанные = ПараметрыОбработчика[4]; + ИсходящиеДанные = ПараметрыОбработчика[5]; + Объект = ПараметрыОбработчика[6]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеВыгрузкиОбъекта; - ПараметрыОбработчика = "ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(УзелСсылки); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПослеВыгрузкиОбъекта, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Объект = ПараметрыОбработчика[1]; + ИмяПКО = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + УзелСсылки = ПараметрыОбработчика[5]; КонецПроцедуры @@ -16245,43 +16334,80 @@ ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередКонвертациейОбъекта; - ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, - | ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, - | ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); + ПараметрыОбработчика.Добавить(ЗапоминатьВыгруженные); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъектПриЗагрузке); + ПараметрыОбработчика.Добавить(ВсеОбъектыВыгружены); + ПараметрыОбработчика.Добавить(ТолькоПолучитьУзелСсылки); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(РежимЗаписи); + ПараметрыОбработчика.Добавить(РежимПроведения); + ПараметрыОбработчика.Добавить(НеСоздаватьЕслиНеНайден); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередКонвертациейОбъекта, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + КлючВыгружаемыхДанных = ПараметрыОбработчика[8]; + ЗапоминатьВыгруженные = ПараметрыОбработчика[9]; + НеЗамещатьОбъектПриЗагрузке = ПараметрыОбработчика[10]; + ВсеОбъектыВыгружены = ПараметрыОбработчика[11]; + ТолькоПолучитьУзелСсылки = ПараметрыОбработчика[12]; + Приемник = ПараметрыОбработчика[13]; + РежимЗаписи = ПараметрыОбработчика[14]; + РежимПроведения = ПараметрыОбработчика[15]; + НеСоздаватьЕслиНеНайден = ПараметрыОбработчика[16]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередОтправкойИнформацииОбУдалении(Ссылка, Отказ) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередОтправкойИнформацииОбУдалении; - ПараметрыОбработчика = "Ссылка, Отказ"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Ссылка); + ПараметрыОбработчика.Добавить(Отказ); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередОтправкойИнформацииОбУдалении, ПараметрыОбработчика); + + Ссылка = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередЗагрузкойДанных; - ПараметрыОбработчика = "ФайлОбмена, Отказ"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПередЗагрузкойДанных, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных() - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиДанных; - ПараметрыОбработчика = ""; - - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПослеЗагрузкиДанных); КонецПроцедуры @@ -16289,53 +16415,104 @@ ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПередЗагрузкойОбъекта; - ПараметрыОбработчика = "ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, - | ТипОбъектаСтрокой, ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Нпп); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ИмяПравила); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ГенерироватьНовыйНомерИлиКодЕслиНеУказан); + ПараметрыОбработчика.Добавить(ТипОбъектаСтрокой); + ПараметрыОбработчика.Добавить(ТипОбъекта); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъект); + ПараметрыОбработчика.Добавить(РежимЗаписи); + ПараметрыОбработчика.Добавить(РежимПроведения); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПередЗагрузкойОбъекта, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + Нпп = ПараметрыОбработчика[2]; + Источник = ПараметрыОбработчика[3]; + ИмяПравила = ПараметрыОбработчика[4]; + Правило = ПараметрыОбработчика[5]; + ГенерироватьНовыйНомерИлиКодЕслиНеУказан = ПараметрыОбработчика[6]; + ТипОбъектаСтрокой = ПараметрыОбработчика[7]; + ТипОбъекта = ПараметрыОбработчика[8]; + НеЗамещатьОбъект = ПараметрыОбработчика[9]; + РежимЗаписи = ПараметрыОбработчика[10]; + РежимПроведения = ПараметрыОбработчика[11]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиОбъекта; - ПараметрыОбработчика = "ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Ссылка); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(ПараметрыОбъекта); + ПараметрыОбработчика.Добавить(ОбъектМодифицирован); + ПараметрыОбработчика.Добавить(ИмяТипаОбъекта); + ПараметрыОбработчика.Добавить(ОбъектНайден); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПослеЗагрузкиОбъекта, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + Ссылка = ПараметрыОбработчика[2]; + Объект = ПараметрыОбработчика[3]; + ПараметрыОбъекта = ПараметрыОбработчика[4]; + ОбъектМодифицирован = ПараметрыОбработчика[5]; + ИмяТипаОбъекта = ПараметрыОбработчика[6]; + ОбъектНайден = ПараметрыОбработчика[7]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПриПолученииИнформацииОбУдалении(Объект, Отказ) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПриПолученииИнформацииОбУдалении; - ПараметрыОбработчика = "Объект, Отказ"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(Отказ); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПриПолученииИнформацииОбУдалении, ПараметрыОбработчика); + + Объект = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = "Конвертация_ПослеЗагрузкиПараметров"; - ПараметрыОбработчика = "ФайлОбмена, Отказ, ПричинаОтказа"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ПричинаОтказа); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, "Конвертация_ПослеЗагрузкиПараметров", ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + ПричинаОтказа = ПараметрыОбработчика[2]; КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(Знач УзелОбменаЗагрузкаДанных) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Конвертация.ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена; - ПараметрыОбработчика = "УзелОбменаЗагрузкаДанных"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(УзелОбменаЗагрузкаДанных); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Конвертация.ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена, ПараметрыОбработчика); + + УзелОбменаЗагрузкаДанных = ПараметрыОбработчика[0]; КонецПроцедуры @@ -16348,13 +16525,45 @@ ВсеОбъектыВыгружены, ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКО.ИмяОбработчикаПередВыгрузкой; - ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, - | Отказ, КлючВыгружаемыхДанных,ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены, - | ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); + ПараметрыОбработчика.Добавить(ЗапоминатьВыгруженные); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъектПриЗагрузке); + ПараметрыОбработчика.Добавить(ВсеОбъектыВыгружены); + ПараметрыОбработчика.Добавить(ТолькоПолучитьУзелСсылки); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(РежимЗаписи); + ПараметрыОбработчика.Добавить(РежимПроведения); + ПараметрыОбработчика.Добавить(НеСоздаватьЕслиНеНайден); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКО.ИмяОбработчикаПередВыгрузкой, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + КлючВыгружаемыхДанных = ПараметрыОбработчика[8]; + ЗапоминатьВыгруженные = ПараметрыОбработчика[9]; + НеЗамещатьОбъектПриЗагрузке = ПараметрыОбработчика[10]; + ВсеОбъектыВыгружены = ПараметрыОбработчика[11]; + ТолькоПолучитьУзелСсылки = ПараметрыОбработчика[12]; + Приемник = ПараметрыОбработчика[13]; + РежимЗаписи = ПараметрыОбработчика[14]; + РежимПроведения = ПараметрыОбработчика[15]; + НеСоздаватьЕслиНеНайден = ПараметрыОбработчика[16]; КонецПроцедуры @@ -16362,36 +16571,97 @@ ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, СтандартнаяОбработка, Приемник, УзелСсылки) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКО.ИмяОбработчикаПриВыгрузке; - ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, - | КлючВыгружаемыхДанных, Отказ, СтандартнаяОбработка, Приемник, УзелСсылки"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(СтандартнаяОбработка); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(УзелСсылки); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКО.ИмяОбработчикаПриВыгрузке, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + КлючВыгружаемыхДанных = ПараметрыОбработчика[7]; + Отказ = ПараметрыОбработчика[8]; + СтандартнаяОбработка = ПараметрыОбработчика[9]; + Приемник = ПараметрыОбработчика[10]; + УзелСсылки = ПараметрыОбработчика[11]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, - | ИмяПКО, ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(УзелСсылки); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКО.ИмяОбработчикаПослеВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + КлючВыгружаемыхДанных = ПараметрыОбработчика[7]; + Отказ = ПараметрыОбработчика[8]; + Приемник = ПараметрыОбработчика[9]; + УзелСсылки = ПараметрыОбработчика[10]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъектаВФайлОбмена(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузкиВФайл; - ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, - | ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(УзелСсылки); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКО.ИмяОбработчикаПослеВыгрузкиВФайл, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + Приемник = ПараметрыОбработчика[7]; + УзелСсылки = ПараметрыОбработчика[8]; КонецПроцедуры @@ -16399,35 +16669,82 @@ ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПередЗагрузкой; - ПараметрыОбработчика = "ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило,ГенерироватьНовыйНомерИлиКодЕслиНеУказан, - | ТипОбъектаСтрокой, ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Нпп); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ИмяПравила); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ГенерироватьНовыйНомерИлиКодЕслиНеУказан); + ПараметрыОбработчика.Добавить(ТипОбъектаСтрокой); + ПараметрыОбработчика.Добавить(ТипОбъекта); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъект); + ПараметрыОбработчика.Добавить(РежимЗаписи); + ПараметрыОбработчика.Добавить(РежимПроведения); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПередЗагрузкой, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + Нпп = ПараметрыОбработчика[2]; + Источник = ПараметрыОбработчика[3]; + ИмяПравила = ПараметрыОбработчика[4]; + Правило = ПараметрыОбработчика[5]; + ГенерироватьНовыйНомерИлиКодЕслиНеУказан = ПараметрыОбработчика[6]; + ТипОбъектаСтрокой = ПараметрыОбработчика[7]; + ТипОбъекта = ПараметрыОбработчика[8]; + НеЗамещатьОбъект = ПараметрыОбработчика[9]; + РежимЗаписи = ПараметрыОбработчика[10]; + РежимПроведения = ПараметрыОбработчика[11]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПриЗагрузке; - ПараметрыОбработчика = "ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(ОбъектНайден); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъект); + ПараметрыОбработчика.Добавить(ОбъектМодифицирован); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПриЗагрузке, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + ОбъектНайден = ПараметрыОбработчика[1]; + Объект = ПараметрыОбработчика[2]; + НеЗамещатьОбъект = ПараметрыОбработчика[3]; + ОбъектМодифицирован = ПараметрыОбработчика[4]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило) + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило) + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Ссылка); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(ПараметрыОбъекта); + ПараметрыОбработчика.Добавить(ОбъектМодифицирован); + ПараметрыОбработчика.Добавить(ИмяТипаОбъекта); + ПараметрыОбработчика.Добавить(ОбъектНайден); - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПослеЗагрузки; - ПараметрыОбработчика = "ФайлОбмена, Отказ, Ссылка, Объект, - | ПараметрыОбъекта, ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден"; + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПослеЗагрузки, ПараметрыОбработчика); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + Ссылка = ПараметрыОбработчика[2]; + Объект = ПараметрыОбработчика[3]; + ПараметрыОбъекта = ПараметрыОбработчика[4]; + ОбъектМодифицирован = ПараметрыОбработчика[5]; + ИмяТипаОбъекта = ПараметрыОбработчика[6]; + ОбъектНайден = ПараметрыОбработчика[7]; КонецПроцедуры @@ -16435,11 +16752,25 @@ СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, СтрокаИменСвойствПоиска, ИмяОбработчика) - ИмяОбработки = "ОбработкаЗагрузки"; - ПараметрыОбработчика = "НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, - | СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, СтрокаИменСвойствПоиска"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(НомерВариантаПоиска); + ПараметрыОбработчика.Добавить(СвойстваПоиска); + ПараметрыОбработчика.Добавить(ПараметрыОбъекта); + ПараметрыОбработчика.Добавить(ПрекратитьПоиск); + ПараметрыОбработчика.Добавить(СсылкаНаОбъект); + ПараметрыОбработчика.Добавить(УстанавливатьУОбъектаВсеСвойстваПоиска); + ПараметрыОбработчика.Добавить(СтрокаИменСвойствПоиска); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, ИмяОбработчика, ПараметрыОбработчика); + + НомерВариантаПоиска = ПараметрыОбработчика[0]; + СвойстваПоиска = ПараметрыОбработчика[1]; + ПараметрыОбъекта = ПараметрыОбработчика[2]; + ПрекратитьПоиск = ПараметрыОбработчика[3]; + СсылкаНаОбъект = ПараметрыОбработчика[4]; + УстанавливатьУОбъектаВсеСвойстваПоиска = ПараметрыОбработчика[5]; + СтрокаИменСвойствПоиска = ПараметрыОбработчика[6]; КонецПроцедуры @@ -16451,12 +16782,47 @@ ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать, ВыгрузитьОбъект) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКС.ИмяОбработчикаПередВыгрузкой; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО,ОбъектКоллекции, - | Отказ, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать, ВыгрузитьОбъект"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКС); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Значение); + ПараметрыОбработчика.Добавить(ТипПриемника); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ИмяПКОВидСубконто); + ПараметрыОбработчика.Добавить(Пусто); + ПараметрыОбработчика.Добавить(Выражение); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(НеЗамещать); + ПараметрыОбработчика.Добавить(ВыгрузитьОбъект); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКС.ИмяОбработчикаПередВыгрузкой, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКС = ПараметрыОбработчика[5]; + ПКО = ПараметрыОбработчика[6]; + ОбъектКоллекции = ПараметрыОбработчика[7]; + Отказ = ПараметрыОбработчика[8]; + Значение = ПараметрыОбработчика[9]; + ТипПриемника = ПараметрыОбработчика[10]; + ИмяПКО = ПараметрыОбработчика[11]; + ИмяПКОВидСубконто = ПараметрыОбработчика[12]; + Пусто = ПараметрыОбработчика[13]; + Выражение = ПараметрыОбработчика[14]; + УзелКоллекцииСвойств = ПараметрыОбработчика[15]; + НеЗамещать = ПараметрыОбработчика[16]; + ВыгрузитьОбъект = ПараметрыОбработчика[17]; КонецПроцедуры @@ -16465,14 +16831,51 @@ Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, ИмяПКОВидСубконто, ВыгрузитьОбъект) + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКС); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Значение); + ПараметрыОбработчика.Добавить(КлючИЗначение); + ПараметрыОбработчика.Добавить(ВидСубконто); + ПараметрыОбработчика.Добавить(Субконто); + ПараметрыОбработчика.Добавить(Пусто); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКОСвойств); + ПараметрыОбработчика.Добавить(УзелСвойства); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(ИмяПКОВидСубконто); + ПараметрыОбработчика.Добавить(ВыгрузитьОбъект); - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКС.ИмяОбработчикаПриВыгрузке; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - | ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, Пусто, - | ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств,ИмяПКОВидСубконто, ВыгрузитьОбъект"; + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКС.ИмяОбработчикаПриВыгрузке, ПараметрыОбработчика); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКС = ПараметрыОбработчика[5]; + ПКО = ПараметрыОбработчика[6]; + ОбъектКоллекции = ПараметрыОбработчика[7]; + Отказ = ПараметрыОбработчика[8]; + Значение = ПараметрыОбработчика[9]; + КлючИЗначение = ПараметрыОбработчика[10]; + ВидСубконто = ПараметрыОбработчика[11]; + Субконто = ПараметрыОбработчика[12]; + Пусто = ПараметрыОбработчика[13]; + ИмяПКО = ПараметрыОбработчика[14]; + ПКОСвойств = ПараметрыОбработчика[15]; + УзелСвойства = ПараметрыОбработчика[16]; + УзелКоллекцииСвойств = ПараметрыОбработчика[17]; + ИмяПКОВидСубконто = ПараметрыОбработчика[18]; + ВыгрузитьОбъект = ПараметрыОбработчика[19]; КонецПроцедуры @@ -16481,13 +16884,51 @@ Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, УзелСсылки, УзелКоллекцииСвойств, УзелСубконто) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКС.ИмяОбработчикаПослеВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - | ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто,Субконто, ИмяПКО, - | ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, УзелСсылки, УзелКоллекцииСвойств, УзелСубконто"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКС); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(Значение); + ПараметрыОбработчика.Добавить(КлючИЗначение); + ПараметрыОбработчика.Добавить(ВидСубконто); + ПараметрыОбработчика.Добавить(Субконто); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ИмяПКОВидСубконто); + ПараметрыОбработчика.Добавить(ПКОСвойств); + ПараметрыОбработчика.Добавить(УзелСвойства); + ПараметрыОбработчика.Добавить(УзелСсылки); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(УзелСубконто); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКС.ИмяОбработчикаПослеВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКС = ПараметрыОбработчика[5]; + ПКО = ПараметрыОбработчика[6]; + ОбъектКоллекции = ПараметрыОбработчика[7]; + Отказ = ПараметрыОбработчика[8]; + Значение = ПараметрыОбработчика[9]; + КлючИЗначение = ПараметрыОбработчика[10]; + ВидСубконто = ПараметрыОбработчика[11]; + Субконто = ПараметрыОбработчика[12]; + ИмяПКО = ПараметрыОбработчика[13]; + ИмяПКОВидСубконто = ПараметрыОбработчика[14]; + ПКОСвойств = ПараметрыОбработчика[15]; + УзелСвойства = ПараметрыОбработчика[16]; + УзелСсылки = ПараметрыОбработчика[17]; + УзелКоллекцииСвойств = ПараметрыОбработчика[18]; + УзелСубконто = ПараметрыОбработчика[19]; КонецПроцедуры @@ -16497,24 +16938,68 @@ Процедура ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКГС.ИмяОбработчикаПередОбработкойВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - | ПКО, ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ПКГС); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(КоллекцияОбъектов); + ПараметрыОбработчика.Добавить(НеЗамещать); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(НеОчищать); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКГС.ИмяОбработчикаПередОбработкойВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ПКГС = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + КоллекцияОбъектов = ПараметрыОбработчика[8]; + НеЗамещать = ПараметрыОбработчика[9]; + УзелКоллекцииСвойств = ПараметрыОбработчика[10]; + НеОчищать = ПараметрыОбработчика[11]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКГС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКГС.ИмяОбработчикаПередВыгрузкой; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - | ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ПКГС); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(УзелКоллекцииОбъектов); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКГС.ИмяОбработчикаПередВыгрузкой, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ПКГС = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + ОбъектКоллекции = ПараметрыОбработчика[8]; + УзелКоллекцииСвойств = ПараметрыОбработчика[9]; + УзелКоллекцииОбъектов = ПараметрыОбработчика[10]; КонецПроцедуры @@ -16522,12 +17007,35 @@ ПКГС, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, УзелКоллекцииСвойств, СтандартнаяОбработка) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКГС.ИмяОбработчикаПриВыгрузке; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, - | ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, УзелКоллекцииСвойств, СтандартнаяОбработка"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ПКГС); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(УзелКоллекцииОбъектов); + ПараметрыОбработчика.Добавить(УзелОбъектаКоллекции); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(СтандартнаяОбработка); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКГС.ИмяОбработчикаПриВыгрузке, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ПКГС = ПараметрыОбработчика[6]; + ОбъектКоллекции = ПараметрыОбработчика[7]; + УзелКоллекцииОбъектов = ПараметрыОбработчика[8]; + УзелОбъектаКоллекции = ПараметрыОбработчика[9]; + УзелКоллекцииСвойств = ПараметрыОбработчика[10]; + СтандартнаяОбработка = ПараметрыОбработчика[11]; КонецПроцедуры @@ -16535,71 +17043,153 @@ ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелКоллекцииСвойств, УзелОбъектаКоллекции) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКГС.ИмяОбработчикаПослеВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, - | ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелКоллекцииСвойств, УзелОбъектаКоллекции"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ПКГС); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ОбъектКоллекции); + ПараметрыОбработчика.Добавить(УзелКоллекцииОбъектов); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(УзелОбъектаКоллекции); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКГС.ИмяОбработчикаПослеВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ПКГС = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + ОбъектКоллекции = ПараметрыОбработчика[8]; + УзелКоллекцииОбъектов = ПараметрыОбработчика[9]; + УзелКоллекцииСвойств = ПараметрыОбработчика[10]; + УзелОбъектаКоллекции = ПараметрыОбработчика[11]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = ПКГС.ИмяОбработчикаПослеОбработкиВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - | ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ПКГС); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(УзелКоллекцииСвойств); + ПараметрыОбработчика.Добавить(УзелКоллекцииОбъектов); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, ПКГС.ИмяОбработчикаПослеОбработкиВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + Приемник = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ПКГС = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + УзелКоллекцииСвойств = ПараметрыОбработчика[8]; + УзелКоллекцииОбъектов = ПараметрыОбработчика[9]; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики ПВД Процедура ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ВыборкаДанных); - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПередОбработкой; - ПараметрыОбработчика = "Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных"; + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Правило.ИмяОбработчикаПередОбработкой, ПараметрыОбработчика); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + Отказ = ПараметрыОбработчика[0]; + ИмяПКО = ПараметрыОбработчика[1]; + Правило = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ВыборкаДанных = ПараметрыОбработчика[4]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, Правило, ИсходящиеДанные) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПослеОбработки; - ПараметрыОбработчика = "ИмяПКО, Правило, ИсходящиеДанные"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Правило.ИмяОбработчикаПослеОбработки, ПараметрыОбработчика); + + ИмяПКО = ПараметрыОбработчика[0]; + Правило = ПараметрыОбработчика[1]; + ИсходящиеДанные = ПараметрыОбработчика[2]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПВД_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПередВыгрузкой; - ПараметрыОбработчика = "ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(Объект); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Правило.ИмяОбработчикаПередВыгрузкой, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + ИмяПКО = ПараметрыОбработчика[2]; + Правило = ПараметрыОбработчика[3]; + ВходящиеДанные = ПараметрыОбработчика[4]; + ИсходящиеДанные = ПараметрыОбработчика[5]; + Объект = ПараметрыОбработчика[6]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПВД_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки, Правило) - ИмяОбработки = "ОбработкаВыгрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПослеВыгрузки; - ПараметрыОбработчика = "ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(УзелСсылки); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаВыгрузки, Правило.ИмяОбработчикаПослеВыгрузки, ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Объект = ПараметрыОбработчика[1]; + ИмяПКО = ПараметрыОбработчика[2]; + ВходящиеДанные = ПараметрыОбработчика[3]; + ИсходящиеДанные = ПараметрыОбработчика[4]; + УзелСсылки = ПараметрыОбработчика[5]; КонецПроцедуры @@ -16608,31 +17198,51 @@ Процедура ВыполнитьОбработчик_ПОД_ПередОбработкойПравила(Правило, Отказ, ИсходящиеДанные, ВыборкаДанных) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПередОбработкой; - ПараметрыОбработчика = "Правило, Отказ, ИсходящиеДанные, ВыборкаДанных"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ВыборкаДанных); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПередОбработкой, ПараметрыОбработчика); + + Правило = ПараметрыОбработчика[0]; + Отказ = ПараметрыОбработчика[1]; + ИсходящиеДанные = ПараметрыОбработчика[2]; + ВыборкаДанных = ПараметрыОбработчика[3]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПОД_ПередУдалениемОбъекта(Правило, Объект, Отказ, УдалитьНепосредственно, ВходящиеДанные) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПередУдалением; - ПараметрыОбработчика = "Правило, Объект, Отказ, УдалитьНепосредственно, ВходящиеДанные"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Правило); + ПараметрыОбработчика.Добавить(Объект); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(УдалитьНепосредственно); + ПараметрыОбработчика.Добавить(ВходящиеДанные); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПередУдалением, ПараметрыОбработчика); + + Правило = ПараметрыОбработчика[0]; + Объект = ПараметрыОбработчика[1]; + Отказ = ПараметрыОбработчика[2]; + УдалитьНепосредственно = ПараметрыОбработчика[3]; + ВходящиеДанные = ПараметрыОбработчика[4]; КонецПроцедуры Процедура ВыполнитьОбработчик_ПОД_ПослеОбработкиПравила(Правило) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = Правило.ИмяОбработчикаПослеОбработки; - ПараметрыОбработчика = "Правило"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Правило); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, Правило.ИмяОбработчикаПослеОбработки, ПараметрыОбработчика); + + Правило = ПараметрыОбработчика[0]; КонецПроцедуры @@ -16641,11 +17251,18 @@ Процедура ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение) - ИмяОбработки = "ОбработкаЗагрузки"; - ИмяОбработчика = "Параметры_" + Имя + "_ПослеЗагрузкиПараметра"; - ПараметрыОбработчика = "Имя, Значение"; + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(Имя); + ПараметрыОбработчика.Добавить(Значение); - Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + ИмяОбработчика = "Параметры_[ИмяПараметра]_ПослеЗагрузкиПараметра"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПараметра]", Имя); + + РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( + ОбработкаЗагрузки, ИмяОбработчика, ПараметрыОбработчика); + + Имя = ПараметрыОбработчика[0]; + Значение = ПараметрыОбработчика[1]; КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index f078cfc34..ae68a7846 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -9,7 +8,7 @@ // Выполняет загрузку данных из файла сообщения обмена // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена // Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач ЗагрузитьТолькоПараметры) Экспорт @@ -45,7 +44,7 @@ // Выполняет выгрузку данных в файл сообщения обмена // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при обработке сообщения обмена // Процедура ВыполнитьВыгрузкуДанных(Отказ) Экспорт @@ -79,7 +78,7 @@ // во временном каталоге пользователя операционной системы. // // Параметры: -// ИмяФайла – Строка – полное имя файла сообщения обмена для выгрузки или загрузки данных +// ИмяФайла - Строка - полное имя файла сообщения обмена для выгрузки или загрузки данных // Процедура УстановитьИмяФайлаСообщенияОбмена(Знач ИмяФайла) Экспорт @@ -292,6 +291,18 @@ НачатьТранзакцию(); Попытка + ДублиПредопределенных = ""; + Отказ = Ложь; + ОписаниеОтказа = ""; + ОбъектыИдентификаторов = Новый Массив; + + Если НайденыНеУникальныеЗаписи("Справочник.ИдентификаторыОбъектовМетаданных") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибкиНеУникальностиЗаписей(), + НСтр("ru = 'Перед загрузкой идентификаторов объектов метаданных + |в справочнике найдены не уникальные записи.'")); + КонецЕсли; + Пока ВозможностьЧтенияXML(ЧтениеСообщения.ЧтениеXML) Цикл Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML); @@ -299,17 +310,54 @@ Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда - Данные.ДополнительныеСвойства.Вставить("ЗагрузкаПараметровРаботыПрограммы"); - Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Если ТипЗнч(Данные) = Тип("СправочникОбъект.ИдентификаторыОбъектовМетаданных") Тогда + ОбъектыИдентификаторов.Добавить(Данные); + Продолжить; + + ИначеЕсли ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда // Это предопределенный элемент. + + Если Не Данные.Предопределенный Тогда + Продолжить; // Обрабатываются только предопределенные. + КонецЕсли; + + Иначе // Тип("УдалениеОбъекта") + + // 1. Ссылки идентификаторов удаляются независимо во всех узлах + // через механизм пометки удаления и удаления помеченных объектов. + // 2. Удаление предопределенных не выгружается. + Продолжить; КонецЕсли; - Данные.Записать(); - + ЗаписатьСсылкуПредопределенныхДанных(Данные); + ДобавитьОписаниеДублейПредопределенного(Данные, ДублиПредопределенных, Отказ, ОписаниеОтказа); КонецЦикла; + Если Отказ Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка важных изменений не выполнена. + |При загрузке предопределенных элементов найдены не уникальные записи. + |По следующим причинам продолжение невозможно. + |%1'"), + ОписаниеОтказа); + КонецЕсли; + + Если ЗначениеЗаполнено(ДублиПредопределенных) Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Предопределенные элементы.Найдены не уникальные записи.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При загрузке предопределенных элементов найдены не уникальные записи. + |%1'"), + ДублиПредопределенных)); + КонецЕсли; + ОбновитьУдалениеПредопределенных(); + Справочники.ИдентификаторыОбъектовМетаданных.ЗагрузитьДанныеВПодчиненныйУзел(ОбъектыИдентификаторов); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -349,6 +397,167 @@ КонецФункции +Процедура ЗаписатьСсылкуПредопределенныхДанных(Данные) + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Данные.Ссылка)); + Если МетаданныеОбъекта = Неопределено Тогда + Возврат; + КонецЕсли; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Данные.Ссылка); + + Если Данные.ЭтоНовый() Тогда + Если ОбщегоНазначения.ЭтоСправочник(МетаданныеОбъекта) + Или ОбщегоНазначения.ЭтоПланВидовХарактеристик(МетаданныеОбъекта) Тогда + + Объект = МенеджерОбъекта.СоздатьЭлемент(); + + ИначеЕсли ОбщегоНазначения.ЭтоПланСчетов(МетаданныеОбъекта) Тогда + Объект = МенеджерОбъекта.СоздатьСчет(); + + ИначеЕсли ОбщегоНазначения.ЭтоПланВидовРасчета(МетаданныеОбъекта) Тогда + Объект = МенеджерОбъекта.СоздатьВидРасчета(); + КонецЕсли; + Иначе + Объект = Данные.Ссылка.ПолучитьОбъект(); + КонецЕсли; + + Если Данные.ЭтоНовый() Тогда + Объект.УстановитьСсылкуНового(Данные.ПолучитьСсылкуНового()); + Объект.ИмяПредопределенныхДанных = Данные.ИмяПредопределенныхДанных; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + + ИначеЕсли Объект.ИмяПредопределенныхДанных <> Данные.ИмяПредопределенныхДанных Тогда + Объект.ИмяПредопределенныхДанных = Данные.ИмяПредопределенныхДанных; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + Иначе + // Если предопределенный элемент существует предварительная загрузка не требуется. + КонецЕсли; + + Данные = Объект; + +КонецПроцедуры + +Процедура ДобавитьОписаниеДублейПредопределенного(ЗаписанныйОбъект, ДублиПредопределенных, Отказ, ОписаниеОтказа) + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ЗаписанныйОбъект.Ссылка)); + Если МетаданныеОбъекта = Неопределено Тогда + Возврат; + КонецЕсли; + + Таблица = МетаданныеОбъекта.ПолноеИмя(); + ИмяПредопределенныхДанных = ЗаписанныйОбъект.ИмяПредопределенныхДанных; + Ссылка = ЗаписанныйОбъект.Ссылка; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", ИмяПредопределенныхДанных); + Запрос.Текст = + "ВЫБРАТЬ + | ТекущаяТаблица.Ссылка КАК Ссылка, + | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", Таблица); + Выборка = Запрос.Выполнить().Выбрать(); + + ИдентификаторыСсылокДублей = ""; + КоличествоДублей = 0; + НайденныеСсылки = Новый Соответствие; + ЗагружаемаяСсылкаНайдена = Ложь; + + Пока Выборка.Следующий() Цикл + // Определение не уникальных записей, которые имеют отношение к предопределенным элементам. + Если НайденныеСсылки.Получить(Выборка.Ссылка) = Неопределено Тогда + НайденныеСсылки.Вставить(Выборка.Ссылка, 1); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибкиНеУникальностиЗаписей(), + НСтр("ru = 'При загрузке предопределенных элементов найдены не уникальные записи.'")); + КонецЕсли; + // Определение дублей предопределенных элементов. + Если Ссылка = Выборка.Ссылка И Не ЗагружаемаяСсылкаНайдена Тогда + ЗагружаемаяСсылкаНайдена = Истина; + Продолжить; + КонецЕсли; + КоличествоДублей = КоличествоДублей + 1; + Если ЗначениеЗаполнено(ИдентификаторыСсылокДублей) Тогда + ИдентификаторыСсылокДублей = ИдентификаторыСсылокДублей + ","; + КонецЕсли; + ИдентификаторыСсылокДублей = ИдентификаторыСсылокДублей + + Строка(Выборка.Ссылка.УникальныйИдентификатор()); + КонецЦикла; + + Если КоличествоДублей = 0 Тогда + Возврат; + КонецЕсли; + + ЗаписатьВЖурнал = Истина; + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриОбнаруженииНеУникальностиПредопределенного"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Описание = ""; + Обработчик.Модуль.ПриОбнаруженииНеУникальностиПредопределенного( + ЗаписанныйОбъект, ЗаписатьВЖурнал, Отказ, ОписаниеОтказа); + + Если ЗначениеЗаполнено(Описание) Тогда + ОписаниеОтказа = ОписаниеОтказа + Символы.ПС + СокрЛП(Описание) + Символы.ПС; + КонецЕсли; + КонецЦикла; + + Если ЗаписатьВЖурнал Тогда + Если КоличествоДублей = 1 Тогда + Шаблон = НСтр("ru = '(загружаемая ссылка: %1, ссылка дубля: %2)'"); + Иначе + Шаблон = НСтр("ru = '(загружаемая ссылка: %1, ссылки дублей: %2)'"); + КонецЕсли; + ДублиПредопределенных = ДублиПредопределенных + Символы.ПС + + Таблица + "." + ИмяПредопределенныхДанных + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + Строка(Ссылка.УникальныйИдентификатор()), + ИдентификаторыСсылокДублей) + + Символы.ПС; + КонецЕсли; + +КонецПроцедуры + +Функция НайденыНеУникальныеЗаписи(Таблица) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | + |СГРУППИРОВАТЬ ПО + | ИдентификаторыОбъектовМетаданных.Ссылка + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(ИдентификаторыОбъектовМетаданных.Ссылка) > 1"; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +Функция ШаблонОшибкиНеУникальностиЗаписей() + Возврат + НСтр("ru = 'Загрузка важных изменений не выполнена. + |%1 + |Требуется исправление информационной базы. + |1. Откройте конфигуратор, перейдите в меню Администрирование, + | выберите пункт ""Тестирование и исправление ..."". + |2. В открывшейся форме + | - включите только пункт ""Проверка логической целостности информационной базы""; + | - выберите вариант ""Тестирование и исправление"", а не ""Только тестирование""; + | - нажмите Выполнить. + |3. После этого запустите 1С:Предприятие и выполните повторную синхронизацию данных.'"); +КонецФункции + Процедура ОбновитьУдалениеПредопределенных() УстановитьПривилегированныйРежим(Истина); @@ -361,11 +570,13 @@ Для каждого Коллекция Из КоллекцииМетаданных Цикл Для Каждого ОбъектМетаданных Из Коллекция Цикл + Если ОбъектМетаданных = Метаданные.Справочники.ИдентификаторыОбъектовМетаданных Тогда + Продолжить; // Обновляется в частном порядке в процедуре обновления идентификаторов. + КонецЕсли; ОбновитьУдалениеПредопределенного(ОбъектМетаданных.ПолноеИмя()); КонецЦикла; КонецЦикла; - КонецПроцедуры Процедура ОбновитьУдалениеПредопределенного(Таблица) @@ -373,8 +584,8 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ТекущаяТаблица.Ссылка, - | ТекущаяТаблица.ИмяПредопределенныхДанных + | ТекущаяТаблица.Ссылка КАК Ссылка, + | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ @@ -388,15 +599,11 @@ Если Лев(Выборка.ИмяПредопределенныхДанных, 1) = "#" Тогда - ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ТекущийОбъект.ИмяПредопределенныхДанных = ""; - ТекущийОбъект.ПометкаУдаления = Истина; + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.ИмяПредопределенныхДанных = ""; + Объект.ПометкаУдаления = Истина; - ТекущийОбъект.ОбменДанными.Загрузка = Истина; - ТекущийОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - ТекущийОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - - ТекущийОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; @@ -458,4 +665,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 2ef5ff11c..827bf4090 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,8 +24,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОсновныеДействияФормыПродолжить(Команда) @@ -59,14 +60,17 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -&НаСервере +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() УстановитьПривилегированныйРежим(Истина); - ОбновлениеИнформационнойБазы.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html index 013df553f..674b34d3d 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html @@ -1,4 +1,4 @@ - +

      УСЛОВИЯ РАСПРОСТРАНЕНИЯ ОБНОВЛЕНИЙ ПРОГРАММ "1С:ПРЕДПРИЯТИЕ"

      Обновления к программам производства фирмы "1С", также как и сами программы, являются объектами исключительного права фирмы "1С" и распространяются по правилам, установленным фирмой "1С" как правообладателем в соответствии со ст. 1225 Гражданского кодекса.

      diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl new file mode 100644 index 000000000..59efbca6f --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl @@ -0,0 +1,7 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + РаботаВБезопасномРежимеКлиент.ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности(); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form new file mode 100644 index 000000000..8ebc6e850 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Form.form @@ -0,0 +1,212 @@ + + + + <key>ru</key> + <value>Пожалуйста, подождите...</value> + + + ДекорацияКартинка + 1 + + <key>ru</key> + <value>Декорация картинка</value> + + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 2 + true + + 8 + true + 3 + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияЗаголовок + 4 + + <key>ru</key> + <value>Выполняется ожидание применения изменений в +настройках профилей безопасности в кластере серверов. + +Это может занять длительное время (в пределах минуты). +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияЗаголовокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДекорацияЗаголовокКонтекстноеМеню + 5 + true + + Label + true + true + true + true + + Left + Center + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + + true + + + true + +
      true
      +
      + + Длительность + + <key>ru</key> + <value>Длительность</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 3 + + UUID + + + true + + + true + + + + ИтерацияПроверки + + <key>ru</key> + <value>Итерация проверки</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + Длительность + + Number + + 10 + + + + + АдресХранилища + + String + + + + + РежимВосстановления + + Boolean + + + + + + + +
      diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl new file mode 100644 index 000000000..236347cd3 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl @@ -0,0 +1,162 @@ +&НаКлиенте +Перем РазрешитьЗакрытие; +&НаКлиенте +Перем ОжиданиеЗавершено; +&НаКлиенте +Перем ФиксацияЗавершена; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Длительность = Параметры.Длительность; + + ХранилищеРезультатаОбработкиЗапросов = Параметры.АдресХранилища; + РезультатОбработкиЗапросов = ПолучитьИзВременногоХранилища(ХранилищеРезультатаОбработкиЗапросов); + + НачатьФиксациюПримененияЗапросов(РезультатОбработкиЗапросов.ИдентификаторыЗапросов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + РазрешитьЗакрытие = Ложь; + + Если Длительность > 0 Тогда + ОжиданиеЗавершено = Ложь; + ПодключитьОбработчикОжидания("ПослеОжиданияПримененияНастроекВКластере", Длительность, Истина); + Иначе + ОжиданиеЗавершено = Истина; + КонецЕсли; + + ФиксацияЗавершена = Ложь; + ИтерацияПроверки = 1; + ПодключитьОбработчикОжиданияОбработкиЗапросов(3); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Не РазрешитьЗакрытие Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура НачатьФиксациюПримененияЗапросов(Знач ИдентификаторыЗапросов) + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(ИдентификаторыЗапросов); + + Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежимеСлужебный.ПрименитьЗапросы", ПараметрыЗадания); + ИдентификаторЗадания = Задание.УникальныйИдентификатор; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьФиксациюПримененияЗапросов() + + Попытка + Готовность = ФиксацияПримененияЗапросовЗавершена(ИдентификаторЗадания); + Исключение + Закрыть(КодВозвратаДиалога.Отмена); + ВызватьИсключение; + КонецПопытки; + + Если Готовность Тогда + ЗавершитьФиксациюПримененияЗапросов(); + Иначе + + ИтерацияПроверки = ИтерацияПроверки + 1; + + Если ИтерацияПроверки = 2 Тогда + ПодключитьОбработчикОжиданияОбработкиЗапросов(5); + ИначеЕсли ИтерацияПроверки = 3 Тогда + ПодключитьОбработчикОжиданияОбработкиЗапросов(8); + Иначе + ПодключитьОбработчикОжиданияОбработкиЗапросов(10); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ФиксацияПримененияЗапросовЗавершена(Знач ИдентификаторЗадания) + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + + Если Задание <> Неопределено + И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + Возврат Ложь; + КонецЕсли; + + Если Задание = Неопределено Тогда + ВызватьИсключение(НСтр("ru = 'При обработке запросов произошла ошибка - не найдено задание обработки запросов.'")); + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ВызватьИсключение(ПодробноеПредставлениеОшибки(ОшибкаЗадания)); + Иначе + ВызватьИсключение(НСтр("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..25951952a --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Form.form @@ -0,0 +1,364 @@ + + + + <key>ru</key> + <value>Пожалуйста, подождите...</value> + + + ГруппаДекорации + 1 + + ДекорацияКартинка + 3 + + <key>ru</key> + <value>Декорация картинка</value> + + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 4 + true + + 8 + true + 3 + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияЗаголовок + 6 + + <key>ru</key> + <value>Выполняется проверка необходимости внесения изменений в +настройки профилей безопасности в кластере серверов. + +Это может занять длительное время (в пределах минуты). +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияЗаголовокРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + ДекорацияЗаголовокКонтекстноеМеню + 7 + true + + Label + true + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа декорации</value> + + + ru + Группа декорации + + + ГруппаДекорацииРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКоманды + 9 + + Закрыть + 11 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа команды</value> + + + ru + Группа команды + + + ГруппаКомандыРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + CommandBar + + Right + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + + true + + + true + +
      true
      +
      + + РазрешитьЗакрытие + + <key>ru</key> + <value>Разрешить закрытие</value> + + 2 + + Boolean + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 3 + + String + + + + true + + + true + + + + ИтерацияПроверки + + <key>ru</key> + <value>Итерация проверки</value> + + 4 + + Number + + 10 + + + + 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> + + 7 + + Boolean + + + true + + + true + + + + Идентификаторы + + + + РежимВосстановления + + Boolean + + + + РежимПроверки + + Boolean + + + + РежимВключения + + Boolean + + + + РежимОтключения + + Boolean + + + + + + + +
      diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl new file mode 100644 index 000000000..2e588d244 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl @@ -0,0 +1,221 @@ +&НаКлиенте +Перем ЗаданиеАктивно; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + АдресХранилища = Параметры.АдресХранилища; + + Элементы.Закрыть.Доступность = Не Параметры.РежимПроверки; + + НачатьОбработкуЗапросов( + Параметры.Идентификаторы, + Параметры.РежимВключения, + Параметры.РежимОтключения, + Параметры.РежимВосстановления, + Параметры.РежимПроверки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЗаданиеАктивно = Истина; + ИтерацияПроверки = 1; + ПодключитьОбработчикОжиданияОбработкиЗапросов(3); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если ЗаданиеАктивно Тогда + + ОтменитьОбработкуЗапросов(ИдентификаторЗадания); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция НачатьОбработкуЗапросов(Знач Запросы, Знач РежимВключения, РежимОтключения, Знач РежимВосстановления, Знач РежимПроверкиПрименения) + + ПоместитьВоВременноеХранилище(Неопределено, АдресХранилища); + + Если РежимВключения Тогда + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(АдресХранилища); + + ПараметрыВызоваМетода = Новый Массив(); + ПараметрыВызоваМетода.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовОбновления"); + ПараметрыВызоваМетода.Добавить(ПараметрыЗадания); + + ИначеЕсли РежимОтключения Тогда + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(АдресХранилища); + + ПараметрыВызоваМетода = Новый Массив(); + ПараметрыВызоваМетода.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовОтключения"); + ПараметрыВызоваМетода.Добавить(ПараметрыЗадания); + + ИначеЕсли РежимВосстановления Тогда + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(АдресХранилища); + + ПараметрыВызоваМетода = Новый Массив(); + ПараметрыВызоваМетода.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовВосстановления"); + ПараметрыВызоваМетода.Добавить(ПараметрыЗадания); + + ИначеЕсли РежимПроверкиПрименения Тогда + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(АдресХранилища); + + ПараметрыВызоваМетода = Новый Массив(); + ПараметрыВызоваМетода.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовПроверкиПрименения"); + ПараметрыВызоваМетода.Добавить(ПараметрыЗадания); + + Иначе + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить(Запросы); + ПараметрыЗадания.Добавить(АдресХранилища); + + ПараметрыВызоваМетода = Новый Массив(); + ПараметрыВызоваМетода.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросов"); + ПараметрыВызоваМетода.Добавить(ПараметрыЗадания); + + КонецЕсли; + + Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", + ПараметрыВызоваМетода, + , + НСтр("ru = 'Обработка запросов на использование внешних ресурсов...'")); + + ИдентификаторЗадания = Задание.УникальныйИдентификатор; + + Возврат АдресХранилища; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьОбработкуЗапросов() + + Попытка + Готовность = ЗапросыОбработаны(ИдентификаторЗадания); + Исключение + ЗаданиеАктивно = Ложь; + Закрыть(КодВозвратаДиалога.Отмена); + ВызватьИсключение; + КонецПопытки; + + Если Готовность Тогда + ЗаданиеАктивно = Ложь; + ЗавершитьОбработкуЗапросов(); + Иначе + + ИтерацияПроверки = ИтерацияПроверки + 1; + + Если ИтерацияПроверки = 2 Тогда + ПодключитьОбработчикОжиданияОбработкиЗапросов(5); + ИначеЕсли ИтерацияПроверки = 3 Тогда + ПодключитьОбработчикОжиданияОбработкиЗапросов(8); + Иначе + ПодключитьОбработчикОжиданияОбработкиЗапросов(10); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗапросыОбработаны(Знач ИдентификаторЗадания) + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + + Если Задание <> Неопределено + И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + Возврат Ложь; + КонецЕсли; + + Если Задание = Неопределено Тогда + ВызватьИсключение(НСтр("ru = 'При обработке запросов произошла ошибка - не найдено задание обработки запросов.'")); + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ВызватьИсключение(ПодробноеПредставлениеОшибки(ОшибкаЗадания)); + Иначе + ВызватьИсключение(НСтр("ru = 'При обработке запросов произошла ошибка - задание обработки запросов завершилось с неизвестной ошибкой.'")); + КонецЕсли; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + ВызватьИсключение(НСтр("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..31f5f722f --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form @@ -0,0 +1,2654 @@ + + + + ГруппаСтраницыГлобальный + 205 + + СтраницаДействия + 209 + + ГруппаСтраницы + 61 + + СтраницаРазрешения + 63 + + ГруппаШапка + 161 + + Предупреждение + 69 + + <key>ru</key> + <value>Предупреждение</value> + + true + true + + true + + + ПредупреждениеExtendedTooltip + 71 + Label + true + true + + Left + + + + ПредупреждениеКонтекстноеМеню + 70 + true + + 5 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ШапкаТекст + 74 + + <key>ru</key> + <value>В кластере серверов 1С:Предприятия для данной информационной базы настроены профили безопасности, +ограничивающие доступ к внешним ресурсам. + +Для продолжения работы требуется внести изменения в состав разрешений в профиле безопасности: +</value> + + true + true + + true + + + ШапкаТекстРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ШапкаТекстКонтекстноеМеню + 75 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа шапка</value> + + + ru + Группа шапка + + + ГруппаШапкаРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаШапкаРежимВосстановления + 228 + + ПредупреждениеРежимВосстановления + 230 + + <key>ru</key> + <value>Предупреждение</value> + + true + true + + true + + + ПредупреждениеРежимВосстановленияРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + + ПредупреждениеРежимВосстановленияКонтекстноеМеню + 231 + true + + 5 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ШапкаТекстРежимВосстановления + 233 + + <key>ru</key> + <value>При восстановлении профилей безопасности в кластере серверов 1С:Предприятия будут предоставлены +следующие разрешения: </value> + + true + true + + true + + + ШапкаТекстРежимВосстановленияРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + ШапкаТекстРежимВосстановленияКонтекстноеМеню + 234 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа шапка</value> + + + ru + Группа шапка + + + ГруппаШапкаРежимВосстановленияРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешений + 236 + + ПредупреждениеРежимВосстановленияПослеПредоставленияРазрешений + 238 + + <key>ru</key> + <value>Предупреждение</value> + + true + true + + true + + + ПредупреждениеРежимВосстановленияПослеПредоставленияРазрешенийРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + ПредупреждениеРежимВосстановленияПослеПредоставленияРазрешенийКонтекстноеМеню + 239 + true + + 5 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ШапкаТекстРежимВосстановленияПослеПредоставленияРазрешений + 241 + + <key>ru</key> + <value>В кластере серверов 1С:Предприятия для данной информационной базы настроены профили безопасности, +ограничивающие доступ к внешним ресурсам. + +Ранее были предоставлены разрешения в профилях безопасности в кластере серверов, +которые более не требуются для работы программы. +Нужно удалить следующие разрешения из профилей безопасности в кластере серверов: +</value> + + true + true + + true + + + ШапкаТекстРежимВосстановленияПослеПредоставленияРазрешенийРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + ШапкаТекстРежимВосстановленияПослеПредоставленияРазрешенийКонтекстноеМеню + 242 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа шапка</value> + + + ru + Группа шапка + + + ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешенийРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПредставлениеРазрешений + 119 + true + true + + true + + + ПредставлениеРазрешений + + None + + ПредставлениеРазрешенийРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ПредставлениеРазрешенийКонтекстноеМеню + 120 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 85 + true + 18 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страница разрешения</value> + + + СтраницаРазрешенияРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПодключение + 65 + + ГруппаОшибка + 83 + + ДекорацияОшибка + 165 + + <key>ru</key> + <value>Декорация ошибка</value> + + true + true + + true + + + ДекорацияОшибкаРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + ДекорацияОшибкаКонтекстноеМеню + 166 + true + + 5 + true + 2 + true + + + CommonPicture.Ошибка32 + + + + + ГруппаОписаниеОшибки + 163 + + Ошибка + 85 + + <key>ru</key> + <value>Не удалось настроить разрешения в профиле безопасности:</value> + + true + true + + true + + + ОшибкаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + ОшибкаКонтекстноеМеню + 86 + true + + Label + true + true + + Left + + + + ТекстОшибки + 88 + true + true + + true + + + ТекстОшибки + + None + + ТекстОшибкиРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ТекстОшибкиКонтекстноеМеню + 89 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + false + true + true + true + true + true + Normal + + + + ГруппаОшибкаВерсииCOMСоединителя + 190 + + ДекорацияОшибкаВерсииCOMСоединителя + 192 + + <key>ru</key> + <value>При ошибке версии компоненты "comcntr", требуется выполнить ее регистрацию (потребуется перезапуск сеанса).</value> + + true + true + + true + + + ДекорацияОшибкаВерсииCOMСоединителяРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + ДекорацияОшибкаВерсииCOMСоединителяКонтекстноеМеню + 193 + true + + Label + 55 + true + true + true + + Left + + + + ПеререгистрироватьCOMСоединитель + 195 + + <key>ru</key> + <value>Зарегистрировать</value> + + true + true + + true + + + ПеререгистрироватьCOMСоединительРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + UsualButton + Form.Command.ПеререгистрироватьCOMСоединитель + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа ошибка версии COMСоединителя</value> + + + ru + Группа ошибка версии COMСоединителя + + + ГруппаОшибкаВерсииCOMСоединителяРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа описание ошибки</value> + + + ru + Группа описание ошибки + + + ГруппаОписаниеОшибкиРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа ошибка</value> + + + ГруппаОшибкаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПараметрыПодключенияККластеру + 126 + + Пояснение + 91 + + <key>ru</key> + <value>Для настройки разрешений в профиле безопасности укажите параметры подключения к кластеру серверов, +в котором развернута информационная база:</value> + + true + true + + true + + + ПояснениеРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 92 + true + + Label + 75 + true + true + + Left + + + + ОсновныеПараметры + 159 + + ТипПодключения + 128 + true + true + + true + + + ТипПодключения + + + OnChange + ТипПодключенияПриИзменении + + + ТипПодключенияРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ТипПодключенияКонтекстноеМеню + 129 + true + + InputField + Enter + true + Left + true + + 40 + true + true + false + true + true + true + + + ru + COM-соединение с агентом сервера + + + COM + + + + + ru + Подключение через сервер администрирования (ras) + + + RAS + + + + Style.ФонУправляющегоПоля + + Normal + + + + ПортКластераСерверов + 17 + true + true + + true + + + ПортКластераСерверов + + + ПортКластераСерверовExtendedTooltip + 59 + Label + true + true + + Left + + + + ПортКластераСерверовКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Основные параметры</value> + + + ru + Основные параметры + + + ОсновныеПараметрыРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СтраницыПараметрыПодключенияККластеруПоПротоколам + 131 + + СтраницаПараметрыПодключенияККластеруCOM + 133 + + ГруппаПараметрыПодключенияККластеруCOM + 152 + + АдресАгентаСервера + 137 + + <key>ru</key> + <value>Адрес агента сервера</value> + + true + true + + true + + + АдресАгентаСервера + + + АдресАгентаСервераРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + АдресАгентаСервераКонтекстноеМеню + 138 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + ru + Имя или IP-адрес сервера + + + + + ПортАгентаСервера + 140 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортАгентаСервера + + + ПортАгентаСервераРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ПортАгентаСервераКонтекстноеМеню + 141 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры подключения к кластеру COM</value> + + + ГруппаПараметрыПодключенияККластеруCOMРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница параметры подключения к кластеру COM</value> + + + ru + Страница параметры подключения к кластеру COM + + + СтраницаПараметрыПодключенияККластеруCOMРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПараметрыПодключенияККластеруRAS + 135 + + ГруппаПараметрыПодключенияККластеруRAS + 157 + + АдресСервераАдминистрирования + 143 + + <key>ru</key> + <value>Адрес сервера администрирования</value> + + true + true + + true + + + АдресСервераАдминистрирования + + + АдресСервераАдминистрированияРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + АдресСервераАдминистрированияКонтекстноеМеню + 144 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + ru + Имя или IP-адрес сервера + + + + + ПортСервераАдминистрирования + 146 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + ПортСервераАдминистрирования + + + ПортСервераАдминистрированияРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + ПортСервераАдминистрированияКонтекстноеМеню + 147 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры подключения к кластеру RAS</value> + + Ctrl+S + + ГруппаПараметрыПодключенияККластеруRASРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница параметры подключения к кластеру RAS</value> + + + СтраницаПараметрыПодключенияККластеруRASРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы параметры подключения к кластеру по протоколам</value> + + true + + СтраницыПараметрыПодключенияККластеруПоПротоколамРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры подключения к кластеру</value> + + + ru + Группа параметры подключения к кластеру + + + ГруппаПараметрыПодключенияККластеруРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаАвторизация + 180 + + ГруппаКластерТребуетАвторизации + 39 + + ИмяАдминистратораКластера + 10 + + <key>ru</key> + <value>Имя</value> + + true + true + + true + + + ИмяАдминистратораКластера + + + ИмяАдминистратораКластераExtendedTooltip + 54 + Label + true + true + + Left + + + + ИмяАдминистратораКластераКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + Normal + + + + ПарольАдминистратораКластера + 12 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораКластера + + + ПарольАдминистратораКластераExtendedTooltip + 55 + Label + true + true + + Left + + + + ПарольАдминистратораКластераКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Администратор кластера серверов 1С:Предприятие</value> + + true + + ГруппаКластерТребуетАвторизацииExtendedTooltip + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Button + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаАдминистрирование + 24 + + АдминистраторИБ + 25 + + <key>ru</key> + <value>Имя</value> + + true + true + + true + + + АдминистраторИБ + + + ru + Администратор информационной базы, от имени которого выполняется настройка + + + АдминистраторИБExtendedTooltip + 49 + Label + true + true + + Left + + + + АдминистраторИБКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + false + true + true + true + Normal + + + + ПарольАдминистратораИБ + 27 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораИБ + + + ru + Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов + + + ПарольАдминистратораИБExtendedTooltip + 50 + Label + true + true + + Left + + + + ПарольАдминистратораИБКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Администратор информационной базы:</value> + + true + + ГруппаАдминистрированиеExtendedTooltip + 43 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Button + NormalSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа авторизация</value> + + + ru + Группа авторизация + + + ГруппаАвторизацияРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ДекорацияОтступ + 217 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 218 + true + + Label + true + true + true + + Left + + + + ГруппаПредупреждениеОНеобходимостиПерезапуска + 197 + + ДекорацияПредупреждениеОНеобходимостиПерезапускаКартинка + 199 + + <key>ru</key> + <value>Декорация предупреждение о необходимости перезапуска картинка</value> + + true + true + + true + + + ДекорацияПредупреждениеОНеобходимостиПерезапускаКартинкаРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + ДекорацияПредупреждениеОНеобходимостиПерезапускаКартинкаКонтекстноеМеню + 200 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + ДекорацияПредупреждениеОНеобходимостиПерезапускаНадпись + 202 + + <key>ru</key> + <value>После внесения изменений в настройки профилей безопасности в кластере серверов +программа будет автоматически перезапущена.</value> + + true + true + + true + + + ДекорацияПредупреждениеОНеобходимостиПерезапускаНадписьРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + ДекорацияПредупреждениеОНеобходимостиПерезапускаНадписьКонтекстноеМеню + 203 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение о необходимости перезапуска</value> + + true + + ГруппаПредупреждениеОНеобходимостиПерезапускаРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница подключение</value> + + Ctrl+S + + СтраницаПодключениеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы</value> + + + ГруппаСтраницыРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Pages + + Auto + + + + КоманднаяПанель + 108 + + КоманднаяПанельСлева + 110 + + ФормаНазад + 112 + true + true + + true + + + ФормаНазадРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель слева</value> + + + ru + Командная панель слева + + false + + КоманднаяПанельСлеваРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + CommandBar + + Left + + + + ДекорацияКоманднаяПанель + 114 + true + true + + true + + + ДекорацияКоманднаяПанельРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ДекорацияКоманднаяПанельКонтекстноеМеню + 115 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельСправа + 117 + + ФормаРазрешить + 30 + true + true + + true + + + ФормаРазрешитьРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.Далее + Auto + true + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаОтмена + 29 + true + true + + true + + + ФормаОтменаExtendedTooltip + 41 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Справка + 23 + true + true + + true + + false + + СправкаExtendedTooltip + 42 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель справа</value> + + + КоманднаяПанельСправаРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница действия</value> + + + ru + Страница действия + + + СтраницаДействияРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаОжиданиеЗавершения + 220 + + ДекорацияОжиданиеЗавершенияДлительнаяОперация + 222 + + <key>ru</key> + <value>Декорация ожидание длительная операция</value> + + true + true + + true + + + ДекорацияОжиданиеЗавершенияДлительнаяОперацияРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + ДекорацияОжиданиеЗавершенияДлительнаяОперацияКонтекстноеМеню + 223 + true + + 7 + true + 3 + true + false + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияОжиданиеЗавершенияНадпись + 225 + + <key>ru</key> + <value>Выполняется применение изменений в настройки профилей безопасности в кластере серверов. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияОжиданиеЗавершенияНадписьРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + ДекорацияОжиданиеЗавершенияНадписьКонтекстноеМеню + 226 + true + + Label + true + true + false + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидание</value> + + + ru + Страница ожидание + + + СтраницаОжиданиеЗавершенияРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы глобальный</value> + + + ru + Группа страницы глобальный + + + ГруппаСтраницыГлобальныйРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ИмяАдминистратораКластера + + <key>ru</key> + <value>Имя администратора кластера</value> + + 4 + + String + + + + true + + + true + + + + ПарольАдминистратораКластера + + <key>ru</key> + <value>Пароль администратора кластера</value> + + 5 + + String + + + + true + + + true + + + + ПортАгентаСервера + + <key>ru</key> + <value>Порт агента сервера</value> + + 7 + + Number + + 5 + true + + + + true + + + true + + + + ПортКластераСерверов + + <key>ru</key> + <value>Порт кластера серверов</value> + + 8 + + Number + + 5 + true + + + + true + + + true + + + + АдминистраторИБ + + <key>ru</key> + <value>Администратор ИБ</value> + + 1 + + CatalogRef.Пользователи + + + true + + + true + + + + ПарольАдминистратораИБ + + <key>ru</key> + <value>Пароль администратора ИБ</value> + + 2 + + String + + + + true + + + true + + + + ТекстОшибки + + <key>ru</key> + <value>Текст ошибки</value> + + 11 + + String + + + + true + + + true + + + + ПредставлениеРазрешений + + <key>ru</key> + <value>Представление разрешений</value> + + 9 + + SpreadsheetDocument + + + true + + + true + + + + + Объект + + <key>ru</key> + <value>Объект</value> + + 12 + + DataProcessorObject.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + + true + + + true + +
      true
      +
      + + ТипПодключения + + <key>ru</key> + <value>Тип подключения</value> + + 10 + + String + + + + true + + + true + + + + АдресАгентаСервера + + <key>ru</key> + <value>Адрес агента сервера</value> + + 6 + + String + + + + true + + + true + + + + АдресСервераАдминистрирования + + <key>ru</key> + <value>Адрес сервера администрирования</value> + + 13 + + String + + + + true + + + true + + + + ПортСервераАдминистрирования + + <key>ru</key> + <value>Порт сервера администрирования</value> + + 14 + + Number + + 5 + + + + true + + + true + + + + ТребуетсяВнесениеИзмененийВПрофиляхБезопасности + + <key>ru</key> + <value>Требуется внесение изменений в профилях безопасности</value> + + 15 + + Boolean + + + true + + + true + + + + ИмяВКластере + + <key>ru</key> + <value>Имя в кластере</value> + + 16 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 3 + + + true + + + true + + + + ТребуютсяПараметрыАдминистрированияИнформационнойБазы + + <key>ru</key> + <value>Требуются параметры администрирования информационной базы</value> + + 17 + + Boolean + + + true + + + true + + + + АдресХранилищаИдентификаторов + + <key>ru</key> + <value>Адрес хранилища идентификаторов</value> + + 18 + + String + + + + true + + + true + + + + РежимВосстановления + + <key>ru</key> + <value>Режим восстановления</value> + + 19 + + Boolean + + + true + + + true + + + + ВебКлиент + + <key>ru</key> + <value>Веб клиент</value> + + 20 + + Boolean + + + true + + + true + + + + АдресХранилищаНаСервере + + <key>ru</key> + <value>Адрес хранилища на сервере</value> + + 21 + + String + + + + true + + + true + + + + Далее + + <key>ru</key> + <value>Применить изменения</value> + + 1 + + ru + Разрешить или запретить доступ к внешним ресурсам + + + true + + + + Далее + + + Auto + Auto + + + Назад + + <key>ru</key> + <value>< Назад</value> + + 2 + + ru + Назад + + + true + + + + Назад + + + Auto + Auto + + + ПеререгистрироватьCOMСоединитель + + <key>ru</key> + <value>Зарегистрировать</value> + + 3 + + ru + Зарегистрировать компоненту и перезапустить программу + + + true + + + + ПеререгистрироватьCOMСоединитель + + + Auto + Auto + + + РежимПроверки + + Boolean + + + + ХранилищеРезультатаОбработкиЗапросов + + String + + + + + РежимВосстановления + + Boolean + + + + + + + +
      diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html new file mode 100644 index 000000000..7f3244ae5 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html @@ -0,0 +1,8 @@ + +

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

      +

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

      +

      Для подтверждения нажмите Применить изменения.

      +

      Кроме того, дополнительно необходимо убедиться, что: 

      +
      • доступ к внешним ресурсам не блокируется другим программным обеспечением, установленным на сервере (антивирусы, программы ограничения трафика); +
      • настроены необходимые права в учетных записях пользователей операционной системы, от имени которых выполняется запуск рабочих серверов кластера 1С:Предприятие.

      См. также:

      +

      Настройки использования профилей безопасности.

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl new file mode 100644 index 000000000..acd607c04 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -0,0 +1,349 @@ +&НаКлиенте +Перем ИтерацияПроверки; +&НаКлиенте +Перем АдресХранилища; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ХранилищеРезультатаОбработкиЗапросов = Параметры.АдресХранилища; + РезультатОбработкиЗапросов = ПолучитьИзВременногоХранилища(ХранилищеРезультатаОбработкиЗапросов); + АдресХранилищаНаСервере = ПоместитьВоВременноеХранилище(РезультатОбработкиЗапросов, ЭтотОбъект.УникальныйИдентификатор); + + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Получить() Тогда + Если Параметры.РежимПроверки Тогда + Элементы.ГруппаШапка.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановления.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешений.Видимость = Истина; + ИначеЕсли Параметры.РежимВосстановления Тогда + Элементы.ГруппаШапка.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановления.Видимость = Истина; + Элементы.ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешений.Видимость = Ложь; + Иначе + Элементы.ГруппаШапка.Видимость = Истина; + Элементы.ГруппаШапкаРежимВосстановления.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешений.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ГруппаШапка.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановления.Видимость = Ложь; + Элементы.ГруппаШапкаРежимВосстановленияПослеПредоставленияРазрешений.Видимость = Ложь; + КонецЕсли; + + СценарийПримененияЗапросов = РезультатОбработкиЗапросов.Сценарий; + + Если СценарийПримененияЗапросов.Количество() = 0 Тогда + ТребуетсяВнесениеИзмененийВПрофиляхБезопасности = Ложь; + Возврат; + КонецЕсли; + + ПредставлениеРазрешений = РезультатОбработкиЗапросов.Представление; + + ТребуетсяВнесениеИзмененийВПрофиляхБезопасности = Истина; + ТребуютсяПараметрыАдминистрированияИнформационнойБазы = Ложь; + Для Каждого ШагСценария Из СценарийПримененияЗапросов Цикл + Если ШагСценария.Операция = Перечисления.ОперацииСНаборамиРазрешений.Назначение + Или ШагСценария.Операция = Перечисления.ОперацииСНаборамиРазрешений.УдалениеНазначения Тогда + ТребуютсяПараметрыАдминистрированияИнформационнойБазы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы); + Если ПользовательИБ <> Неопределено Тогда + ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + КонецЕсли; + + ТипПодключения = ПараметрыАдминистрирования.ТипПодключения; + ПортКластераСерверов = ПараметрыАдминистрирования.ПортКластера; + + АдресАгентаСервера = ПараметрыАдминистрирования.АдресАгентаСервера; + ПортАгентаСервера = ПараметрыАдминистрирования.ПортАгентаСервера; + + АдресСервераАдминистрирования = ПараметрыАдминистрирования.АдресСервераАдминистрирования; + ПортСервераАдминистрирования = ПараметрыАдминистрирования.ПортСервераАдминистрирования; + + ИмяВКластере = ПараметрыАдминистрирования.ИмяВКластере; + ИмяАдминистратораКластера = ПараметрыАдминистрирования.ИмяАдминистратораКластера; + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы); + Если ПользовательИБ <> Неопределено Тогда + ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); + + Элементы.ГруппаАдминистрирование.Видимость = ТребуютсяПараметрыАдминистрированияИнформационнойБазы; + Элементы.ГруппаПредупреждениеОНеобходимостиПерезапуска.Видимость = ТребуютсяПараметрыАдминистрированияИнформационнойБазы; + + Элементы.ФормаРазрешить.Заголовок = НСтр("ru = 'Далее >'"); + Элементы.ФормаНазад.Видимость = Ложь; + + УправлениеВидимостью(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ТребуетсяВнесениеИзмененийВПрофиляхБезопасности Тогда + + #Если ВебКлиент Тогда + ВебКлиент = Истина; + УправлениеВидимостью(); + #Иначе + ВебКлиент = Ложь; + #КонецЕсли + + АдресХранилища = АдресХранилищаНаСервере; + + Иначе + + Закрыть(КодВозвратаДиалога.Пропустить); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если ТребуютсяПараметрыАдминистрированияИнформационнойБазы Тогда + + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + Возврат; + КонецЕсли; + + ИмяПоля = "АдминистраторИБ"; + ПользовательИБ = ПолучитьАдминистратораИБ(); + Если ПользовательИБ = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, + ИмяПоля,,Отказ); + Возврат; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, + ИмяПоля,,Отказ); + Возврат; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТипПодключенияПриИзменении(Элемент) + + УправлениеВидимостью(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Далее(Команда) + + Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРазрешения Тогда + + ТекстОшибки = ""; + Элементы.ГруппаОшибка.Видимость = Ложь; + Элементы.ФормаРазрешить.Заголовок = НСтр("ru = 'Настроить разрешения в кластере серверов'"); + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаПодключение; + Элементы.ФормаНазад.Видимость = Истина; + + ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаПодключение Тогда + + ТекстОшибки = ""; + Попытка + + ПрименитьРазрешения(); + ЗавершитьПрименениеЗапросов(АдресХранилища); + ОжидатьПримененияНастроекВКластере(); + + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Элементы.ГруппаОшибка.Видимость = Истина; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаПодключение Тогда + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРазрешения; + Элементы.ФормаНазад.Видимость = Ложь; + Элементы.ФормаРазрешить.Заголовок = НСтр("ru = 'Далее >'"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПеререгистрироватьCOMСоединитель(Команда) + + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УправлениеВидимостью() + + Если ТипПодключения = "COM" Тогда + Элементы.СтраницыПараметрыПодключенияККластеруПоПротоколам.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключенияККластеруCOM; + ВидимостьГруппыОшибкиВерсииCOMСоединителя = Истина; + Иначе + Элементы.СтраницыПараметрыПодключенияККластеруПоПротоколам.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключенияККластеруRAS; + ВидимостьГруппыОшибкиВерсииCOMСоединителя = Ложь; + КонецЕсли; + + Если ВебКлиент Тогда + Элементы.ГруппаОшибкаВерсииCOMСоединителя.Видимость = Ложь; + Иначе + Элементы.ГруппаОшибкаВерсииCOMСоединителя.Видимость = ВидимостьГруппыОшибкиВерсииCOMСоединителя; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьАдминистратораИБ() + + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + АдминистраторИБ.ИдентификаторПользователяИБ); + +КонецФункции + +&НаСервереБезКонтекста +Функция ИмяПользователяИнформационнойБазы(Знач Пользователь) + + Если ЗначениеЗаполнено(Пользователь) Тогда + + ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ"); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + Возврат ПользовательИБ.Имя; + + Иначе + + Возврат ""; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура ПрименитьРазрешения() + + ПараметрыПрименения = НачатьПрименениеЗапросов(АдресХранилища); + + ВидыОпераций = ПараметрыПрименения.ВидыОпераций; + Сценарий = ПараметрыПрименения.СценарийПримененияЗапросов; + ТребуютсяПараметрыАдминистрированияИБ = ПараметрыПрименения.ТребуютсяПараметрыАдминистрированияИнформационнойБазы; + + ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); + ПараметрыАдминистрированияКластера.ТипПодключения = ТипПодключения; + ПараметрыАдминистрированияКластера.АдресАгентаСервера = АдресАгентаСервера; + ПараметрыАдминистрированияКластера.ПортАгентаСервера = ПортАгентаСервера; + ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования = АдресСервераАдминистрирования; + ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования = ПортСервераАдминистрирования; + ПараметрыАдминистрированияКластера.ПортКластера = ПортКластераСерверов; + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера = ИмяАдминистратораКластера; + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера = ПарольАдминистратораКластера; + + Если ТребуютсяПараметрыАдминистрированияИБ Тогда + ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); + ПараметрыАдминистрированияИБ.ИмяВКластере = ИмяВКластере; + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = ИмяПользователяИнформационнойБазы(АдминистраторИБ); + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = ПарольАдминистратораИБ; + Иначе + ПараметрыАдминистрированияИБ = Неопределено; + КонецЕсли; + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов( + ВидыОпераций, Сценарий, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + +КонецПроцедуры + +&НаСервере +Функция НачатьПрименениеЗапросов(Знач АдресХранилища) + + Результат = ПолучитьИзВременногоХранилища(АдресХранилища); + СценарийПримененияЗапросов = Результат.Сценарий; + + ВидыОпераций = Новый Структура(); + Для Каждого ЗначениеПеречисления Из Метаданные.Перечисления.ОперацииСНаборамиРазрешений.ЗначенияПеречисления Цикл + ВидыОпераций.Вставить(ЗначениеПеречисления.Имя, Перечисления.ОперацииСНаборамиРазрешений[ЗначениеПеречисления.Имя]); + КонецЦикла; + + Возврат Новый Структура("ВидыОпераций, СценарийПримененияЗапросов, ТребуютсяПараметрыАдминистрированияИнформационнойБазы", + ВидыОпераций, СценарийПримененияЗапросов, ТребуютсяПараметрыАдминистрированияИнформационнойБазы); + +КонецФункции + +&НаСервере +Процедура ЗавершитьПрименениеЗапросов(Знач АдресХранилища) + + СохранитьПараметрыАдминистрирования(); + +КонецПроцедуры + +&НаСервере +Процедура СохранитьПараметрыАдминистрирования() + + СохраняемыеПараметрыАдминистрирования = Новый Структура(); + + // Параметры администрирования кластера + СохраняемыеПараметрыАдминистрирования.Вставить("ТипПодключения", ТипПодключения); + СохраняемыеПараметрыАдминистрирования.Вставить("АдресАгентаСервера", АдресАгентаСервера); + СохраняемыеПараметрыАдминистрирования.Вставить("ПортАгентаСервера", ПортАгентаСервера); + СохраняемыеПараметрыАдминистрирования.Вставить("АдресСервераАдминистрирования", АдресСервераАдминистрирования); + СохраняемыеПараметрыАдминистрирования.Вставить("ПортСервераАдминистрирования", ПортСервераАдминистрирования); + СохраняемыеПараметрыАдминистрирования.Вставить("ПортКластера", ПортКластераСерверов); + СохраняемыеПараметрыАдминистрирования.Вставить("ИмяАдминистратораКластера", ИмяАдминистратораКластера); + СохраняемыеПараметрыАдминистрирования.Вставить("ПарольАдминистратораКластера", ""); + + // Параметры администрирования информационной базы + СохраняемыеПараметрыАдминистрирования.Вставить("ИмяВКластере", ИмяВКластере); + СохраняемыеПараметрыАдминистрирования.Вставить("ИмяАдминистратораИнформационнойБазы", ИмяПользователяИнформационнойБазы(АдминистраторИБ)); + СохраняемыеПараметрыАдминистрирования.Вставить("ПарольАдминистратораИнформационнойБазы", ""); + + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(СохраняемыеПараметрыАдминистрирования); + +КонецПроцедуры + +&НаКлиенте +Процедура ОжидатьПримененияНастроекВКластере() + + Закрыть(КодВозвратаДиалога.ОК); + +КонецПроцедуры + +#КонецОбласти \ 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..a5700c324 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form @@ -0,0 +1,1078 @@ + + + + <key>ru</key> + <value>Настройки использования профилей безопасности</value> + + + ГруппаЗаголовок + 1580 + + ОписаниеРаздела + 1581 + + <key>ru</key> + <value>Использование профилей безопасности для контроля за использованием программой внешних ресурсов (относительно кластера серверов 1С:Предприятия).</value> + + true + true + + true + + + ОписаниеРазделаРасширеннаяПодсказка + 1601 + Label + true + true + + Left + + + + ОписаниеРазделаКонтекстноеМеню + 1582 + true + + Label + 78 + true + true + false + false + + Left + Top + + + + Декорация1 + 1585 + + <key>ru</key> + <value> </value> + + true + true + + true + + + ru + + + + Декорация1ExtendedTooltip + 1602 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 1586 + true + + Label + true + true + true + + Left + + + + ГруппаСправка + 1583 + + Справка + 1584 + true + true + + true + + + СправкаExtendedTooltip + 1604 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + false + false + + ГруппаСправкаExtendedTooltip + 1603 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаЗаголовокExtendedTooltip + 1600 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПрофилиБезопасности + 1605 + + ГруппаБезопасностьКолонки + 1607 + + ГруппаПрофилиБезопасностиКолонкиЛевая + 1609 + + ГруппаРежимИспользованияПрофилейБезопасности + 1611 + + РежимИспользованияПрофилейБезопасности + 1613 + true + true + + true + + + РежимИспользованияПрофилейБезопасности + + Top + + OnChange + РежимИспользованияПрофилейБезопасностиПриИзменении + + + РежимИспользованияПрофилейБезопасностиРасширеннаяПодсказка + 1615 + Label + true + true + + Left + + + + РежимИспользованияПрофилейБезопасностиКонтекстноеМеню + 1614 + true + + RadioButtonField + Center + Enter + true + Left + true + + RadioButtons + + + ru + Профили безопасности не используются для данной информационной базы + + + 0 + + + + + ru + Профили безопасности для данной информационной базы настраиваются администратором в консоли кластера + + + 1 + + + + + ru + Предлагать автоматически настраивать разрешения в профилях безопасности при необходимости (непосредственно из программы) + + + 2 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + + ГруппаРежимИспользованияПрофилейБезопасностиРасширеннаяПодсказка + 1612 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа профили безопасности колонки левая</value> + + + ru + Группа профили безопасности колонки левая + + + ГруппаПрофилиБезопасностиКолонкиЛеваяРасширеннаяПодсказка + 1610 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПрофилиБезопасностиКолонкаПравая + 1619 + + ГруппаТребуемыеРазрешения + 1621 + + ТребуемыеРазрешения + 1623 + true + true + + true + + + ТребуемыеРазрешенияРасширеннаяПодсказка + 1624 + Label + true + true + + Left + + + Hyperlink + Form.Command.ТребуемыеРазрешения + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеТребуемыеРазрешения + 1625 + + <key>ru</key> + <value>Разрешения на использование внешних ресурсов, которые должны быть разрешены в профиле безопасности для корректной работы программы.</value> + + true + true + + true + + + ПояснениеТребуемыеРазрешенияРасширеннаяПодсказка + 1627 + Label + true + true + + Left + + + + ПояснениеТребуемыеРазрешенияКонтекстноеМеню + 1626 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаТребуемыеРазрешенияРасширеннаяПодсказка + 1622 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПрофильБезопасностиИнформационнойБазы + 1628 + + ПрофильБезопасностиИнформационнойБазы + 1630 + true + true + + true + + + НаборКонстант.ПрофильБезопасностиИнформационнойБазы + + Top + + OnChange + ПрофильБезопасностиИнформационнойБазыПриИзменении + + + ПрофильБезопасностиИнформационнойБазыРасширеннаяПодсказка + 1632 + Label + true + true + + Left + + + + ПрофильБезопасностиИнформационнойБазыКонтекстноеМеню + 1631 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПояснениеПрофильБезопасностиИнформационнойБазы + 1633 + + <key>ru</key> + <value>Имя профиля безопасности (в кластере серверов 1С:Предприятия), использующегося в качестве профиля безопасности для информационной базы.</value> + + true + true + + true + + + ПояснениеПрофильБезопасностиИнформационнойБазыРасширеннаяПодсказка + 1635 + Label + true + true + + Left + + + + ПояснениеПрофильБезопасностиИнформационнойБазыКонтекстноеМеню + 1634 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаПрофильБезопасностиИнформационнойБазыРасширеннаяПодсказка + 1629 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаВосстановлениеПрофилейБезопасности + 1636 + + ВосстановитьПрофилиБезопасности + 1638 + true + true + + true + + + ВосстановитьПрофилиБезопасностиРасширеннаяПодсказка + 1639 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВосстановитьПрофилиБезопасности + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеВосстановитьПрофилиБезопасности + 1640 + + <key>ru</key> + <value>Автоматическое пересоздание профилей безопасностей в кластере сервров (например, после переноса информационной базы на другой кластер).</value> + + true + true + + true + + + ПояснениеВосстановитьПрофилиБезопасностиРасширеннаяПодсказка + 1642 + Label + true + true + + Left + + + + ПояснениеВосстановитьПрофилиБезопасностиКонтекстноеМеню + 1641 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаВосстановлениеПрофилейБезопасностиРасширеннаяПодсказка + 1637 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа профили безопасности колонка правая</value> + + + ru + Группа профили безопасности колонка правая + + + ГруппаПрофилиБезопасностиКолонкаПраваяРасширеннаяПодсказка + 1620 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаБезопасностьКолонкиРасширеннаяПодсказка + 1608 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + ГруппаБезопасностьКолонки2 + 1643 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаБезопасностьКолонки2РасширеннаяПодсказка + 1644 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + ГруппаПояснениеОЛицензииКОРП + 1645 + + ДекорацияПояснениеОЛицензииКОРП + 1647 + + <key>ru</key> + <value>Декорация пояснение о лицензии КОРП</value> + + true + true + + true + + + ДекорацияПояснениеОЛицензииКОРПРасширеннаяПодсказка + 1649 + Label + true + true + + Left + + + + ДекорацияПояснениеОЛицензииКОРПКонтекстноеМеню + 1648 + true + + 2 + true + 1 + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + + + + ПояснениеОЛицензииКОРП + 1650 + + <key>ru</key> + <value>Использование профилей безопасности предоставляется только при наличии версии КОРП клиентских и серверных лицензий для платформы "1С:Предприятие 8".</value> + + true + true + + true + + + ПояснениеОЛицензииКОРПРасширеннаяПодсказка + 1652 + Label + true + true + + Left + + + + ПояснениеОЛицензииКОРПКонтекстноеМеню + 1651 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа восстановление резервной копии</value> + + + ru + Группа восстановление резервной копии + + 86 + false + + ГруппаПояснениеОЛицензииКОРПРасширеннаяПодсказка + 1646 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа профили безопасности</value> + + + ru + Группа профили безопасности + + + ГруппаПрофилиБезопасностиРасширеннаяПодсказка + 1606 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + Abort + Cancel + Ignore + No + OK + RestoreValues + Retry + SaveValues + Write + WriteAndClose + Yes + 88 + DontBlock + true + true + Vertical + true + true + UseIfNecessary + auto + true + + НаборКонстант + 1 + + ConstantsSet + + + true + + + true + + + НаборКонстант.ЗаголовокСистемы + +
      true
      +
      + + РежимРаботы + + <key>ru</key> + <value>Режим работы</value> + + 15 + + + true + + + true + + + + РежимИспользованияПрофилейБезопасности + + <key>ru</key> + <value>Режим использования профилей безопасности</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + АдресВременногоХранилища + + <key>ru</key> + <value>Адрес временного хранилища</value> + + 3 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 4 + + UUID + + + true + + + true + + + + ВосстановитьПрофилиБезопасности + + <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 new file mode 100644 index 000000000..207146348 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html @@ -0,0 +1,37 @@ + +

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

      +

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

      +

      Режим использования профилей безопасности

      +

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

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

      Требуемые разрешения

      +

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

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

      Профиль безопасности информационной базы

      +

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

      +

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

      +
      • +
        В поле Профиль безопасности информационной базы введите имя использующегося профиля безопасности (в кластере серверов 1С:Предприятия).

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

      +

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

      +

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

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

      См. также:

      +

      Настройки программы.

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl new file mode 100644 index 000000000..1c0b17332 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -0,0 +1,323 @@ +&НаКлиенте +Перем ОбновитьИнтерфейс; + +&НаКлиенте +Перем ПараметрыОбработчикаОжидания; + +&НаКлиенте +Перем ФормаДлительнойОперации; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Значения реквизитов формы + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + + Если Не РаботаВБезопасномРежимеСлужебный.ВозможноИспользованиеПрофилейБезопасности() Тогда + ВызватьИсключение НСтр("ru = 'Использование профилей безопасности недоступно для данной конфигурации!'"); + КонецЕсли; + + Если Не РаботаВБезопасномРежимеСлужебный.ДоступнаНастройкаПрофилейБезопасности() Тогда + ВызватьИсключение НСтр("ru = 'Настройка профилей безопасности недоступна!'"); + КонецЕсли; + + Если Не РежимРаботы.ЭтоАдминистраторСистемы Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа!'"); + КонецЕсли; + + // Настройки видимости при запуске + ПрочитатьРежимИспользованияПрофилейБезопасности(); + + // Обновление состояния элементов + УстановитьДоступность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + ОбновитьИнтерфейсПрограммы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РежимИспользованияПрофилейБезопасностиПриИзменении(Элемент) + + Попытка + + НачатьПрименениеНастроекПрофилейБезопасности(ЭтотОбъект.УникальныйИдентификатор); + + ПредыдущийРежим = ТекущийРежимИспользованияПрофилейБезопасности(); + НовыйРежим = РежимИспользованияПрофилейБезопасности; + + Если (ПредыдущийРежим <> НовыйРежим) Тогда + + Если (ПредыдущийРежим = 2 Или НовыйРежим = 2) Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияПомощникаПримененияИзмененийВПрофиляхБезопасности", ЭтотОбъект, Истина); + + Если НовыйРежим = 2 Тогда + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьВключениеИспользованияПрофилейБезопасности(ЭтотОбъект, ОповещениеОЗакрытии); + + Иначе + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьОтключениеИспользованияПрофилейБезопасности(ЭтотОбъект, ОповещениеОЗакрытии); + + КонецЕсли; + + Иначе + + ЗавершитьПрименениеНастроекПрофилейБезопасности(); + УстановитьДоступность("РежимИспользованияПрофилейБезопасности"); + + КонецЕсли; + + КонецЕсли; + + Исключение + + ПрочитатьРежимИспользованияПрофилейБезопасности(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПрофильБезопасностиИнформационнойБазыПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ТребуемыеРазрешения(Команда) + + ПараметрыОтчета = Новый Структура(); + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + + ОткрытьФорму( + "Отчет.ИспользуемыеВнешниеРесурсы.ФормаОбъекта", + ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура ВосстановитьПрофилиБезопасности(Команда) + + Попытка + + НачатьПрименениеНастроекПрофилейБезопасности(ЭтотОбъект.УникальныйИдентификатор); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияПомощникаПримененияИзмененийВПрофиляхБезопасности", ЭтотОбъект, Истина); + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьВосстановлениеПрофилейБезопасности(ЭтотОбъект, ОповещениеОЗакрытии); + + Исключение + + ПрочитатьРежимИспользованияПрофилейБезопасности(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ПослеЗакрытияПомощникаПримененияИзмененийВПрофиляхБезопасности(Результат, ТребуетсяПерезапускКлиентскогоПриложения) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ЗавершитьПрименениеНастроекПрофилейБезопасности(); + КонецЕсли; + + ПрочитатьРежимИспользованияПрофилейБезопасности(); + + Если Результат = КодВозвратаДиалога.ОК И ТребуетсяПерезапускКлиентскогоПриложения Тогда + ПрекратитьРаботуСистемы(Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + + Если РежимРаботы.ЭтоАдминистраторСистемы Тогда + + Если РеквизитПутьКДанным = "РежимИспользованияПрофилейБезопасности" ИЛИ РеквизитПутьКДанным = "" Тогда + + Элементы.ГруппаПрофилиБезопасностиКолонкаПравая.Доступность = РежимИспользованияПрофилейБезопасности > 0; + + Элементы.ПрофильБезопасностиИнформационнойБазы.ТолькоПросмотр = (РежимИспользованияПрофилейБезопасности = 2); + Элементы.ГруппаВосстановлениеПрофилейБезопасности.Доступность = (РежимИспользованияПрофилейБезопасности = 2); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьРежимИспользованияПрофилейБезопасности() + + РежимИспользованияПрофилейБезопасности = ТекущийРежимИспользованияПрофилейБезопасности(); + УстановитьДоступность("РежимИспользованияПрофилейБезопасности"); + +КонецПроцедуры + +&НаСервере +Функция ТекущийРежимИспользованияПрофилейБезопасности() + + Если РаботаВБезопасномРежимеСлужебный.ВозможноИспользованиеПрофилейБезопасности() И ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + + Если Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Получить() Тогда + + Результат = 2; // Из текущей ИБ + + Иначе + + Результат = 1; // Через консоль кластера + + КонецЕсли; + + Иначе + + Результат = 0; // Не используются + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Процедура НачатьПрименениеНастроекПрофилейБезопасности(Знач УникальныйИдентификатор) + + Если Не РаботаВБезопасномРежимеСлужебный.ВозможноИспользованиеПрофилейБезопасности() Тогда + ВызватьИсключение НСтр("ru = 'Включение автоматического запроса разрешений недоступно!'"); + КонецЕсли; + + УстановитьМонопольныйРежим(Истина); + +КонецПроцедуры + +&НаСервере +Процедура ЗавершитьПрименениеНастроекПрофилейБезопасности() + + Если РежимИспользованияПрофилейБезопасности = 0 Тогда + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Ложь); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Ложь); + Константы.ПрофильБезопасностиИнформационнойБазы.Установить(""); + + ИначеЕсли РежимИспользованияПрофилейБезопасности = 1 Тогда + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Ложь); + + ИначеЕсли РежимИспользованияПрофилейБезопасности = 2 Тогда + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина); + + КонецЕсли; + + Если МонопольныйРежим() Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнтерфейсПрограммы() + + #Если НЕ ВебКлиент Тогда + Если ОбновитьИнтерфейс = Истина Тогда + ОбновитьИнтерфейс = Ложь; + ОбновитьИнтерфейс(); + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) + + Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + + ОбновитьПовторноИспользуемыеЗначения(); + + Если ОбновлятьИнтерфейс Тогда + #Если НЕ ВебКлиент Тогда + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); + ОбновитьИнтерфейс = Истина; + #КонецЕсли + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + +КонецПроцедуры + +&НаСервере +Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) + + Результат = Новый Структура; + + РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; + + СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + + УстановитьДоступность(РеквизитПутьКДанным); + + ОбновитьПовторноИспользуемыеЗначения(); + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) + + // Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному). + Если РеквизитПутьКДанным = "" Тогда + Возврат; + КонецЕсли; + + // Определение имени константы. + КонстантаИмя = ""; + Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда + // Если путь к данным реквизита указан через "НаборКонстант". + КонстантаИмя = Сред(РеквизитПутьКДанным, 15); + КонецЕсли; + + // Сохранения значения константы. + Если КонстантаИмя <> "" Тогда + КонстантаМенеджер = Константы[КонстантаИмя]; + КонстантаЗначение = НаборКонстант[КонстантаИмя]; + + Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда + КонстантаМенеджер.Установить(КонстантаЗначение); + КонецЕсли; + + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Form.form new file mode 100644 index 000000000..b3b88bbe6 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Form.form @@ -0,0 +1,42 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + + 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 new file mode 100644 index 000000000..238d2fe2b --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html @@ -0,0 +1,7 @@ + +

      Профили безопасности - механизм версии 8.3 платформы "1С:Предприятие", позволяющий ограничивать использование информационной базой внешних (по отношению к кластеру серверов платформы "1С:Предприятие" ресурсов, такие, как каталоги файловой системы, COM-объекты (на Windows-системах), внешние (по отношению к конфигурации) программные модули на встроенном языке платформы "1С:Предприятие" (внешние отчеты и обработки, вызовы методов Выполнить и Вычислить, внешние компоненты, приложения операционной системы и Интернет-ресурсы. Таким образом, с помощью профилей безопасности можно изолировать каждую информационную базу, позволяя ей использовать только те внешние ресурсы, использование которых явно одобрено администратором.

      +

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

      +

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

      +

      При работе в тонком клиенте на ОС Linux для автоматического управления разрешениями в профилях безопасности требуется установить сервер администрирования ras. А при использовании ОС Windows можно воспользоваться обоими вариантами по настройке: как через сервер администрирования ras, так с помощью подключения с использованием COM-соединения.

      +

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

      +

      Использование профилей безопасности предоставляется только при наличии версии КОРП клиентских и серверных лицензий для платформы "1С:Предприятие 8".

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl new file mode 100644 index 000000000..88c1a4375 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -0,0 +1,2038 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Клиентские процедуры и функции общего назначения: +// - Поддержка профилей безопасности +// +//////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Создание запросов разрешений +// + +// Создает запрос на изменение разрешений использования внешних ресурсов. +// Только для внутреннего использования. +// +// Параметры: +// Владелец - ЛюбаяСсылка - владелец разрешений на использование внешних ресурсов +// (Неопределено при запросе разрешений для конфигурации, а не для объектов конфигурации), +// РежимЗамещения - Булево - режим замещения ранее предоставленных для владельца разрешений, +// ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), +// УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// отменяемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(), +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов(Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения = Неопределено, Знач УдаляемыеРазрешения = Неопределено, Знач ВнешнийМодуль = Неопределено) Экспорт + + Если Не ТребуетсяЗапросРазрешенийНаИспользованиеВнешнихРесурсов() Тогда + Возврат Новый УникальныйИдентификатор(); + КонецЕсли; + + Менеджер = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.СоздатьМенеджерЗаписи(); + Менеджер.Идентификатор = Новый УникальныйИдентификатор(); + Менеджер.МоментВремени = ТекущаяУниверсальнаяДата(); + + Если РаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда + Менеджер.БезопасныйРежим = БезопасныйРежим(); + Иначе + Менеджер.БезопасныйРежим = Ложь; + КонецЕсли; + + Если Владелец = Неопределено Тогда + Владелец = СлужебныйИОМ(); + КонецЕсли; + Менеджер.Владелец = Владелец; + + Если ВнешнийМодуль = Неопределено Тогда + ВнешнийМодуль = СлужебныйИОМ(); + КонецЕсли; + Менеджер.ВнешнийМодуль = ВнешнийМодуль; + + Менеджер.РежимЗамещения = РежимЗамещения; + + Если ДобавляемыеРазрешения <> Неопределено Тогда + + МассивРазрешений = Новый Массив(); + Для Каждого НовоеРазрешение Из ДобавляемыеРазрешения Цикл + МассивРазрешений.Добавить(ОбщегоНазначения.ОбъектXDTOВСтрокуXML(НовоеРазрешение)); + КонецЦикла; + + Если МассивРазрешений.Количество() > 0 Тогда + Менеджер.ДобавляемыеРазрешения = ОбщегоНазначения.ЗначениеВСтрокуXML(МассивРазрешений); + КонецЕсли; + + КонецЕсли; + + Если УдаляемыеРазрешения <> Неопределено Тогда + + МассивРазрешений = Новый Массив(); + Для Каждого ОтменяемоеРазрешение Из УдаляемыеРазрешения Цикл + МассивРазрешений.Добавить(ОбщегоНазначения.ОбъектXDTOВСтрокуXML(ОтменяемоеРазрешение)); + КонецЦикла; + + Если МассивРазрешений.Количество() > 0 Тогда + Менеджер.УдаляемыеРазрешения = ОбщегоНазначения.ЗначениеВСтрокуXML(МассивРазрешений); + КонецЕсли; + + КонецЕсли; + + Менеджер.Состояние = Перечисления.СостоянияЗапросовНаИспользованиеВнешнихРесурсов.Новый; + Менеджер.Записать(); + + Возврат Менеджер.Идентификатор; + +КонецФункции + +// Создает запрос на администрирование разрешений использования внешних ресурсов (создание / +// удаление профилей безопасности, назначение профилей безопасности для ИБ и т.д.). +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей), +// Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которая должна быть выполнена +// при администрировании запроса разрешений. +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросНаАдминистрированиеРазрешенийИспользованияВнешнихРесурсов(Знач ВнешнийМодуль, Знач Операция) Экспорт + + Если Не ТребуетсяЗапросРазрешенийНаИспользованиеВнешнихРесурсов() Тогда + Возврат Новый УникальныйИдентификатор(); + КонецЕсли; + + Менеджер = РегистрыСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.СоздатьМенеджерЗаписи(); + Менеджер.Идентификатор = Новый УникальныйИдентификатор(); + Менеджер.Владелец = ВнешнийМодуль; + Менеджер.Операция = Операция; + Менеджер.МоментВремени = ТекущаяУниверсальнаяДата(); + Менеджер.Состояние = Перечисления.СостоянияЗапросовНаИспользованиеВнешнихРесурсов.Новый; + + Если Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание Тогда + Менеджер.Имя = НовоеИмяПрофиляБезопасности(ВнешнийМодуль); + Иначе + Менеджер.Имя = ИмяПрофиляБезопасности(ВнешнийМодуль); + КонецЕсли; + + Менеджер.Записать(); + + Возврат Менеджер.Идентификатор; + +КонецФункции + +// Создает запросы на отключение использования профилей безопасности. +// +// Параметры: +// ВключаяПрофильИБ - Булево - если Ложь - то будут созданы запросы только для удаления профилей безопасности +// внешних модулей. +// +// Возвращаемое значение: Массив(УникальныйИдентификатор) - идентификаторы запросов для отключения профилей безопасности. +// +Функция ЗапросыНаОтключениеПрофилейБезопасности(Знач ВключаяПрофильИБ = Истина) + + Результат = Новый Массив(); + + НачатьТранзакцию(); + + Попытка + + Если ВключаяПрофильИБ Тогда + Результат.Добавить(РаботаВБезопасномРежимеСлужебный.ЗапросНаУдалениеНабораРазрешений(СлужебныйИОМ())); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РежимыПодключенияВнешнихМодулей.ВнешнийМодуль КАК ВнешнийМодуль + |ИЗ + | РегистрСведений.РежимыПодключенияВнешнихМодулей КАК РежимыПодключенияВнешнихМодулей"; + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Добавить(РаботаВБезопасномРежимеСлужебный.ЗапросНаУдалениеНабораРазрешений(Выборка.ВнешнийМодуль)); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Создает "пустые" запросы замещения для всех ранее предоставленных разрешений. +// +// Возвращаемое значение: Массив(УникальныйИдентификатор) - идентификаторы запросов для замещения всех ранее предоставленных разрешений. +// +Функция ЗапросыЗамещенияДляВсехПредоставленныхРазрешений() + + Результат = Новый Массив(); + + МенеджерыРегистров = МенеджерыРегистровРазрешений(); + + ШаблонЗапросаКТаблицеРегистра = "ВЫБРАТЬ РАЗЛИЧНЫЕ ТаблицаРазрешений.ВнешнийМодуль КАК ВнешнийМодуль, ТаблицаРазрешений.Владелец КАК Владелец ИЗ %1 КАК ТаблицаРазрешений"; + ТекстЗапросаКТаблицамРегистров = ""; + + Для Каждого МенеджерРегистра Из МенеджерыРегистров Цикл + + ОбъектМетаданных = МенеджерРегистра.СоздатьНаборЗаписей().Метаданные(); + + Если Не ПустаяСтрока(ТекстЗапросаКТаблицамРегистров) Тогда + ТекстЗапросаКТаблицамРегистров = ТекстЗапросаКТаблицамРегистров + " ОБЪЕДИНИТЬ ВСЕ "; + КонецЕсли; + + ТекстЗапросаКТаблицамРегистров = ТекстЗапросаКТаблицамРегистров + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗапросаКТаблицеРегистра, ОбъектМетаданных.ПолноеИмя()); + + КонецЦикла; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "ВЫБРАТЬ РАЗЛИЧНЫЕ ВложенныйЗапрос.ВнешнийМодуль КАК ВнешнийМодуль, ВложенныйЗапрос.Владелец КАК Владелец ИЗ (%1) КАК ВложенныйЗапрос", + ТекстЗапросаКТаблицамРегистров); + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ЗапросЗамещения = РаботаВБезопасномРежимеСлужебный.ЗапросНаИзменениеРазрешенийИспользованияВнешнихРесурсов( + Выборка.Владелец, Истина, Новый Массив(), , Выборка.ВнешнийМодуль); + + Результат.Добавить(ЗапросЗамещения); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Проверяет необходимость интерактивного запроса разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Булево. +// +Функция ТребуетсяЗапросРазрешенийНаИспользованиеВнешнихРесурсов() + + Если Не ВозможенЗапросРазрешенийНаИспользованиеВнешнихРесурсов() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Константы.ИспользуютсяПрофилиБезопасности.Получить() И Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Получить(); + +КонецФункции + +// Очищает просроченные запросы на использование внешних ресурсов. +// +Процедура ОчисткаНеактуальныхЗапросовНаИспользованиеВнешнихРесурсов() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | Запросы.Идентификатор КАК Идентификатор, + | Запросы.ВнешнийМодуль КАК ВнешнийМодуль, + | Запросы.Владелец КАК Владелец, + | Запросы.БезопасныйРежим + |ИЗ + | РегистрСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов КАК Запросы + |ГДЕ + | Запросы.МоментВремени <= &ДатаЗапроса"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДатаЗапроса", ТекущаяУниверсальнаяДата() - 3600); // Время жизни запроса - час + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + + Попытка + + Ключ = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.СоздатьКлючЗаписи( + Новый Структура("Идентификатор, ВнешнийМодуль, Владелец, БезопасныйРежим", Выборка.Идентификатор, Выборка.ВнешнийМодуль, Выборка.Владелец, Выборка.БезопасныйРежим)); + ЗаблокироватьДанныеДляРедактирования(Ключ); + + Исключение + + // Обработка исключения не требуется. + // Ожидаемое исключение - попытка удалить ту же запись регистра из другого сеанса. + ОтменитьТранзакцию(); + Продолжить; + + КонецПопытки; + + Менеджер = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.СоздатьМенеджерЗаписи(); + Менеджер.Идентификатор = Выборка.Идентификатор; + Менеджер.Прочитать(); + Если Менеджер.Выбран() Тогда + Менеджер.Удалить(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | Запросы.Идентификатор КАК Идентификатор, + | Запросы.Владелец КАК Владелец + |ИЗ + | РегистрСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов КАК Запросы + |ГДЕ + | Запросы.МоментВремени <= &ДатаЗапроса"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДатаЗапроса", ТекущаяУниверсальнаяДата() - 3600); // Время жизни запроса - час + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + + Попытка + + Ключ = РегистрыСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.СоздатьКлючЗаписи( + Новый Структура("Идентификатор, Владелец", Выборка.Идентификатор, Выборка.Владелец)); + ЗаблокироватьДанныеДляРедактирования(Ключ); + + Исключение + + // Обработка исключения не требуется. + // Ожидаемое исключение - попытка удалить ту же запись регистра из другого сеанса. + ОтменитьТранзакцию(); + Продолжить; + + КонецПопытки; + + Менеджер = РегистрыСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.СоздатьМенеджерЗаписи(); + Менеджер.Идентификатор = Выборка.Идентификатор; + Менеджер.Прочитать(); + Если Менеджер.Выбран() Тогда + Менеджер.Удалить(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + КонецЦикла; + +КонецПроцедуры + +// Проверяет возможность интерактивного запроса разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Булево. +// +Функция ВозможенЗапросРазрешенийНаИспользованиеВнешнихРесурсов() + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияИнформационнойБазы()) ИЛИ Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + + // В файловой ИБ или при выключенных профилях безопасности запись запросов разрешений возможна + // в привилегированном режиме или при использовании учетной записи пользователя с правами администратора. + Возврат ПривилегированныйРежим() ИЛИ Пользователи.ЭтоПолноправныйПользователь(); + + Иначе + + // В клиент-серверной ИБ при включенных профилях безопасности запись запросов разрешений доступна только + // администраторам независимо от установки привилегированного режима. + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа для запроса разрешений на использование внешних ресурсов!'"); + + КонецЕсли; + + Возврат Истина; + + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с таблицами разрешений +// + +// Возвращает структуру, содержащую таблицы разрешений на использование внешних ресурсов. +// +// Вовзращаемое значение: Структура: +// * Ключ - Строка, имя XDTO-типа, описывающего тип разрешения, +// * Значение - ТаблицаЗначений, структура колонок совпадает с набором +// полей регистра сведений, который используется для хранения +// перечня предоставленных разрешений данного типа (см. МенеджерыРегистровРазрешений()). +// +Функция ТаблицыРазрешений() Экспорт + + Результат = Новый Структура(); + + Менеджеры = МенеджерыРегистровРазрешений(); + + Для Каждого Менеджер Из Менеджеры Цикл + + МетаданныеРегистра = Менеджер.СоздатьНаборЗаписей().Метаданные(); + Таблица = ТаблицаРазрешений(МетаданныеРегистра); + Результат.Вставить(Менеджер.ТипXDTOПредставленияРазрешений().Имя, Таблица); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает таблицу, подходящую для хранения перечня предоставленных разрешений определенного типа. +// +// Параметры: +// МетаданныеРегистра - ОбъектМетаданных(РегистрСведений) - объект метаданных, соответствующий регистру +// сведений, использующемуся для хранения перечня предоставленных разрешений определенного типа (см. +// МенеджерыРегистровРазрешений()), +// ИндексироватьИзмерения - Булево - флаг необходимости индексации колонок таблицы, соответствующих +// измерениям регистра. +// +// Возвращаемое значение: ТаблицаЗначений, состав колонок которой соответствует составу полей регистра сведений, +// использующегося для хранения перечня предоставленных разрешений определенного типа. +// +Функция ТаблицаРазрешений(Знач МетаданныеРегистра, Знач ИндексироватьИзмерения = Ложь) Экспорт + + Таблица = Новый ТаблицаЗначений(); + ПоляИндекса = Новый Массив(); + + Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + Таблица.Колонки.Добавить(Измерение.Имя, Измерение.Тип); + Если ИндексироватьИзмерения Тогда + ПоляИндекса.Добавить(Измерение.Имя); + КонецЕсли; + КонецЦикла; + + Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл + Таблица.Колонки.Добавить(Ресурс.Имя, Ресурс.Тип); + КонецЦикла; + + Для Каждого Реквизит Из МетаданныеРегистра.Реквизиты Цикл + Таблица.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип); + КонецЦикла; + + Если ПоляИндекса.Количество() > 0 Тогда + Таблица.Индексы.Добавить(СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПоляИндекса, ", ")); + КонецЕсли; + + Возврат Таблица; + +КонецФункции + +// Возвращает количество разрешений в таблицах разрешений. +// +// Параметры: +// Таблицы - Структура - таблицы разрешений, в которых анализируется количество +// (см. ТаблицыРазрешений()). +// +// Возвращаемое значение: Число - количество разрешений в таблицах. +// +Функция КоличествоРазрешенийВТаблицах(Знач Таблицы) Экспорт + + Результат = 0; + + Для Каждого КлючИЗначение Из Таблицы Цикл + Результат = Результат + КлючИЗначение.Значение.Количество(); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с регистрами хранения разрешений +// + +// Возвраает массив менеджеров регистров сведений, которые используются для хранения перечня предоставленных +// разрешений. +// +// Возвращаемое значение: Массив(РегистрСведенийМенеджер). +// +Функция МенеджерыРегистровРазрешений() Экспорт + + Результат = Новый Массив(); + + Результат.Добавить(РегистрыСведений.РазрешенныеКаталогиФайловойСистемы); + Результат.Добавить(РегистрыСведений.РазрешенныеCOMКлассы); + Результат.Добавить(РегистрыСведений.РазрешенныеВнешниеКомпоненты); + Результат.Добавить(РегистрыСведений.РазрешенныеПриложенияОперационнойСистемы); + Результат.Добавить(РегистрыСведений.РазрешенныеИнтернетРесурсы); + Результат.Добавить(РегистрыСведений.РазрешенияПереходаВПривилегированныйРежим); + + Возврат Результат; + +КонецФункции + +// Устанавливает исключительную управляемую блокировку на теаблицы всех регистров, использующихся +// для хранения перечня предоставленных разрешений. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на элемент справочника, соответствующая внешнему модулю, информацию +// о ранее предоставленных разрешениях по которому требуется очистить. Если значение параметра не задано - +// будет заблокирована информация о предоставленных разрешениях по всем внешним модулям. +// ЗаблокироватьРежимыПодключенияВнешнихМодулей - Булево, флаг необходимости дополнительной блокировки режимов подключения +// внешних модулей. +// +Процедура ЗаблокироватьРегистрыПредоставленныхРазрешений(Знач ВнешнийМодуль = Неопределено, Знач ЗаблокироватьРежимыПодключенияВнешнихМодулей = Истина) + + Если Не ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Транзакция не активна!'"); + КонецЕсли; + + Блокировка = Новый БлокировкаДанных(); + + Регистры = МенеджерыРегистровРазрешений(); + + Если ЗаблокироватьРежимыПодключенияВнешнихМодулей Тогда + Регистры.Добавить(РегистрыСведений.РежимыПодключенияВнешнихМодулей); + КонецЕсли; + + Для Каждого Регистр Из Регистры Цикл + БлокировкаРегистра = Блокировка.Добавить(Регистр.СоздатьНаборЗаписей().Метаданные().ПолноеИмя()); + Если ВнешнийМодуль <> Неопределено Тогда + БлокировкаРегистра.УстановитьЗначение("ВнешнийМодуль", ВнешнийМодуль); + КонецЕсли; + КонецЦикла; + + Блокировка.Заблокировать(); + +КонецПроцедуры + +// Очищает регистры сведений, которые используются для хранения в ИБ перечня предоставленных разрешений. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на элемент справочника, соответствующая внешнему модулю, информацию +// о ранее предоставленных разрешениях по которому требуется очистить. Если значение параметра не задано - +// будет очищена информация о предоставленных разрешениях по всем внешним модулям. +// ОчиститьРежимыПодключенияВнешнихМодулей - Булево, флаг необходимости дополнительной очистки режимов подключения +// внешних модулей. +// +Процедура ОчиститьПредоставленныеРазрешения(Знач ВнешнийМодуль = Неопределено, Знач ОчиститьРежимыПодключенияВнешнихМодулей = Истина) Экспорт + + НачатьТранзакцию(); + + Попытка + + ЗаблокироватьРегистрыПредоставленныхРазрешений(ВнешнийМодуль, ОчиститьРежимыПодключенияВнешнихМодулей); + + Менеджеры = МенеджерыРегистровРазрешений(); + + Если ОчиститьРежимыПодключенияВнешнихМодулей Тогда + Менеджеры.Добавить(РегистрыСведений.РежимыПодключенияВнешнихМодулей); + КонецЕсли; + + Для Каждого Менеджер Из Менеджеры Цикл + Набор = Менеджер.СоздатьНаборЗаписей(); + Если ВнешнийМодуль <> Неопределено Тогда + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + КонецЕсли; + Набор.Записать(Истина); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Возвращает текущий срез предоставленных разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Структура, см. ТаблицыРазрешений(). +// +Функция ТекущийСрезРазрешений() + + Результат = ТаблицыРазрешений(); + + Менеджеры = МенеджерыРегистровРазрешений(); + Для Каждого Менеджер Из Менеджеры Цикл + + ЗапросТекущегоСреза = Новый Запрос(Менеджер.ЗапросТекущегоСреза(Ложь)); + Результат[Менеджер.ТипXDTOПредставленияРазрешений().Имя] = ЗапросТекущегоСреза.Выполнить().Выгрузить(); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Применение запросов разрешений +// + +// Рассчитывает изменения в разрешениях на использование внешних ресурсов, которые должны +// быть внесены в настройки профилей безопасности при обработке запросов на использование +// внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов на +// использование внешних ресурсов, для которых требуется получить изменения, которые должны +// быть внесены в настройки профилей безопасности при применении разрешений. +// +// Возвращаемое значение: ТаблицаЗначений: +// * ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, соответствуюшая +// внешнему модулю, для которого выполняется запрос разрешений на использование +// внешних ресурсов, +// * Изменения - Структура: +// * Добавляемые - Структура, содержащая таблицы с описаниями разрешений, которые +// должны быть добавлены в настройки профилей безопасности в кластере серверов +// при применении запросов (см. ТаблицыРазрешений()), +// * Удаляемые - Структура, содержащая таблицы с описаниями разрешений, которые +// должны быть удалены из настроек профилей безопасности в кластере серверов +// при применении запросов (см. ТаблицыРазрешений()), +// * Приоритет - Число, приоритет текущего внешнего модуля (для случаев визуального +// отображения рассчитанной дельты в пользовательском интерфейсе). +// +Функция ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов) Экспорт + + МенеджерыРегистров = МенеджерыРегистровРазрешений(); + СоответствиеРасчетаДельты = Новый Соответствие(); + + НачатьТранзакцию(); + + Попытка + + ЗаблокироватьРегистрыПредоставленныхРазрешений(); + + ИменаПервыхВТ = "ВТ_До"; + ИменаВторыхВТ = "ВТ_После"; + ПсевдонимыПомещаемыхТаблиц = "Таблица"; + + ТекущийСрез = ТекущийСрезРазрешений(); + Для Каждого МенеджерРегистра Из МенеджерыРегистров Цикл + + ИмяТаблицы = МенеджерРегистра.ТипXDTOПредставленияРазрешений().Имя; + ТекущийСрезПоТаблице = ТекущийСрез[ИмяТаблицы]; + + МенеджерВТ = Новый МенеджерВременныхТаблиц(); + + ЗапросСозданияВТ = Новый Запрос(ТекстЗапросаСозданияВТ(ТекущийСрезПоТаблице, ПсевдонимыПомещаемыхТаблиц, ИменаПервыхВТ)); + ЗапросСозданияВТ.УстановитьПараметр(ПсевдонимыПомещаемыхТаблиц, ТекущийСрезПоТаблице); + ЗапросСозданияВТ.МенеджерВременныхТаблиц = МенеджерВТ; + ЗапросСозданияВТ.Выполнить(); + + СоответствиеРасчетаДельты.Вставить(МенеджерРегистра, МенеджерВТ); + + КонецЦикла; + + ПрименитьЗапросыКТаблицамРазрешений(ИдентификаторыЗапросов, ТекущийСрез); + + Добавляемые = ТаблицыРазрешений(); + Удаляемые = ТаблицыРазрешений(); + + Для Каждого ЭлементСоответствияРасчетаДельты Из СоответствиеРасчетаДельты Цикл + + МенеджерРегистра = ЭлементСоответствияРасчетаДельты.Ключ; + ИмяТаблицы = МенеджерРегистра.ТипXDTOПредставленияРазрешений().Имя; + МенеджерВТ = ЭлементСоответствияРасчетаДельты.Значение; + + ТекущийСрезПоТаблице = ТекущийСрез[ИмяТаблицы]; + + ЗапросСозданияВТ = Новый Запрос(ТекстЗапросаСозданияВТ(ТекущийСрезПоТаблице, ПсевдонимыПомещаемыхТаблиц, ИменаВторыхВТ)); + ЗапросСозданияВТ.УстановитьПараметр(ПсевдонимыПомещаемыхТаблиц, ТекущийСрезПоТаблице); + ЗапросСозданияВТ.МенеджерВременныхТаблиц = МенеджерВТ; + ЗапросСозданияВТ.Выполнить(); + + Запрос = Новый Запрос(МенеджерРегистра.ЗапросПолученияДельты()); + Запрос.МенеджерВременныхТаблиц = МенеджерВТ; + + Результаты = Запрос.ВыполнитьПакет(); + + Порция = Удаляемые[ИмяТаблицы]; + Если Порция = Неопределено Тогда + Удаляемые.Вставить(ИмяТаблицы, Результаты[0].Выгрузить()); + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результаты[0].Выгрузить(), Порция); + Удаляемые.Вставить(ИмяТаблицы, Порция); + КонецЕсли; + + Порция = Добавляемые[ИмяТаблицы]; + Если Порция = Неопределено Тогда + Добавляемые.Вставить(ИмяТаблицы, Результаты[1].Выгрузить()); + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результаты[1].Выгрузить(), Порция); + Добавляемые.Вставить(ИмяТаблицы, Порция); + КонецЕсли; + + КонецЦикла; + + Результат = Новый ТаблицаЗначений(); + Результат.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + Результат.Колонки.Добавить("Изменения", Новый ОписаниеТипов("Структура")); + + Для Каждого КлючИЗначение Из Добавляемые Цикл + + ИмяТаблицы = КлючИЗначение.Ключ; + Таблица = КлючИЗначение.Значение; + + Для Каждого Строка Из Таблица Цикл + + ВнешнийМодуль = Строка.ВнешнийМодуль; + + ОтборПоМодулю = Новый Структура("ВнешнийМодуль", ВнешнийМодуль); + СтрокиПоМодулю = Результат.НайтиСтроки(ОтборПоМодулю); + Если СтрокиПоМодулю.Количество() = 0 Тогда + СтрокаПоМодулю = Результат.Добавить(); + СтрокаПоМодулю.ВнешнийМодуль = ВнешнийМодуль; + РезультатПоМодулю = Новый Структура("Добавляемые, Удаляемые", ТаблицыРазрешений(), ТаблицыРазрешений()); + ИначеЕсли СтрокиПоМодулю.Количество() = 1 Тогда + СтрокаПоМодулю = СтрокиПоМодулю.Получить(0); + РезультатПоМодулю = СтрокаПоМодулю.Изменения; + Иначе + ВызватьИсключение НСтр("ru = 'Неоднозначность при определении изменений в разрешениях'"); + КонецЕсли; + + ТаблицаРезультата = РезультатПоМодулю.Добавляемые[ИмяТаблицы]; + СтрокаТаблицыРезультата = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицыРезультата, Строка); + + РезультатПоМодулю.Добавляемые.Вставить(ИмяТаблицы, ТаблицаРезультата); + + СтрокаПоМодулю.Изменения = РезультатПоМодулю; + + КонецЦикла; + + КонецЦикла; + + Для Каждого КлючИЗначение Из Удаляемые Цикл + + ИмяТаблицы = КлючИЗначение.Ключ; + Таблица = КлючИЗначение.Значение; + + Для Каждого Строка Из Таблица Цикл + + ВнешнийМодуль = Строка.ВнешнийМодуль; + + ОтборПоМодулю = Новый Структура("ВнешнийМодуль", ВнешнийМодуль); + СтрокиПоМодулю = Результат.НайтиСтроки(ОтборПоМодулю); + Если СтрокиПоМодулю.Количество() = 0 Тогда + СтрокаПоМодулю = Результат.Добавить(); + СтрокаПоМодулю.ВнешнийМодуль = ВнешнийМодуль; + РезультатПоМодулю = Новый Структура("Добавляемые, Удаляемые", ТаблицыРазрешений(), ТаблицыРазрешений()); + ИначеЕсли СтрокиПоМодулю.Количество() = 1 Тогда + СтрокаПоМодулю = СтрокиПоМодулю.Получить(0); + РезультатПоМодулю = СтрокаПоМодулю.Изменения; + Иначе + ВызватьИсключение НСтр("ru = 'Неоднозначность при определении изменений в разрешениях'"); + КонецЕсли; + + ТаблицаРезультата = РезультатПоМодулю.Удаляемые[ИмяТаблицы]; + СтрокаТаблицыРезультата = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицыРезультата, Строка); + + РезультатПоМодулю.Удаляемые.Вставить(ИмяТаблицы, ТаблицаРезультата); + + СтрокаПоМодулю.Изменения = РезультатПоМодулю; + + КонецЦикла; + + КонецЦикла; + + Результат.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + Для Каждого СтрокаРезультата Из Результат Цикл + Если СтрокаРезультата.ВнешнийМодуль = СлужебныйИОМ() Тогда + СтрокаРезультата.Приоритет = 1; + Иначе + СтрокаРезультата.Приоритет = 2; + КонецЕсли; + КонецЦикла; + Результат.Сортировать("Приоритет"); + + ЗафиксироватьТранзакцию(); + + Возврат Результат; + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецФункции + +// Формирует текст запроса создания временной таблицы при расчеты дельты. +// +// Параметры: +// ТекущаяТаблица - ТаблицаЗначений - см. ТаблицаРазрешений(), +// ПсевдонимТаблицы - Строка - пвседоним для таблицы (для текста запроса), +// ИмяВТ - Строка - имя временной таблицы (для текста запроса). +// +// Возвращаемое значение: Строка - текст запроса. +// +Функция ТекстЗапросаСозданияВТ(Знач ТекущаяТаблица, Знач ПсевдонимТаблицы, Знач ИмяВТ) + + ПоляВыборки = Новый Массив(); + + Для Каждого Колонка Из ТекущаяТаблица.Колонки Цикл + ПоляВыборки.Добавить(Колонка.Имя); + КонецЦикла; + + ТекстВыборки = ""; + Для Каждого ПолеВыборки Из ПоляВыборки Цикл + + Если Не ПустаяСтрока(ТекстВыборки) Тогда + ТекстВыборки = ТекстВыборки + ", "; + КонецЕсли; + + ТекстВыборки = ТекстВыборки + ПсевдонимТаблицы + "." + ПолеВыборки + " КАК " + ПолеВыборки; + + КонецЦикла; + + ТекстЗапроса = "Выбрать %1 Поместить %2 Из &%3 КАК %3"; + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗапроса, ТекстВыборки, ИмяВТ, ПсевдонимТаблицы); + + Возврат ТекстЗапроса; + +КонецФункции + +// Строит план применения запросов на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов на +// использование внешних ресурсов, для которых требуется получить изменения, которые должны +// быть внесены в настройки профилей безопасности при применении разрешений. +// +// Возвращаемое значение: Структура: +// * ЗамещаемыеПоТипам - ТаблицаЗначений - план выполнения замещения +// предыдущих значений для ранее предоставленных разрешений: +// * ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, +// испольуемая в качестве внешнего модуля, +// * Владелец - ЛюбаяСсылка - ссылка на элемент справочника, используемый +// в качестве владельца разрешений, +// * Тип - Строка - имя XDTO-типа, описывающего типа разрешений. Тип должен быть +// определен в пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}. +// * ДобавляемыеПоТипам - ТаблицаЗначений - план добавления разрешений на использование +// внешних ресурсов: +// * ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, +// испольуемая в качестве внешнего модуля, +// * Владелец - ЛюбаяСсылка - ссылка на элемент справочника, используемый +// в качестве владельца разрешений, +// * Тип - Строка - имя XDTO-типа, описывающего типа разрешений. Тип должен быть +// определен в пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}, +// * Разрешения - Массив(ОбъектXDTO) - массив объектов XDTO, описывающих разрешения +// на использование внешних ресурсов. Типы объектов должны быть определены в +// пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}, +// * УдаляемыеПоТипам - ТаблицаЗначений - план удаления разрешений на использование +// внешних ресурсов: +// * ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, +// испольуемая в качестве внешнего модуля, +// * Владелец - ЛюбаяСсылка - ссылка на элемент справочника, используемый +// в качестве владельца разрешений, +// * Тип - Строка - имя XDTO-типа, описывающего типа разрешений. Тип должен быть +// определен в пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}, +// * Разрешения - Массив(ОбъектXDTO) - массив объектов XDTO, описывающих разрешения +// на использование внешних ресурсов. Типы объектов должны быть определены в +// пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}. +// +Функция ПланПримененияЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов) + + Менеджеры = МенеджерыРегистровРазрешений(); + + ЗамещаемыеПоТипам = Новый ТаблицаЗначений(); + ЗамещаемыеПоТипам.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + ЗамещаемыеПоТипам.Колонки.Добавить("Владелец", ОписаниеТипаЛюбаяСсылка()); + ЗамещаемыеПоТипам.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); + + ДобавляемыеПоТипам = Новый ТаблицаЗначений(); + ДобавляемыеПоТипам.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + ДобавляемыеПоТипам.Колонки.Добавить("Владелец", ОписаниеТипаЛюбаяСсылка()); + ДобавляемыеПоТипам.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); + ДобавляемыеПоТипам.Колонки.Добавить("Разрешения", Новый ОписаниеТипов("Массив")); + + УдаляемыеПоТипам = Новый ТаблицаЗначений(); + УдаляемыеПоТипам.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + УдаляемыеПоТипам.Колонки.Добавить("Владелец", ОписаниеТипаЛюбаяСсылка()); + УдаляемыеПоТипам.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); + УдаляемыеПоТипам.Колонки.Добавить("Разрешения", Новый ОписаниеТипов("Массив")); + + ТекстЗапроса = + "ВЫБРАТЬ + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Идентификатор, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ВнешнийМодуль, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Владелец, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.РежимЗамещения, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ДобавляемыеРазрешения, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.УдаляемыеРазрешения, + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.МоментВремени + |ИЗ + | РегистрСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов КАК ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + |ГДЕ + | ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Идентификатор В(&Идентификаторы)"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Идентификаторы", ИдентификаторыЗапросов); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если Выборка.РежимЗамещения Тогда + + // Замещение по всем таблицам + + Для Каждого Менеджер Из Менеджеры Цикл + + ТипТаблицы = Менеджер.ТипXDTOПредставленияРазрешений().Имя; + + СтрокаЗамещения = ЗамещаемыеПоТипам.Добавить(); + СтрокаЗамещения.ВнешнийМодуль = Выборка.ВнешнийМодуль; + СтрокаЗамещения.Владелец = Выборка.Владелец; + СтрокаЗамещения.Тип = ТипТаблицы; + + КонецЦикла; + + КонецЕсли; + + Если Не ПустаяСтрока(Выборка.ДобавляемыеРазрешения) Тогда + + МассивДобавляемыхРазрешений = ОбщегоНазначения.ЗначениеИзСтрокиXML(Выборка.ДобавляемыеРазрешения); + Для Каждого ПредставлениеРазрешения Из МассивДобавляемыхРазрешений Цикл + + Разрешение = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(ПредставлениеРазрешения); + + ТипРазрешения = Разрешение.Тип().Имя; + Отбор = Новый Структура("ВнешнийМодуль,Владелец,Тип", Выборка.ВнешнийМодуль, Выборка.Владелец, ТипРазрешения); + Строки = ДобавляемыеПоТипам.НайтиСтроки(Отбор); + Если Строки.Количество() = 0 Тогда + Строка = ДобавляемыеПоТипам.Добавить(); + Строка.ВнешнийМодуль = Выборка.ВнешнийМодуль; + Строка.Владелец = Выборка.Владелец; + Строка.Тип = ТипРазрешения; + Иначе + Строка = Строки.Получить(0); + КонецЕсли; + + Строка.Разрешения.Добавить(Разрешение); + + КонецЦикла; + + КонецЕсли; + + Если Не ПустаяСтрока(Выборка.УдаляемыеРазрешения) Тогда + + МассивУдаляемыхРазрешений = ОбщегоНазначения.ЗначениеИзСтрокиXML(Выборка.УдаляемыеРазрешения); + Для Каждого ПредставлениеРазрешения Из МассивУдаляемыхРазрешений Цикл + + Разрешение = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(ПредставлениеРазрешения); + + ТипРазрешения = Разрешение.Тип().Имя; + Отбор = Новый Структура("ВнешнийМодуль,Владелец,Тип", Выборка.ВнешнийМодуль, Выборка.Владелец, ТипРазрешения); + Строки = УдаляемыеПоТипам.НайтиСтроки(Отбор); + Если Строки.Количество() = 0 Тогда + Строка = ДобавляемыеПоТипам.Добавить(); + Строка.ВнешнийМодуль = Выборка.ВнешнийМодуль; + Строка.Владелец = Выборка.Владелец; + Строка.Тип = ТипРазрешения; + Иначе + Строка = Строки.Получить(0); + КонецЕсли; + + Строка.Разрешения.Добавить(Разрешение); + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура(); + Результат.Вставить("ЗамещаемыеПоТипам", ЗамещаемыеПоТипам); + Результат.Вставить("ДобавляемыеПоТипам", ДобавляемыеПоТипам); + Результат.Вставить("УдаляемыеПоТипам" ,УдаляемыеПоТипам); + + Возврат Результат; + +КонецФункции + +// Применяет запросы на использование внешних ресурсов к таблицам разрешений. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов на +// использование внешних ресурсов, для которых требуется получить изменения, которые должны +// быть внесены в настройки профилей безопасности при применении разрешений, +// ТаблицыРазрешений - Структура - описывающая разрешения на использование внешних ресурсов +// (см. ТаблицыРазрешений()). +// +Процедура ПрименитьЗапросыКТаблицамРазрешений(Знач ИдентификаторыЗапросов, ТаблицыРазрешений) + + Менеджеры = МенеджерыРегистровРазрешений(); + + План = ПланПримененияЗапросовНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов); + + Для Каждого ЗамещаемыеПоТипу Из План.ЗамещаемыеПоТипам Цикл + + ИмяТипа = ЗамещаемыеПоТипу.Тип; + Таблица = ТаблицыРазрешений[ИмяТипа]; + + ПараметрыОтбора = Новый Структура(); + ПараметрыОтбора.Вставить("ВнешнийМодуль", ЗамещаемыеПоТипу.ВнешнийМодуль); + ПараметрыОтбора.Вставить("Владелец", ЗамещаемыеПоТипу.Владелец); + + Строки = Таблица.НайтиСтроки(ПараметрыОтбора); + Для Каждого Строка Из Строки Цикл + Таблица.Удалить(Строка); + КонецЦикла; + + КонецЦикла; + + Для Каждого ДобавляемыеПоТипу Из План.ДобавляемыеПоТипам Цикл + + ИмяТипа = ДобавляемыеПоТипу.Тип; + Таблица = ТаблицыРазрешений[ИмяТипа]; + + ТекущийМенеджер = Неопределено; + Для Каждого Менеджер Из Менеджеры Цикл + Если Менеджер.ТипXDTOПредставленияРазрешений().Имя = ИмяТипа Тогда + ТекущийМенеджер = Менеджер; + КонецЕсли; + КонецЦикла; + Если ТекущийМенеджер = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при разборе запроса разрешений на использование внешних ресурсов: неизвестное имя типа %1!'"), + ИмяТипа); + КонецЕсли; + + НаборЗаписей = ТекущийМенеджер.НаборЗаписейИзXDTOПредставления(ДобавляемыеПоТипу.Разрешения, ДобавляемыеПоТипу.ВнешнийМодуль, ДобавляемыеПоТипу.Владелец, Ложь); + + Для Каждого Запись Из НаборЗаписей Цикл + Строка = Таблица.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Запись); + КонецЦикла; + + КонецЦикла; + + Для Каждого УдаляемыеПоТипу Из План.УдаляемыеПоТипам Цикл + + ИмяТипа = УдаляемыеПоТипу.Тип; + Таблица = ТаблицыРазрешений[ИмяТипа]; + + ТекущийМенеджер = Неопределено; + Для Каждого Менеджер Из Менеджеры Цикл + Если Менеджер.ТипXDTOПредставленияРазрешений().Имя = ИмяТипа Тогда + ТекущийМенеджер = Менеджер; + КонецЕсли; + КонецЦикла; + Если ТекущийМенеджер = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при разборе запроса разрешений на использование внешних ресурсов: неизвестное имя типа %1!'"), + ИмяТипа); + КонецЕсли; + + НаборЗаписей = ТекущийМенеджер.НаборЗаписейИзXDTOПредставления(УдаляемыеПоТипу.Разрешения, УдаляемыеПоТипу.ВнешнийМодуль, УдаляемыеПоТипу.Владелец, Истина); + + ПараметрыОтбора = Новый Структура(); + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + Если ЭлементОтбора.Использование Тогда + Если Таблица.Колонки.Найти(ЭлементОтбора.ПутьКДанным) <> Неопределено Тогда + Если ЭлементОтбора.ВидСравнения = ВидСравнения.Равно Тогда + ПараметрыОтбора.Вставить(ЭлементОтбора.ПутьКДанным, ЭлементОтбора.Значение); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректный вид сравнения!'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Строки = Таблица.НайтиСтроки(ПараметрыОтбора); + Для Каждого Строка Из Строки Цикл + Таблица.Удалить(Строка); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Применяет запросы на использование внешних ресурсов (должна вызываться после изменения настроек +// профилей безопасности в кластере серверов). +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы применяемых запросов. +// +Процедура ПрименитьЗапросы(Знач ИдентификаторыЗапросов) Экспорт + + Если МонопольныйРежим() Тогда + + ОчисткаНеактуальныхЗапросовНаИспользованиеВнешнихРесурсов(); + + Иначе + + Попытка + + ПараметрыЗадания = Новый Массив(); + ПараметрыЗадания.Добавить("Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчисткаНеактуальныхЗапросовНаИспользованиеВнешнихРесурсов"); + + ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", ,"f023cc5d-1846-4c49-b0ba-27aa65924879"); + + Исключение + // Обработка исключения не требуется. + // Ожидаемое исключение - дублирование заданий с одинаковым ключем. + КонецПопытки; + + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + МенеджерыРегистров = МенеджерыРегистровРазрешений(); + + ЗаблокироватьРегистрыПредоставленныхРазрешений(); + + ТекущийСрез = ТекущийСрезРазрешений(); + ПрименитьЗапросыКТаблицамРазрешений(ИдентификаторыЗапросов, ТекущийСрез); + + Для Каждого ЭлементСреза Из ТекущийСрез Цикл + + ИмяТаблицы = ЭлементСреза.Ключ; + Таблица = ЭлементСреза.Значение; + МенеджерТекущегоРегистра = Неопределено; + + Для Каждого МенеджерРегистра Из МенеджерыРегистров Цикл + + Если МенеджерРегистра.ТипXDTOПредставленияРазрешений().Имя = ИмяТаблицы Тогда + + МенеджерТекущегоРегистра = МенеджерРегистра; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если МенеджерТекущегоРегистра = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при разборе запроса разрешений на использование внешних ресурсов: неизвестное имя типа %1!'"), + ИмяТаблицы); + КонецЕсли; + + НаборЗаписей = МенеджерТекущегоРегистра.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(Таблица); + НаборЗаписей.Записать(Истина); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Выполняет дополнительные действия после применения запросов на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы применяемых запросов. +// +Процедура ПослеОбработкиЗапросов(Знач ИдентификаторыЗапросов) Экспорт + + НачатьТранзакцию(); + + Попытка + + ТекстЗапроса = + "ВЫБРАТЬ + | ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Идентификатор, + | ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Владелец, + | ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Операция, + | ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Имя + |ИЗ + | РегистрСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов КАК ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов + |ГДЕ + | ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Идентификатор В(&Идентификаторы)"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Идентификаторы", ИдентификаторыЗапросов); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ЭтоПрофильКонфигурации = (Выборка.Владелец = СлужебныйИОМ()); + + Если Выборка.Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание Тогда + + Если ЭтоПрофильКонфигурации Тогда + + Константы.ПрофильБезопасностиИнформационнойБазы.Установить(Выборка.Имя); + + Иначе + + Набор = РегистрыСведений.РежимыПодключенияВнешнихМодулей.СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(Выборка.Владелец); + Запись = Набор.Добавить(); + Запись.ВнешнийМодуль = Выборка.Владелец; + Запись.БезопасныйРежим = Выборка.Имя; + Набор.Записать(); + + КонецЕсли; + + Иначе + + Если ЭтоПрофильКонфигурации Тогда + + Константы.ПрофильБезопасностиИнформационнойБазы.Установить(""); + ОчиститьПредоставленныеРазрешения(); + + Иначе + + ОчиститьПредоставленныеРазрешения(Выборка.Владелец, Истина); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Формирует результат применения запросов на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы применяемых запросов. +// +// Возвращаемое значение: Соответствие: +// * Ключ - ЛюбаяСсылка - ссылка на элемент справочника, соответствующий +// внешнему модулю, +// * Значение - Структура - таблицы разрешений в том виде, который они должны +// принять после применения запросов на использование внешних ресурсов (см. +// ТаблицыРазрешений()). +// +Функция РезультатПримененияЗапросовНаИспользованиеВнешнихРесурсов(Знач ИдентификаторыЗапросов) + + НачатьТранзакцию(); + + Попытка + + ЗаблокироватьРегистрыПредоставленныхРазрешений(); + + ТекущийСрез = ТекущийСрезРазрешений(); + ПрименитьЗапросыКТаблицамРазрешений(ИдентификаторыЗапросов, ТекущийСрез); + + Для Каждого ЭлементСреза Из ТекущийСрез Цикл + + КолонкиГруппировок = Новый Массив(); + Для Каждого Колонка Из ЭлементСреза.Значение.Колонки Цикл + КолонкиГруппировок.Добавить(Колонка.Имя); + КонецЦикла; + Индекс = КолонкиГруппировок.Найти("Владелец"); + Если Индекс <> Неопределено Тогда + КолонкиГруппировок.Удалить(Индекс); + КонецЕсли; + + ЭлементСреза.Значение.Свернуть(СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(КолонкиГруппировок, ", ")); + + КонецЦикла; + + Результат = Новый Соответствие(); + + Для Каждого КлючИЗначение Из ТекущийСрез Цикл + + ИмяТаблицы = КлючИЗначение.Ключ; + Таблица = КлючИЗначение.Значение; + + Для Каждого Строка Из Таблица Цикл + + ВнешнийМодуль = Строка.ВнешнийМодуль; + + РезультатПоМодулю = Результат.Получить(ВнешнийМодуль); + Если РезультатПоМодулю = Неопределено Тогда + РезультатПоМодулю = ТаблицыРазрешений(); + КонецЕсли; + + ТаблицаРезультата = РезультатПоМодулю[ИмяТаблицы]; + СтрокаТаблицыРезультата = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицыРезультата, Строка); + + РезультатПоМодулю.Вставить(ИмяТаблицы, ТаблицаРезультата); + Результат.Вставить(ВнешнийМодуль, РезультатПоМодулю); + + КонецЦикла; + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Возврат Результат; + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецФункции + +// Формирует сценарий примнения запросов на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов на использование +// внешних ресурсов, для примнения которых формируется сценарий. +// +// Возвращаемое значение - Массив(Структура) - сценарий применения запросов на использование внешних +// ресурсов. Значениями массива являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция СценарийПримененияЗапросовНаИзменениеДоступаКВнешнимРесурсам(Знач ИдентификаторыЗапросов) + + Результат = Новый Массив(); + + ИменаПрофилей = Новый Соответствие(); + + ОперацииАдминистрирования = ОперацииАдминистрированияВЗапросах(ИдентификаторыЗапросов); + + Для Каждого Описание Из ОперацииАдминистрирования Цикл + + ЭтоПрофильКонфигурации = (Описание.ВнешнийМодуль = СлужебныйИОМ()); + ИмяПрофиля = Описание.Имя; + + ИменаПрофилей.Вставить(Описание.ВнешнийМодуль, ИмяПрофиля); + + ЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); + ЭлементРезультата.Операция = Описание.Операция; + ЭлементРезультата.Профиль = ИмяПрофиля; + + ДополнительныйЭлементРезультата = Неопределено; + ПриоритетДополнительногоЭлемента = Ложь; + + Если ЭтоПрофильКонфигурации И Описание.Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание Тогда + + ДополнительныйЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); + ДополнительныйЭлементРезультата.Операция = Перечисления.ОперацииСНаборамиРазрешений.Назначение; + ДополнительныйЭлементРезультата.Профиль = ИмяПрофиля; + + ПриоритетДополнительногоЭлемента = Ложь; + + КонецЕсли; + + Если ЭтоПрофильКонфигурации И Описание.Операция = Перечисления.ОперацииСНаборамиРазрешений.Удаление Тогда + + ДополнительныйЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); + ДополнительныйЭлементРезультата.Операция = Перечисления.ОперацииСНаборамиРазрешений.УдалениеНазначения; + ДополнительныйЭлементРезультата.Профиль = ИмяПрофиля; + + ПриоритетДополнительногоЭлемента = Истина; + + КонецЕсли; + + Если ДополнительныйЭлементРезультата = Неопределено Тогда + + Результат.Добавить(ЭлементРезультата); + + Иначе + + Если ПриоритетДополнительногоЭлемента Тогда + + Результат.Добавить(ДополнительныйЭлементРезультата); + Результат.Добавить(ЭлементРезультата); + + Иначе + + Результат.Добавить(ЭлементРезультата); + Результат.Добавить(ДополнительныйЭлементРезультата); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Дельта = ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов); + РезультатПримененияЗапросов = РезультатПримененияЗапросовНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов); + + Для Каждого ФрагментИзменений Из Дельта Цикл + + Модуль = ФрагментИзменений.ВнешнийМодуль; + + ИмяПрофиля = ИменаПрофилей.Получить(Модуль); + Если ИмяПрофиля = Неопределено Тогда + + Если Модуль <> СлужебныйИОМ() Тогда + ИмяПрофиля = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Модуль); + Иначе + ИмяПрофиля = Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + КонецЕсли; + + КонецЕсли; + + ОписаниеПрофиля = НовоеОписаниеПрофиляБезопасности(Модуль); + + Добавлять = Истина; + ЭлементРезультата = Неопределено; + Для Каждого Этап Из Результат Цикл + Если Этап.Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание И Этап.Профиль = ИмяПрофиля Тогда + ЭлементРезультата = Этап; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЭлементРезультата = Неопределено Тогда + + ЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); + + ЭлементРезультата.Операция = Перечисления.ОперацииСНаборамиРазрешений.Обновление; + ЭлементРезультата.Профиль = ИмяПрофиля; + + Иначе + Добавлять = Ложь; + КонецЕсли; + + Если Модуль <> СлужебныйИОМ() И ЭлементРезультата.Операция = Перечисления.ОперацииСНаборамиРазрешений.Обновление Тогда + + Если Не ПрофильБезопасностиНазначенВнешнемуМодулю(ЭлементРезультата.Профиль) Тогда + ЭлементРезультата.Операция = Перечисления.ОперацииСНаборамиРазрешений.Создание; + КонецЕсли; + + КонецЕсли; + + ЭлементРезультата.Разрешения = ПрофильВНотацииКластера(ЭлементРезультата.Профиль, ОписаниеПрофиля, РезультатПримененияЗапросов.Получить(Модуль)); + + Если Добавлять Тогда + Результат.Добавить(ЭлементРезультата); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Формирует описание профиля безопасности в нотации программного интерфейса администрирования +// кластера серверов. +// +// Параметры: +// ИмяПрофиля - Строка - имя профиля безопасности, +// ОписаниеПрофиля - Строка - описание профиля безопасности, +// Разрешения - Массив(ОбъектXDTO) - массив объектов XDTO, описывающих разрешения +// на использование внешних ресурсов. Типы объектов должны быть определены в +// пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}. +// +// Возвращаемое значение: Структура - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция ПрофильВНотацииКластера(Знач ИмяПрофиля, Знач ОписаниеПрофиля, Знач Разрешения) + + Профиль = АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(); + Профиль.Имя = ИмяПрофиля; + Профиль.Описание = ОписаниеПрофиля; + Профиль.ПрофильБезопасногоРежима = Истина; + + Профиль.ПолныйДоступКФайловойСистеме = Ложь; + Профиль.ПолныйДоступКCOMОбъектам = Ложь; + Профиль.ПолныйДоступКВнешнимКомпонентам = Ложь; + Профиль.ПолныйДоступКВнешнимМодулям = Ложь; + Профиль.ПолныйДоступКПриложениямОперационнойСистемы = Ложь; + Профиль.ПолныйДоступКИнтернетРесурсам = Ложь; + + Профиль.ПолныйДоступКПривилегированномуРежиму = Ложь; + + Менеджеры = МенеджерыРегистровРазрешений(); + + Для Каждого КлючИЗначение Из Разрешения Цикл + + ТаблицаОбработана = Истина; + + Для Каждого Менеджер Из Менеджеры Цикл + + Если Менеджер.ТипXDTOПредставленияРазрешений() = ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), КлючИЗначение.Ключ) Тогда + + Таблица = КлючИЗначение.Значение; + + Для Каждого Строка Из Таблица Цикл + + Менеджер.ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования( + Строка, Профиль); + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Если Не ТаблицаОбработана Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестное имя типа разрешений: %1!'"), КлючИЗначение.Ключ); + КонецЕсли; + + КонецЦикла; + + Возврат Профиль; + +КонецФункции + +// Вовзращает операции администрирования, присутствующие в запросах на использование внешних ресурсов. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов на использование +// внешних ресурсов. +// +// Возвращаемое значение: ТаблицаЗначений: +// * ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, который +// используется в качестве внешнего модуля, +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений, +// * Имя - Строка - имя профиля безопасности, +// +Функция ОперацииАдминистрированияВЗапросах(Знач ИдентификаторыЗапросов) Экспорт + + Результат = Новый ТаблицаЗначений(); + Результат.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + Результат.Колонки.Добавить("Операция", Новый ОписаниеТипов("ПеречислениеСсылка.ОперацииСНаборамиРазрешений")); + Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + + ТекстЗапроса = + "ВЫБРАТЬ + | Запросы.Идентификатор, + | Запросы.Владелец, + | Запросы.Операция, + | Запросы.Имя + |ИЗ + | РегистрСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов КАК Запросы + |ГДЕ + | Запросы.Идентификатор В(&Идентификаторы)"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Идентификаторы", ИдентификаторыЗапросов); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Строка = Результат.Добавить(); + Строка.ВнешнийМодуль = Выборка.Владелец; + Строка.Операция = Выборка.Операция; + Строка.Имя = Выборка.Имя; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Сериализация / десериализация запросов на использование внешних ресурсов +// + +// Сериализует запросы на использование внешних ресурсов. +// +// Параметры: +// Идентификаторы - Массив(УникальныйИдентификатор) - идентификаторы запросов на использование +// внешних ресурсов, которые требуется сериализовать. +// +// Возвращаемое значение: Массив(Строка) - массив, содержащий сериализацию запросов разрешений. +// +Функция СериализоватьЗапросыДляОбработкиСВосстановлением(Знач Идентификаторы) + + Результат = Новый Массив(); + + Для Каждого Идентификатор Из Идентификаторы Цикл + + Набор = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.СоздатьНаборЗаписей(); + Набор.Отбор.Идентификатор.Установить(Идентификатор); + Набор.Прочитать(); + + Если Набор.Количество() > 0 Тогда + + ПотокЗаписи = Новый ЗаписьXML(); + ПотокЗаписи.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ПотокЗаписи, Набор); + Результат.Добавить(ПотокЗаписи.Закрыть()); + + КонецЕсли; + + Набор = РегистрыСведений.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.СоздатьНаборЗаписей(); + Набор.Отбор.Идентификатор.Установить(Идентификатор); + Набор.Прочитать(); + + Если Набор.Количество() > 0 Тогда + + ПотокЗаписи = Новый ЗаписьXML(); + ПотокЗаписи.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ПотокЗаписи, Набор); + Результат.Добавить(ПотокЗаписи.Закрыть()); + + КонецЕсли; + + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +// Десериализует запросы на использование внешних ресурсов и записывает их в информационную базу. +// +// Параметры: +// Сериаилазция - Массив(Строка) - см. СериализоватьЗапросыДляОбработкиСВосстановлением(). +// +Процедура ДесериализоватьЗапросыДляОбработкиСВосстановлением(Знач Сериализация) + + Для Каждого ЭлементСериализации Из Сериализация Цикл + + ПотокЧтения = Новый ЧтениеXML(); + ПотокЧтения.УстановитьСтроку(ЭлементСериализации); + ПотокЧтения.ПерейтиКСодержимому(); + + Набор = СериализаторXDTO.ПрочитатьXML(ПотокЧтения); + Набор.Записать(); + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Лоигка работы мастера настройки разрешений на использование внешних ресурсов +// + +// Выполняет обработку запросов на использование внешних ресурсов при инициализации +// мастера настройки разрешений. +// +// Параметры: +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализируется мастер, +// АдресВременногоХранилища - Строка - адрес временного хранилища, по которому должен быть +// помещен результат обработки запросов на использование внешних ресурсов. +// +// Результатом вызова процедуры является помещение по переданному адресу временного хранилища +// структуры: +// * ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализирован мастер, +// * Представление - ТабличныйДокумент - представление изменений в разрешениях на использование +// внешних ресурсов, которые должны быть внесены в настройки профилей безопасности в кластере +// серверов. +// * Сценарий - Массив(Структура) - сценарий внесения изменений в настройки профилей безопасности +// в кластере серверов, который должен быть выполнен для применения запросов. Значениями массива +// являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ВыполнитьОбработкуЗапросов(Знач ИдентификаторыЗапросов, АдресВременногоХранилища) Экспорт + + ОперацииАдминистрирования = ОперацииАдминистрированияВЗапросах(ИдентификаторыЗапросов); + Дельта = ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(ИдентификаторыЗапросов); + + Результат = Новый Структура(); + + Результат.Вставить("ИдентификаторыЗапросов", ИдентификаторыЗапросов); + Результат.Вставить("Представление", Отчеты.ИспользуемыеВнешниеРесурсы.ПредставлениеРезультатаПримененияЗапросовНаИспользованиеВнешнихРесурсов(ОперацииАдминистрирования, Дельта)); + Результат.Вставить("Сценарий", СценарийПримененияЗапросовНаИзменениеДоступаКВнешнимРесурсам(ИдентификаторыЗапросов)); + + ПоместитьВоВременноеХранилище(Результат, АдресВременногоХранилища); + +КонецПроцедуры + +// Выполняет обработку запросов на использование внешних ресурсов после обновления конфигурации +// (или при первоначальном включении профилей безопасности). +// +// Параметры: +// АдресВременногоХранилища - Строка - адрес временного хранилища, по которому должен быть +// помещен результат обработки запросов на использование внешних ресурсов. +// +// Результатом вызова процедуры является помещение по переданному адресу временного хранилища +// структуры: +// * ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализирован мастер, +// * Представление - ТабличныйДокумент - представление изменений в разрешениях на использование +// внешних ресурсов, которые должны быть внесены в настройки профилей безопасности в кластере +// серверов. +// * Сценарий - Массив(Структура) - сценарий внесения изменений в настройки профилей безопасности +// в кластере серверов, который должен быть выполнен для применения запросов. Значениями массива +// являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ВыполнитьОбработкуЗапросовОбновления(АдресВременногоХранилища) Экспорт + + ВызовПриОтключенныхПрофилях = Не Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Получить(); + + Если ВызовПриОтключенныхПрофилях Тогда + + НачатьТранзакцию(); + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина); + + ИдентификаторыЗапросов = РаботаВБезопасномРежимеСлужебный.ЗапросыНаОбновлениеРазрешенийКонфигурации(); + СериализацияЗапросов = СериализоватьЗапросыДляОбработкиСВосстановлением(ИдентификаторыЗапросов); + + КонецЕсли; + + ВыполнитьОбработкуЗапросов(ИдентификаторыЗапросов, АдресВременногоХранилища); + + Если ВызовПриОтключенныхПрофилях Тогда + + ОтменитьТранзакцию(); + ДесериализоватьЗапросыДляОбработкиСВосстановлением(СериализацияЗапросов); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет обработку запросов на отключение использования профилей безопасности для информационной базы. +// +// Параметры: +// АдресВременногоХранилища - Строка - адрес временного хранилища, по которому должен быть +// помещен результат обработки запросов на использование внешних ресурсов. +// +// Результатом вызова процедуры является помещение по переданному адресу временного хранилища +// структуры: +// * ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализирован мастер, +// * Представление - ТабличныйДокумент - представление изменений в разрешениях на использование +// внешних ресурсов, которые должны быть внесены в настройки профилей безопасности в кластере +// серверов. +// * Сценарий - Массив(Структура) - сценарий внесения изменений в настройки профилей безопасности +// в кластере серверов, который должен быть выполнен для применения запросов. Значениями массива +// являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ВыполнитьОбработкуЗапросовОтключения(АдресВременногоХранилища) Экспорт + + Запросы = ЗапросыНаОтключениеПрофилейБезопасности(); + ВыполнитьОбработкуЗапросов(Запросы, АдресВременногоХранилища); + +КонецПроцедуры + +// Выполняет обработку запросов на восстановление настроек профилей безопасности в кластре серверов +// по текущему состоянию информационной базы. +// +// Параметры: +// АдресВременногоХранилища - Строка - адрес временного хранилища, по которому должен быть +// помещен результат обработки запросов на использование внешних ресурсов. +// +// Результатом вызова процедуры является помещение по переданному адресу временного хранилища +// структуры: +// * ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализирован мастер, +// * Представление - ТабличныйДокумент - представление изменений в разрешениях на использование +// внешних ресурсов, которые должны быть внесены в настройки профилей безопасности в кластере +// серверов. +// * Сценарий - Массив(Структура) - сценарий внесения изменений в настройки профилей безопасности +// в кластере серверов, который должен быть выполнен для применения запросов. Значениями массива +// являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ВыполнитьОбработкуЗапросовВосстановления(АдресВременногоХранилища) Экспорт + + НачатьТранзакцию(); + + ОчиститьПредоставленныеРазрешения(, Ложь); + + ИдентификаторыЗапросов = РаботаВБезопасномРежимеСлужебный.ЗапросыНаОбновлениеРазрешенийКонфигурации(Ложь); + СериализацияЗапросов = СериализоватьЗапросыДляОбработкиСВосстановлением(ИдентификаторыЗапросов); + + ВыполнитьОбработкуЗапросов(ИдентификаторыЗапросов, АдресВременногоХранилища); + + ОтменитьТранзакцию(); + + ДесериализоватьЗапросыДляОбработкиСВосстановлением(СериализацияЗапросов); + +КонецПроцедуры + +// Выполняет обработку запросов на проверку завершения операции, в рамках которой ранее были выполнено +// применение запросов на использование внешних ресурсов. +// +// Параметры: +// АдресВременногоХранилища - Строка - адрес временного хранилища, по которому должен быть +// помещен результат обработки запросов на использование внешних ресурсов. +// +// Результатом вызова процедуры является помещение по переданному адресу временного хранилища +// структуры: +// * ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов, для +// применения которых инициализирован мастер, +// * Представление - ТабличныйДокумент - представление изменений в разрешениях на использование +// внешних ресурсов, которые должны быть внесены в настройки профилей безопасности в кластере +// серверов. +// * Сценарий - Массив(Структура) - сценарий внесения изменений в настройки профилей безопасности +// в кластере серверов, который должен быть выполнен для применения запросов. Значениями массива +// являются структуры со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииСНаборамиРазрешений - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Процедура ВыполнитьОбработкуЗапросовПроверкиПрименения(АдресВременногоХранилища) Экспорт + + ИдентификаторыЗапросов = Новый Массив(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИдентификаторыЗапросов, ЗапросыЗамещенияДляВсехПредоставленныхРазрешений()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИдентификаторыЗапросов, РаботаВБезопасномРежимеСлужебный.ЗапросыНаОбновлениеРазрешенийКонфигурации(Ложь)); + + ВыполнитьОбработкуЗапросов(ИдентификаторыЗапросов, АдресВременногоХранилища); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочее +// + +// Возвращает служебный идентификатор объектов метаданных, который используется для хранения +// разрешений, связанных с конфигурацией (а не с объектами конфигурации). +// +// Возвращаемое значение: СправочникСсылка.ИдентификаторыОбъектовМетаданных. +// +Функция СлужебныйИОМ() + + Возврат РаботаВБезопасномРежимеСлужебныйПовтИсп.СлужебныйИОМ(); + +КонецФункции + +// Возвращает описание типов для набора ссылок вида ЛюбаяСсылка. +// +// Вовзращаемое значение: ОписаниеТипов. +// +Функция ОписаниеТипаЛюбаяСсылка() + + ОписаниеТипаЛюбаяСсылка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); + + Возврат ОписаниеТипаЛюбаяСсылка; + +КонецФункции + +// Формирует имя профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Вовзращаемое значение: Строка - имя профиля безопасности. +// +Функция НовоеИмяПрофиляБезопасности(Знач ВнешнийМодуль) Экспорт + + Если ВнешнийМодуль = СлужебныйИОМ() Тогда + + Результат = "Infobase_" + Строка(Новый УникальныйИдентификатор()); + + Иначе + + МенеджерМодуля = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(ВнешнийМодуль); + Шаблон = МенеджерМодуля.ШаблонИмениПрофиляБезопасности(ВнешнийМодуль); + Возврат СтрЗаменить(Шаблон, "%1", Строка(Новый УникальныйИдентификатор())); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Формирует описание профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Вовзращаемое значение: Строка - описание профиля безопасности. +// +Функция НовоеОписаниеПрофиляБезопасности(Знач ВнешнийМодуль) Экспорт + + Шаблон = НСтр("ru = '[ИБ %1] %2 ""%3""'"); + + ИмяИБ = ""; + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСоединения, ";"); + Для Каждого Подстрока Из Подстроки Цикл + Если Лев(Подстрока, 3) = "Ref" Тогда + ИмяИБ = СтрЗаменить(Прав(Подстрока, СтрДлина(Подстрока) - 4), """", ""); + КонецЕсли; + КонецЦикла; + Если ПустаяСтрока(ИмяИБ) Тогда + ВызватьИсключение НСтр("ru = 'Строка соединения информационной базы не содержит имени информационной базы!'"); + КонецЕсли; + + Если ВнешнийМодуль = СлужебныйИОМ() Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, + НСтр("ru = 'Основной профиль безопасности для информационной базы'"), СтрокаСоединенияИнформационнойБазы()); + Иначе + Словарь = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(ВнешнийМодуль).СловарьКонтейнераВнешнегоМодуля(); + НаименованиеМодуля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВнешнийМодуль, "Наименование"); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, Словарь.Именительный, НаименованиеМодуля); + КонецЕсли; + +КонецФункции + +// Возвращает имя профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Вовзращаемое значение: Строка - имя профиля безопасности. +// +Функция ИмяПрофиляБезопасности(Знач ВнешнийМодуль) Экспорт + + Если ВнешнийМодуль = СлужебныйИОМ() Тогда + + Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + + Иначе + + Возврат РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(ВнешнийМодуль); + + КонецЕсли; + +КонецФункции + +// Проверяет, что профиль безопасности назначен внешнему модулю. +// +// Параметры: +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: Булево. +// +Функция ПрофильБезопасностиНазначенВнешнемуМодулю(Знач ИмяПрофиля) + + ТекстЗапроса = + "ВЫБРАТЬ + | РежимыПодключенияВнешнихМодулей.ВнешнийМодуль + |ИЗ + | РегистрСведений.РежимыПодключенияВнешнихМодулей КАК РежимыПодключенияВнешнихМодулей + |ГДЕ + | РежимыПодключенияВнешнихМодулей.БезопасныйРежим = &БезопасныйРежим"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("БезопасныйРежим", ИмяПрофиля); + РезультатЗапроса = Запрос.Выполнить(); + Возврат Не РезультатЗапроса.Пустой(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления +// + +// [2.2.2.31] Процедура проставляет значение измерения ВнешнийМодуль у регистров, используемых в качестве +// кэша предоставленных разрешений. +// +Процедура ЗаполнитьВнешнийМодульДляПредоставленныхРазрешений() Экспорт + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных(); + + Регистры = МенеджерыРегистровРазрешений(); + Для Каждого Регистр Из Регистры Цикл + Блокировка.Добавить(Регистр.СоздатьНаборЗаписей().Метаданные().ПолноеИмя()); + КонецЦикла; + + Блокировка.Добавить("РегистрСведений.РежимыПодключенияВнешнихМодулей"); + + Блокировка.Заблокировать(); + + СоответствиеРежимовМодулям = Новый ТаблицаЗначений(); + СоответствиеРежимовМодулям.Колонки.Добавить("БезопасныйРежим", Метаданные.ОпределяемыеТипы.БезопасныйРежим.Тип); + СоответствиеРежимовМодулям.Колонки.Добавить("ВнешнийМодуль", ОписаниеТипаЛюбаяСсылка()); + + МодульКонфигурации = СлужебныйИОМ(); + СтрокаКонфигурации = СоответствиеРежимовМодулям.Добавить(); + СтрокаКонфигурации.ВнешнийМодуль = СлужебныйИОМ(); + СтрокаКонфигурации.БезопасныйРежим = ИмяПрофиляБезопасности(СлужебныйИОМ()); + + ТекстЗапроса = + "ВЫБРАТЬ + | РежимыПодключенияВнешнихМодулей.ВнешнийМодуль КАК ВнешнийМодуль, + | РежимыПодключенияВнешнихМодулей.БезопасныйРежим КАК БезопасныйРежим + |ИЗ + | РегистрСведений.РежимыПодключенияВнешнихМодулей КАК РежимыПодключенияВнешнихМодулей"; + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтрокаМодуля = СоответствиеРежимовМодулям.Добавить(); + СтрокаМодуля.ВнешнийМодуль = Выборка.ВнешнийМодуль; + СтрокаМодуля.БезопасныйРежим = Выборка.БезопасныйРежим; + КонецЦикла; + + Для Каждого Регистр Из Регистры Цикл + + ТекстЗапросаСозданияВТ = + "ВЫБРАТЬ + | Соответствие.БезопасныйРежим КАК БезопасныйРежим, + | Соответствие.ВнешнийМодуль КАК ВнешнийМодуль + |ПОМЕСТИТЬ Соответствие + |ИЗ + | &Соответствие КАК Соответствие"; + + Запрос = Новый Запрос(ТекстЗапросаСозданияВТ); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); + Запрос.УстановитьПараметр("Соответствие", СоответствиеРежимовМодулям); + Запрос.Выполнить(); + + МетаданныеРегистра = Регистр.СоздатьНаборЗаписей().Метаданные(); + + ТекстЗапросаРезультата = "Выбрать [ПоляРегистра], Соответствие.ВнешнийМодуль Из [ТаблицаРегистра] КАК ТаблицаРегистра ЛЕВОЕ СОЕДИНЕНИЕ Соответствие По ТаблицаРегистра.БезопасныйРежим = Соответствие.БезопасныйРежим"; + + ИмяТаблицы = МетаданныеРегистра.ПолноеИмя(); + ПсевдонимТаблицы = "ТаблицаРегистра"; + + ПоляРегистра = ""; + Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + Если Не ПустаяСтрока(ПоляРегистра) Тогда + ПоляРегистра = ПоляРегистра + ", "; + КонецЕсли; + ПоляРегистра = ПоляРегистра + ПсевдонимТаблицы + "." + Измерение.Имя + " КАК " + Измерение.Имя; + КонецЦикла; + Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл + Если Не ПустаяСтрока(ПоляРегистра) Тогда + ПоляРегистра = ПоляРегистра + ", "; + КонецЕсли; + ПоляРегистра = ПоляРегистра + ПсевдонимТаблицы + "." + Ресурс.Имя + " КАК " + Ресурс.Имя; + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистра.Реквизиты Цикл + Если Не ПустаяСтрока(ПоляРегистра) Тогда + ПоляРегистра = ПоляРегистра + ", "; + КонецЕсли; + ПоляРегистра = ПоляРегистра + ПсевдонимТаблицы + "." + Реквизит.Имя + " КАК " + Реквизит.Имя; + КонецЦикла; + + ТекстЗапросаРезультата = СтрЗаменить(ТекстЗапросаРезультата, "[ТаблицаРегистра]", ИмяТаблицы); + ТекстЗапросаРезультата = СтрЗаменить(ТекстЗапросаРезультата, "[ПоляРегистра]", ПоляРегистра); + + Запрос.Текст = ТекстЗапросаРезультата; + СодержимоеРегистра = Запрос.Выполнить().Выгрузить(); + Набор = Регистр.СоздатьНаборЗаписей(); + Набор.Загрузить(СодержимоеРегистра); + Набор.Записать(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl similarity index 100% rename from SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ManagerModule.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..1452b1ef2 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo @@ -0,0 +1,82 @@ + + + + + + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + ru + Настройка разрешений на использование внешних ресурсов + + DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Form.Форма + + + ru + + + + ИнициализацияЗапросаРазрешений + + ru + Инициализация запроса разрешений + + PersonalComputer + MobileDevice + + + НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + + ru + Настройка разрешений на использование внешних ресурсов + + + + ru + + + PersonalComputer + MobileDevice + + + НастройкиИспользованияПрофилейБезопасности + + ru + Использование профилей безопасности + + + + ru + + + PersonalComputer + MobileDevice + + + ЗавершениеЗапросаРазрешений + + ru + Завершение запроса разрешений + + PersonalComputer + MobileDevice + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + НастройкиИспользованияПрофилейБезопасности + + ru + Настройки использования профилей безопасности + + NavigationPanelOrdinary + Auto + + diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Form.form index 83c542f73..562821a4a 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Form.form @@ -221,6 +221,10 @@ -1 Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Module.bsl index 0b4bf363b..91d268af0 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Module.bsl @@ -1,17 +1,37 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + ПараметрыРезервногоКопирования = РезервноеКопированиеИБСервер.ПараметрыРезервногоКопирования(); - ОтключитьНапоминания = (ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 3); + ОтключитьНапоминания = ПараметрыРезервногоКопирования.РезервноеКопированиеНастроено; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Резервное копирование не поддерживается в клиенте под управлением ОС Linux.'"); + ПоказатьПредупреждение(, ТекстСообщения); + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -22,30 +42,20 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОКНаСервере() ПараметрыРезервногоКопирования = РезервноеКопированиеИБСервер.ПараметрыРезервногоКопирования(); - Если ОтключитьНапоминания Тогда - - Если ПараметрыРезервногоКопирования.ВыборПунктаНастройки <> 3 Тогда - - ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 3; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); - - КонецЕсли; - - Иначе - - ПараметрыРезервногоКопирования.ВыборПунктаНастройки = 0; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); - - КонецЕсли; + ПараметрыРезервногоКопирования.РезервноеКопированиеНастроено = ОтключитьНапоминания; + ПараметрыРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование = Ложь; + + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form index 5291cbda1..05f7bf051 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form @@ -6,99 +6,67 @@ СтраницаНастройкиПараметровРезервногоКопирования 6 - - ГруппаПриветствияПриНастройкеРасписанияРК - 47 - - ВариантПроведенияРезервногоКопирования - 245 + + ВыполнятьАвтоматическоеРезервноеКопирование + 405 + true + true + + true + + + Объект.ВыполнятьАвтоматическоеРезервноеКопирование + + Right + Button + + OnChange + ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении + + + ВыполнятьАвтоматическоеРезервноеКопированиеРасширеннаяПодсказка + 407 <key>ru</key> - <value>Выполнять резервное копирование</value> + <value>Рекомендуется отключать выполнение резервного копирования только + в том случае, если оно выполняется сторонними средствами.</value> - true - true - - true - - - Объект.ВариантПроведенияРезервногоКопирования - - Top - - OnChange - ВариантПроведенияРезервногоКопированияПриИзменении - - - ВариантПроведенияРезервногоКопированияExtendedTooltip - 285 - Label - true - true - - Left - - - - ВариантПроведенияРезервногоКопированияКонтекстноеМеню - 246 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Регулярно по расписанию: - - - 1 - - - - - ru - При завершении работы - - - 2 - - - - - ru - Не выполнять - - - 3 - - - Vertical + Label + true + true + + Left - + + + ВыполнятьАвтоматическоеРезервноеКопированиеКонтекстноеМеню + 406 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПараметры + 377 - ГруппаНастройкиРасписанияКопирования - 57 - - ИзменитьРасписание - 238 - - <key>ru</key> - <value>Не задано</value> - + ГруппаПриветствияПриНастройкеРасписанияРК + 47 + + Декорация1 + 410 true true true - ИзменитьРасписаниеExtendedTooltip - 289 + Декорация1РасширеннаяПодсказка + 412 Label true true @@ -106,25 +74,144 @@ Left - Hyperlink - Form.Command.ИзменитьРасписание - Normal - Auto - 37 + + Декорация1КонтекстноеМеню + 411 + true + + Label + 1 true true - UserCmds - Auto + + Left + + + + Группа4 + 408 + + ВариантПроведенияРезервногоКопирования + 245 + true + true + + true + + + Объект.ВариантВыполнения + + None + + OnChange + ВариантПроведенияРезервногоКопированияПриИзменении + + + ВариантПроведенияРезервногоКопированияExtendedTooltip + 285 + Label + true + true + + Left + + + + ВариантПроведенияРезервногоКопированияКонтекстноеМеню + 246 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Регулярно по расписанию: + + + ПоРасписанию + + + + + ru + При завершении работы + + + ПриЗавершенииРаботы + + + Vertical + + + + ИзменитьРасписание + 238 + + <key>ru</key> + <value>Не задано</value> + + true + true + + true + + + ИзменитьРасписаниеExtendedTooltip + 289 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа4РасширеннаяПодсказка + 409 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + true true true - false - ГруппаНастройкиРасписанияКопированияExtendedTooltip - 286 + ГруппаПриветствияПриНастройкеРасписанияРКExtendedTooltip + 284 Label true true @@ -137,152 +224,38 @@ Auto true true - auto Auto Auto - true - true - - true - - - <key>ru</key> - <value>Группа приветствия при настройке расписания РК</value> - - - ГруппаПриветствияПриНастройкеРасписанияРКExtendedTooltip - 284 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - СтраницыРежима - 379 - СтраницаВыполнять - 377 - - ГруппаЗаведенияПутиКопирования - 52 - - ПутьККаталогуАрхивов - 55 - - <key>ru</key> - <value>Каталог для сохранения резервных копий</value> - - true - true - - true - - - Объект.КаталогСРезервнымиКопиями - - Top - - ПутьККаталогуАрхивовРасширеннаяПодсказка - 292 - Label - true - true - - Left - - - - ПутьККаталогуАрхивовКонтекстноеМеню - 56 - true - - InputField - Left - Enter - true - Left - true - - - StartChoice - ПутьККаталогуАрхивовНачалоВыбора - - true - true - true - true - true - true - true - true - Normal - - - - НадписьРекомендацииПоВыборуПути2 - 202 - - <key>ru</key> - <value>Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель.</value> - - true - true - - true - - - НадписьРекомендацииПоВыборуПути2ExtendedTooltip - 293 - Label - true - true - - Left - - - - НадписьРекомендацииПоВыборуПути2КонтекстноеМеню - 203 - true - - Label - true - true - true - - Style.ПоясняющийТекст - - - Left - Top - - + ГруппаЗаведенияПутиКопирования + 52 + + ПутьККаталогуАрхивов + 55 + + <key>ru</key> + <value>Каталог для сохранения резервных копий</value> + true true true - - <key>ru</key> - <value>Шаг 1. Выбор каталога</value> - + + Объект.КаталогСРезервнымиКопиями + + Top + Button - ГруппаЗаведенияПутиКопированияРасширеннаяПодсказка - 290 + ПутьККаталогуАрхивовРасширеннаяПодсказка + 292 + + <key>ru</key> + <value>Рекомендуется выполнять резервное копирование +на другой компьютер или внешний носитель.</value> + Label true true @@ -290,34 +263,124 @@ Left - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto + + ПутьККаталогуАрхивовКонтекстноеМеню + 56 + true + + InputField + Left + Enter + true + Left + true + + + StartChoice + ПутьККаталогуАрхивовНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Шаг 1. Выбор каталога</value> + + + ГруппаЗаведенияПутиКопированияРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаАвторизации + 254 + + АдминистраторИБ1 + 255 + true + false + + true + + + АдминистраторИБ + + + АдминистраторИБ1ExtendedTooltip + 295 + Label + true + true + + Left + + + + АдминистраторИБ1КонтекстноеМеню + 256 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal - ГруппаАвторизации - 254 + Группа2 + 396 - АдминистраторИБ1 - 255 + ПарольАдминистратораИБ1 + 257 true - false + true true - АдминистраторИБ + ПарольАдминистратораИБ - АдминистраторИБ1ExtendedTooltip - 295 + ПарольАдминистратораИБ1ExtendedTooltip + 296 Label true true @@ -326,8 +389,8 @@ - АдминистраторИБ1КонтекстноеМеню - 256 + ПарольАдминистратораИБ1КонтекстноеМеню + 258 true InputField @@ -340,90 +403,21 @@ true false true + true true true true Normal - - Группа2 - 396 - - ПарольАдминистратораИБ1 - 257 - true - true - - true - - - ПарольАдминистратораИБ - - - ПарольАдминистратораИБ1ExtendedTooltip - 296 - Label - true - true - - Left - - - - ПарольАдминистратораИБ1КонтекстноеМеню - 258 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - Группа2РасширеннаяПодсказка - 397 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - true true true - ГруппаАвторизацииExtendedTooltip - 294 + Группа2РасширеннаяПодсказка + 397 Label true true @@ -433,41 +427,95 @@ UsualGroup - Vertical Auto - NormalSeparation true true Auto Auto + true + true + + true + + + ГруппаАвторизацииExtendedTooltip + 294 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаВыбораОчисткиКаталогаОтСтарыхФайлов + 62 + + Декорация3 + 418 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 420 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 419 + true + + Label + 1 + true + true + + Left + + - ГруппаВыбораОчисткиКаталогаОтСтарыхФайлов - 62 + Группа5 + 416 - ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении - 63 - - <key>ru</key> - <value>Хранить ограниченное количество резервных копий</value> - + ТипОграниченияКаталогаСРезервнымиКопиями + 66 true true true - Объект.ПроизводитьУдаление + Объект.ТипОграничения - Right + None OnChange - ОчисткаКаталогаСРезервнымиКопиямиПриПереполненииПриИзменении + ТипОграниченияКаталогаСРезервнымиКопиямиПриИзменении - ОчисткаКаталогаСРезервнымиКопиямиПриПереполненииРасширеннаяПодсказка - 298 + ТипОграниченияКаталогаСРезервнымиКопиямиExtendedTooltip + 300 Label true true @@ -476,39 +524,62 @@ - ОчисткаКаталогаСРезервнымиКопиямиПриПереполненииКонтекстноеМеню - 64 + ТипОграниченияКаталогаСРезервнымиКопиямиКонтекстноеМеню + 67 true - CheckBoxField + RadioButtonField + Top Enter true Left true - + + 1 + + + ru + Все + + + ХранитьВсе + + + + + ru + За последние + + + ПоПериоду + + + + + ru + Последние + + + ПоКоличеству + + + Vertical + ГруппаВыбораТипаОчистки 65 - - ТипОграниченияКаталогаСРезервнымиКопиями - 66 + + Декорация2 + 413 true true true - - Объект.ТипОграничения - - None - - OnChange - ТипОграниченияКаталогаСРезервнымиКопиямиПриИзменении - - ТипОграниченияКаталогаСРезервнымиКопиямиExtendedTooltip - 300 + Декорация2РасширеннаяПодсказка + 415 Label true true @@ -517,187 +588,39 @@ - ТипОграниченияКаталогаСРезервнымиКопиямиКонтекстноеМеню - 67 + Декорация2КонтекстноеМеню + 414 true - RadioButtonField - Top - Enter - true - Left - true - - 1 - - - ru - Хранить резервные копии за последние: - - - ПоПериоду - - - - - ru - Максимальное количество копий: - - - ПоКоличеству - - - Vertical + Label + true + true + + Left - Группа5 - 68 - - ГруппаХранитьПоследниеЗаПериод - 69 - - ДатаПоследнегоАктуальногоАрхива - 70 - - <key>ru</key> - <value>Хранить резервные копии за последние</value> - - true - true - - true - - - Объект.ЗначениеВЕдиницахИзмерения - - None - - ДатаПоследнегоАктуальногоАрхиваРасширеннаяПодсказка - 303 - Label - true - true - - Left - - - - ДатаПоследнегоАктуальногоАрхиваКонтекстноеМеню - 71 - true - - InputField - Enter - true - Left - true - - 6 - true - true - true - true - true - true - true - - 1 - - Normal - - - - ЕдиницаИзмеренияПериодаХраненияРезервныхКопий - 72 - true - true - - true - - - Объект.ЕдиницаИзмеренияПериода - - None - - ЕдиницаИзмеренияПериодаХраненияРезервныхКопийExtendedTooltip - 304 - Label - true - true - - Left - - - - ЕдиницаИзмеренияПериодаХраненияРезервныхКопийКонтекстноеМеню - 73 - true - - InputField - Enter - true - Left - true - - 7 - true - true - true - true - true - - - ru - дн. - - - День - - - - - ru - нед. - - - Неделя - - - - - ru - мес. - - - Месяц - - - - - ru - лет - - - Год - - - Normal - 7 - - + ГруппаХранитьПоследниеЗаПериод + 69 + + ДатаПоследнегоАктуальногоАрхива + 70 + + <key>ru</key> + <value>Хранить резервные копии за последние</value> + true true true - - <key>ru</key> - <value>Группа хранить последние за период</value> - + + Объект.ЗначениеВЕдиницахИзмерения + + None - ГруппаХранитьПоследниеЗаПериодРасширеннаяПодсказка - 302 + ДатаПоследнегоАктуальногоАрхиваРасширеннаяПодсказка + 303 Label true true @@ -705,115 +628,46 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ДатаПоследнегоАктуальногоАрхиваКонтекстноеМеню + 71 + true + + InputField + Enter + true + Left + true + + 6 + true + true + true + true + true + true + true + + 1 + + Normal - - ГруппаКоличествоКопийВКаталоге - 356 - - КоличествоКопийВКаталоге - 74 - - <key>ru</key> - <value>Максимальное количество копий (шт.)</value> - - true - true - - true - - - Объект.КоличествоКопий - - None - - КоличествоКопийВКаталогеРасширеннаяПодсказка - 305 - Label - true - true - - Left - - - - КоличествоКопийВКаталогеКонтекстноеМеню - 75 - true - - InputField - Enter - true - Left - true - - 6 - true - true - true - true - true - true - true - - 2 - - Normal - - - - ДекорацияШтук - 353 - - <key>ru</key> - <value>шт.</value> - - true - true - - true - - - ДекорацияШтукРасширеннаяПодсказка - 355 - Label - true - true - - Left - - - - ДекорацияШтукКонтекстноеМеню - 354 - true - - Label - true - true - - Left - - + + ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + 72 true true true - - <key>ru</key> - <value>Группа количество копий в каталоге</value> - + + Объект.ЕдиницаИзмеренияПериода + + None - ГруппаКоличествоКопийВКаталогеРасширеннаяПодсказка - 357 + ЕдиницаИзмеренияПериодаХраненияРезервныхКопийExtendedTooltip + 304 Label true true @@ -821,13 +675,61 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ЕдиницаИзмеренияПериодаХраненияРезервныхКопийКонтекстноеМеню + 73 + true + + InputField + Enter + true + Left + true + + 7 + true + true + true + true + true + + + ru + дн. + + + День + + + + + ru + нед. + + + Неделя + + + + + ru + мес. + + + Месяц + + + + + ru + лет + + + Год + + + Normal + 7 true @@ -835,9 +737,129 @@ true + + <key>ru</key> + <value>Группа хранить последние за период</value> + - Группа5ExtendedTooltip - 301 + ГруппаХранитьПоследниеЗаПериодРасширеннаяПодсказка + 302 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКоличествоКопийВКаталоге + 356 + + КоличествоКопийВКаталоге + 74 + + <key>ru</key> + <value>Максимальное количество копий (шт.)</value> + + true + true + + true + + + Объект.КоличествоКопий + + None + + КоличествоКопийВКаталогеРасширеннаяПодсказка + 305 + Label + true + true + + Left + + + + КоличествоКопийВКаталогеКонтекстноеМеню + 75 + true + + InputField + Enter + true + Left + true + + 6 + true + true + true + true + true + true + true + + 2 + + Normal + + + + ДекорацияШтук + 353 + + <key>ru</key> + <value>шт.</value> + + true + true + + true + + + ДекорацияШтукРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ДекорацияШтукКонтекстноеМеню + 354 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа количество копий в каталоге</value> + + + ГруппаКоличествоКопийВКаталогеРасширеннаяПодсказка + 357 Label true true @@ -847,7 +869,6 @@ UsualGroup - Vertical Auto true true @@ -876,6 +897,7 @@ UsualGroup + Vertical Auto NormalSeparation true @@ -890,130 +912,8 @@ true - ГруппаВыбораОчисткиКаталогаОтСтарыхФайловРасширеннаяПодсказка - 297 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - StrongSeparation - true - true - Auto - Auto - - - true - true - - true - - - СтраницаВыполнятьРасширеннаяПодсказка - 378 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтраницаНеВыполнять - 381 - - Группа1 - 391 - - ДекорацияИнформация - 383 - true - true - - true - - - ДекорацияИнформацияРасширеннаяПодсказка - 385 - Label - true - true - - Left - - - - ДекорацияИнформацияКонтекстноеМеню - 384 - true - - 6 - true - 2 - true - - - CommonPicture.Информация32 - - - - - ДекорацияНеВыполнять - 388 - - <key>ru</key> - <value>Этот вариант рекомендуется выбирать только в том случае, если -резервное копирование выполняется сторонними средствами.</value> - - true - true - - true - - - ДекорацияНеВыполнятьРасширеннаяПодсказка - 390 - Label - true - true - - Left - - - - ДекорацияНеВыполнятьКонтекстноеМеню - 389 - true - - Label - true - true - - Left - Center - - - true - true - - true - - - Группа1РасширеннаяПодсказка - 392 + Группа5РасширеннаяПодсказка + 417 Label true true @@ -1026,7 +926,6 @@ Auto true true - auto Auto Auto @@ -1036,9 +935,13 @@ true + + <key>ru</key> + <value>Хранить резервные копии:</value> + - СтраницаНеВыполнятьРасширеннаяПодсказка - 382 + ГруппаВыбораОчисткиКаталогаОтСтарыхФайловРасширеннаяПодсказка + 297 Label true true @@ -1046,9 +949,14 @@ Left - Page - + UsualGroup + + Auto + true + true auto + Auto + Auto true @@ -1057,8 +965,8 @@ true - СтраницыРежимаРасширеннаяПодсказка - 380 + ГруппаПараметрыРасширеннаяПодсказка + 378 Label true true @@ -1066,8 +974,13 @@ Left - Pages - + UsualGroup + + Vertical + Auto + true + true + Auto Auto @@ -1178,10 +1091,10 @@ Left true + 30 true - 3 + 5 true - false true true true @@ -1337,64 +1250,24 @@ Normal - - Группа3 - 398 - - ПарольАдминистратораИБ - 252 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольАдминистратораИБ - - - ПарольАдминистратораИБExtendedTooltip - 339 - Label - true - true - - Left - - - - ПарольАдминистратораИБКонтекстноеМеню - 253 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - Normal - - + + ПарольАдминистратораИБ + 252 + + <key>ru</key> + <value>Пароль</value> + true true true + + ПарольАдминистратораИБ + - Группа3РасширеннаяПодсказка - 399 + ПарольАдминистратораИБExtendedTooltip + 339 Label true true @@ -1402,13 +1275,26 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ПарольАдминистратораИБКонтекстноеМеню + 253 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + Normal true @@ -1450,7 +1336,8 @@ 213 <key>ru</key> - <value>2. При ошибке версии компоненты "comcntr", рекомендуется выполнить ее перерегистрацию (потребуется перезапуск сеанса).</value> + <value>2. При ошибке версии компоненты "comcntr", рекомендуется + выполнить ее <link ОбновитьВерсиюКомпоненты>перерегистрацию</> (потребуется перезапуск сеанса).</value> true true @@ -1476,47 +1363,20 @@ 214 true + true Label true true false + + URLProcessing + НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки + Left 2 - - КнопкаОбновитьВерсиюКомпоненты - 215 - - <key>ru</key> - <value>Исправить</value> - - true - true - - true - - false - - КнопкаОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 342 - Label - true - true - - Left - - - UsualButton - Form.Command.ОбновитьВерсиюКомпоненты - Normal - Auto - true - true - UserCmds - Auto - true true @@ -1849,28 +1709,6 @@ Auto Auto
      - - ОбновитьВерсиюКомпоненты - - <key>ru</key> - <value>Обновить версию компоненты</value> - - 4 - - ru - Обновить версию компоненты - - - true - - - - ОбновитьВерсиюКомпоненты - - - Auto - Auto - ИзменитьРасписание diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl index c3cf575b5..683dbfd5b 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ЗаписатьНастройки, МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,9 +14,22 @@ Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); + КонецЕсли; + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования(); - Объект.ВариантПроведенияРезервногоКопирования = НастройкиРезервногоКопирования.ВыборПунктаНастройки; + Объект.ВариантВыполнения = НастройкиРезервногоКопирования.ВариантВыполнения; + Объект.ВыполнятьАвтоматическоеРезервноеКопирование = НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование; + Объект.РезервноеКопированиеНастроено = НастройкиРезервногоКопирования.РезервноеКопированиеНастроено; + + Если Не Объект.РезервноеКопированиеНастроено Тогда + + Объект.ВыполнятьАвтоматическоеРезервноеКопирование = Истина; + + КонецЕсли; + ПарольАдминистратораИБ = НастройкиРезервногоКопирования.ПарольАдминистратораИБ; Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования); Элементы.ИзменитьРасписание.Заголовок = Строка(Расписание); @@ -26,21 +38,14 @@ // Заполнение настроек по хранению старых копий. ЗаполнитьЗначенияСвойств(Объект, НастройкиРезервногоКопирования.ПараметрыУдаления); - Элементы.ГруппаВыбораТипаОчистки.Доступность = Объект.ПроизводитьУдаление; + ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(ЭтотОбъект); // Первая часть проверки на сервере - если в информационной базе есть пользователи ТребуетсяВводПароля = (ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0); - Если Объект.ВариантПроведенияРезервногоКопирования = 0 Тогда - - Объект.ВариантПроведенияРезервногоКопирования = 1; - - КонецЕсли; - - Элементы.ГруппаНастройкиРасписанияКопирования.Доступность = (Объект.ВариантПроведенияРезервногоКопирования = 1); - Элементы.СтраницыРежима.ТекущаяСтраница = ?(Объект.ВариантПроведенияРезервногоКопирования = 3, - Элементы.СтраницаНеВыполнять, Элементы.СтраницаВыполнять); + Элементы.ИзменитьРасписание.Доступность = (Объект.ВариантВыполнения = "ПоРасписанию"); + Элементы.ГруппаПараметры.Доступность = Объект.ВыполнятьАвтоматическоеРезервноеКопирование; КонецПроцедуры @@ -88,12 +93,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТипОграниченияКаталогаСРезервнымиКопиямиПриИзменении(Элемент) + ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(ЭтотОбъект); КонецПроцедуры @@ -117,22 +124,21 @@ &НаКлиенте Процедура ВариантПроведенияРезервногоКопированияПриИзменении(Элемент) - Элементы.ГруппаНастройкиРасписанияКопирования.Доступность = (Объект.ВариантПроведенияРезервногоКопирования = 1); - - Элементы.СтраницыРежима.ТекущаяСтраница = ?(Объект.ВариантПроведенияРезервногоКопирования = 3, - Элементы.СтраницаНеВыполнять, Элементы.СтраницаВыполнять); + Элементы.ИзменитьРасписание.Доступность = (Объект.ВариантВыполнения = "ПоРасписанию"); КонецПроцедуры &НаКлиенте -Процедура ОчисткаКаталогаСРезервнымиКопиямиПриПереполненииПриИзменении(Элемент) +Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - Элементы.ГруппаВыбораТипаОчистки.Доступность = Объект.ПроизводитьУдаление; + СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Готово(Команда) @@ -153,46 +159,34 @@ КонецПроцедуры -// Процедура обновления компоненты comcntr. -&НаКлиенте -Процедура ОбновитьВерсиюКомпоненты(Команда) - - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПерейтиСоСтраницыНастройки() - Если Объект.ВариантПроведенияРезервногоКопирования = 3 Тогда - - ОстановитьСервисОповещения(); - ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; - - Иначе + Если Объект.ВыполнятьАвтоматическоеРезервноеКопирование Тогда Если Не ПроверитьКаталогСРезервнымиКопиями() Тогда Возврат; КонецЕсли; - Если НЕ ПроверитьДоступКИБ() Тогда + Если Не ПроверитьДоступКИБ() Тогда Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДополнительныеНастройки; Возврат; КонецЕсли; ЗаписатьНастройки(); - Если Объект.ВариантПроведенияРезервногоКопирования = 1 Тогда // По расписанию + Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДата; ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования = ТекущаяДата; ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = Расписание; - ИначеЕсли Объект.ВариантПроведенияРезервногоКопирования = 2 Тогда // При завершении + ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; @@ -205,6 +199,11 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, НСтр("ru = 'Резервное копирование настроено.'")); + Иначе + + ОстановитьСервисОповещения(); + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + КонецЕсли; ПараметрыРезервногоКопированияИБ.ПараметрОповещения = "НеОповещать"; @@ -324,7 +323,8 @@ Процедура ОстановитьСервисОповещения() // Останавливает оповещения о резервном копировании. НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования(); - НастройкиРезервногоКопирования.ВыборПунктаНастройки = 3; + НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование = Ложь; + НастройкиРезервногоКопирования.РезервноеКопированиеНастроено = Истина; НастройкиРезервногоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); КонецПроцедуры @@ -338,15 +338,18 @@ ПараметрыРезервногоКопирования.Вставить("ПарольАдминистратораИБ", ?(ТребуетсяВводПароля, ПарольАдминистратораИБ, "")); ПараметрыРезервногоКопирования.ДатаПоследнегоОповещения = Дата('29990101'); ПараметрыРезервногоКопирования.КаталогХраненияРезервныхКопий = Объект.КаталогСРезервнымиКопиями; - ПараметрыРезервногоКопирования.ВыборПунктаНастройки = Объект.ВариантПроведенияРезервногоКопирования; + ПараметрыРезервногоКопирования.ВариантВыполнения = Объект.ВариантВыполнения; + ПараметрыРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование = Объект.ВыполнятьАвтоматическоеРезервноеКопирование; + ПараметрыРезервногоКопирования.РезервноеКопированиеНастроено = Объект.РезервноеКопированиеНастроено; + ЗаполнитьЗначенияСвойств(ПараметрыРезервногоКопирования.ПараметрыУдаления, Объект); - Если Объект.ВариантПроведенияРезервногоКопирования = 1 Тогда // По расписанию + Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда РасписаниеСтруктура = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание); ПараметрыРезервногоКопирования.РасписаниеКопирования = РасписаниеСтруктура; - ИначеЕсли Объект.ВариантПроведенияРезервногоКопирования = 2 Тогда // При завершении + ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда ПараметрыРезервногоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; @@ -359,6 +362,7 @@ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(Форма) + Форма.Элементы.ГруппаВыбораТипаОчистки.Доступность = (Форма.Объект.ТипОграничения <> "ХранитьВсе"); Форма.Элементы.ГруппаХранитьПоследниеЗаПериод.Доступность = (Форма.Объект.ТипОграничения = "ПоПериоду"); Форма.Элементы.ГруппаКоличествоКопийВКаталоге.Доступность = (Форма.Объект.ТипОграничения = "ПоКоличеству"); @@ -472,3 +476,11 @@ КонецФункции +&НаКлиенте +Процедура ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении(Элемент) + + Элементы.ГруппаПараметры.Доступность = Объект.ВыполнятьАвтоматическоеРезервноеКопирование; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index 0a7898d39..149a057f5 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.16470"></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.16476"></meta></head><body> <p>Форма настройки системы резервного копирования информационной базы.</p> <p>Предлагает следующие возможности:</p> <p>1) Выполнять резервное копирование автоматически.(Доступен только для файлового режима информационной базы). При выборе данного пункта, программа предложит выбрать расписание резервного копирования из нескольких наиболее часто используемых вариантов, а также возможность выбора своего собственного варианта расписания ( см. Расписание регламентного задания). Также необходимо  выбрать каталог, куда будут помещаться резервные копии, и, при необходимости, параметры очистки данного каталога от устаревших резервных копий. При завершении настройки система перейдет в режим автоматического резервного копирования.</p> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo index 374c15ba8..2c304b06c 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo @@ -16,6 +16,21 @@ <lang>ru</lang> </pages> </help> + <attributes uuid="d91a016e-cca9-4976-9c53-2c96fa95cf1a"> + <name>ВариантВыполнения</name> + <synonym> + <key>ru</key> + <value>Вариант выполнения</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>19</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="012fb2f1-1c15-4800-8968-78a90c2a1348"> <name>ВариантРасписанияРезервногоКопирования</name> <synonym> @@ -29,11 +44,11 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="436162a0-263f-4126-aa3a-7508505cc4a8"> - <name>ВыполнитьРезервноеКопированиеСейчас</name> + <attributes uuid="a29a36aa-3c90-4be9-8ffc-20237721d1d0"> + <name>ВыполнятьАвтоматическоеРезервноеКопирование</name> <synonym> <key>ru</key> - <value>Выполнить резервное копирование сейчас</value> + <value>Выполнять автоматическое резервное копирование</value> </synonym> <type> <types>Boolean</types> @@ -56,6 +71,21 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="b0bf8af5-d824-459c-bc40-17495406af3c"> + <name>ЗначениеВЕдиницахИзмерения</name> + <synonym> + <key>ru</key> + <value>Значение в единицах измерения</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>10</precision> + </numberQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="7dfdd08b-7cd9-480c-829d-97f5e7152eec"> <name>КаталогСРезервнымиКопиями</name> <synonym> @@ -70,22 +100,6 @@ <maxValue xsi:type="core:UndefinedValue"/> <fillChecking>ShowError</fillChecking> </attributes> - <attributes uuid="767176d4-4fe9-4de5-9246-59b7fec09c53"> - <name>КодТипаРезервногоКопирования</name> - <synonym> - <key>ru</key> - <value>Код типа резервного копирования</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>1</precision> - <nonNegative>true</nonNegative> - </numberQualifiers> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> <attributes uuid="64752b64-80ae-4537-986a-d61423dc546b"> <name>КоличествоКопий</name> <synonym> @@ -102,45 +116,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="8e587969-0263-4789-a501-a6c2e102f88e"> - <name>ВыполнитьПриЗавершенииРаботы</name> - <synonym> - <key>ru</key> - <value>Выполнить при завершении работы</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> - <attributes uuid="f26bfc01-7d8a-43a7-b869-c2deb18218e5"> - <name>ПроизводитьУдаление</name> - <synonym> - <key>ru</key> - <value>Производить удаление</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> - <attributes uuid="b0bf8af5-d824-459c-bc40-17495406af3c"> - <name>ЗначениеВЕдиницахИзмерения</name> - <synonym> - <key>ru</key> - <value>Значение в единицах измерения</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>10</precision> - </numberQualifiers> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> <attributes uuid="2c37e123-ea35-4501-93e1-2fa295444bec"> <name>ПроводитьРезервноеКопированиеПриВосстановленииДанных</name> <synonym> @@ -153,6 +128,18 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="c8bd3ac8-3b49-46bb-aadd-7270ad2868fc"> + <name>РезервноеКопированиеНастроено</name> + <synonym> + <key>ru</key> + <value>Резервное копирование настроено</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="a997a430-3ea8-4fde-9f53-7b507a04c215"> <name>ТипОграничения</name> <synonym> @@ -181,21 +168,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="36475bf5-5da6-48ad-8077-4de4426f7e10"> - <name>ВариантПроведенияРезервногоКопирования</name> - <synonym> - <key>ru</key> - <value>Вариант проведения резервного копирования</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>10</precision> - </numberQualifiers> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> <forms uuid="d32081fc-47d3-4e66-837e-705c94ba8ca8"> <name>Форма</name> <synonym> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl index cee06c0ca..e3479c5e7 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОтветПередЗакрытием; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -56,8 +55,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УстановитьПоУмолчанию(Команда) @@ -75,8 +75,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьПоУмолчаниюНаСервере() @@ -100,3 +101,5 @@ РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), НастройкиРезервногоКопирования); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl index 94b2e0478..7eda52996 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОтветПередЗакрытием; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -77,8 +76,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Перечитать(Команда) @@ -109,8 +109,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПеречитатьНаСервере() @@ -251,3 +252,5 @@ Ложь); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl index d9a936677..c517e6b94 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -45,6 +44,8 @@ Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(), Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(), "ZoneBackupControl"); - + КонецФункции #КонецЕсли + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index 931a8efde..b6b0005ec 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -51,10 +51,7 @@ <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <wrap>true</wrap> - <choiceButton>false</choiceButton> <clearButton>true</clearButton> - <spinButton>false</spinButton> - <openButton>false</openButton> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html index b1131860b..ce44a829c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html @@ -1,6 +1,12 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> -<p>Выбор пользовательских настроек, которые необходимо скопировать или очистить:</p> -<ol><li>Список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов. -</li><li>В списке <strong>Внешний вид</strong> выводятся настройки внешнего вида форм, рабочего стола и командного интерфейса программы. -</li><li>В списке <strong>Прочие настройки </strong>выводятся персональные настройки пользователя, настройки печати табличного документа, избранное и прочие настройки, не вошедшие в другие разделы.</li></ol><p>Можно выполнить поиск, введя в поле "<strong>Найти</strong>"<strong> </strong>название или часть названия необходимой настройки.</p> -<p>Настройки отчетов и внешнего вида можно просмотреть с помощью двойного щелчка мыши (или с помощью команды <strong>Все функции</strong> - <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.16476"></meta></head><body> +<p>Выбор пользовательских <a href="DataProcessor.НастройкиПользователей.Form.НастройкиПользователей/Help">настроек</a>, которые необходимо <a href="DataProcessor.НастройкиПользователей.Form.КопированиеНастроекПользователей/Help">скопировать</a> или <a href="DataProcessor.НастройкиПользователей.Form.ОчисткаНастроекПользователей/Help">очистить</a>:</p> +<p>Список состоит из трех вкладок:</p> +<ul><li><strong>Внешний вид -</strong> выводятся настройки внешнего вида рабочего стола, форм (например, различных списков программы) и командного интерфейса программы. +</li><li><strong>Настройки отчетов</strong> - список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов. +</li><li><strong>Прочие настройки - </strong>выводятся персональные настройки пользователя, настройки печати табличного документа, настройки быстрого доступа к дополнительным отчетам и обработкам, настройки раздела <strong>Избранное</strong> и прочие настройки, не вошедшие в другие разделы.</li></ul><h3>Выбор настроек</h3> +<ul><li>Выберите нужные настройки с помощью флажков. Для этого имеются дополнительные возможности: +<ul><li>Нажмите кнопку <img src="StdPicture.CheckAll" width="16" height="16"></img> для того чтобы <strong>Пометить все настройки</strong>; +</li><li>Нажмите кнопку <img src="StdPicture.UncheckAll"></img> для того чтобы <strong>Снять пометку со всех настроек</strong>;  </li></ul></li><li>Для копирования или очистки настроек нажмите <strong>Выбрать</strong>. </li></ul><h3>Просмотр настроек</h3> +<ul><li>Настройки отчетов и внешнего вида можно просмотреть с помощью двойного щелчка мыши (или с помощью команды <strong>Все действия</strong> - <strong>Открыть</strong>). </li></ul><h3>См. также:</h3> +<ul><li> +<div><a href="v8help://frame/form_common">Работа с формами</a></div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl index be33b6055..ec044bab5 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -81,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПриСменеСтраницы(Элемент, ТекущаяСтраница) @@ -132,8 +133,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -217,8 +219,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, отвечающие за вывод настроек пользователю @@ -395,7 +398,7 @@ МассивПерсональныхНастроек = Новый Массив; ПредставленияНастроек = Новый Массив; МассивВариантовОтчетов = Новый Массив; - ПрочиеПользовательскиеНастройки = Новый Массив; + ПрочиеПользовательскиеНастройки = Новый Структура; КоличествоНастроек = 0; Для Каждого Настройка Из ДеревоНастроек.ПолучитьЭлементы() Цикл @@ -404,8 +407,9 @@ Если Настройка.Тип = "ПерсональныеНастройки" Тогда МассивПерсональныхНастроек.Добавить(Настройка.Ключи); - ИначеЕсли Настройка.Тип = "ПользовательскаяНастройка" Тогда - ПрочиеПользовательскиеНастройки.Добавить(Настройка.Ключи); + ИначеЕсли Настройка.Тип = "ПрочаяПользовательскаяНастройка" Тогда + ПрочиеПользовательскиеНастройки.Вставить("ИдентификаторНастройки", Настройка.ТипСтроки); + ПрочиеПользовательскиеНастройки.Вставить("ЗначениеНастройки", Настройка.Ключи); Иначе МассивНастроек.Добавить(Настройка.Ключи); @@ -618,3 +622,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca deleted file mode 100644 index 493301780..000000000 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca +++ /dev/null @@ -1,27 +0,0 @@ -<?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>Greater</comparisonType> - <right xsi:type="xs:decimal">0</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> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="dcscor:Field">ГруппыПользователей.НаименованиеГруппыИПомеченоПользователей</dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index 839c2d4e8..413ae7eaa 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -300,10 +300,6 @@ <wrap>true</wrap> <extendedEdit>false</extendedEdit> <choiceListButton>false</choiceListButton> - <choiceButton>false</choiceButton> - <clearButton>false</clearButton> - <spinButton>false</spinButton> - <openButton>false</openButton> <typeDomainEnabled>true</typeDomainEnabled> <textSize>Normal</textSize> </extInfo> @@ -1531,7 +1527,7 @@ <key>ru</key> <value>Пометить выбранные</value> - 3 + 2 ru Пометить выбранные @@ -1554,7 +1550,7 @@ ru Снять пометку выбранных - 4 + 3 ru Снять пометку выбранных @@ -1577,7 +1573,7 @@ ru Пометить всех - 2 + 4 ru Пометить всех пользователей diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html index b9b4f3fe8..26a3ee18b 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html @@ -1,3 +1,13 @@ - -

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

      -

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

      \ No newline at end of file + +

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

      +

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

      +

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

      +

      Выбор пользователей

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

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

      +

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

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index ea0ff2701..b474fe77e 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -100,8 +102,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) @@ -156,8 +159,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) @@ -176,7 +180,6 @@ Возврат; КонецЕсли; - Результат = Новый Структура("ПользователиПриемник, КопироватьВсе, ОчисткаНастроек", ПользователиПриемник, КопироватьВсе, ОчисткаНастроек); Оповестить("ВыборПользователя", Результат); @@ -248,7 +251,6 @@ КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -258,8 +260,31 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ГруппыПользователейГруппа.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГруппыПользователей.ПомеченоПользователей"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ГруппыПользователей.НаименованиеГруппыИПомеченоПользователей")); + +КонецПроцедуры &НаСервере Процедура ОтметитьПользователя(ПользовательСсылка) @@ -436,3 +461,5 @@ ЗначениеВРеквизитФормы(СписокВсехПользователейТаблица, "СписокВсехПользователей"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html index e4ce16ed7..9ff829279 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html @@ -1,5 +1,27 @@ - -

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

      -
      1. "Скопировать настройки от пользователя" - пользователь (или внешний пользователь), чьи настройки будут использоваться для копирования другим пользователям. -
      2. "Кому копировать" - выбираются пользователи, которым необходимо скопировать настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. -
      3. "Что копировать" - выбирается, какие настройки копировать другому пользователю или пользователям. При выборе значения "Отдельные настройки" появляется возможность выбора нужных настроек из списка
      \ No newline at end of file + +

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

      +

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

      +

      Команда для копирования настроек пользователей находится в разделе Администрирование - Настройки пользователей и прав.

      +

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

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

      Ограничения

      +

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

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

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl index b1b2529f5..16afd73d6 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -109,8 +109,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПользовательНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -123,8 +124,9 @@ СкрываемыеПользователи.ЗагрузитьЗначения(ПользователиПолучателиНастроек.МассивПользователей); КонецЕсли; - ПараметрыОтбора = Новый Структура("ДоступКИнформационнойБазеРазрешен, РежимВыбора, СкрываемыеПользователи", - Истина, Истина, СкрываемыеПользователи); + ПараметрыОтбора = Новый Структура( + "СкрытьПользователейБезПользователяИБ, РежимВыбора, СкрываемыеПользователи", + Истина, Истина, СкрываемыеПользователи); Если ТипПереданногоПользователя = Неопределено Тогда @@ -244,8 +246,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Скопировать(Команда) @@ -291,8 +294,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СкопироватьНастройки(ИмяКоманды) @@ -320,7 +324,7 @@ КнопкиВопроса.Добавить("ПоказатьОтчет", НСтр("ru='Показать отчет'")); Оповещение = Новый ОписаниеОповещения("СкопироватьНастройкиПоказатьВопрос", ЭтотОбъект, Отчет); - ПоказатьВопрос(ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[0].Значение); + ПоказатьВопрос(Оповещение, ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[0].Значение); Возврат; КонецЕсли; @@ -482,8 +486,16 @@ КонецЕсли; Если ВыбранныеНастройки.ПрочиеПользовательскиеНастройки.Количество() > 0 Тогда - ПользователиСлужебный.ПриСохраненииПрочихПользовательскихНастроек( - ВыбранныеНастройки.ПрочиеПользовательскиеНастройки[0], Приемники); + + Для Каждого ПользовательСправочника Из Приемники Цикл + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательСправочника); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", + Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСправочника)); + ПользователиСлужебный.ПриСохраненииПрочихНастроек( + СведенияОПользователе, ВыбранныеНастройки.ПрочиеПользовательскиеНастройки); + КонецЦикла; + КонецЕсли; Если НеСкопированныеНастройкиОтчетов.Количество() <> 0 Тогда @@ -574,3 +586,5 @@ РезультатПроверки = ?(ЕстьАктивныеПользователиПолучатели, "ЕстьАктивныеПользователиПолучатели", ""); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index f62731a30..ef68ce14c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -118,10 +118,7 @@ true false true - false true - false - false true true true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html index 6334780bd..039662905 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html @@ -1,13 +1,67 @@ - -

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

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

       

      -

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

      -

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

      -

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

      -

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

      -

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

      -

      См. также

      + +

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

      +

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

      +

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

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

      Также список настроек каждого пользователя (внешнего пользователя) можно открыть по команде Настройки панели навигации.

      +
      • В этом случае поле Пользователь отсутствует.

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

      +

      Список состоит из трех вкладок:

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

      Копирование настроек

      +

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

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

      Ограничения

      +

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

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

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

      +

      Очистка настроек выбранного пользователя

      +

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

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

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

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

      Очистка всех настроек у всех пользователей

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

      Просмотр настроек текущего пользователя

      +

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

      +
      • Выберите нужную настройку; +
      • Нажмите Все действия - Открыть.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index 7620ab623..67129ac75 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -80,8 +80,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПриСменеСтраницы(Элемент, ТекущаяСтраница) @@ -119,12 +120,12 @@ Процедура ПользовательСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ПараметрыОтбора = Новый Структура("ДоступКИнформационнойБазеРазрешен, РежимВыбора", Истина, Истина); - + ПараметрыОтбора = Новый Структура("СкрытьПользователейБезПользователяИБ, РежимВыбора", Истина, Истина); + Если ИспользоватьВнешнихПользователей Тогда ВыборТипаПользователей = Новый СписокЗначений; - ВыборТипаПользователей.Добавить("ВнешниеПользователи", "Внешние пользователи"); - ВыборТипаПользователей.Добавить("Пользователи", "Пользователи"); + ВыборТипаПользователей.Добавить("ВнешниеПользователи", НСтр("ru = 'Внешние пользователи'")); + ВыборТипаПользователей.Добавить("Пользователи", НСтр("ru = 'Пользователи'")); Оповещение = Новый ОписаниеОповещения("ПользовательСсылкаНачалоВыбораЗавершение", ЭтотОбъект, ПараметрыОтбора); ВыборТипаПользователей.ПоказатьВыборЭлемента(Оповещение); @@ -180,8 +181,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -354,8 +356,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для вывода списков настроек @@ -489,9 +492,18 @@ ПользовательИнформационнойБазы, ПользователиПриемник, Результат.МассивПерсональныхНастроек); КонецЕсли; - Если Результат.МассивНастроекБыстрогоДоступа.Количество() <> 0 Тогда - ПользователиСлужебный.ПриСохраненииПрочихПользовательскихНастроек( - Результат.МассивНастроекБыстрогоДоступа[0], ПользователиПриемник); + Если Результат.МассивПользовательскихНастроек.Количество() <> 0 Тогда + Для Каждого ПрочиеПользовательскиеНастройки Из Результат.МассивПользовательскихНастроек Цикл + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательПриемник); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", + Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник)); + + ПользователиСлужебный.ПриСохраненииПрочихНастроек( + СведенияОПользователе, ПрочиеПользовательскиеНастройки); + КонецЦикла; + КонецЦикла; КонецЕсли; Обработки.НастройкиПользователей.СкопироватьНастройкиВнешнегоВида( @@ -542,9 +554,14 @@ ПользовательИнформационнойБазы, Результат.МассивПерсональныхНастроек, "ХранилищеОбщихНастроек"); КонецЕсли; - Если Результат.МассивНастроекБыстрогоДоступа.Количество() <> 0 Тогда - ПользователиСлужебный.ПриУдаленииПрочихПользовательскихНастроек( - Результат.МассивНастроекБыстрогоДоступа[0], ПользовательСсылка); + Если Результат.МассивПользовательскихНастроек.Количество() <> 0 Тогда + Для Каждого ПрочиеПользовательскиеНастройки Из Результат.МассивПользовательскихНастроек Цикл + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательСсылка); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ПользовательИнформационнойБазы); + ПользователиСлужебный.ПриУдаленииПрочихНастроек( + СведенияОПользователе, ПрочиеПользовательскиеНастройки); + КонецЦикла; КонецЕсли; // Очистка вариантов отчетов @@ -1099,7 +1116,7 @@ МассивНастроек = Новый Массив; МассивПерсональныхНастроек = Новый Массив; МассивВариантовОтчетов = Новый Массив; - МассивНастроекБыстрогоДоступа = Новый Массив; + МассивПользовательскихНастроек = Новый Массив; ТекущийВариантОтчета = Неопределено; ВыделенныеЭлементы = ВыделенныеЭлементыНастроек(); @@ -1114,8 +1131,11 @@ КонецЕсли; // Заполнение массива прочих пользовательских настроек - Если ВыделеннаяНастройка.Тип = "ПользовательскаяНастройка" Тогда - МассивНастроекБыстрогоДоступа.Добавить(ВыделеннаяНастройка.Ключи); + Если ВыделеннаяНастройка.Тип = "ПрочаяПользовательскаяНастройка" Тогда + ПрочиеПользовательскиеНастройки = Новый Структура; + ПрочиеПользовательскиеНастройки.Вставить("ИдентификаторНастройки", ВыделеннаяНастройка.ТипСтроки); + ПрочиеПользовательскиеНастройки.Вставить("ЗначениеНастройки", ВыделеннаяНастройка.Ключи); + МассивПользовательскихНастроек.Добавить(ПрочиеПользовательскиеНастройки); Продолжить; КонецЕсли; @@ -1150,6 +1170,8 @@ КонецЦикла; - Возврат Новый Структура("МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивНастроекБыстрогоДоступа", - МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивНастроекБыстрогоДоступа); + Возврат Новый Структура("МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивПользовательскихНастроек", + МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивПользовательскихНастроек); КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html index b5bd15f9c..8a6a9cfea 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html @@ -1,4 +1,19 @@ - -

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

      -
      1. "Очистить настройки" - выбираются пользователи, которым необходимо очистить настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. -
      2. "Что очистить" - выбирается, какие настройки очищать. Если в поле "Кому очистить" выбран один пользователь, то есть возможность выбора отдельных настроек. При выборе нескольких пользователей или всех пользователей возможна очистка только всех настроек каждого пользователя.
      \ No newline at end of file + +

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

      +

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

      +

      Команда для очистки настроек пользователей находится в разделе Администрирование - Настройки пользователей и прав.

      +

      Очистка настроек пользователей

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl index b32c7f7aa..d935283f1 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -96,8 +96,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПереключательКомуОчищатьНастройкиПриИзменении(Элемент) @@ -140,8 +141,8 @@ Если ИспользоватьВнешнихПользователей Тогда ВыборТипаПользователей = Новый СписокЗначений; - ВыборТипаПользователей.Добавить("ВнешниеПользователи", "Внешние пользователи"); - ВыборТипаПользователей.Добавить("Пользователи", "Пользователи"); + ВыборТипаПользователей.Добавить("ВнешниеПользователи", НСтр("ru = 'Внешние пользователи'")); + ВыборТипаПользователей.Добавить("Пользователи", НСтр("ru = 'Пользователи'")); Оповещение = Новый ОписаниеОповещения("ВыбратьПользователейНажатиеВыбратьЭлемент", ЭтотОбъект); ВыборТипаПользователей.ПоказатьВыборЭлемента(Оповещение); @@ -166,8 +167,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Очистить(Команда) @@ -189,9 +191,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыбратьПользователейНажатиеВыбратьЭлемент(ВыбранныйВариант, ДополнительныеПараметры) Экспорт @@ -337,8 +339,11 @@ КонецЕсли; Если ВыбранныеНастройки.ПрочиеПользовательскиеНастройки.Количество() > 0 Тогда - ПользователиСлужебный.ПриУдаленииПрочихПользовательскихНастроек( - ВыбранныеНастройки.ПрочиеПользовательскиеНастройки[0], Источник); + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", Источник); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", Пользователь); + ПользователиСлужебный.ПриУдаленииПрочихНастроек( + СведенияОПользователе, ВыбранныеНастройки.ПрочиеПользовательскиеНастройки); КонецЕсли; КонецПроцедуры @@ -373,3 +378,5 @@ Обработки.НастройкиПользователей.УдалитьНастройкиПользователей(МассивНастроек, Источники); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl index 52d52f81f..91b32ede7 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокАктивныхПользователейНажатие(Элемент) @@ -8,8 +8,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Скопировать(Команда) @@ -22,3 +23,5 @@ Оповестить("СкопироватьНастройкиАктивнымПользователям", Результат); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html new file mode 100644 index 000000000..b3884803b --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html @@ -0,0 +1,11 @@ + +

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

      +

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

      +

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

      +

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

      +
      • +
        Копирование настроек - копирование пользовательских настроек от одного пользователя другим. Это может понадобиться, например, если настраивается несколько новых пользователей в одной группе, в которой уже есть пользователи.
        +
      • +
        Очистка настроек - удаление настроек у всех или выбранных пользователей. Иногда требуется удалить пользовательские настройки, например, если из-за этих неправильных настроек работа в программе стала невозможной.
        +
      • +
        Настройки пользователей - выполните эту команду для того чтобы открыть список, в котором производится управление пользовательскими настройками.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index efe6d0f2e..283e80783 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, отвечающие за получение настроек форм @@ -283,22 +282,35 @@ Для Каждого Источник Из Источники Цикл Если ОчищаемаяНастройка = "ПрочиеПользовательскиеНастройки" Тогда - // Получение настроек быстрого доступа к дополнительным отчетам и обработкам - НастройкиБыстрогоДоступа = Неопределено; - ПользователиСлужебный.ПриПолученииПрочихПользовательскихНастроек(Источник, НастройкиБыстрогоДоступа); + // Получение пользовательских настроек + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", Источник); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ИмяПользователяИБ(Источник)); + ПрочиеНастройкиПользователей = Новый Структура; + ПользователиСлужебный.ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройкиПользователей); Ключи = Новый СписокЗначений; - Если НастройкиБыстрогоДоступа <> Неопределено Тогда + МассивПрочихНастроек = Новый Массив; + Если ПрочиеНастройкиПользователей.Количество() <> 0 Тогда - Если НастройкиБыстрогоДоступа.СписокНастроек.Количество() <> 0 Тогда - - Для Каждого Элемент Из НастройкиБыстрогоДоступа.СписокНастроек Цикл - Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); - КонецЦикла; + Для Каждого ПрочаяНастройка Из ПрочиеНастройкиПользователей Цикл + ПрочиеНастройкиСтруктура = Новый Структура; + Если ПрочаяНастройка.Ключ = "НастройкаБыстрогоДоступа" Тогда + СписокНастроек = ПрочаяНастройка.Значение.СписокНастроек; + Для Каждого Элемент Из СписокНастроек Цикл + Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); + КонецЦикла; + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", "НастройкаБыстрогоДоступа"); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", Ключи); + Иначе + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", ПрочаяНастройка.Ключ); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", ПрочаяНастройка.Значение.СписокНастроек); + КонецЕсли; - КонецЕсли; + ПользователиСлужебный.ПриУдаленииПрочихНастроек(СведенияОПользователе, ПрочиеНастройкиСтруктура); + КонецЦикла; КонецЕсли; - ПользователиСлужебный.ПриУдаленииПрочихПользовательскихНастроек(Ключи, Источник); + Продолжить; КонецЕсли; @@ -354,19 +366,32 @@ ЕстьНастройки = Ложь; ТаблицаВариантовОтчетов = Неопределено; ПользовательИсточник = ИмяПользователяИБ(ПользовательИсточникСсылка); - // Получение настроек быстрого доступа к дополнительным отчетам и обработкам - НастройкиБыстрогоДоступа = Неопределено; - ПользователиСлужебный.ПриПолученииПрочихПользовательскихНастроек(ПользовательИсточникСсылка, НастройкиБыстрогоДоступа); + + // Получение пользовательских настроек + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательИсточникСсылка); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ПользовательИсточник); + ПрочиеНастройкиПользователей = Новый Структура; + ПользователиСлужебный.ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройкиПользователей); Ключи = Новый СписокЗначений; - Если НастройкиБыстрогоДоступа <> Неопределено Тогда + МассивПрочихНастроек = Новый Массив; + Если ПрочиеНастройкиПользователей.Количество() <> 0 Тогда - Если НастройкиБыстрогоДоступа.СписокНастроек.Количество() <> 0 Тогда - - Для Каждого Элемент Из НастройкиБыстрогоДоступа.СписокНастроек Цикл - Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); - КонецЦикла; - - КонецЕсли; + Для Каждого ПрочаяНастройка Из ПрочиеНастройкиПользователей Цикл + ПрочиеНастройкиСтруктура = Новый Структура; + Если ПрочаяНастройка.Ключ = "НастройкаБыстрогоДоступа" Тогда + СписокНастроек = ПрочаяНастройка.Значение.СписокНастроек; + Для Каждого Элемент Из СписокНастроек Цикл + Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); + КонецЦикла; + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", "НастройкаБыстрогоДоступа"); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", Ключи); + Иначе + ПрочиеНастройкиСтруктура.Вставить("ИдентификаторНастройки", ПрочаяНастройка.Ключ); + ПрочиеНастройкиСтруктура.Вставить("ЗначениеНастройки", ПрочаяНастройка.Значение.СписокНастроек); + КонецЕсли; + МассивПрочихНастроек.Добавить(ПрочиеНастройкиСтруктура); + КонецЦикла; КонецЕсли; @@ -374,7 +399,14 @@ МенеджерНастроек = СоответствиеНастройкаХранилище[КопируемаяНастройка]; Если КопируемаяНастройка = "ПрочиеПользовательскиеНастройки" Тогда - ПользователиСлужебный.ПриСохраненииПрочихПользовательскихНастроек(Ключи, ПользователиПриемник); + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательПриемник); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ИмяПользователяИБ(ПользовательПриемник)); + Для Каждого ЭлементМассива Из МассивПрочихНастроек Цикл + ПользователиСлужебный.ПриСохраненииПрочихНастроек(СведенияОПользователе, ЭлементМассива); + КонецЦикла; + КонецЦикла; Продолжить; КонецЕсли; @@ -389,7 +421,7 @@ КонецЕсли; НастройкиИзХранилища = СписокНастроек( - ПользовательИсточник, МенеджерНастроек, КопируемаяНастройка, ТаблицаКлючейИТиповВариантовОтчетов); + ПользовательИсточник, МенеджерНастроек, КопируемаяНастройка, ТаблицаКлючейИТиповВариантовОтчетов, Истина); Если НастройкиИзХранилища.Количество() <> 0 Тогда ЕстьНастройки = Истина; @@ -408,7 +440,7 @@ КонецФункции Функция СписокНастроек(ИмяПользователя, МенеджерНастроек, - КопируемаяНастройка, ТаблицаКлючейИТиповВариантовОтчетов = Неопределено) + КопируемаяНастройка, ТаблицаКлючейИТиповВариантовОтчетов = Неопределено, ДляКопирования = Ложь) ПолучитьИзбранное = Ложь; ПолучитьНастройкиПечати = Ложь; @@ -477,6 +509,10 @@ КонецЕсли; + Если ДляКопирования И ПропуститьНастройку(ВыборкаНастроек.КлючОбъекта, ВыборкаНастроек.КлючНастроек) Тогда + Продолжить; + КонецЕсли; + ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); КонецЦикла; @@ -561,12 +597,15 @@ Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл ТекущийПользователь = Неопределено; - Для Каждого Элемент Из МассивНастроекДляКопирования Цикл + Для Каждого Элемент Из МассивНастроекДляКопирования Цикл Для Каждого ЭлементНастроек Из Элемент Цикл КлючНастроек = ЭлементНастроек.Представление; КлючОбъекта = ЭлементНастроек.Значение; + Если ПропуститьНастройку(КлючОбъекта, КлючНастроек) Тогда + Продолжить; + КонецЕсли; Настройка = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ПользовательИсточник); ОписаниеНастройки = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастроек, ПользовательИсточник); @@ -1074,6 +1113,7 @@ МассивНастроекФорм.Добавить("/НастройкиОкна"); МассивНастроекФорм.Добавить("/НастройкиОкнаВебКлиента"); МассивНастроекФорм.Добавить("/ТекущиеДанные"); + МассивНастроекФорм.Добавить("/ТекущиеПользовательскиеНастройки"); Возврат МассивНастроекФорм; КонецФункции @@ -1583,6 +1623,24 @@ КонецФункции +Функция ПропуститьНастройку(КлючОбъекта, КлючНастроек) + + ИсключенияПоКлючуОбъекта = Новый Массив; + ИсключенияПоКлючуНастроек = Новый Массив; + + // Исключения. Настройки, которые нельзя копировать. + ИсключенияПоКлючуОбъекта.Добавить("ЛокальныйКэшФайлов"); + ИсключенияПоКлючуНастроек.Добавить("ПутьКЛокальномуКэшуФайлов"); + + Если ИсключенияПоКлючуОбъекта.Найти(КлючОбъекта) <> Неопределено + И ИсключенияПоКлючуНастроек.Найти(КлючНастроек) <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для форм НастройкиПользователей и ВыборНастроек @@ -1891,7 +1949,7 @@ Ключи = Новый СписокЗначений; ПрочиеКлючи = Новый СписокЗначений; - // Заполнение произвольных пользовательских настроек + // Заполнение персональных настроек Для Каждого Настройка Из Настройки Цикл Ключи.Добавить(Настройка.КлючОбъекта, Настройка.КлючНастроек); КонецЦикла; @@ -1982,37 +2040,58 @@ КонецЕсли; // Добавление прочих настроек, предусмотренных в конфигурации - Результат = Неопределено; - ПользователиСлужебный.ПриПолученииПрочихПользовательскихНастроек(Форма.ПользовательСсылка, Результат); + ПрочиеНастройки = Новый Структура; + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", Форма.ПользовательСсылка); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", Форма.ПользовательИнформационнойБазы); + + ПользователиСлужебный.ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройки); Ключи = Новый СписокЗначений; - Если Результат <> Неопределено И Результат.СписокНастроек.Количество() <> 0 Тогда + Если ПрочиеНастройки <> Неопределено Тогда - ВыводитьНастройку = Истина; - Если Не ПустаяСтрока(Форма.Поиск) Тогда + Для Каждого ПрочаяНастройка Из ПрочиеНастройки Цикл - Если Найти(ВРег(Результат.НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда - ВыводитьНастройку = Ложь; + Результат = ПрочаяНастройка.Значение; + Если Результат.СписокНастроек.Количество() <> 0 Тогда + + ВыводитьНастройку = Истина; + Если Не ПустаяСтрока(Форма.Поиск) Тогда + + Если Найти(ВРег(Результат.НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда + ВыводитьНастройку = Ложь; + КонецЕсли; + + КонецЕсли; + + Если ВыводитьНастройку Тогда + + Если ПрочаяНастройка.Ключ = "НастройкаБыстрогоДоступа" Тогда + Для Каждого Элемент Из Результат.СписокНастроек Цикл + ЗначениеНастройки = Элемент[0]; + ИдентификаторНастройки = Элемент[1]; + Ключи.Добавить(ЗначениеНастройки, ИдентификаторНастройки); + КонецЦикла; + Иначе + Ключи = Результат.СписокНастроек.Скопировать(); + КонецЕсли; + + Настройка = Результат.НазваниеНастройки; + Если Результат.КартинкаНастройки = "" Тогда + Картинка = БиблиотекаКартинок.ПрочиеПользовательскиеНастройки; + Иначе + Картинка = Результат.КартинкаНастройки; + КонецЕсли; + Тип = "ПрочаяПользовательскаяНастройка"; + ТипНастройки = ПрочаяНастройка.Ключ; + ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, Ключи, Тип, ТипНастройки); + Ключи.Очистить(); + + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ВыводитьНастройку Тогда - - Для Каждого Элемент Из Результат.СписокНастроек Цикл - Ключи.Добавить(Элемент.Объект, Элемент.Идентификатор); - КонецЦикла; - - Настройка = Результат.НазваниеНастройки; - Если Результат.КартинкаНастройки = "" Тогда - Картинка = БиблиотекаКартинок.ПрочиеПользовательскиеНастройки; - Иначе - Картинка = Результат.КартинкаНастройки; - КонецЕсли; - ТипНастройки = "ПользовательскаяНастройка"; - ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, Ключи, ТипНастройки); - - КонецЕсли; + КонецЦикла; КонецЕсли; @@ -2038,15 +2117,17 @@ КонецПроцедуры -Процедура ДобавитьСтрокуДерева(ДеревоЗначений, Настройка, Картинка, Ключи, Тип = "") +Процедура ДобавитьСтрокуДерева(ДеревоЗначений, Настройка, Картинка, Ключи, Тип = "", ТипСтроки = "") НоваяСтрока = ДеревоЗначений.Строки.Добавить(); НоваяСтрока.Настройка = Настройка; НоваяСтрока.Картинка = Картинка; НоваяСтрока.Тип = Тип; - НоваяСтрока.ТипСтроки = Тип; + НоваяСтрока.ТипСтроки = ?(ТипСтроки <> "", ТипСтроки, Тип); НоваяСтрока.Ключи = Ключи.Скопировать(); КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo b/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo index 25f359356..02e471a48 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo +++ b/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo @@ -11,6 +11,11 @@ true DataProcessor.НастройкиПользователей.Form.НастройкиПользователей + + + ru + + ВыборПользователей diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form index e8b125da7..1ed9295fe 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form @@ -483,7 +483,7 @@ Продолжить <key>ru</key> - <value>Продолжить</value> + <value>Продолжить работу на текущей версии</value> 2 @@ -505,7 +505,7 @@ ЗавершитьРаботу <key>ru</key> - <value>Завершить</value> + <value>Завершить работу</value> 3 diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl index 470439b80..f669b17b7 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -41,19 +41,20 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТекстСсылкиНажатие(Элемент) - СтандартнаяОбработка = Ложь; ОткрытьФорму("Обработка.НерекомендуемаяВерсияПлатформы.Форма.ПорядокОбновленияПлатформы",,ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПродолжитьРаботу(Команда) @@ -74,3 +75,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form index 553dbb1af..5699cff0a 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form @@ -1,9 +1,66 @@ - + <key>ru</key> <value>Порядок обновления на новую версию</value> + + ПанельСохранитьИНапечатать + 15 + + ПечатьИнструкции + 13 + true + true + + true + + + ПечатьИнструкцииРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.Command.ПечатьИнструкции + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Панель сохранить и напечатать</value> + + + ru + Панель сохранить и напечатать + + + ПанельСохранитьИНапечататьРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + CommandBar + + Left + + ПорядокОбновленияПрограммы 5 @@ -37,6 +94,10 @@ Left true + + DocumentComplete + ПорядокОбновленияПрограммыДокументСформирован + OnClick ПорядокОбновленияПрограммыПриНажатии @@ -54,57 +115,6 @@ ФормаКоманднаяПанель -1 - - ФормаЗакрыть - 7 - true - true - - true - - - ФормаЗакрытьExtendedTooltip - 8 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - - ФормаСправка - 4 - true - true - - true - - - ФормаСправкаExtendedTooltip - 9 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Right @@ -141,6 +151,28 @@ true + + ПечатьИнструкции + + <key>ru</key> + <value>Печать</value> + + 2 + + true + + + StdPicture.Print + + + + ПечатьИнструкции + + + TextPicture + Auto + Auto + diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl index d134863db..406c75173 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,15 +19,33 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПорядокОбновленияПрограммыПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) - Если ДанныеСобытия.Href <> Неопределено Тогда СтандартнаяОбработка = Ложь; ПерейтиПоНавигационнойСсылке(ДанныеСобытия.Href); КонецЕсли; - КонецПроцедуры + +&НаКлиенте +Процедура ПечатьИнструкции(Команда) + Элементы.ПорядокОбновленияПрограммы.Документ.execCommand("Print"); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПорядокОбновленияПрограммыДокументСформирован(Элемент) + // Видимость команды печати + Если Не Элемент.Документ.queryCommandSupported("Print") Тогда + Элементы.ПечатьИнструкции.Видимость = Ложь; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html index b7e5770ba..1244c2b57 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html @@ -1,4 +1,4 @@ - +

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

      diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 2a448d0f3..53d5578ef 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -18,8 +17,8 @@ // СтандартныеПодсистемы.УправлениеДоступом УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); - Элементы.ГруппаГруппыДоступа.Видимость = НЕ УпрощенныйИнтерфейс; - Элементы.ГруппаПрофилиГруппДоступа.Видимость = НЕ УпрощенныйИнтерфейс; + Элементы.ГруппыДоступа.Видимость = НЕ УпрощенныйИнтерфейс; + Элементы.ПрофилиГруппДоступа.Видимость = НЕ УпрощенныйИнтерфейс; // Конец СтандартныеПодсистемы.УправлениеДоступом // СтандартныеПодсистемы.Взаимодействия @@ -38,8 +37,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // СтандартныеПодсистемы.УправлениеДоступом &НаКлиенте @@ -73,6 +73,7 @@ РежимДиалогаВопрос.ДаНет); Иначе Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецЕсли; КонецПроцедуры @@ -94,8 +95,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.Взаимодействия -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.Пользователи &НаКлиенте @@ -104,8 +106,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.Пользователи -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -214,7 +217,7 @@ // СтандартныеПодсистемы.Пользователи Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВнешнихПользователей" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.СправочникВнешниеПользователи.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; + Элементы.ОткрытьВнешниеПользователи.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; КонецЕсли; // Конец СтандартныеПодсистемы.Пользователи @@ -224,4 +227,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия + + КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index fed2a0fa0..e233f0cc4 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -1302,113 +1302,6 @@ Auto - - ГруппаОткрытьНомераОтсканированныхФайлов - 1427 - - ОткрытьНомераОтсканированныхФайлов - 748 - - <key>ru</key> - <value>Номера сканированных документов</value> - - true - true - - true - - - ОткрытьНомераОтсканированныхФайловExtendedTooltip - 2080 - Label - true - true - - Left - - - Hyperlink - InformationRegister.НомераОтсканированныхФайлов.Command.НомераОтсканированныхФайлов - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьНомераОтсканированныхФайлов - 1428 - - <key>ru</key> - <value>Просмотр нумерации отсканированных документов и их владельцев.</value> - - true - true - - true - - - ПояснениеОткрытьНомераОтсканированныхФайловExtendedTooltip - 2081 - Label - true - true - - Left - - - - ПояснениеОткрытьНомераОтсканированныхФайловКонтекстноеМеню - 1429 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа открыть номера отсканированных файлов</value> - - - ru - Группа открыть номера отсканированных файлов - - 43 - false - - ГруппаОткрытьНомераОтсканированныхФайловExtendedTooltip - 2079 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - ГруппаОтступ1 2023 diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html index 1c724a5b3..77ef9c746 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html @@ -1,10 +1,10 @@ +

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

    • Пользователи
    • @@ -22,6 +22,4 @@ TD {
    • электронные подписи
    • - -
    • Хранить файлы в томах на диске
    • Разрешить использовать электронные подписи и проверять отсутствие изменений файла с момента формирования электронной подписи.
    • Настройки криптографии
    • Параметры подключения средств криптографии: электронной подписи и шифрования.
      -
    • Номера сканированных документов
    • Просмотр нумерации отсканированных документов и их владельцев.

      См. также: Настройки программы.

      \ No newline at end of file +Параметры подключения средств криптографии: электронной подписи и шифрования.

      См. также: Настройки программы.

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index b970da511..8db10f62f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -39,13 +38,29 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура ХранитьФайлыВТомахНаДискеПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); + + СтароеЗначение = Не НаборКонстант.ХранитьФайлыВТомахНаДиске; + + Попытка + ЗапросыНаИспользованиеВнешнихРесурсов = + ЗапросыНаИспользованиеВнешнихРесурсовТомовХраненияФайлов( + НаборКонстант.ХранитьФайлыВТомахНаДиске); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ЗапросыНаИспользованиеВнешнихРесурсов, ЭтотОбъект, Новый ОписаниеОповещения( + "ХранитьФайлыВТомахНаДискеПриИзмененииЗавершение", ЭтотОбъект, Элемент)) + Исключение + НаборКонстант.ХранитьФайлыВТомахНаДиске = СтароеЗначение; + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры &НаКлиенте @@ -101,8 +116,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ФайловыеФункции -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте @@ -118,11 +134,40 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ЭлектроннаяПодпись -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область СлужебныеПроцедурыИФункции + +// СтандартныеПодсистемы.ФайловыеФункции +&НаКлиенте +Процедура ХранитьФайлыВТомахНаДискеПриИзмененииЗавершение(Ответ, Элемент) Экспорт + + Если Ответ <> КодВозвратаДиалога.ОК Тогда + НаборКонстант.ХранитьФайлыВТомахНаДиске = Не НаборКонстант.ХранитьФайлыВТомахНаДиске; + Иначе + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗапросыНаИспользованиеВнешнихРесурсовТомовХраненияФайлов(Включение) + + ЗапросыНаИспользование = Новый Массив; + + Если Включение Тогда + Справочники.ТомаХраненияФайлов.ДобавитьЗапросыНаИспользованиеВнешнихРесурсовВсехТомов( + ЗапросыНаИспользование); + Иначе + Справочники.ТомаХраненияФайлов.ДобавитьЗапросыНаОтменуИспользованияВнешнихРесурсовВсехТомов( + ЗапросыНаИспользование); + КонецЕсли; + + Возврат ЗапросыНаИспользование; + +КонецФункции + +// Конец СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -154,9 +199,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера - &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -174,9 +216,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер - &НаСервере Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) @@ -250,3 +289,5 @@ // Конец СтандартныеПодсистемы.ЭлектроннаяПодпись КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form index f041bdd9f..0eab2e1e2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form @@ -179,7 +179,7 @@ ГруппаИспользоватьСинхронизациюДанных 1221 - ИспользоватьОбменДанными + ИспользоватьСинхронизациюДанных 411 <key>ru</key> @@ -196,10 +196,10 @@ <titleLocation>Right</titleLocation> <handlers> <event>OnChange</event> - <name>ИспользоватьОбменДаннымиПриИзменении</name> + <name>ИспользоватьСинхронизациюДанныхПриИзменении</name> </handlers> <extendedTooltip> - <name>ИспользоватьОбменДаннымиExtendedTooltip</name> + <name>ИспользоватьСинхронизациюДанныхРасширеннаяПодсказка</name> <id>2020</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -209,7 +209,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИспользоватьОбменДаннымиКонтекстноеМеню</name> + <name>ИспользоватьСинхронизациюДанныхКонтекстноеМеню</name> <id>412</id> <autoFill>true</autoFill> </contextMenu> @@ -952,9 +952,6 @@ <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> <textSize>Normal</textSize> - <font xsi:type="core:AutoFont"> - <bold>true</bold> - </font> </extInfo> </items> <items xsi:type="form:Decoration"> @@ -962,7 +959,7 @@ <id>2048</id> <title> <key>ru</key> - <value>Укажите путь к единому сетевому каталогу для общих временных файлов серверов 1С:Предприятие, работающих в одном кластере.</value> + <value>Путь к единому сетевому каталогу для общих временных файлов серверов 1С:Предприятие, работающих в одном кластере.</value> true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html index 31349769e..ba48fa57a 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 120fcf5e0..c14d3b52c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -36,12 +35,15 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ИспользоватьОбменДаннымиПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); +Процедура ИспользоватьСинхронизациюДанныхПриИзменении(Элемент) + + ОбновитьРазрешенияПрофилейБезопасности(Элемент); + КонецПроцедуры &НаКлиенте @@ -51,16 +53,21 @@ &НаКлиенте Процедура КаталогСообщенийОбменаДаннымиДляWindowsПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); + + ОбновитьРазрешенияПрофилейБезопасности(Элемент); + КонецПроцедуры &НаКлиенте Процедура КаталогСообщенийОбменаДаннымиДляLinuxПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); + + ОбновитьРазрешенияПрофилейБезопасности(Элемент); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбработчикОповещений(ИмяСобытия, Параметр, Источник) @@ -94,8 +101,9 @@ ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -128,6 +136,84 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьРазрешенияПрофилейБезопасности(Элемент) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбновитьРазрешенияПрофилейБезопасностиЗавершение", ЭтотОбъект, Элемент); + + МассивЗапросов = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Элемент.Имя); + + Если МассивЗапросов = Неопределено Тогда + Возврат; + КонецЕсли; + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + МассивЗапросов, ЭтотОбъект, ОповещениеОЗакрытии); + +КонецПроцедуры + +&НаСервере +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(ИмяКонстанты) + + КонстантаМенеджер = Константы[ИмяКонстанты]; + КонстантаЗначение = НаборКонстант[ИмяКонстанты]; + + Если КонстантаМенеджер.Получить() = КонстантаЗначение Тогда + Возврат Неопределено; + КонецЕсли; + + Если ИмяКонстанты = "ИспользоватьСинхронизациюДанных" Тогда + + Если КонстантаЗначение Тогда + + Запрос = ОбменДаннымиСервер.ЗапросНаИспользованиеВнешнихРесурсовПриВключенииОбмена(); + + Иначе + + Запрос = ОбменДаннымиСервер.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(); + + КонецЕсли; + + Возврат Запрос; + + Иначе + + МенеджерЗначения = КонстантаМенеджер.СоздатьМенеджерЗначения(); + ИдентификаторКонстанты = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МенеджерЗначения.Метаданные()); + + Если ПустаяСтрока(КонстантаЗначение) Тогда + + Запрос = РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(ИдентификаторКонстанты); + + Иначе + + Разрешения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве( + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы(КонстантаЗначение, Истина, Истина)); + Запрос = РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, ИдентификаторКонстанты); + + КонецЕсли; + + Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура ОбновитьРазрешенияПрофилейБезопасностиЗавершение(Результат, Элемент) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + Подключаемый_ПриИзмененииРеквизита(Элемент); + + Иначе + + ЭтотОбъект.Прочитать(); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -194,6 +280,7 @@ Элементы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; Элементы.НастройкиСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; Элементы.ДатыЗапретаЗагрузкиДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.РезультатыСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; Элементы.ГруппаВременныеКаталогиКластераСерверов.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; @@ -202,3 +289,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index 36e8053b2..b25e8c152 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -272,7 +272,6 @@ truefalsetrue - falsetruetruetrue @@ -374,6 +373,120 @@ Auto + + ГруппаОткрытьВидыКонтактнойИнформации + 1642 + + ОткрытьВидыКонтактнойИнформации + 1640 + true + true + + true + + + ОткрытьВидыКонтактнойИнформацииExtendedTooltip + 1866 + Label + true + true + + Left + + + Hyperlink + Catalog.ВидыКонтактнойИнформации.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОткрытьВидыКонтактнойИнформации + 1643 + + <key>ru</key> + <value>Классификация контактной информации различных объектов системы, например, партнеров, контрагентов, сотрудников и т.д.</value> + + true + true + + true + + + ПояснениеОткрытьВидыКонтактнойИнформацииExtendedTooltip + 1867 + Label + true + true + + Left + + + + ПояснениеОткрытьВидыКонтактнойИнформацииКонтекстноеМеню + 1644 + true + + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Контактная информация</value> + + + System.DefaultGUIFont + 11.0 + true + false + false + false + + + ru + Группа открыть виды контактной информации + + 43 + false + + ГруппаОткрытьВидыКонтактнойИнформацииExtendedTooltip + 1865 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + ГруппаВерсионирование 877 @@ -599,11 +712,19 @@ <key>ru</key> - <value> </value> + <value>Версионирование объектов</value> + + System.DefaultGUIFont + 11.0 + true + false + false + false + ru - + Версионирование объектов 86 false @@ -624,6 +745,7 @@ true true Equal + auto Auto Auto @@ -1276,11 +1398,19 @@ <key>ru</key> - <value>Группа дополнительные реквизиты и сведения</value> + <value>Дополнительные реквизиты и сведения</value> + + System.DefaultGUIFont + 11.0 + true + false + false + false + ru - + Дополнительные реквизиты и сведения 86 false @@ -1301,117 +1431,13 @@ true true Equal + auto Auto Auto - ГруппаОткрытьВидыКонтактнойИнформации - 1642 - - ОткрытьВидыКонтактнойИнформации - 1640 - true - true - - true - - - ОткрытьВидыКонтактнойИнформацииExtendedTooltip - 1866 - Label - true - true - - Left - - - Hyperlink - Catalog.ВидыКонтактнойИнформации.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьВидыКонтактнойИнформации - 1643 - - <key>ru</key> - <value>Классификация контактной информации различных объектов системы, например, партнеров, контрагентов, сотрудников и т.д.</value> - - true - true - - true - - - ПояснениеОткрытьВидыКонтактнойИнформацииExtendedTooltip - 1867 - Label - true - true - - Left - - - - ПояснениеОткрытьВидыКонтактнойИнформацииКонтекстноеМеню - 1644 - true - - Label - true - 2 - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Группа открыть виды контактной информации</value> - - - ru - Группа открыть виды контактной информации - - 43 - false - - ГруппаОткрытьВидыКонтактнойИнформацииExtendedTooltip - 1865 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаАдминистрирование + ГруппаПараметрыКлиентСервернойИБ 1532 ГруппаОткрытьПараметрыПроксиСервера @@ -1518,20 +1544,23 @@ - ГруппаПараметрыАдминистрированияИБ - 1521 + ГруппаНастройкаИспользованияПрофилейБезопасности + 1934 - ПараметрыАдминистрированияИБ - 336 + ОткрытьНастройкиИспользованияПрофилейБезопасности + 1936 + + <key>ru</key> + <value>Использование профилей безопасности</value> + true true true - false - ПараметрыАдминистрированияИБExtendedTooltip - 1873 + ОткрытьНастройкиИспользованияПрофилейБезопасностиРасширеннаяПодсказка + 1937 Label true true @@ -1540,7 +1569,7 @@ Hyperlink - CommonForm.ПараметрыАдминистрированияСервернойИБ.StandardCommand.Open + Form.Command.ИспользованиеПрофилейБезопасности Normal Auto true @@ -1549,12 +1578,11 @@ Auto - ПояснениеПараметрыАдминистрированияИБ - 1522 + ПояснениеОткрытьНастройкиИспользованияПрофилдейБезопасности + 1938 <key>ru</key> - <value>Изменение стандартных административных настроек -программы.</value> + <value>Использование профилей безопасности для контроля за использованием программой внешних (относительно кластера серверов 1С:Предприятия) ресурсов.</value> true true @@ -1562,8 +1590,8 @@ true - ПояснениеПараметрыАдминистрированияИБExtendedTooltip - 1874 + ПояснениеОткрытьНастройкиИспользованияПрофилдейБезопасностиРасширеннаяПодсказка + 1940 Label true true @@ -1572,12 +1600,13 @@ - ПояснениеПараметрыАдминистрированияИБКонтекстноеМеню - 1523 + ПояснениеОткрытьНастройкиИспользованияПрофилдейБезопасностиКонтекстноеМеню + 1939 true Label true + 3 true Style.ПоясняющийТекст @@ -1593,15 +1622,15 @@ <key>ru</key> - <value>Группа параметры администрирования ИБ</value> + <value>Настройка использования профилей безопасности</value> ru - Группа параметры администрирования ИБ + Группа открыть параметры прокси сервера - ГруппаПараметрыАдминистрированияИБExtendedTooltip - 1872 + ГруппаНастройкаИспользованияПрофилейБезопасностиРасширеннаяПодсказка + 1935 Label true true @@ -1626,7 +1655,7 @@ <key>ru</key> - <value> </value> + <value>Параметры серверной информационной базы</value> System.DefaultGUIFont @@ -1643,7 +1672,7 @@ 86 false - ГруппаАдминистрированиеРасширеннаяПодсказка + ГруппаПараметрыКлиентСервернойИБРасширеннаяПодсказка 1868 Label true @@ -1659,46 +1688,20 @@ true true Equal + auto Auto Auto - ГруппаОткрытьНастройкиАгентаСервиса - 1755 - - ОткрытьНастройкиАгентаСервиса - 1761 - true - true - - true - - - ОткрытьНастройкиАгентаСервисаExtendedTooltip - 1880 - Label - true - true - - Left - - - Hyperlink - CommonForm.НастройкиАгентаСервиса.StandardCommand.Open - Normal - Auto - true - true - UserCmds - Auto - + ГруппаНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасности + 1941 - ПояснениеОткрытьНастройкиАгентаСервиса - 1757 + ДекорацияНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасности + 1943 <key>ru</key> - <value>Настройки подключения агента сервиса.</value> + <value>Декорация настройка прокси сервера на сервере недоступна при использовании профилей безопасности</value> true true @@ -1706,8 +1709,8 @@ true - ПояснениеОткрытьНастройкиАгентаСервисаExtendedTooltip - 1881 + ДекорацияНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасностиРасширеннаяПодсказка + 1945 Label true true @@ -1716,20 +1719,55 @@ - ПояснениеОткрытьНастройкиАгентаСервисаКонтекстноеМеню - 1758 + ДекорацияНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасностиКонтекстноеМеню + 1944 + true + + 2 + true + 1 + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + + + + ПояснениеНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасности + 1946 + + <key>ru</key> + <value>Настройка параметров доступа в Интернет на сервере 1С:Предприятия недоступна, т.к. для информационной базы включено использование профилей безопасности. При включенных профилях безопасности настройка параметров доступа в Интернет на сервере 1С:Предприятия может быть выполнена только путем редактирования служебного файла inetcfg.xml (подробнее см. в руководстве администратора платформы 1С:Предприятие).</value> + + true + true + + true + + + ПояснениеНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасностиРасширеннаяПодсказка + 1948 + Label + true + true + + Left + + + + ПояснениеНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасностиКонтекстноеМеню + 1947 true Label true - 1 true Style.ПоясняющийТекст Left - Top true @@ -1737,11 +1775,19 @@ true - 43 + + <key>ru</key> + <value>Группа настройка прокси сервера на сервере недоступна при использовании профилей безопасности</value> + + + ru + Группа восстановление резервной копии + + 86 false - ГруппаОткрытьНастройкиАгентаСервисаExtendedTooltip - 1879 + ГруппаНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасностиРасширеннаяПодсказка + 1942 Label true true @@ -1751,9 +1797,8 @@ UsualGroup - Vertical Auto - NormalSeparation + StrongSeparation true true Auto @@ -1925,6 +1970,28 @@ Auto Auto + + ИспользованиеПрофилейБезопасности + + <key>ru</key> + <value>Использование профилей безопасности</value> + + 5 + + ru + Использование профилей безопасности + + + true + + + + ИспользованиеПрофилейБезопасности + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html index 2679265a4..14b377081 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 } - +

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

    • Синхронизация данных
    • @@ -25,5 +25,5 @@ TD { +
    • Параметры администрирования ИБ
    • Заголовок программы
    • Добавление и настройка видов контактной информации различных объектов системы, например, партнеров, контрагентов, сотрудников и т.д.
    • Параметры доступа в Интернет
    • Настройки параметров прокси-сервера на сервере 1С:Предприятие.
      -
    • Параметры администрирования ИБ
    • Настройки доступа к кластеру серверов для выполнения различных административных действий с клиент-серверной информационной базой.

      См. также: Настройки программы.

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 271066a21..f48163b6f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,18 +21,14 @@ // Настройки видимости при запуске + // СтандартныеПодсистемы.БазоваяФункциональность + Элементы.ГруппаНастройкаИспользованияПрофилейБезопасности.Видимость = РаботаВБезопасномРежимеСлужебный.ДоступнаНастройкаПрофилейБезопасности() И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.БазоваяФункциональность + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета Элементы.ГруппаОткрытьПараметрыПроксиСервера.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - // СтандартныеПодсистемы.ЗавершениеРаботыПользователей - Элементы.ГруппаПараметрыАдминистрированияИБ.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; - // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса - Элементы.ГруппаОткрытьНастройкиАгентаСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса - // Обновление состояния элементов УстановитьДоступность(); КонецПроцедуры @@ -43,8 +38,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ЗаголовокПрограммыПриИзменении(Элемент) @@ -78,8 +74,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ВерсионированиеОбъектов &НаКлиенте @@ -133,8 +130,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СтандартныеПодсистемы.БазоваяФункциональность +&НаКлиенте +Процедура ИспользованиеПрофилейБезопасности(Команда) + + РаботаВБезопасномРежимеКлиент.ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности(); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.БазоваяФункциональность + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -285,4 +292,25 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + // СтандартныеПодсистемы.БазоваяФункциональность + Если РеквизитПутьКДанным = "" Тогда + + ДоступностьНастройкиПроксиНаСервере = Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности"); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "ГруппаОткрытьПараметрыПроксиСервера", + "Доступность", + ДоступностьНастройкиПроксиНаСервере); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "ГруппаНастройкаПроксиСервераНаСервереНедоступнаПриИспользованииПрофилейБезопасности", + "Видимость", + НЕ ДоступностьНастройкиПроксиНаСервере); + + КонецЕсли; + // Конец СтандартныеПодсистемы.БазоваяФункциональность + КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html index dd6b7cad3..8f41fcff2 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 d6ad47cdb..a4a5f7bb1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,7 +26,6 @@ Элементы.ПояснениеИспользоватьПризнакРассмотрено.Видимость = Ложь; КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия - // Обновление состояния элементов УстановитьДоступность(); @@ -38,8 +36,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // СтандартныеПодсистемы.Взаимодействия &НаКлиенте @@ -111,8 +110,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.БизнесПроцессыИЗадачи &НаКлиенте @@ -123,8 +123,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -245,3 +246,5 @@ // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html index 0d6db0dd0..0e4591b60 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 b09655d04..cdc8eada2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -31,8 +30,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте @@ -41,8 +41,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте @@ -53,8 +54,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -155,3 +157,5 @@ // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form index 1486b39b8..b1983f6f3 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form @@ -324,70 +324,36 @@ ГруппаОтчетыАдминистратора1716 - ОтчетыАдминистратора - 1718 + ОбщаяКомандаПанельОтчетовАдминистрирование + 1795 true true true - ОтчетыАдминистратораРасширеннаяПодсказка - 1719 + ОбщаяКомандаПанельОтчетовАдминистрированиеРасширеннаяПодсказка + 1796 Label true true + + Style.ПоясняющийТекст + Left Hyperlink - Form.Command.ОтчетыАдминистратора + CommonCommand.ПанельОтчетовАдминистрирование Normal Auto true true UserCmds + ShowBottom Auto - - ПояснениеОтчетыАдминистратора - 1720 - - <key>ru</key> - <value>Отчеты по журналу регистрации и другие отчеты для администрирования программы.</value> - - true - true - - true - - - ПояснениеОтчетыАдминистратораРасширеннаяПодсказка - 1722 - Label - true - true - - Left - - - - ПояснениеОтчетыАдминистратораКонтекстноеМеню - 1721 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - Top - - truetrue @@ -3545,7 +3511,7 @@ Hyperlink - DataProcessor.ГрупповоеИзменениеОбъектов.Command.ГрупповоеИзменениеРеквизитов + DataProcessor.ГрупповоеИзменениеРеквизитов.Command.ГрупповоеИзменениеРеквизитов Normal Auto true @@ -3623,6 +3589,106 @@ Auto + + ГруппаПоискИУдалениеДублей + 1788 + + ПоискИУдалениеДублей + 1790 + true + true + + true + + + ПоискИУдалениеДублейРасширеннаяПодсказка + 1791 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПоискИУдалениеДублей + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеКПоискуИУдалениюДублей + 1792 + + <key>ru</key> + <value>Поиск похожих элементов по заданным условиям сравнения</value> + + true + true + + true + + + ПояснениеКПоискуИУдалениюДублейРасширеннаяПодсказка + 1794 + Label + true + true + + Left + + + + ПояснениеКПоискуИУдалениюДублейКонтекстноеМеню + 1793 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа поиск и удаление дублей</value> + + + ru + Группа поиск и удаление дублей + + + ГруппаПоискИУдалениеДублейРасширеннаяПодсказка + 1789 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -3723,6 +3789,9 @@ true + + НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки + НаборКонстант.ИспользоватьПолнотекстовыйПоиск @@ -3904,28 +3973,6 @@ Auto Auto - - ОтчетыАдминистратора - - <key>ru</key> - <value>Отчеты администратора</value> - - 6 - - ru - Отчеты администратора - - - true - - - - ОтчетыАдминистратора - - - Auto - Auto - ДополнительныеОтчетыПоАдминистрированию @@ -3945,6 +3992,7 @@ <name>ДополнительныеОтчетыПоАдминистрированию</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьДополнительныеОтчетыИОбработки</functionalOptions> <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3967,6 +4015,7 @@ <name>ДополнительныеОбработкиПоАдминистрированию</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьДополнительныеОтчетыИОбработки</functionalOptions> <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -4014,6 +4063,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПоискИУдалениеДублей</name> + <title> + <key>ru</key> + <value>Поиск и удаление дублей</value> + + 10 + + ru + Поиск и удаление дублей + + + true + + + + ПоискИУдалениеДублей + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html index bf5330e57..62d708d6e 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 a1d1e77e0..b3d65a6d7 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -45,8 +44,8 @@ // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных ПоддержкаРезервногоКопированияВМоделиСервиса = РезервноеКопированиеОбластейДанных.РезервноеКопированиеИспользуется(); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = ((РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы) - ИЛИ (РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса); + Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = ((РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы + И Не РежимРаботы.ЭтоВебКлиент) ИЛИ (РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса); ОбновитьНастройкиРезервногоКопирования(); Элементы.ГруппаВосстановлениеРезервнойКопии.Видимость = (РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы; Элементы.ГруппаВосстановлениеРезервнойКопииВМоделиСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы @@ -89,6 +88,11 @@ Элементы.ГруппаОбработкаГрупповоеИзменениеОбъектов.Видимость = РежимРаботы.ЭтоАдминистраторПрограммы; // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + Элементы.ГруппаДополнительныеОтчетыПоАдминистрированию.Видимость = НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; + Элементы.ГруппаДополнительныеОбработкиПоАдминистрированию.Видимость = НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; + // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + // Обновление состояния элементов УстановитьДоступность(); КонецПроцедуры @@ -115,21 +119,14 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // СтандартныеПодсистемы.БазоваяФункциональность &НаКлиенте Процедура УдалениеПомеченныхИспользованиеПриИзменении(Элемент) - Изменения = Новый Структура("Использование", УдалениеПомеченныхИспользование); - РегламентныеЗаданияСохранить(УдалениеПомеченныхИдентификатор, Изменения, "УдалениеПомеченныхИспользование"); - Если УдалениеПомеченныхИспользование Тогда - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("Идентификатор", УдалениеПомеченныхИдентификатор); - ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", "УдалениеПомеченныхРасписание"); - - РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); - КонецЕсли; + РегламентныеЗаданияИспользованиеПриИзменении("УдалениеПомеченных"); КонецПроцедуры // Конец СтандартныеПодсистемы.БазоваяФункциональность @@ -139,12 +136,12 @@ // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных Если РежимРаботы.МодельСервиса Тогда - ОткрытьФорму("ОбщаяФорма.СозданиеРезервнойКопии", , ЭтаФорма); + ОткрытьФорму("ОбщаяФорма.СозданиеРезервнойКопии", , ЭтотОбъект); Возврат; КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма", , ЭтаФорма); + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма", , ЭтотОбъект); КонецПроцедуры @@ -153,19 +150,19 @@ // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных Если РежимРаботы.МодельСервиса Тогда - ОткрытьФорму("Обработка.НастройкаРезервногоКопированияПриложения.Форма", , ЭтаФорма); + ОткрытьФорму("Обработка.НастройкаРезервногоКопированияПриложения.Форма", , ЭтотОбъект); Возврат; КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - ОткрытьФорму(РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования(),, ЭтаФорма); + ОткрытьФорму(РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования(),, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВосстановлениеИзРезервнойКопииНажатие(Элемент) - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.ВосстановлениеДанныхИзРезервнойКопии", , ЭтаФорма); + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.ВосстановлениеДанныхИзРезервнойКопии", , ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ @@ -184,29 +181,25 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // СтандартныеПодсистемы.БазоваяФункциональность &НаКлиенте Процедура УдалениеПомеченныхНастроитьРасписание(Команда) - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("Идентификатор", УдалениеПомеченныхИдентификатор); - ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", "УдалениеПомеченныхРасписание"); - - РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); + РегламентныеЗаданияГиперссылкаНажатие("УдалениеПомеченных"); КонецПроцедуры // Конец СтандартныеПодсистемы.БазоваяФункциональность -// СтандартныеПодсистемы.ВариантыОтчетов +// СтандартныеПодсистемы.БазоваяФункциональность &НаКлиенте -Процедура ОтчетыАдминистратора(Команда) - ФормаПараметры = Новый Структура; - ФормаПараметры.Вставить("ПутьКПодсистеме", "Администрирование"); - ФормаПараметры.Вставить("Заголовок", НСтр("ru = 'Отчеты администратора'")); - ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, ЭтотОбъект, "Администрирование"); +Процедура ПоискИУдалениеДублей(Команда) + + ОткрытьФорму("Обработка.ПоискИУдалениеДублей.Форма.ПоискДублей"); + КонецПроцедуры -// Конец СтандартныеПодсистемы.ВариантыОтчетов +// Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте @@ -265,7 +258,7 @@ &НаКлиенте Процедура ОбработкаУправлениеПолнотекстовымПоиском(Команда) - ОткрытьФорму("Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов", , ЭтаФорма); + ОткрытьФорму("Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов", , ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск @@ -287,8 +280,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -305,7 +299,7 @@ #КонецЕсли КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры @@ -321,6 +315,32 @@ КонецПроцедуры +&НаКлиенте +Процедура РегламентныеЗаданияИспользованиеПриИзменении(ПрефиксРеквизитов) + ИмяРеквизитаИспользование = ПрефиксРеквизитов + "Использование"; + Идентификатор = ЭтотОбъект[ПрефиксРеквизитов + "Идентификатор"]; + Если ЭтотОбъект[ИмяРеквизитаИспользование] Тогда + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Идентификатор", Идентификатор); + ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", ПрефиксРеквизитов + "Расписание"); + ПараметрыВыполнения.Вставить("ИмяРеквизитаИспользование", ИмяРеквизитаИспользование); + + РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); + Иначе + Изменения = Новый Структура("Использование", Ложь); + РегламентныеЗаданияСохранить(Идентификатор, Изменения, ИмяРеквизитаИспользование); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РегламентныеЗаданияГиперссылкаНажатие(ПрефиксРеквизитов) + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Идентификатор", ЭтотОбъект[ПрефиксРеквизитов + "Идентификатор"]); + ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", ПрефиксРеквизитов + "Расписание"); + + РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); +КонецПроцедуры + &НаКлиенте Процедура РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения) Обработчик = Новый ОписаниеОповещения("РегламентныеЗаданияПослеИзмененияРасписания", ЭтотОбъект, ПараметрыВыполнения); @@ -331,12 +351,19 @@ &НаКлиенте Процедура РегламентныеЗаданияПослеИзмененияРасписания(Расписание, ПараметрыВыполнения) Экспорт Если Расписание = Неопределено Тогда + Если ПараметрыВыполнения.Свойство("ИмяРеквизитаИспользование") Тогда + ЭтотОбъект[ПараметрыВыполнения.ИмяРеквизитаИспользование] = Ложь; + КонецЕсли; Возврат; КонецЕсли; ЭтотОбъект[ПараметрыВыполнения.ИмяРеквизитаРасписание] = Расписание; Изменения = Новый Структура("Расписание", Расписание); + Если ПараметрыВыполнения.Свойство("ИмяРеквизитаИспользование") Тогда + ЭтотОбъект[ПараметрыВыполнения.ИмяРеквизитаИспользование] = Истина; + Изменения.Вставить("Использование", Истина); + КонецЕсли; РегламентныеЗаданияСохранить(ПараметрыВыполнения.Идентификатор, Изменения, ПараметрыВыполнения.ИмяРеквизитаРасписание); КонецПроцедуры @@ -457,7 +484,6 @@ &НаСервере Процедура ОбновитьНастройкиОбновленияКонфигурации() - НастройкиОбновленияКонфигурации = ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(); ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений отключена.'"); @@ -483,3 +509,5 @@ Возврат РегламентныеЗадания.НайтиПредопределенное(МетаданныеПредопределенного); КонецЕсли; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/ConditionalAppearance.dcssca deleted file mode 100644 index 60b2f5f4f..000000000 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - СтатусИндекса - - - - - ИндексАктуален - Equal - false - - - - - Шрифт - - - - - diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form index 2b62e5e4d..97f54d5ab 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form @@ -16,12 +16,12 @@ true - НаборКонстант.ИспользоватьПолнотекстовыйПоиск + ИспользоватьПолнотекстовыйПоиск Right OnChange - Подключаемый_ПриИзмененииРеквизита + ИспользоватьПолнотекстовыйПоискПриИзменении ИспользоватьПолнотекстовыйПоискExtendedTooltip @@ -43,7 +43,9 @@ true Left true - + + true + ОбработкаАктивныеПользователи @@ -868,6 +870,9 @@ НаборКонстант.ИзвлекатьТекстыФайловНаСервере + + НаборКонстант.ИспользоватьПолнотекстовыйПоиск +
      true
      @@ -902,6 +907,26 @@ true + + ИспользоватьПолнотекстовыйПоиск + + <key>ru</key> + <value>Использовать полнотекстовый поиск</value> + + 5 + + Number + + 1 + + + + true + + + true + + ОбновитьИндекс diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 991060780..2b089dd2c 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 } -</style><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> +</style><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.16476"></meta></head><body> <p>Полнотекстовый поиск используется при поиске данных в программе по содержимому справочников, документов и других объектов программы. <br>Для начала работы с полнотекстовым поиском необходимо включить флажок <strong>Полнотекстовый поиск данных</strong>. <br>После этого появится возможность управлять индексом полнотекстового поиска, обновлять и очищать его. </p> <h3>Команды управления полнотекстовым поиском:</h3> <table border="0" cellspacing="4" cellpadding="0" width="90%"><tbody><tr valign="top"><td width="140"> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index 5a5c12a24..07f8afd5a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -1,11 +1,11 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -34,41 +34,28 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура Подключаемый_ПриИзмененииРеквизита(Элемент) - - Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); - - Если Результат.Свойство("НеУдалосьУстановитьРежимПолнотекстовогоПоиска") Тогда - // Отмена изменения константы. - НаборКонстант.ИспользоватьПолнотекстовыйПоиск = НЕ НаборКонстант.ИспользоватьПолнотекстовыйПоиск; - - // Выдача предупреждающего сообщения. - ТекстВопроса = НСтр("ru = 'Для изменения режима полнотекстового поиска требуется завершение сеансов всех пользователей, кроме текущего.'"); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Активные пользователи'")); - Кнопки.Добавить(КодВозвратаДиалога.Отмена); - - Обработчик = Новый ОписаниеОповещения("ПриИзмененииРеквизитаПослеОтветаНаВопрос", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, , КодВозвратаДиалога.ОК); - Возврат; +Процедура ИспользоватьПолнотекстовыйПоискПриИзменении(Элемент) + Если ИспользоватьПолнотекстовыйПоиск = 0 Тогда // Предыдущее значение - 2 (3й режим). + ИспользоватьПолнотекстовыйПоиск = 1; + //НаборКонстант.ИспользоватьПолнотекстовыйПоиск = Истина; + ИначеЕсли ИспользоватьПолнотекстовыйПоиск = 2 Тогда // Предыдущее значение - 1 (Истина). + ИспользоватьПолнотекстовыйПоиск = 0; + // НаборКонстант.ИспользоватьПолнотекстовыйПоиск = Ложь; + //ИначеЕсли ИспользоватьПолнотекстовыйПоиск = 1 Тогда // Предыдущее значение - 0 (Ложь); + // НаборКонстант.ИспользоватьПолнотекстовыйПоиск = Истина; КонецЕсли; - #Если НЕ ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - ОбновитьИнтерфейс = Истина; - #КонецЕсли - - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); - + Подключаемый_ПриИзмененииРеквизита(Элемент, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьИндекс(Команда) @@ -117,15 +104,66 @@ ОткрытьФорму(ИмяОткрываемойФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) + + Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + + Если Результат.Свойство("НеУдалосьУстановитьРежимПолнотекстовогоПоиска") Тогда + // Выдача предупреждающего сообщения. + ТекстВопроса = НСтр("ru = 'Для изменения режима полнотекстового поиска требуется завершение сеансов всех пользователей, кроме текущего.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("АктивныеПользователи", НСтр("ru = 'Активные пользователи'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Обработчик = Новый ОписаниеОповещения("ПриИзмененииРеквизитаПослеОтветаНаВопрос", ЭтотОбъект); + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, , "АктивныеПользователи"); + Возврат; + КонецЕсли; + + Если ОбновлятьИнтерфейс Тогда + #Если НЕ ВебКлиент Тогда + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); + ОбновитьИнтерфейс = Истина; + #КонецЕсли + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатусИндекса.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИндексАктуален"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики асинхронных диалогов &НаКлиенте Процедура ПриИзмененииРеквизитаПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ = КодВозвратаДиалога.ОК Тогда + Если Ответ = "АктивныеПользователи" Тогда ОткрытьФорму("Обработка.АктивныеПользователи.Форма"); КонецЕсли; КонецПроцедуры @@ -192,12 +230,12 @@ СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + УстановитьДоступность(РеквизитПутьКДанным); + Если Результат.Свойство("НеУдалосьУстановитьРежимПолнотекстовогоПоиска") Тогда Возврат Результат; КонецЕсли; - УстановитьДоступность(РеквизитПутьКДанным); - ОбновитьПовторноИспользуемыеЗначения(); Возврат Результат; @@ -209,25 +247,11 @@ &НаСервере Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) - // Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному). Если РеквизитПутьКДанным = "" Тогда Возврат; КонецЕсли; - Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПолнотекстовыйПоиск" Тогда - Попытка - Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск Тогда - ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить); - Иначе - ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить); - КонецЕсли; - Исключение - Результат.Вставить("НеУдалосьУстановитьРежимПолнотекстовогоПоиска", Истина); - Возврат; - КонецПопытки; - КонецЕсли; - // Определение имени константы. КонстантаИмя = ""; Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда @@ -239,6 +263,19 @@ Если РеквизитПутьКДанным = "ИзвлекатьТекстыФайловНаСервере" Тогда КонстантаИмя = "ИзвлекатьТекстыФайловНаСервере"; НаборКонстант.ИзвлекатьТекстыФайловНаСервере = ИзвлекатьТекстыФайловНаСервере; + ИначеЕсли РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда + Попытка + Если ИспользоватьПолнотекстовыйПоиск Тогда + ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить); + Иначе + ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить); + КонецЕсли; + Исключение + Результат.Вставить("НеУдалосьУстановитьРежимПолнотекстовогоПоиска", Истина); + Возврат; + КонецПопытки; + КонстантаИмя = "ИспользоватьПолнотекстовыйПоиск"; + НаборКонстант.ИспользоватьПолнотекстовыйПоиск = ИспользоватьПолнотекстовыйПоиск; КонецЕсли; КонецЕсли; @@ -262,29 +299,24 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") - Если РеквизитПутьКДанным = "" Тогда + Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда - НаборКонстант.ИспользоватьПолнотекстовыйПоиск = (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); + Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск <> ПолнотекстовыйПоискСервер.ОперацииРазрешены() Тогда + ИспользоватьПолнотекстовыйПоиск = 2; + Иначе + ИспользоватьПолнотекстовыйПоиск = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; + КонецЕсли; + Элементы.ГруппаУправлениеПолнотекстовымПоиском.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); КонецЕсли; - Если РеквизитПутьКДанным = "ИзвлекатьТекстыФайловНаСервере" ИЛИ РеквизитПутьКДанным = "" Тогда + Если РеквизитПутьКДанным = "" + Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" + Или РеквизитПутьКДанным = "Команда.ОбновитьИндекс" + Или РеквизитПутьКДанным = "Команда.ОчиститьИндекс" Тогда - Элементы.ГруппаРедактироватьРегламентноеЗадание.Доступность = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; - Элементы.ГруппаЗапуститьИзвлечениеТекстов.Доступность = НЕ НаборКонстант.ИзвлекатьТекстыФайловНаСервере; - - КонецЕсли; - - Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПолнотекстовыйПоиск" ИЛИ РеквизитПутьКДанным = "" Тогда - - Элементы.ГруппаУправлениеПолнотекстовымПоиском.Доступность = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Доступность = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; - - КонецЕсли; - - Если РеквизитПутьКДанным = "Команда.ОбновитьИндекс" ИЛИ РеквизитПутьКДанным = "Команда.ОчиститьИндекс" ИЛИ РеквизитПутьКДанным = "" Тогда - - Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск Тогда + Если ИспользоватьПолнотекстовыйПоиск = 1 Тогда ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); ФлагДоступность = НЕ ИндексАктуален; @@ -304,4 +336,13 @@ КонецЕсли; + Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИзвлекатьТекстыФайловНаСервере" Тогда + + Элементы.ГруппаРедактироватьРегламентноеЗадание.Доступность = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + Элементы.ГруппаЗапуститьИзвлечениеТекстов.Доступность = НЕ НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + + КонецЕсли; + КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index 97e53475f..5657c8926 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.16470"></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.16476"></meta></head><body> <p>В разделе "Настройка и администрирование" предусмотрены средства, при помощи которых можно изменять параметры работы, проводить регламентные операции и контролировать состояние программы.</p> <p>При необходимости, часто используемые настройки можно вынести в командный интерфейс раздела "Настройка и администрирование" в настройках панели навигации или панели действий, в зависимости от типа настройки.</p> <p>См. также: </p> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl index 1a6d0d4c0..b11f150c2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий базовой функциональности @@ -33,7 +32,7 @@ // Процедура ПриОпределенииРазделовСВариантамиОтчетов(Разделы) Экспорт - Разделы.Добавить(Метаданные.Подсистемы.Администрирование); + Разделы.Добавить(Метаданные.Подсистемы.Администрирование, НСтр("ru = 'Отчеты администратора'")); КонецПроцедуры @@ -57,5 +56,6 @@ КонецПроцедуры -#КонецЕсли +#КонецОбласти +#КонецЕсли diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Commands/НастройкиСинхронизацииДанных/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Commands/НастройкиСинхронизацииДанных/CommandModule.bsl index 30195df95..4633f47a1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Commands/НастройкиСинхронизацииДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Commands/НастройкиСинхронизацииДанных/CommandModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -24,3 +24,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html index 72de32b62..e0576cfcc 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 } -</style><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> +</style><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.16476"></meta></head><body> <p>В данной панели осуществляется настройка синхронизации данных с моими приложениями.</p> <table><tbody><tr><td width="25%"> <li><a href="CommonForm.ОбменыДанными/Help">Синхронизация данных</a></li></td> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl index fe3b88396..ddbc0f256 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +19,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СинхронизацияДанных(Команда) @@ -38,8 +38,9 @@ ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -127,3 +128,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form index f8c77155c..2f4688d13 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form @@ -531,184 +531,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаВременныеКаталогиКластераСерверов</name> - <id>2094</id> - <items xsi:type="form:FormField"> - <name>КаталогСообщенийОбменаДаннымиДляWindows</name> - <id>2096</id> - <title> - <key>ru</key> - <value>Под управлением ОС Windows</value> - - true - true - - true - - - НаборКонстант.КаталогСообщенийОбменаДаннымиДляWindows - - - OnChange - КаталогСообщенийОбменаДаннымиДляWindowsПриИзменении - - - КаталогСообщенийОбменаДаннымиДляWindowsРасширеннаяПодсказка - 2098 - Label - true - true - - Left - - - - КаталогСообщенийОбменаДаннымиДляWindowsКонтекстноеМеню - 2097 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - -
      - - КаталогСообщенийОбменаДаннымиДляLinux - 2099 - - <key>ru</key> - <value>Под управлением ОС Linux</value> - - true - true - - true - - - НаборКонстант.КаталогСообщенийОбменаДаннымиДляLinux - - - OnChange - КаталогСообщенийОбменаДаннымиДляLinuxПриИзменении - - - КаталогСообщенийОбменаДаннымиДляLinuxРасширеннаяПодсказка - 2101 - Label - true - true - - Left - - - - КаталогСообщенийОбменаДаннымиДляLinuxКонтекстноеМеню - 2100 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - true - - - - - ПояснениеВременныеКаталоги - 2102 - - <key>ru</key> - <value>Укажите путь к единому сетевому каталогу для общих временных файлов серверов 1С:Предприятие, работающих в одном кластере.</value> - - true - true - - true - - - ПояснениеВременныеКаталогиExtendedTooltip - 2104 - Label - true - true - - Left - - - - ПояснениеВременныеКаталогиКонтекстноеМеню - 2103 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Каталог временных файлов кластера серверов 1С:Предприятие:</value> - - - ru - Группа временные каталоги кластера серверов - - 86 - false - - ГруппаВременныеКаталогиКластераСерверовExtendedTooltip - 2095 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - auto - Auto - Auto - - true true @@ -779,6 +601,7 @@ false false + 43 ОбщиеПараметрыДляВсехОбластейДанныхExtendedTooltip 2053 @@ -1096,6 +919,7 @@ ru Группа синхронизация данных монитор синхронизации данных + 43 ГруппаСинхронизацияДанныхМониторСинхронизацииДанныхExtendedTooltip 2070 @@ -1145,6 +969,180 @@ Auto
      + + ГруппаВременныеКаталогиКластераСерверов + 2094 + + КаталогСообщенийОбменаДаннымиДляWindows + 2096 + + <key>ru</key> + <value>Под управлением ОС Windows</value> + + true + true + + true + + + НаборКонстант.КаталогСообщенийОбменаДаннымиДляWindows + + + OnChange + КаталогСообщенийОбменаДаннымиДляWindowsПриИзменении + + + КаталогСообщенийОбменаДаннымиДляWindowsРасширеннаяПодсказка + 2098 + Label + true + true + + Left + + + + КаталогСообщенийОбменаДаннымиДляWindowsКонтекстноеМеню + 2097 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КаталогСообщенийОбменаДаннымиДляLinux + 2099 + + <key>ru</key> + <value>Под управлением ОС Linux</value> + + true + true + + true + + + НаборКонстант.КаталогСообщенийОбменаДаннымиДляLinux + + + OnChange + КаталогСообщенийОбменаДаннымиДляLinuxПриИзменении + + + КаталогСообщенийОбменаДаннымиДляLinuxРасширеннаяПодсказка + 2101 + Label + true + true + + Left + + + + КаталогСообщенийОбменаДаннымиДляLinuxКонтекстноеМеню + 2100 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true + + + + + ПояснениеВременныеКаталоги + 2102 + + <key>ru</key> + <value>Путь к единому сетевому каталогу для общих временных файлов серверов 1С:Предприятие, работающих в одном кластере.</value> + + true + true + + true + + + ПояснениеВременныеКаталогиExtendedTooltip + 2104 + Label + true + true + + Left + + + + ПояснениеВременныеКаталогиКонтекстноеМеню + 2103 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Каталог временных файлов кластера серверов 1С:Предприятие:</value> + + 86 + false + + ГруппаВременныеКаталогиКластераСерверовExtendedTooltip + 2095 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + None false diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html index 01c9b2377..a5a55add3 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 7c43215db..855acbdba 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте Перем ОбновитьИнтерфейс; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -33,8 +32,9 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КаталогСообщенийОбменаДаннымиДляWindowsПриИзменении(Элемент) @@ -46,8 +46,9 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура МониторСинхронизацииДанных(Команда) @@ -111,8 +112,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -213,3 +215,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl index 3815d90d8..1aba8ea38 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ПереносФайловВТома.Форма", Новый Структура, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index db979e684..42fc5c36b 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,7 +14,6 @@ РазмерВерсийВБазеВБайтах = ПолучитьРазмерВерсийВБазе(); РазмерВерсийВБазе = РазмерВерсийВБазеВБайтах / 1048576; - ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить( @@ -44,8 +43,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьПереносФайловВТома(Команда) @@ -74,8 +74,9 @@ ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыполнитьПереносФайловВТомаЗавершение(Ответ, ПараметрыВыполнения) Экспорт @@ -438,3 +439,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl index eadf5900f..ed58aca46 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,7 +14,7 @@ ТабМакет = Обработки.ПереносФайловВТома.ПолучитьМакет("МакетОтчета"); ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); - ОбластьЗаголовок.Параметры.Описание = "Файлы с ошибками:"; + ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Файлы с ошибками:'"); ТабДок.Вывести(ОбластьЗаголовок); ОбластьСтрока = ТабМакет.ПолучитьОбласть("Строка"); @@ -24,8 +24,10 @@ ОбластьСтрока.Параметры.Версия = Выборка.Версия; ОбластьСтрока.Параметры.Ошибка = Выборка.Ошибка; ТабДок.Вывести(ОбластьСтрока); - КонецЦикла; + КонецЦикла; Отчет.Вывести(ТабДок); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html index 20b0433ef..9818c4100 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/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form similarity index 51% rename from SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Form.form rename to SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form index 97247cb2d..f190d20f7 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form @@ -1,7 +1,11 @@ - + + + <key>ru</key> + <value>Область поиска дублей</value> + - Список + ОбластиПоискаДублей 1 true true @@ -9,25 +13,23 @@ true - Список + ОбластиПоискаДублей - true - false None - Физлицо - 4 + ОбластиПоискаДублейПредставление + 16 true true true - Список.Физлицо + ОбластиПоискаДублей.Presentation - ФизлицоExtendedTooltip - 11 + ОбластиПоискаДублейПредставлениеРасширеннаяПодсказка + 18 Label true true @@ -36,105 +38,43 @@ - ФизлицоКонтекстноеМеню - 5 + ОбластиПоискаДублейПредставлениеКонтекстноеМеню + 17 true - LabelField - Enter + InputField + true + Auto true Left true - - true - true - - - - Представление - 6 - true - true - - true - - - Список.Представление - - - ПредставлениеExtendedTooltip - 12 - Label - true - true - - Left - - - - ПредставлениеКонтекстноеМеню - 7 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Период - 8 - true - true - - true - - - Список.Period - - - ПериодExtendedTooltip - 13 - Label - true - true - - Left - - - - ПериодКонтекстноеМеню - 9 - true - - LabelField - Enter - true - Left - true - + true true + true + true + true + true + Normal None - СписокКоманднаяПанель + ОбластиПоискаДублейКоманднаяПанель 3 Left true + + Selection + ОбластиПоискаДублейВыбор + - СписокСтрокаПоиска - 14 + ОбластиПоискаДублейСтрокаПоиска + 19 - СписокСтрокаПоискаРасширеннаяПодсказка - 16 + ОбластиПоискаДублейСтрокаПоискаРасширеннаяПодсказка + 21 Label true true @@ -143,21 +83,21 @@ - СписокСтрокаПоискаКонтекстноеМеню - 15 + ОбластиПоискаДублейСтрокаПоискаКонтекстноеМеню + 20 true - Список + ОбластиПоискаДублей true - СписокСостояниеПросмотра - 17 + ОбластиПоискаДублейСостояниеПросмотра + 22 - СписокСостояниеПросмотраРасширеннаяПодсказка - 19 + ОбластиПоискаДублейСостояниеПросмотраРасширеннаяПодсказка + 24 Label true true @@ -166,22 +106,22 @@ - СписокСостояниеПросмотраКонтекстноеМеню - 18 + ОбластиПоискаДублейСостояниеПросмотраКонтекстноеМеню + 23 true ViewStatusAddition - Список + ОбластиПоискаДублей true - СписокУправлениеПоиском - 20 + ОбластиПоискаДублейУправлениеПоиском + 25 - СписокУправлениеПоискомРасширеннаяПодсказка - 22 + ОбластиПоискаДублейУправлениеПоискомРасширеннаяПодсказка + 27 Label true true @@ -190,19 +130,19 @@ - СписокУправлениеПоискомКонтекстноеМеню - 21 + ОбластиПоискаДублейУправлениеПоискомКонтекстноеМеню + 26 true SearchControlAddition - Список + ОбластиПоискаДублей true - СписокExtendedTooltip - 10 + ОбластиПоискаДублейРасширеннаяПодсказка + 4 Label true true @@ -211,67 +151,84 @@ - СписокКонтекстноеМеню + ОбластиПоискаДублейКонтекстноеМеню 2 true - true - true true true true MultiRow -
      true
      1 1 AutoUse AutoUse true true + false + false + false + true Auto Auto true true - - Список.DefaultPicture - None None None true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true -
      ФормаКоманднаяПанель -1 + + ФормаВыбрать + 11 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + Left - true - DontBlock + + OnCreateAtServer + ПриСозданииНаСервере + + 40 + 12 + LockOwner true - true true Vertical true true true - UseIfNecessary auto true - Список + Объект 1 - DynamicList + DataProcessorObject.ПоискИУдалениеДублей true @@ -280,17 +237,70 @@ true
      true
      - - InformationRegister.ДокументыФизическихЛиц - true - true - true - true +
      + + ОбластиПоискаДублей + + <key>ru</key> + <value>Области поиска дублей</value> + + 2 + + ValueList + + + 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/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl new file mode 100644 index 000000000..19bba2c6b --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl @@ -0,0 +1,83 @@ +// Ожидаются параметры: +// +// ОбластьПоискаДублей - Строка - Полное имя метаданных таблицы ранее выбранной области поиска +// +// Возвращается результатом выбора: +// +// Неопределено - Отказ от редактирования +// Строка - Адрес временного хранилища новых настроек компоновщика +// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("ОбластьПоискаДублей", ОбластьПоУмолчанию); + + ИнициализироватьСписокОбластейПоискаДублей(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОбластиПоискаДублейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ПроизвестиВыбор(ВыбраннаяСтрока); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + + ПроизвестиВыбор(Элементы.ОбластиПоискаДублей.ТекущаяСтрока); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПроизвестиВыбор(Знач ИдентификаторСтроки) + + Элемент = ОбластиПоискаДублей.НайтиПоИдентификатору(ИдентификаторСтроки); + Если Элемент = Неопределено Тогда + Возврат; + + ИначеЕсли Элемент.Значение = ОбластьПоУмолчанию Тогда + // Не было изменений + Закрыть(); + Возврат; + + КонецЕсли; + + ОповеститьОВыборе(Элемент.Значение); +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьСписокОбластейПоискаДублей() + + ОбъектОбработки = РеквизитФормыВЗначение("Объект"); + ОбъектОбработки.ОбластиПоискаДублей(ОбластиПоискаДублей); + + ОбластиПоискаДублей.СортироватьПоПредставлению(); + Элемент = ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоУмолчанию); + Если Элемент<>Неопределено Тогда + Элементы.ОбластиПоискаДублей.ТекущаяСтрока = Элемент.ПолучитьИдентификатор(); + КонецЕсли; + +КонецПроцедуры + + +#КонецОбласти \ 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..868e2605e --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -0,0 +1,4726 @@ + + + + <key>ru</key> + <value>Поиск и удаление дублей</value> + + + Заголовок + 12 + + ЗаголовокЗаголовки + 14 + + НадписьИскать + 18 + + <key>ru</key> + <value>Искать в:</value> + + true + true + + true + + + НадписьИскатьРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + НадписьИскатьКонтекстноеМеню + 19 + true + + Label + true + true + + Left + + + + НадписьПравилаОтбора + 21 + + <key>ru</key> + <value>Отбирать:</value> + + true + true + + true + + + НадписьПравилаОтбораРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + НадписьПравилаОтбораКонтекстноеМеню + 22 + true + + Label + true + true + + Left + + + + НадписьПравилаПоиска + 24 + + <key>ru</key> + <value>Сравнивать:</value> + + true + true + + true + + + НадписьПравилаПоискаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + НадписьПравилаПоискаКонтекстноеМеню + 25 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Заголовок заголовки</value> + + + ru + Заголовок заголовки + + + ЗаголовокЗаголовкиРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ЗаголовокПоляВыбора + 16 + + ПредставлениеОбластиПоискаДублей + 9 + true + true + + true + + + ПредставлениеОбластиПоискаДублей + + None + + ПредставлениеОбластиПоискаДублейРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПредставлениеОбластиПоискаДублейКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПредставлениеОбластиПоискаНачалоВыбора + + + Clearing + ПредставлениеОбластиПоискаДублейОчистка + + 45 + true + true + false + true + false + true + ShowInInputField + false + false + false + false + true + true + Normal + + + + ГруппаПравилаОтбора + 27 + + ПравилаОтбора + 358 + + <key>ru</key> + <value>Правила отбора</value> + + true + true + + true + + + ПравилаОтбораРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + + ПравилаОтбораКонтекстноеМеню + 359 + true + + Label + true + true + + + Click + ПравилаОтбораНажатие + + true + Left + + + + ОчиститьПравилаОтбора + 29 + true + true + + true + + + ОчиститьПравилаОтбораРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОчиститьПравилаОтбора + Normal + Picture + 2 + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа правила отбора</value> + + + ru + Группа правила отбора + + + ГруппаПравилаОтбораРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПравилаПоиска + 337 + + ПравилаПоиска + 361 + + <key>ru</key> + <value>Правила поиска</value> + + true + true + + true + + + ПравилаПоискаРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + + ПравилаПоискаКонтекстноеМеню + 362 + true + + Label + true + true + true + + + Click + ПравилаПоискаНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа правила поиска</value> + + + ru + Группа правила поиска + + + ГруппаПравилаПоискаРасширеннаяПодсказка + 338 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Заголовок поля выбора</value> + + + ru + Заголовок поля выбора + + + ЗаголовокПоляВыбораРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Заголовок</value> + + + ru + Заголовок + + + ЗаголовокРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ШагиМастера + 58 + + ШагПоискНеВыполнялся + 62 + + ПоискНеВыполнялся + 64 + true + true + + true + + + ПоискНеВыполнялся + + None + + ПоискНеВыполнялсяРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ПоискНеВыполнялсяКонтекстноеМеню + 65 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 1 + true + 1 + true + true + true + Special + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Шаг поиск не выполнялся</value> + + + ru + Шаг поиск не выполнялся + + true + + ШагПоискНеВыполнялсяРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ШагВыполнениеПоиска + 186 + + ВыполнениеПоиска + 188 + true + true + + true + + + ПоискНеВыполнялся + + None + + ВыполнениеПоискаРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + ВыполнениеПоискаКонтекстноеМеню + 189 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 1 + true + 1 + true + true + true + Special + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Шаг поиск не выполнялся</value> + + + ru + Шаг поиск не выполнялся + + + ШагВыполнениеПоискаРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ШагВыборОсновногоЭлемента + 98 + + КомандыРаботыСОсновнымЭлементов + 96 + + ВыбратьОсновнойЭлемент + 88 + true + true + + true + + + ВыбратьОсновнойЭлементРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Form.Command.ВыбратьОсновнойЭлемент + Normal + Auto + true + true + UserCmds + Auto + + + ОткрытьКандидатаВДубли + 90 + true + true + + true + + + ОткрытьКандидатаВДублиРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Form.Command.ОткрытьКандидатаВДубли + Normal + Auto + true + true + UserCmds + Auto + + + РазвернутьГруппуДублей + 92 + true + true + + true + + + РазвернутьГруппуДублейРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Form.Command.РазвернутьГруппыДублей + Normal + Auto + true + true + UserCmds + Auto + + + СвернутьГруппуДублей + 94 + true + true + + true + + + СвернутьГруппуДублейРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Form.Command.СвернутьГруппыДублей + Normal + Auto + true + true + UserCmds + Auto + + + ПовторитьПоиск + 326 + true + true + + true + + + ПовторитьПоискРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.ПовторитьПоиск + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды работы с основным элементов</value> + + + ru + Команды работы с основным элементов + + + КомандыРаботыСОсновнымЭлементовРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаВертикальнаяОсновногоЭлемента + 153 + + ГруппаГоризонтальнаяНайденныеДубли + 155 + + НайденныеДубли + 67 + true + true + + true + + + НайденныеДубли + + None + + ИспользоватьНаименование + 109 + + НайденныеДублиОсновной + 114 + true + true + + true + + + НайденныеДубли.Основной + + None + + НайденныеДублиОсновнойРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + НайденныеДублиОсновнойКонтекстноеМеню + 115 + true + + PictureField + true + Auto + true + Left + true + + true + true + true + true + + StdPicture.MoveRight + + + + 1 + + + + + НайденныеДублиПометка + 103 + true + true + + true + + + НайденныеДубли.Пометка + + None + + OnChange + НайденныеДублиПометкаПриИзменении + + + НайденныеДублиПометкаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + НайденныеДублиПометкаКонтекстноеМеню + 104 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + НайденныеДублиНаименование + 100 + true + true + + true + + + НайденныеДубли.Наименование + + + НайденныеДублиНаименованиеРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + НайденныеДублиНаименованиеКонтекстноеМеню + 101 + true + + InputField + true + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Использовать наименование</value> + + + ru + Использовать наименование + + + ИспользоватьНаименованиеРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НайденныеДублиКод + 111 + true + true + + true + + + НайденныеДубли.Код + + + НайденныеДублиКодРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + НайденныеДублиКодКонтекстноеМеню + 112 + true + + InputField + true + Auto + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + НайденныеДублиКоличество + 119 + true + true + + true + + + НайденныеДубли.Количество + + + НайденныеДублиКоличествоРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + НайденныеДублиКоличествоКонтекстноеМеню + 120 + true + + InputField + true + Left + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + + НайденныеДублиКоманднаяПанель + 69 + Left + + + Selection + НайденныеДублиВыбор + + + OnActivateRow + НайденныеДублиПриАктивизацииСтроки + + + НайденныеДублиСтрокаПоиска + 367 + + НайденныеДублиСтрокаПоискаРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + + НайденныеДублиСтрокаПоискаКонтекстноеМеню + 368 + true + + НайденныеДубли + + true + + + + НайденныеДублиСостояниеПросмотра + 370 + + НайденныеДублиСостояниеПросмотраРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + + НайденныеДублиСостояниеПросмотраКонтекстноеМеню + 371 + true + + ViewStatusAddition + НайденныеДубли + + true + + + + НайденныеДублиУправлениеПоиском + 373 + + НайденныеДублиУправлениеПоискомРасширеннаяПодсказка + 375 + Label + true + true + + Left + + + + НайденныеДублиУправлениеПоискомКонтекстноеМеню + 374 + true + + SearchControlAddition + НайденныеДубли + + true + + + + НайденныеДублиРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + НайденныеДублиКонтекстноеМеню + 68 + + НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлемент + 117 + true + true + + true + + + НайденныеДублиКонтекстноеМенюВыбратьОсновнойЭлементРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.Command.ВыбратьОсновнойЭлемент + Normal + Auto + true + true + UserCmds + Auto + + + Tree + 45 + true + 5 + true + true + Row +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true +
      + + СтраницыМестаИспользования + 147 + + МестаИспользования + 149 + + МестаИспользованияКандидата + 137 + true + true + + true + + + МестаИспользованияКандидата + + Top + + МестаИспользованияКандидатаПредставлениеДанных + 144 + true + true + + true + + + МестаИспользованияКандидата.ПредставлениеДанных + + + МестаИспользованияКандидатаПредставлениеДанныхРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + МестаИспользованияКандидатаПредставлениеДанныхКонтекстноеМеню + 145 + true + + InputField + true + Auto + true + true + Left + true + + true + true + true + true + true + true + true + Normal + + + None + + МестаИспользованияКандидатаКоманднаяПанель + 139 + Left + true + + + Selection + МестаИспользованияКандидатаВыбор + + + МестаИспользованияКандидатаСтрокаПоиска + 389 + + МестаИспользованияКандидатаСтрокаПоискаРасширеннаяПодсказка + 391 + Label + true + true + + Left + + + + МестаИспользованияКандидатаСтрокаПоискаКонтекстноеМеню + 390 + true + + МестаИспользованияКандидата + + true + + + + МестаИспользованияКандидатаСостояниеПросмотра + 392 + + МестаИспользованияКандидатаСостояниеПросмотраРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + + МестаИспользованияКандидатаСостояниеПросмотраКонтекстноеМеню + 393 + true + + ViewStatusAddition + МестаИспользованияКандидата + + true + + + + МестаИспользованияКандидатаУправлениеПоиском + 395 + + МестаИспользованияКандидатаУправлениеПоискомРасширеннаяПодсказка + 397 + Label + true + true + + Left + + + + МестаИспользованияКандидатаУправлениеПоискомКонтекстноеМеню + 396 + true + + SearchControlAddition + МестаИспользованияКандидата + + true + + + + МестаИспользованияКандидатаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + МестаИспользованияКандидатаКонтекстноеМеню + 138 + true + + true + true + true + 1 + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + None + None + None + true + + + + ВсеМестаИспользования + 328 + + <key>ru</key> + <value>Все места использования</value> + + true + true + + true + + + ВсеМестаИспользованияРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + + ВсеМестаИспользованияКонтекстноеМеню + 329 + true + + Label + true + true + true + + + Click + ВсеМестаИспользованияНажатие + + true + Right + + + true + true + + true + + + <key>ru</key> + <value>Места использования</value> + + + ru + Места использования + + + МестаИспользованияРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОписаниеГруппы + 151 + + Группа1 + 222 + + ОписаниеТекущейГруппыДублей + 134 + + <key>ru</key> + <value>Описание текущей группы дублей</value> + + true + true + + true + + + ОписаниеТекущейГруппыДублейРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + ОписаниеТекущейГруппыДублейКонтекстноеМеню + 135 + true + + Label + true + true + true + true + + Left + Top + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 223 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Описание группы</value> + + + ru + Описание группы + + + ОписаниеГруппыРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы места использования</value> + + + ru + Страницы места использования + + + СтраницыМестаИспользованияРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа горизонтальная найденные дубли</value> + + + ru + Группа горизонтальная найденные дубли + + 24 + + ГруппаГоризонтальнаяНайденныеДублиРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
      + + ГруппаГоризонтальнаяСостояниеНайденного + 157 + + ОписаниеСостоянияНайденныхДублей + 202 + true + true + + true + + + ОписаниеСостоянияНайденныхДублей + + None + + ОписаниеСостоянияНайденныхДублейРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + ОписаниеСостоянияНайденныхДублейКонтекстноеМеню + 203 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Группа горизонтальная состояние найденного</value> + + + ru + Группа горизонтальная состояние найденного + + 2 + false + + ГруппаГоризонтальнаяСостояниеНайденногоРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа вертикальная основного элемента</value> + + + ru + Группа вертикальная основного элемента + + true + + ГруппаВертикальнаяОсновногоЭлементаРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
      + true + true + + true + + + <key>ru</key> + <value>Шаг выбор основного элемента</value> + + + ru + Шаг выбор основного элемента + + + ШагВыборОсновногоЭлементаРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Page + + Vertical + auto + +
      + + ШагВыполнениеУдаления + 205 + + ВыполнениеУдаления + 207 + true + true + + true + + + ПоискНеВыполнялся + + None + + ВыполнениеУдаленияРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + ВыполнениеУдаленияКонтекстноеМеню + 208 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 1 + true + 1 + true + true + true + Special + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Шаг выполнение удаления</value> + + + ru + Шаг выполнение удаления + + + ШагВыполнениеУдаленияРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ШагУспешноеУдаление + 212 + + Декорация4 + 355 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 357 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 356 + true + + Label + true + 1 + true + + Left + + + + Группа3 + 350 + + Декорация5 + 352 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 354 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 353 + true + + 5 + true + 1 + true + + + CommonPicture.Успешно32 + + + + + ОписаниеСостоянияНайденныхДублей1 + 344 + true + true + + true + + + ОписаниеСостоянияНайденныхДублей + + None + + ОписаниеСостоянияНайденныхДублей1РасширеннаяПодсказка + 346 + Label + true + true + + Left + + + + ОписаниеСостоянияНайденныхДублей1КонтекстноеМеню + 345 + true + + LabelField + Left + Top + Enter + true + Left + true + + true + true + true + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 351 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Шаг успешное удаление</value> + + + ru + Шаг успешное удаление + + + ШагУспешноеУдалениеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ШагНеудачныеЗамены + 210 + + ГруппаВертикальнаяНеобработанныеДубли + 238 + + ГруппаНадписьОшибки + 339 + + Декорация1 + 341 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 343 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 342 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + Декорация2 + 331 + + <key>ru</key> + <value>При обработке некоторых элементов возникли ошибки замены в местах использования:</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 333 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 332 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа надпись ошибки</value> + + + ru + Группа надпись ошибки + + + ГруппаНадписьОшибкиРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаГоризонтальнаяНеобработанныеДубли + 240 + + НеобработанныеДубли + 242 + true + true + + true + + + НеобработанныеДубли + + None + + ОсновнойНаименование + 246 + + НеобработанныеДублиОсновной + 305 + true + true + + true + + + НеобработанныеДубли.Основной + + None + + НеобработанныеДублиОсновнойРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + НеобработанныеДублиОсновнойКонтекстноеМеню + 306 + true + + PictureField + true + Auto + true + Left + true + + true + true + true + true + + StdPicture.MoveRight + + + + 1 + + + + + НеобработанныеДублиНаименование + 296 + true + true + + true + + + НеобработанныеДубли.Наименование + + + НеобработанныеДублиНаименованиеРасширеннаяПодсказка + 298 + Label + true + true + + Left + + + + НеобработанныеДублиНаименованиеКонтекстноеМеню + 297 + true + + InputField + true + Auto + true + Left + true + + 17 + true + true + true + true + true + true + Normal + + + true + true + + true + + + ru + Использовать наименование + + + ОсновнойНаименованиеРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НеобработанныеДублиКод + 293 + true + true + + true + + + НеобработанныеДубли.Код + + + НеобработанныеДублиКодРасширеннаяПодсказка + 295 + Label + true + true + + Left + + + + НеобработанныеДублиКодКонтекстноеМеню + 294 + true + + InputField + true + Auto + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + НеобработанныеДублиКоличество + 299 + + <key>ru</key> + <value>Неудачных замен</value> + + true + true + + true + + + НеобработанныеДубли.Количество + + + НеобработанныеДублиКоличествоРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + + НеобработанныеДублиКоличествоКонтекстноеМеню + 300 + true + + InputField + true + Auto + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + НеобработанныеДублиКоманднаяПанель + 244 + Left + + + Selection + НеобработанныеДублиВыбор + + + OnActivateRow + НеобработанныеДублиПриАктивизацииСтроки + + + НеобработанныеДублиСтрокаПоиска + 410 + + НеобработанныеДублиСтрокаПоискаРасширеннаяПодсказка + 412 + Label + true + true + + Left + + + + НеобработанныеДублиСтрокаПоискаКонтекстноеМеню + 411 + true + + НеобработанныеДубли + + true + + + + НеобработанныеДублиСостояниеПросмотра + 413 + + НеобработанныеДублиСостояниеПросмотраРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + + НеобработанныеДублиСостояниеПросмотраКонтекстноеМеню + 414 + true + + ViewStatusAddition + НеобработанныеДубли + + true + + + + НеобработанныеДублиУправлениеПоиском + 416 + + НеобработанныеДублиУправлениеПоискомРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + + НеобработанныеДублиУправлениеПоискомКонтекстноеМеню + 417 + true + + SearchControlAddition + НеобработанныеДубли + + true + + + + НеобработанныеДублиРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + + НеобработанныеДублиКонтекстноеМеню + 243 + + Tree + true + 7 + true + true + Row +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true +
      + + СтраницыМестаИспользованияНеобработанных + 265 + + ОписаниеМестИспользованияНеобработанных + 267 + + МестаИспользованияНеобработанных + 269 + true + true + + true + + + МестаИспользованияНеобработанных + + Top + + МестаИспользованияНеобработанныхПиктограмма + 320 + true + true + + true + + + МестаИспользованияНеобработанных.Пиктограмма + + + МестаИспользованияНеобработанныхПиктограммаРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхПиктограммаКонтекстноеМеню + 321 + true + + PictureField + Auto + true + Left + true + + 1 + true + true + true + + + + 1 + + + + + МестаИспользованияНеобработанныхПредставлениеДанных + 311 + true + true + + true + + + МестаИспользованияНеобработанных.ПредставлениеОбъектаОшибки + + + МестаИспользованияНеобработанныхПредставлениеДанныхРасширеннаяПодсказка + 313 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхПредставлениеДанныхКонтекстноеМеню + 312 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + МестаИспользованияНеобработанныхКоманднаяПанель + 271 + Left + true + + + Selection + МестаИспользованияНеобработанныхВыбор + + + OnActivateRow + МестаИспользованияНеобработанныхПриАктивизацииСтроки + + + МестаИспользованияНеобработанныхСтрокаПоиска + 431 + + МестаИспользованияНеобработанныхСтрокаПоискаРасширеннаяПодсказка + 433 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхСтрокаПоискаКонтекстноеМеню + 432 + true + + МестаИспользованияНеобработанных + + true + + + + МестаИспользованияНеобработанныхСостояниеПросмотра + 434 + + МестаИспользованияНеобработанныхСостояниеПросмотраРасширеннаяПодсказка + 436 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхСостояниеПросмотраКонтекстноеМеню + 435 + true + + ViewStatusAddition + МестаИспользованияНеобработанных + + true + + + + МестаИспользованияНеобработанныхУправлениеПоиском + 437 + + МестаИспользованияНеобработанныхУправлениеПоискомРасширеннаяПодсказка + 439 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхУправлениеПоискомКонтекстноеМеню + 438 + true + + SearchControlAddition + МестаИспользованияНеобработанных + + true + + + + МестаИспользованияНеобработанныхРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + + МестаИспользованияНеобработанныхКонтекстноеМеню + 270 + true + + true + true + 2 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + None + None + None + true + + + + ОписаниеОшибкиНеобработанных + 285 + true + true + + true + + + ОписаниеОшибкиНеобработанных + + None + + ОписаниеОшибкиНеобработанныхРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + ОписаниеОшибкиНеобработанныхКонтекстноеМеню + 286 + true + + InputField + true + Enter + true + Left + true + + true + 3 + true + false + true + true + true + true + true + Normal + + + + ГруппаГоризонтальнаяСостояниеНеобработанных + 283 + + ВсеМестаИспользованияНеобработанных + 323 + + <key>ru</key> + <value>Все места использования</value> + + true + true + + true + + + ВсеМестаИспользованияНеобработанныхРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + + ВсеМестаИспользованияНеобработанныхКонтекстноеМеню + 324 + true + + Label + true + true + true + false + + + Click + ВсеМестаИспользованияНеобработанныхНажатие + + true + Right + + + true + true + + true + + + <key>ru</key> + <value>Группа горизонтальная состояние необработанных</value> + + + ru + Группа горизонтальная состояние найденного + + false + + ГруппаГоризонтальнаяСостояниеНеобработанныхРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Описание мест использования необработанных</value> + + + ru + Места использования + + 24 + + ОписаниеМестИспользованияНеобработанныхРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОписаниеГруппыНеобработанных + 276 + + Группа2 + 278 + + ОписаниеТекущейГруппыДублей1 + 280 + + <key>ru</key> + <value>Описание текущей группы дублей</value> + + true + true + + true + + + ОписаниеТекущейГруппыДублей1РасширеннаяПодсказка + 282 + Label + true + true + + Left + + + + ОписаниеТекущейГруппыДублей1КонтекстноеМеню + 281 + true + + Label + true + true + true + + Left + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 279 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Описание группы необработанных</value> + + + ru + Описание группы + + + ОписаниеГруппыНеобработанныхРасширеннаяПодсказка + 277 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы места использования необработанных</value> + + + ru + Страницы места использования + + 24 + + СтраницыМестаИспользованияНеобработанныхРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа горизонтальная необработанные дубли</value> + + + ru + Группа горизонтальная найденные дубли + + + ГруппаГоризонтальнаяНеобработанныеДублиРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
      + + Декорация3 + 334 + + <key>ru</key> + <value>Обработка групп(ы) дублей была отменена. После исправления ошибок можно продолжить удаление.</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 336 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 335 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа вертикальная необработанные дубли</value> + + + ru + Группа вертикальная основного элемента + + + ГруппаВертикальнаяНеобработанныеДублиРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
      + true + true + + true + + + <key>ru</key> + <value>Шаг неудачные замены</value> + + + ru + Шаг неудачные замены + + + ШагНеудачныеЗаменыРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + Page + + Vertical + auto + +
      + + ШагДублейНеНайдено + 227 + + ДублейНеНайдено + 229 + true + true + + true + + + ПоискНеВыполнялся + + None + + ДублейНеНайденоРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + + ДублейНеНайденоКонтекстноеМеню + 230 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 1 + true + 1 + true + true + true + Special + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Шаг дублей не найдено</value> + + + ru + Шаг дублей не найдено + + + ШагДублейНеНайденоРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Шаги мастера</value> + + + ru + Шаги мастера + + true + + ШагиМастераРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Pages + + Auto + +
      + + ПанельДействийМастера + 167 + + ГруппаНазад + 169 + + Назад + 171 + true + true + + true + + + НазадРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Form.Command.ШагМастераНазад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа назад</value> + + + ru + Группа назад + + + ГруппаНазадРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаВперед + 173 + + Далее + 175 + + <key>ru</key> + <value>Удалить дубли</value> + + true + true + + true + + + ДалееРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.ШагМастераДалее + Auto + true + true + true + UserCmds + Auto + + + Отмена + 177 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Command.ШагМастераОтмена + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаСправкаФормы + 184 + + Справка + 179 + true + true + + true + + + СправкаРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа справка формы</value> + + + ru + Группа справка формы + + + ГруппаСправкаФормыРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Группа вперед</value> + + + ru + Группа вперед + + true + + ГруппаВпередРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Панель действий мастера</value> + + + ru + Панель действий мастера + + 2 + true + false + + ПанельДействийМастераРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаКартинок + 75 + + Предупреждение32 + 83 + true + true + + true + + + Предупреждение32РасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + Предупреждение32КонтекстноеМеню + 84 + true + + true + true + + + + + + ДлительнаяОперация48 + 77 + true + true + + true + + + ДлительнаяОперация48РасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ДлительнаяОперация48КонтекстноеМеню + 78 + true + + true + true + + + + + + Информация32 + 181 + + <key>ru</key> + <value>Информация32</value> + + true + true + + true + + + Информация32РасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + Информация32КонтекстноеМеню + 182 + true + + true + true + + + + + + Внимание16 + 196 + + <key>ru</key> + <value>Внимание16</value> + + true + true + + true + + + Внимание16РасширеннаяПодсказка + 198 + Label + true + true + + Left + + + + Внимание16КонтекстноеМеню + 197 + true + + 2 + true + 1 + true + false + false + + + + + + Информация16 + 214 + + <key>ru</key> + <value>Информация16</value> + + true + true + + true + + + Информация16РасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + Информация16КонтекстноеМеню + 215 + true + + true + true + + + + + false + + true + + + <key>ru</key> + <value>Группа картинок</value> + + + ru + Группа картинок + + + ГруппаКартинокРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + 75 + 14 + LockOwner + Use + UseList + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ПоискИУдалениеДублей + + + true + + + true + +
      true
      +
      + + АдресСхемыКомпоновки + + <key>ru</key> + <value>Адрес схемы компоновки</value> + + 2 + + String + + + + true + + + true + + + + БазовоеИмяФормы + + <key>ru</key> + <value>Базовое имя формы</value> + + 3 + + String + + + + true + + + true + + + + ОбластиПоискаДублей + + <key>ru</key> + <value>Области поиска дублей</value> + + 4 + + ValueList + + + true + + + true + + + + + + + ОбластьПоискаДублей + + <key>ru</key> + <value>Область поиска дублей</value> + + 5 + + String + + + + true + + + true + + + ОбластьПоискаДублей + + + + КомпоновщикПредварительногоОтбора + + <key>ru</key> + <value>Компоновщик предварительного отбора</value> + + 6 + + DataCompositionSettingsComposer + + + true + + + true + + + + ОписаниеПрикладныхПравил + + <key>ru</key> + <value>Описание прикладных правил</value> + + 7 + + + true + + + true + + + + ПравилаПоиска + 8 + + 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 + + ValueList + + + true + + + true + + + + ПредставлениеРеквизита + + <key>ru</key> + <value>Представление реквизита</value> + + 4 + + String + + + + true + + + true + + + + + УчитыватьПрикладныеПравила + + <key>ru</key> + <value>Учитывать прикладные правила</value> + + 9 + + Boolean + + + true + + + true + + + + ВсеВариантыСравнения + + <key>ru</key> + <value>Все варианты сравнения</value> + + 10 + + ValueList + + + true + + + true + + + + + + + ПоискНеВыполнялся + + <key>ru</key> + <value>Поиск не выполнялся</value> + + 12 + + SpreadsheetDocument + + + true + + + true + + + + + НайденныеДубли + + <key>ru</key> + <value>Найденные дубли</value> + + 11 + + ValueTree + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 3 + + String + + + + true + + + true + + + + Количество + + <key>ru</key> + <value>Мест использования</value> + + 4 + + Number + + 12 + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 6 + + Number + + 1 + + + + true + + + true + + + + Основной + + <key>ru</key> + <value>Основной</value> + + 7 + + Boolean + + + true + + + true + + + + + АдресМестИспользования + + <key>ru</key> + <value>Адрес мест использования</value> + + 13 + + String + + + + true + + + true + + + + МестаИспользованияКандидата + + <key>ru</key> + <value>Места использования кандидата</value> + + 14 + + ValueTable + + + true + + + true + + + Данные + + <key>ru</key> + <value>Данные</value> + + 1 + + + true + + + true + + + + ПредставлениеДанных + + <key>ru</key> + <value>Представление данных</value> + + 2 + + String + + + + true + + + true + + + + + ОписаниеСостоянияНайденныхДублей + + <key>ru</key> + <value>Описание состояния найденных дублей</value> + + 15 + + FormattedString + + + 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> + + 20 + + String + + + + true + + + true + + + + ЦветПоясняющийТекст + + <key>ru</key> + <value>Цвет поясняющего текста</value> + + 19 + + Color + + + true + + + true + + + + ЦветПоясняющийОшибкуТекст + + <key>ru</key> + <value>Цвет поясняющего ошибку текста</value> + + 21 + + Color + + + true + + + true + + + + ЦветНедоступныеДанные + + <key>ru</key> + <value>Цвет недоступных данных</value> + + 22 + + Color + + + true + + + true + + + + НеобработанныеДубли + + <key>ru</key> + <value>Необработанные дубли</value> + + 23 + + ValueTree + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 3 + + String + + + + true + + + true + + + + Количество + + <key>ru</key> + <value>Мест использования</value> + + 4 + + Number + + 12 + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 6 + + Number + + 1 + + + + true + + + true + + + + Основной + + <key>ru</key> + <value>Основной</value> + + 7 + + Boolean + + + true + + + true + + + + + МестаИспользованияНеобработанных + + <key>ru</key> + <value>Места использования необработанных</value> + + 24 + + ValueTable + + + true + + + true + + + ОбъектОшибки + + <key>ru</key> + <value>Объект ошибки</value> + + 1 + + + true + + + true + + + + ПредставлениеОбъектаОшибки + + <key>ru</key> + <value>Представление объекта ошибки</value> + + 2 + + String + + + + true + + + true + + + + Пиктограмма + + <key>ru</key> + <value>Пиктограмма</value> + + 3 + + Boolean + + + true + + + true + + + + ТекстОшибки + + <key>ru</key> + <value>Текст ошибки</value> + + 4 + + String + + + + true + + + true + + + + + ОписаниеОшибкиНеобработанных + + <key>ru</key> + <value>Описание ошибки необработанных</value> + + 25 + + String + + + + true + + + true + + + + ПредставлениеОбластиПоискаДублей + + <key>ru</key> + <value>Представление области поиска дублей</value> + + 26 + + String + + + + true + + + true + + + + ОчиститьПравилаОтбора + + <key>ru</key> + <value>Очистить правила отбора</value> + + 2 + + ru + Очистить правила отбора + + + true + + + StdPicture.Delete + + + + ОчиститьПравилаОтбора + + + Auto + Auto + + + ВыбратьОсновнойЭлемент + + <key>ru</key> + <value>Отметить как оригинал</value> + + 5 + + ru + Указать текущий элемент как оригинал, на который будут замены все остальные элемент группы дублей + + + true + + + StdPicture.MoveRight + + + + ВыбратьОсновнойЭлемент + + + TextPicture + Auto + Auto + + + ОткрытьКандидатаВДубли + + <key>ru</key> + <value>Открыть</value> + + 6 + + ru + Открыть кандидата в дубли + + + true + + + + ОткрытьКандидатаВДубли + + + Auto + Auto + + + РазвернутьГруппыДублей + + <key>ru</key> + <value>Развернуть</value> + + 7 + + ru + Развернуть группы дублей + + + true + + + StdPicture.ExpandAll + + + + РазвернутьГруппыДублей + + + Auto + Auto + + + СвернутьГруппыДублей + + <key>ru</key> + <value>Свернуть</value> + + 8 + + ru + Свернуть группы дублей + + + true + + + StdPicture.CollapseAll + + + + СвернутьГруппыДублей + + + 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 + + + + + + +
      diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Внимание16/Picture.png b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Внимание16/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..7325ab91ca9ae31ea9668e0f906095e402e6b499 GIT binary patch literal 653 zcmV;80&@L{P)o}8*uQ5j(eB?-TYbeb}1;s>IVu4g-v}#k~CfbzQu3edtNh=p-%g{EZ zEo!Ab7C}^CX)Oe)P|(3UQJId7_ij}qKIYhi;@E@I+i_@OHEqgD&59z|t?dWuBiXq* zKmrjvJrYvxd;K3D|2IN(_>4-=@-&oe4k2+r6896{QK8bjsi#(2whYk!@Lgy5o}KGZ z8_~nH=;2xr8@*~vpy$TEmZX5_+vCdXbv2ae0TdqMju3YQRFH6W5RXSYofOdjXuPw0 zm!5+)4NhXIufz@3cS7Yw>wDTFEh_>hU+h-iG}RC+^(w4skU6|53a_R>=D_;KmNFmi zROc@jOJArA=55(%3n*03|0{{wO zd?2X3dXr-uKC(6k1!~ck$~X&veD7Fj2#5m@`sSj?nqLQ&B0PPb(G}L?K4(5AVi_W) zA|NN=vT#v?}y{RURTz@Cp`n=wQL z906MpQP}3eRa>hV-;nUfAPn! z9-sGl-wqB9l6c390Wr`80Hek~T`{9WYe(Ph8~wHY{Ylw}BVMB~F1|k}AN}FQXn+2w zKKIwo_|e-nqc>KJK0Q17pn0@MIog{(`pfsDukVarS^nY4_R*J>qknoo`u^w9?{L)MGHxi%mr)-*nWqyX&Lb|x&A35`8-R`J|++n}5+HfR+P*J zQF>WMB8|vwT5#o%je}7U&?+a1j?f zPG}JL%=4r|txiLtnDb`~hVNzNcCHyGDiMBLhJVZB3G{JlE|>n<y3%OjKYE7(`!uRgw0>zz5xf-FTDoDu5I6Y=L z3l(o$?qP!yRy28%6gKx%VJpq*9YKqHWl=Z}$4c$FB$SO?DC25&@CQTzPVR_X6V-*% zYDwQlaU!-9ervd`q8wNo?Do{1Zj0y1%H;B7tA6M0!^vi1qcUw&u(%D|U{v`SBBEyWBDOi^t&G z6%>Kw6~o)K%8A8!z@l(5_|CLUoeBjy7OGqu;2F+bezN#6XcNPpsf{fQhjYsT=TX%o zh@g;{&qwCjd=e_{>bv z7<`K45Y+4Au$4>6XU6(1117|BDw|Lik#}(Ll(SgkKB8SY2)#B`4;d)5g3p)VzQT2D z>huGUowAzhty|5iK^Y&J|d>*5H)CQTF$~V}l)g3ux=_jEx z+g5(&PqVgCXgi5%Fv7Bv^JR_L4ut0>7}++B6i8>ct50Kvb=CM_abCfE!O3I^SVq5d|>-ak+Z1+ zGH4;w&!ch$`h+Qbg;E_T8pNcNEF{VxGiZs!PAWyfDurreSyIHrrtdE79?AlumltXQ zh&3oiVcR5U8L%R^%y#+WWYX2@VXh&>l%Ac2HC%edjerPk=JrN*P+18S%y|PatFSTt zGS@4#i5EWdS8dx@8fKq_aLY4r$}?0YwX6>!)F1h`Y@O9NK2)nWXzHN6KloeaTE7OE zt%Xi~ts%}36bhKJM%_@B-Z7}u$;T1yQ|CFdt%Wgd0zjHqBTkW*Vr5wFc60dEy%$>I ztk!A7??syZ!Yg~HBMLqxBex(y?iw!9ntgrfh(||A8ul49kB;)1CQ8Q_17J!Ut$W%j znCwEfZRvWcl`b-~{uA~{@KY)rRS=pkp(J99TbBzfwA#}JiST-M_5fqwaZ{aJ%shj^ z^G%lp-BbL-I{_GdqtBT8*xQN|@Zq$X{r3gY_|9f~5pKXc1T++mYg_6mxx?U2l&Iv7 z9_P}Q2!c0ZmPY=Z*-`tN&S-wI<7HPYny_i5_xSGFaLaH&%pykM#QeB%`(in!^EaE1 zU^h1oy)Gz@Uyv$aXlf%ZVyyIpKi>^1KJ(NF&_zJE>+e<(#S6V@aQD zO!`&c5$5V5C)RM-6#nVN>!Duq(k~Ha?e$zh?3#mNwDjLXo`^K-c9a6jL^2Mcn4(j_ z3LmLsfo<$dYmaSfH1Wi2uS>!0Z`%k9N^J@QN=qsO#I|8+E&zqg5A>lKLb^#3Niua; zesOz8fgm1`BJ4QQMQvV~dm{3#am;&2G`Vroo2~{*rQOtO+Rqn$=&1UA>cR1?ujbp- zj{nNDh>vu4H048*;cAag&#{CyQA#Vp1j{Hz#qd9dN)Fqdr216=Xd* zvGw?dzQI$4L%;^Vlj?O_R4g_1)%^r8&cn9z-n!~Cfph^J2iR@;K6CY#(8)Tn6n@TN z;Wn1A;GrE?A-@~8r7+|%x~s5>PL8)vXPa=}t_7Dxp!%lpDKT@5#dm+>_GRKaE@oz&+SV@lVugW*^=n#9$D2Q@R0*_LApcg>9LuC-HE!hR6>tpp3 z?}*wKo14n?xMnMV+4B@{zr3+#qny(W*vJJ{=BM`?n@!A~dLXlXgp*;H9upGzyjl0WoW<9 z7G?7Cc&NV#lJT4Qa-(_N8eN&sW11{p2+n9?AS{3jmLD8rZ;I~Br-SazAKf>TLrv%h z4`$m2Xxfh>)qi2%(FuOJtgf5KMoq7J8Q~92jv_`j~E0KVHJIW@>{IU{lxVYgz#)RHGjpWr{&&!!^zux0bVdkjO;`JVSn3o1R;s>@dc;JhCdM zEGkrvyY_<7tp|mU)a6b7j!_USL1T`LzsuoUiOl(L4m;8(eOEHnR|OQ54!}yTZ&T;# z_`*CYuKQ`xBe2Zr*vsgj2NEfX!}GeUDqaUrAYQVB(Wq0yis>GE3|i?|>m0<6Vpr?Q z-;nLvyDLqkU@nFGCpjk2Ll<_Rznz44_vl9Mn{y`f-s{um+xzFeE?RK1qwkCF&PJ|j z^IIWVCY%Es&bbhG+W6T=tn7}8)yUeYs+!HO%EY!CVN@S_J<2+Be=O|W;<6R_(Z>Ah znv}F44ZMM^(s={-p0iy$-0)ASbFO<}z&c~3XXA3YZn|~pyT(E%ZAX~9vBKzN%5S*$ z5GKaT113}_b%6H^wOI6Bg?>kb*$GFfbxI>>jP$t3&T%Y>s0X0q`Ilmt60Mc@P4ON_ z2~rx_G@eozdKEy=dmEk0aC>MyamP<1s2~jP$-i5fB$)mbf9x zR-t~MwYt^ zN*S7bAcGAn5E_a%WN{F{b;n2jysQNm#bgHbF;e8y!r@+j=wIG5ipE;hBT& z%(Gr~&H;St2|B&wSyhN~&Zo9!ini01jf1Zwn+<4|0vvi?-9lOXp=)}t?TQQzogr7DvV)RbP%X%Rod zuQW4#eVnA=_<4sSDuO~jJ1NTpLlIP^vOkbNInfyDO8Xak(d4Z80<%+H`G+PAof@eu*_Cbss)^fVYUq#qm6gSB~v(__h023 z%e&{7W%?g0K8w3+;v3@~YOR4#Q<0$&#|VTu!Qt(sosG|&u5&oyEqz0(hm@j=Z~6{M zI#%pAUwh<)*804H^5E23{iGif@`0>qCW_r0pT8qC4Xa04;Wy3V{^X?;+{<=U)I1D> zwsQN)k6w2fEBooCHSnKO9L;BoL*%!@EJ6wxaxPpt0G+KH8KyT8HO&C4)~qs zGyySH`;|M?A1iwwZ%*a>Wi_F%y)y{6g9`-2uDm1mJ1BK_^9JX8HvO<~asN9O^gFTM zV1|U;B}Ww0rKeUbcXFGzYGO&4KzznBWo(_1OS0w3OP)pamYkXe`~;-4t|#vWL-;fV zt*&m7km1>ZCro~YsMsC?OhHv4OkYM-(xK*N z9(x&gb5+%*1;M85hC)&#V2*NVCMGmHw{T8&Yb%)&lzY6;2CW66jS~$(M!UMm*H*CW zkC#&VgDB{sTPUJ-wrf9ra*0N0Law}(?PV60Utj}XHaOVQVirdc#5qnsC!~;w$AHvP znIo$kx5@E!76^vKkAWjh_AI%mkQfJ`g22&ml#m8qnPQ(}BN?*y&-E7Cp^|2M4P~o) zsywE}zU&ifAbTQKIw_fo=CKwS03|eCX61;j3G3+8#F{(X4BhV0%{<~Lit`&*zPdG= z-O=b2(P$0MWll=Jfn}_uGECmuwre|%AYPkht`MA?lQ*rTD71ORlSp#`DW5s-BWkgy zC*Ow$k%_wY93XST2;}1SDd*ZP$$1E)F0;gop_p6%j+@7u)m= zz_yq`$19Yv5iDUIKj#?lfeSN}n z^@cz#QL?=2P5zYKfSA`XF%U?Q@x>hV!Y~sbdeskCjZJ-}+y!r7_;GS66~8!D1Cy#= zTdkP)C$s-1bLZFp!2BA^ZDK?k1FbJkw*CR(;Q3(0kj3Cf z!BzP%J!Q;zV=QGNB-X#H*YDQxUqGrrY+wFOD`(BuC0X9 z7i7Azf6_){bvfGBz61yOv>T7n4MyX+dB!UA%F*`5fsI@NyA1P(nItIY$+QIM{0!7k zi{r}9LefcBcek{#J2?|f3TGK{=Utj&oigehL(yZWjS0`a!P4b)RZbO&hmKcN!6rL+ z0#U*7uIVtNT!@Il2743E4s$1+7Q1l>akeQv(4*@);5d81th37~t>^=y9P^o4oeJMG z)XFNbMW9=o*KuT=MDpqIe&^W3`{x16x-}SZC*E5eeyTHLmiuhwFQ4a5B9H8NT#6He zeVQ}M_&#iNUTbj2nmdw9oU5~~SJXUoaB4nP14qVVH)89m1Uf%Bj<5kz++|Wg+OX6= z@`_V#Fj<_P0VC%1r$8UOd_FG}RA_WU&rrS4gj>HxO=9(mwZ%a;I52_sHuwsk!t#<* zSRrkB_H6M125&Q_*RR9iJ_KP)jKYUgn&i{>j2%cX!&R5SMVGuW8N*3SNYhqMaZ$JR zHRIcsoql}Dz5WC&n&G;nmP0O<0X3U9cf4`ju*_C3weF^hpG&vFkJNh#Qk?M6#L5@M z;;WYI-xdB(%FtfARUCz^I{>{wpm=G&)4g80lok8bSFwwCb&yX93b}IOn*>O1+ ztvI~tKQ8S6jd}P8+BP+Jt4+0VY-$Hk=;EasPvg=Ku_-r#D2%+DJP6f0oj$=f(OhF8 z1a^NXJTy2zYV}h8`4E*YVW9ZchlSLE-VZ&CAa6G7YX$998S1hPDaRN7T`4g5!VG)uiqhORjMN!0q0&# zleEKQuOpwUx^j}pB}w*30GStAx;Y^+=kZn5s2 zD~#LIzy*TGcE;J9z7aFy&L}tTj0B$vIgXcWk-NsjsLCuIP{VOHoJ5b{u^@j=9UIpr zrKAmVF^pS&mo5h!{L&!;Tyn=9fDR{?5tI9G$GgO&zibA!ujqyf_&JkMB$j%=v%EJP+_> z^96rpE;a)-kn!|fE2bBdsb5u=XTCgfNX?+Ag3`2emlrX~XM?;{Ya%Mq7riC;ov0R& zV$qar5Zr?EX%QE!hR7G8-p?Ja;Eef71HZhmp{Mok>1C!MrCqqMw0ikdk=RfX;5@~^crv+^ zL_w#Gg*$Q4e*T+VjwWhMzWdKtN|Mr?h={*eziP@90GelKR6lszJ~;+AsxLdHZ=<^G z!d%H=50XEwFQpdyawZK0)R^m+-u&~u5@ScH_q)u#uaeDjt8TbR&a?J?V*g*-)&JG6 zQDGR~|F_qu{b613TB~5s^D#|1p8z?~sF?p6H+A^bA@qiEc2NU#)F(`UB!Zf>DKkAW zJ)wyJ4bH?^thZ|&AMhK(hVhvq=2ZWS1g51|ss8VB$R{C*zmd7dgbPHpWi{G@X)PXH3@0%4)Ak8li$s|@ zAbIGRg{a-5xV2wiw{$74biygjW{Gy;55&9IWS=Br_IuaTW`bx(~+hs4W6o7sfg5aBhwpcd?o~zO-ruPrKFM{XW zN~H*`&>&cga>WVMpIfIe$mTI^@~s|n`51TO)^f|Tug-Xn)D{%CHgJqP;H3`bsN%b= z$Q*ByfYofVm8IOM4q*BQO1Dj!bEi)VZb|Ow0h1;frKeey0h2GCS@S$9A$Jc^Qmrp7 zY5-yqDU=BzK^!tm!2&T`B`)vHuvQD23sK+A2+CDJ6j5Z57iUS9e((&Qyszq>R3 zuYE4?ztTBhBqxZ~@JHu-4G0e%v;K?o#glP@2m_3TCJnprD(CClU#{!Ld(Itg=hs$@ zTZDJnji(czMIna7rN22JGCCh5*4*|w6|;VB3@}H|$0WPJe|Jv7hT;&1l8?@%W6s^{ z9ZXl&3TM26#eXGE5E*2VKtuWRKM>b}w8{d26lbNPkprMH=Pe(d>+Y?N`|S4966(E} z0LpJK1-SZWyBM%`SV}b{)KAacaoMHjX=BKZ2`W~xbXUPIFB}zoOfH32+@}J~E32b1 z%dEeYnLP%tXbdTzwRSH}eDFmaXxh70_IsoH{~7GZ)1c|w9IO_)UDu7nnQk_tU?x#e zHnGehMa~Lw^`8K6LZq>{GOm~N^~lGq#Z6@8==N)92T3e4ZY{~wi@KnFKb1VF`z4(= zt<^~o$kqz2<~Av3Dpl>P0-fp3{Ut-#yZ&N#_S2FPz2FLdZn3Fb)y&3k7acyd@}+si z(08nMrZLNb$nQ=XZ$wop?bnz_x8>u+qQ;PAWWE_MjQG3bEHG0l1rffSs956v^W*JP)8&M4hiWxZn|R3*2b0I5{KAq8&LasdH zur2wGXiw=>-@d0cDjr_4Gx=uSK5&Iq8D4@CFZR|?m{ph5;5$VxwC1lM76Y50mq}o* zQ1H}>I+a+wd-JvNqN=$I?QfA72K2z5={r({d$-Io5X}v>DFoR}5gqVHlz)8Y_%Gx9 zx3wG}Tg%64d83D{PpOkG$v1P=n|#o&;_AIWT)Xk9bg3!5CEDlc4vW^0ZyAZnG-0!ztpcJ6ao-TQa;r-jKtMWxbn(MGX_~T&U&$46K zT4(;?HP5VYIR?_~q#!9d75EZi`+n4&143?AM%^CY@bFD0DBj2(Yv2eX);mCCfnG%jnouO!BweaF#3GxK{Qosycr2dd`niv@gYa$oGL zMHSV75Cg7Ds#<=8tJ}GfhU3toV`?2amaJO3i^A%7ZajSR`{&0Bl}=5?`7iM1wD@-b zDVB!=d;Q;b;IQo#FC8h?N*`!^Yj7|~8}z&Pqkj~Z|F4BbA=m$Bg+;+kZE7w65Qac` zIC$*NABYgk0VzOcFj_C|u-B03Orb};960?wl-56E#5&LhfYEvn{DW62(%|Q&U3fe0 zoO&euLTHiFJz&*0x^tslN?#hKYSxucmI7;27eLHm1mEyQN;EM4lT^(15!Xhhy-6k$ z1-6l2orr8ma1?9DL5SG?p`TGck?Aas)`D3}lsL%$clp_;YgV|qMiM3M3!Exo6lDQE z#@D+h;U2!KU8s3?{{3Pk#DLE+OYZ{$nK4=?Xt@Xv=b3eD@rt2%i@U}3avYn?cGEuH z=^K?0N=i?F0`i37kX|7+3a>vrB!HJ>e<7 zY9O+N0|~kcrhuh}C_i~hf16$WtQ4K_6!_h6EnUF^poMr@TvCF3Pk4D3U;M0o@jUz* zNDs>a>Vx520!qKx)1%mOx*6LRyFzcRO`j(o+3dF>$t>?{fq;E#JYqW?x-;5nnjh}1a&P&f4A2qUu zYGO5MM_=rE3rtzE5~T@zwLnXb`pGzH^{$;CquxfLl-N6JzLq)&H)$os5&$hikg~HBKax!9UQMYrmkcpe9mykgknIX{< z$&+tj(uu!aA%!2Wr<(Hhb0+d+F93)wQUQPdNTc=j9;sKjz__DVpTQ8nEHEhjK#_50 zoOwqXSC?KL3;Iw(L?*_akmlz^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/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Информация32/Picture.png b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Items/Информация32/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7660e7506e02acd033273c94693ffd065e5f3d GIT binary patch literal 784 zcmV+r1MmEaP))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 O0000o}8*uQ5j(eB?-TYbeb}1;s>IVu4g-v}#k~CfbzQu3edtNh=p-%g{EZ zEo!Ab7C}^CX)Oe)P|(3UQJId7_ij}qKIYhi;@E@I+i_@OHEqgD&59z|t?dWuBiXq* zKmrjvJrYvxd;K3D|2IN(_>4-=@-&oe4k2+r6896{QK8bjsi#(2whYk!@Lgy5o}KGZ z8_~nH=;2xr8@*~vpy$TEmZX5_+vCdXbv2ae0TdqMju3YQRFH6W5RXSYofOdjXuPw0 zm!5+)4NhXIufz@3cS7Yw>wDTFEh_>hU+h-iG}RC+^(w4skU6|53a_R>=D_;KmNFmi zROc@jOJArA=55(%3n*03|0{{wO zd?2X3dXr-uKC(6k1!~ck$~X&veD7Fj2#5m@`sSj?nqLQ&B0PPb(G}L?K4(5AVi_W) zA|NN=vT#v?}y{RURTz@Cp`n=wQL z906MpQP}3Db@2|tdyiURJh z{rG z+W(Y57#c6vPkgmvIz`Yy54^%8g~k^Ku0r1gRu-$KAK4cs&b$DGpg#aYratw9fveCr zfiTRxT%SHyG2IeqAGFW<+AY@CZh`jE+GnUV#c<<^+2uFt-+ZJ5Ru-#f5LquxoPG}C zB>By2Z?XFJbynZL&dqCYA=-!7XX^3q;s@DRA1Q$_GG3`RKUdD$1+;Dv$1Uz}yo=TW zS_jHxl*LO{Occ5Olnq{YN1p6aU#5B)O=qwIWjWTb4w|0LeIhe(hj z#8w;VU<-g+c^AFAfz}zc&Z2b|JG+fnsLU)cj6VD6Z{JxQxB`E=I&J%r^Wtdp6v8eN zuS2{AdK=Mg@&yGX_dj0{&~4D$5N{#TI-++OKYkKFG#^@p4{t#f{-k=WUd~!3k|vTA zT0-)r3_?tyWMVn=*dYW7aq|Uoh0=)|S0=tQ5P_wI(@qdM-)~IKfQmp;0+K8&gxI#m zauoSurYG@1ACZW$=5hScoWFSSqV!F`lhJ}-_ zk}K4w&gOpc`~wLrEk5Ce@$mVPsgqzhh;l$VAP(T5CDp}7Q!}!fF<{SRvn!kHtljZxhNOJ?JkVCfD1UZTXb8}Zjlh+ z0shKGRI(v=c!XSOa$;6~e!hpm%3{?CLic-(=`&z>pb}^q0vSS!2jZa_N+2G!(PK&f z$x<6VhGyT6cxg-$kMh9q5alsGGe^fa=JyC>0K!l`mCI`{V-}NZl-?)=bb7P8uZQ&Z zot%4&%D>(RpxP+!+fzj!{MpfIoC4dkvCL@noh!Aexo@rC&HyOIzr)TpI^IED&hI{y<>ch!&dv_k`;5MtWx zP8}J N002ovPDHLkV1f>!%;5k4 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..3a2e801fc --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -0,0 +1,2378 @@ +// Флаг подтверждения, используется при не модальном закрытии +&НаКлиенте +Перем ПодтверждениеЗакрытияФормы; + +#Область ОбработчикиСобытийФормы +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьЦветаИУсловноеОформление(); + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ИнициализироватьОсновныеПараметры(); + + ИнициализироватьКомпоновщикОтбораИПравила(); + // Схема должна быть переформирована всегда, настройки компоновщика - в разрезе ОбластьПоискаДублей. + + // Постоянный интерфейс + ОтображениеСостояния = Элементы.ПоискНеВыполнялся.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей не выполнялся. + |Задайте условия отбора и сравнения и нажмите ""Найти дубли"".'"); + ОтображениеСостояния.Картинка = Элементы.Предупреждение32.Картинка; + + ОтображениеСостояния = Элементы.ВыполнениеПоиска.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей...'"); + ОтображениеСостояния.Картинка = Элементы.ДлительнаяОперация48.Картинка; + + ОтображениеСостояния = Элементы.ВыполнениеУдаления.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Удаление дублей...'"); + ОтображениеСостояния.Картинка = Элементы.ДлительнаяОперация48.Картинка; + + ОтображениеСостояния = Элементы.ДублейНеНайдено.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Не обнаружено дублей по указанным параметрам. + |Измените условия отбора и сравнения, нажмите ""Найти дубли""'"); + ОтображениеСостояния.Картинка = Элементы.Предупреждение32.Картинка; + + // Пошаговый мастер + ИнициализироватьМастера(Элементы.ШагиМастера, Элементы.Далее, Элементы.Назад, Элементы.Отмена); + + // Добавляем шаги, зависящие от логики формы + ИнициализироватьСценарийМастера(); + + // Автосохранение настроек + СохраняемыеВНастройкахДанныеМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // Контролируем корректность установок + ОбновитьУстановкиОбластиДублей(ОбластьПоискаДублей); + + // Указываем стартовую страницу + УстановитьНачальнуюСтраницуМастера(Элементы.ШагПоискНеВыполнялся); + ЗапуститьРаботуМастера(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + // Проверяем клиентскую переменную + Если ПодтверждениеЗакрытияФормы<>Истина Тогда + Оповещение = Новый ОписаниеОповещения("ЗакрытиеФормыЗавершение", ЭтотОбъект); + Отказ = Истина; + + Текст = НСтр("ru = 'Закрыть поиск и замену дублей?'"); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяФормыИсточника = Сред(ИсточникВыбора.ИмяФормы, СтрДлина(БазовоеИмяФормы) + 1); + Если ИмяФормыИсточника = "ПравилаОтбора" Тогда + ОбновитьКомпоновщикОтбора(ВыбранноеЗначение); + ОбновитьОписаниеОтбора(); + + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + + ИначеЕсли ИмяФормыИсточника = "ОбластьПоискаДублей" Тогда + ОбновитьУстановкиОбластиДублей(ВыбранноеЗначение); + + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + + ИначеЕсли ИмяФормыИсточника = "ПравилаПоиска" Тогда + ОбновитьПравилаПоиска(ВыбранноеЗначение); + ОбновитьОписаниеПравилПоиска(); + + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + + // Убеждаемся, что область дублей корректная по списку + КлючНастройки = "ОбластьПоискаДублей"; + Если ОбластиПоискаДублей.НайтиПоЗначению( Настройки[КлючНастройки] ) = Неопределено Тогда + Настройки.Удалить(КлючНастройки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура ПредставлениеОбластиПоискаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); + + ОткрытьФорму(БазовоеИмяФормы + "ОбластьПоискаДублей", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеОбластиПоискаДублейОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ВсеМестаИспользованияНеобработанныхНажатие(Элемент) + + ПараметрыОтчета = ПараметрыОтчетаМестИспользования(НеобработанныеДубли); + ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура ВсеМестаИспользованияНажатие(Элемент) + + ПараметрыОтчета = ПараметрыОтчетаМестИспользования(НайденныеДубли); + ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаОтбораНажатие(Элемент) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("АдресСхемыКомпоновки", АдресСхемыКомпоновки); + ПараметрыФормы.Вставить("АдресНастроекКомпоновщикаОтбора", АдресНастроекКомпоновщикаОтбора()); + ПараметрыФормы.Вставить("ИдентификаторОсновнойФормы", УникальныйИдентификатор); + ПараметрыФормы.Вставить("ПредставлениеОбластиОтбора", + Элементы.ПредставлениеОбластиПоискаДублей.СписокВыбора[0].Представление); + + ОткрытьФорму(БазовоеИмяФормы + "ПравилаОтбора", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаПоискаНажатие(Элемент) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); + ПараметрыФормы.Вставить("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); + ПараметрыФормы.Вставить("АдресНастроек", АдресНастроекПравилПоиска() ); + ПараметрыФормы.Вставить("ПредставлениеОбластиОтбора", + Элементы.ПредставлениеОбластиПоискаДублей.СписокВыбора[0].Представление); + + ОткрытьФорму(БазовоеИмяФормы + "ПравилаПоиска", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыНайденныеДубли +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура НайденныеДублиПриАктивизацииСтроки(Элемент) + + ПодключитьОбработчикОжидания("ОтложенныйОбработчикАктивизацииСтрокиДублей", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтложенныйОбработчикАктивизацииСтрокиДублей() + + ДанныеСтроки = Элементы.НайденныеДубли.ТекущиеДанные; + Если ДанныеСтроки = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбновитьМестаИспользованияКандидата( ДанныеСтроки.ПолучитьИдентификатор() ); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьМестаИспользованияКандидата(Знач СтрокаДанных) + ДанныеСтроки = НайденныеДубли.НайтиПоИдентификатору(СтрокаДанных); + + Если ДанныеСтроки.ПолучитьРодителя() = Неопределено Тогда + // Описание группы + МестаИспользованияКандидата.Очистить(); + + НаименованиеОригинала = Неопределено; + Для Каждого Кандидат Из ДанныеСтроки.ПолучитьЭлементы() Цикл + Если Кандидат.Основной Тогда + НаименованиеОригинала = Кандидат.Наименование; + Прервать; + КонецЕсли; + КонецЦикла; + + Элементы.ОписаниеТекущейГруппыДублей.Заголовок = ФорматСтроки( + НСтр("ru = 'Для элемента ""%1"" найдены дубли (%2)'"), + НаименованиеОригинала, ДанныеСтроки.Количество + ); + + Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.ОписаниеГруппы; + Возврат; + КонецЕсли; + + // Перечень мест использования + ТаблицаИспользования = ПолучитьИзВременногоХранилища(АдресМестИспользования); + Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); + + МестаИспользованияКандидата.Загрузить( + ТаблицаИспользования.Скопировать( ТаблицаИспользования.НайтиСтроки(Фильтр) ) + ); + + Если ДанныеСтроки.Количество = 0 Тогда + Элементы.ОписаниеТекущейГруппыДублей.Заголовок = ФорматСтроки(НСтр("ru = 'Элемент ""%1"" не используется'"), + ДанныеСтроки.Наименование + ); + + Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.ОписаниеГруппы; + Иначе + Элементы.МестаИспользованияКандидата.Заголовок = ФорматСтроки(НСтр("ru = 'Места использования ""%1"" (%2)'"), + ДанныеСтроки.Наименование, ДанныеСтроки.Количество + ); + + Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.МестаИспользования; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НайденныеДублиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьФормуДубля(Элемент.ТекущиеДанные); + +КонецПроцедуры + +&НаКлиенте +Процедура НайденныеДублиПометкаПриИзменении(Элемент) + ДанныеСтроки = Элементы.НайденныеДубли.ТекущиеДанные; + + ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; + + ИзменитьПометкиКандидатовИерархически(ДанныеСтроки); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыНеобработанныеДубли +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура НеобработанныеДублиПриАктивизацииСтроки(Элемент) + + ПодключитьОбработчикОжидания("ОтложенныйОбработчикАктивизацииСтрокиНеобработанныхДублей", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтложенныйОбработчикАктивизацииСтрокиНеобработанныхДублей() + + ДанныеСтроки = Элементы.НеобработанныеДубли.ТекущиеДанные; + Если ДанныеСтроки = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбновитьМестаИспользованияНеобработанныхДубли( ДанныеСтроки.ПолучитьИдентификатор() ); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьМестаИспользованияНеобработанныхДубли(Знач СтрокаДанных) + ДанныеСтроки = НеобработанныеДубли.НайтиПоИдентификатору(СтрокаДанных); + + Если ДанныеСтроки.ПолучитьРодителя() = Неопределено Тогда + // Описание группы + МестаИспользованияНеобработанных.Очистить(); + + НаименованиеОригинала = Неопределено; + Для Каждого Кандидат Из ДанныеСтроки.ПолучитьЭлементы() Цикл + Если Кандидат.Основной Тогда + НаименованиеОригинала = Кандидат.Наименование; + Прервать; + КонецЕсли; + КонецЦикла; + + Элементы.ОписаниеТекущейГруппыДублей1.Заголовок = ФорматСтроки( + НСтр("ru = 'Для элемента ""%1"" найдены дубли (%2)'"), + НаименованиеОригинала, ДанныеСтроки.Количество + ); + + Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеГруппыНеобработанных; + Возврат; + КонецЕсли; + + // Перечень мест ошибок + ТаблицаОшибок = ПолучитьИзВременногоХранилища(АдресРезультатаЗамены); + Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); + + Данные = ТаблицаОшибок.Скопировать( ТаблицаОшибок.НайтиСтроки(Фильтр) ); + Данные.Колонки.Добавить("Пиктограмма"); + Данные.ЗаполнитьЗначения(Истина, "Пиктограмма"); + МестаИспользованияНеобработанных.Загрузить(Данные); + + Если ДанныеСтроки.Количество = 0 Тогда + Элементы.ОписаниеТекущейГруппыДублей1.Заголовок = ФорматСтроки(НСтр("ru = 'Элемент ""%1"" успешно обработан'"), + ДанныеСтроки.Наименование + ); + + Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеГруппыНеобработанных; + Иначе + Элементы.МестаИспользованияКандидата.Заголовок = ФорматСтроки(НСтр("ru = 'Не удалось заменить дубли в некоторых местах (%1)'"), + ДанныеСтроки.Количество + ); + + Элементы.СтраницыМестаИспользованияНеобработанных.ТекущаяСтраница = Элементы.ОписаниеМестИспользованияНеобработанных; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НеобработанныеДублиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьФормуДубля(Элементы.НеобработанныеДубли.ТекущиеДанные); + +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиСобытийТаблицыМестаИспользованияНеобработанных +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура МестаИспользованияНеобработанныхПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + ОписаниеОшибкиНеобработанных = ""; + Иначе + ОписаниеОшибкиНеобработанных = ТекущиеДанные.ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура МестаИспользованияНеобработанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = МестаИспользованияНеобработанных.НайтиПоИдентификатору(ВыбраннаяСтрока); + ПоказатьЗначение(, ТекущиеДанные.ОбъектОшибки); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыМестаИспользованияКандидата +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура МестаИспользованияКандидатаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = МестаИспользованияКандидата.НайтиПоИдентификатору(ВыбраннаяСтрока); + ПоказатьЗначение(, ТекущиеДанные.Данные); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура ОчиститьПравилаОтбора(Команда) + + ОчиститьОтборПринудительно(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьОсновнойЭлемент(Команда) + + ДанныеСтроки = Элементы.НайденныеДубли.ТекущиеДанные; + Если ДанныеСтроки = Неопределено // Нет данных + Или ДанныеСтроки.Основной // Текущий уже основной + Тогда + Возврат; + КонецЕсли; + + Родитель = ДанныеСтроки.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ИзменитьОсновнойЭлементИерархически(ДанныеСтроки, Родитель); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьКандидатаВДубли(Команда) + + ОткрытьФормуДубля(Элементы.НайденныеДубли.ТекущиеДанные); + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьГруппыДублей(Команда) + + РазвернутьГруппуДублейИерархически(); + +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьГруппыДублей(Команда) + + СвернутьГруппуДублейИерархически(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПовторитьПоиск(Команда) + + ПерейтиНаШагМастера(Элементы.ШагВыполнениеПоиска, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагМастераНазад(Команда) + ШагМастера("Назад"); +КонецПроцедуры + +&НаКлиенте +Процедура ШагМастераДалее(Команда) + ШагМастера("Далее"); +КонецПроцедуры + +&НаКлиенте +Процедура ШагМастераОтмена(Команда) + ШагМастера("Отмена"); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +&НаКлиенте +Процедура ОбновитьУстановкиОбластиДублей(Знач ВыбранноеЗначение) + + Элемент = ОбластиПоискаДублей.НайтиПоЗначению(ВыбранноеЗначение); + Если Элемент = Неопределено Тогда + ПредставлениеОбластиПоискаДублей = ""; + ОбластьПоискаДублей = ""; + Иначе + ПредставлениеОбластиПоискаДублей = Элемент.Представление; + ОбластьПоискаДублей = ВыбранноеЗначение; + КонецЕсли; + + ИнициализироватьКомпоновщикОтбораИПравила(); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуДубля(Знач ТекущиеДанные) + Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + Возврат; + КонецЕсли; + + ПоказатьЗначение(,ТекущиеДанные.Ссылка); +КонецПроцедуры + +&НаСервере +Процедура УстановитьЦветаИУсловноеОформление() + + ЦветПоясняющийТекст = ЦветСтиляИлиАвто("ПоясняющийТекст", 69, 81, 133); + ЦветПоясняющийОшибкуТекст = ЦветСтиляИлиАвто("ПоясняющийОшибкуТекст", 255, 0, 0); + ЦветНедоступныеДанные = ЦветСтиляИлиАвто("ЦветНедоступныеДанные", 192, 192, 192); + + ЭлементыУсловногоОформления = УсловноеОформление.Элементы; + ЭлементыУсловногоОформления.Очистить(); + + // Отсутствие мест использования у группы + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Ссылка"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", ""); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиКоличество"); + + // 1. Строка с текущим основным элементом группы: + + // Картинка + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); + + // Отсутствие пометки + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиПометка"); + + // 2. Строка с обычным элементом + + // Картинка + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Ложь; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиОсновной"); + + // Наличие пометки + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Основной"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Ложь; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Истина); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиПометка"); + + // 3. Места использования + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Ссылка"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + ОтборОформления.ПравоеЗначение = Истина; + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Количество"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = 0; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не используется'")); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиКоличество"); + + // 4. Неактивная строка + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеДубли.Пометка"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = 0; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНедоступныеДанные); + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДубли"); + +КонецПроцедуры + +&НаСервере +Процедура ЗапуститьФоновыйПоискДублей() + + Если Не ЭтоАдресВременногоХранилища(АдресСхемыКомпоновки) Тогда + // Не инициализировано + Возврат; + КонецЕсли; + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); + ПараметрыПоиска.Вставить("МаксимальноеЧислоДублей", 1500); + + МассивПравилПоиска = Новый Массив; + Для Каждого Правило Из ПравилаПоиска Цикл + МассивПравилПоиска.Добавить( Новый Структура("Реквизит, Правило", Правило.Реквизит, Правило.Правило) ); + КонецЦикла; + ПараметрыПоиска.Вставить("ПравилаПоиска", МассивПравилПоиска); + + ПараметрыПоиска.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); + + Если ДоступноВыполнениеПроцедурыМодуляОбъектаОбработки Тогда + // В качестве схемы компоновки передаем схему, будет использован отдельный фоновый сеанс + ПараметрыПоиска.Вставить("СхемаКомпоновки", ПолучитьИзВременногоХранилища(АдресСхемыКомпоновки) ); + Иначе + // В качестве схемы компоновки передаем адрес, будет использован этот же сеанс + ПараметрыПоиска.Вставить("СхемаКомпоновки", АдресСхемыКомпоновки); + КонецЕсли; + ПараметрыПоиска.Вставить("НастройкиКомпоновщикаПредварительногоОтбора", КомпоновщикПредварительногоОтбора.Настройки); + + ЗапуститьДлительнуюОперациюМастера("ФоновыйПоискДублей", ПараметрыПоиска, Истина, НСтр("ru = 'Поиск групп дублей'") ); +КонецПроцедуры + +&НаСервере +Функция ЦветСтиляИлиАвто(Знач Имя, Знач Красный = Неопределено, Зеленый = Неопределено, Синий = Неопределено) + + ЭлементСтиля = Метаданные.ЭлементыСтиля.Найти(Имя); + Если ЭлементСтиля <> Неопределено И ЭлементСтиля.Вид = Метаданные.СвойстваОбъектов.ВидЭлементаСтиля.Цвет Тогда + Возврат ЦветаСтиля[Имя]; + КонецЕсли; + + Возврат ?(Красный = Неопределено, Новый Цвет, Новый Цвет(Красный, Зеленый, Синий)); +КонецФункции + +&НаСервере +Функция ПарыЗаменДублей() + ПарыЗамен = Новый Соответствие; + + ДеревоДублей = РеквизитФормыВЗначение("НайденныеДубли"); + ФильтрПоиска = Новый Структура("Основной", Истина); + + Для Каждого Родитель Из ДеревоДублей.Строки Цикл + ОсновнойВГруппе = Родитель.Строки.НайтиСтроки(ФильтрПоиска)[0].Ссылка; + + Для Каждого Потомок Из Родитель.Строки Цикл + Если Потомок.Пометка = 1 Тогда + ПарыЗамен.Вставить(Потомок.Ссылка, ОсновнойВГруппе); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат ПарыЗамен; +КонецФункции + +&НаКлиенте +Функция ПараметрыОтчетаМестИспользования(Знач Источник) + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("НаборСсылок", Новый Массив); + + Для Каждого Родитель Из Источник.ПолучитьЭлементы() Цикл + Для Каждого Потомок Из Родитель.ПолучитьЭлементы() Цикл + ПараметрыОтчета.НаборСсылок.Добавить(Потомок.Ссылка); + КонецЦикла; + КонецЦикла; + + Возврат ПараметрыОтчета; +КонецФункции + +&НаКлиенте +Процедура РазвернутьГруппуДублейИерархически(Знач СтрокаДанных = Неопределено) + Если СтрокаДанных <> Неопределено Тогда + Элементы.НайденныеДубли.Развернуть(СтрокаДанных, Истина); + КонецЕсли; + + // Все первого уровня + ВсеСтроки = Элементы.НайденныеДубли; + Для Каждого ДанныеСтроки Из НайденныеДубли.ПолучитьЭлементы() Цикл + ВсеСтроки.Развернуть(ДанныеСтроки.ПолучитьИдентификатор(), Истина); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьГруппуДублейИерархически(Знач СтрокаДанных = Неопределено) + Если СтрокаДанных <> Неопределено Тогда + Элементы.НайденныеДубли.Свернуть(СтрокаДанных); + Возврат; + КонецЕсли; + + // Все первого уровня + ВсеСтроки = Элементы.НайденныеДубли; + Для Каждого ДанныеСтроки Из НайденныеДубли.ПолучитьЭлементы() Цикл + ВсеСтроки.Свернуть(ДанныеСтроки.ПолучитьИдентификатор()); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьПометкиКандидатовИерархически(Знач ДанныеСтроки) + ПроставитьПометкиВниз(ДанныеСтроки); + ПроставитьПометкиВверх(ДанныеСтроки); +КонецПроцедуры + +&НаКлиенте +Процедура ПроставитьПометкиВниз(Знач ДанныеСтроки) + Значение = ДанныеСтроки.Пометка; + Для Каждого Потомок Из ДанныеСтроки.ПолучитьЭлементы() Цикл + Потомок.Пометка = Значение; + ПроставитьПометкиВниз(Потомок); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ПроставитьПометкиВверх(Знач ДанныеСтроки) + РодительСтроки = ДанныеСтроки.ПолучитьРодителя(); + + Если РодительСтроки <> Неопределено Тогда + ВсеИстина = Истина; + НеВсеЛожь = Ложь; + + Для Каждого Потомок Из РодительСтроки.ПолучитьЭлементы() Цикл + ВсеИстина = ВсеИстина И (Потомок.Пометка = 1); + НеВсеЛожь = НеВсеЛожь Или (Потомок.Пометка > 0); + КонецЦикла; + + Если ВсеИстина Тогда + РодительСтроки.Пометка = 1; + + ИначеЕсли НеВсеЛожь Тогда + РодительСтроки.Пометка = 2; + + Иначе + РодительСтроки.Пометка = 0; + + КонецЕсли; + + ПроставитьПометкиВверх(РодительСтроки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьОсновнойЭлементИерархически(Знач ДанныеСтроки, Знач Родитель) + Для Каждого Потомок Из Родитель.ПолучитьЭлементы() Цикл + Потомок.Основной = Ложь; + КонецЦикла; + ДанныеСтроки.Основной = Истина; + + // Выбранный всегда используем + ДанныеСтроки.Пометка = 1; + ИзменитьПометкиКандидатовИерархически(ДанныеСтроки); + + // И изменяем название группы + Родитель.Наименование = ФорматСтроки( НСтр("ru = '%1 (%2)'"), ДанныеСтроки.Наименование, Родитель.Количество); +КонецПроцедуры + +&НаСервере +Функция ПроверитьСостояниеПоискаДублей() + СостояниеОперации = СостояниеДлительнойОперацииМастера(); + + Если Не СостояниеОперации.Завершено Тогда + // Клиенту пока можно ничего не говорить + СостояниеОперации.Результат = Неопределено; + + ИначеЕсли СостояниеОперации.ИнформацияОбОшибке <> Неопределено Тогда + // Завершено c ошибками + СостояниеОперации.Результат = Неопределено; + + ИначеЕсли СостояниеОперации.Завершено И СостояниеОперации.Результат <> Неопределено Тогда + // Формируем таблицы результата + СостояниеОперации.Результат = ЗаполнитьРезультатыПоискаДублей( СостояниеОперации.Результат ); + + КонецЕсли; + + Возврат СостояниеОперации; +КонецФункции + +&НаСервере +Функция ЗаполнитьРезультатыПоискаДублей(Знач Данные) + // Данные - результат функции ГруппыДублей модуля + + // Строим дерево для редактирования по таблицам результата + ЭлементыДерева = НайденныеДубли.ПолучитьЭлементы(); + ЭлементыДерева.Очистить(); + + МестаИспользования = Данные.МестаИспользования; + ТаблицаДублей = Данные.ТаблицаДублей; + + ФильтрСтрок = Новый Структура("Родитель"); + ФильтрМест = Новый Структура("Ссылка"); + + ВсегоНайденоДублей = 0; + + ВсеГруппы = ТаблицаДублей.НайтиСтроки(ФильтрСтрок); + Для Каждого Группа Из ВсеГруппы Цикл + ФильтрСтрок.Родитель = Группа.Ссылка; + ЭлементыГруппы = ТаблицаДублей.НайтиСтроки(ФильтрСтрок); + + ГруппаДерева = ЭлементыДерева.Добавить(); + ГруппаДерева.Количество = ЭлементыГруппы.Количество(); + ГруппаДерева.Пометка = 1; + + МаксСтрока = Неопределено; + МаксМест = -1; + Для Каждого Элемент Из ЭлементыГруппы Цикл + СтрокаДерева = ГруппаДерева.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаДерева, Элемент, "Ссылка, Код, Наименование"); + СтрокаДерева.Пометка = 1; + + ФильтрМест.Ссылка = Элемент.Ссылка; + СтрокаДерева.Количество = МестаИспользования.НайтиСтроки(ФильтрМест).Количество(); + + Если МаксМест < СтрокаДерева.Количество Тогда + Если МаксСтрока <> Неопределено Тогда + МаксСтрока.Основной = Ложь; + КонецЕсли; + МаксСтрока = СтрокаДерева; + МаксМест = СтрокаДерева.Количество; + МаксСтрока.Основной = Истина; + КонецЕсли; + + ВсегоНайденоДублей = ВсегоНайденоДублей + 1; + КонецЦикла; + + // Устанавливаем кандидата по максимальной ссылке + ГруппаДерева.Наименование = МаксСтрока.Наименование + " (" + ГруппаДерева.Количество + ")"; + КонецЦикла; + + // Места использования сохраняем для дальнейшего фильтра + МестаИспользованияКандидата.Очистить(); + Элементы.ОписаниеТекущейГруппыДублей.Заголовок = НСтр("ru = 'Дублей не найдено'"); + + Если ЭтоАдресВременногоХранилища(АдресМестИспользования) Тогда + УдалитьИзВременногоХранилища(АдресМестИспользования); + КонецЕсли; + АдресМестИспользования = ПоместитьВоВременноеХранилище(МестаИспользования, УникальныйИдентификатор); + + Если Не ПустаяСтрока(Данные.ОписаниеОшибки) Тогда + // Фоновое сломалось + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Внимание16.Картинка, " ", + Новый ФорматированнаяСтрока(Данные.ОписаниеОшибки, , ЦветПоясняющийОшибкуТекст) + ); + Возврат -1; + + КонецЕсли; + + // Нет ошибок поиска + Если ВсегоНайденоДублей = 0 Тогда + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", + НСтр("ru = 'Не обнаружено дублей по указанным условиям'") + ); + Иначе + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(ФорматСтроки( + НСтр("ru = 'Найдены дубли элементов: %2 (среди элементов: %1). Все отмеченные элементы будут помечены на удаление + |и заменены во всех местах использования на оригиналы (отмечены стрелкой).'"), + ВсегоНайденоДублей, ВсегоНайденоДублей - ЭлементыДерева.Количество()), + , ЦветПоясняющийТекст + ); + КонецЕсли; + + Возврат ВсегоНайденоДублей; +КонецФункции + +&НаСервере +Функция ПроверитьСостояниеУдаленияДублей() + + СостояниеОперации = СостояниеДлительнойОперацииМастера(); + + Если Не СостояниеОперации.Завершено Тогда + // Клиенту пока можно ничего не говорить + СостояниеОперации.Результат = Неопределено; + + ИначеЕсли СостояниеОперации.ИнформацияОбОшибке <> Неопределено Тогда + // Завершено c ошибками + СостояниеОперации.Результат = Неопределено; + + ИначеЕсли СостояниеОперации.Завершено И СостояниеОперации.Результат <> Неопределено Тогда + // Формируем таблицы результата + СостояниеОперации.Результат = ЗаполнитьРезультатыУдаленияДублей( СостояниеОперации.Результат ); + + КонецЕсли; + + Возврат СостояниеОперации; +КонецФункции + +&НаСервере +Функция ЗаполнитьРезультатыУдаленияДублей(Знач ТаблицаОшибок) + // ТаблицаОшибок - результат функции ЗаменитьСсылки модуля + + Если ЭтоАдресВременногоХранилища(АдресРезультатаЗамены) Тогда + УдалитьИзВременногоХранилища(АдресРезультатаЗамены); + КонецЕсли; + + ЗавершеноБезОшибок = ТаблицаОшибок.Количество() = 0; + ПоследнийКандидат = Неопределено; + + Если ЗавершеноБезОшибок Тогда + ВсегоОбработано = 0; + ВсегоОсновных = 0; + Для Каждого ГруппаДублей Из НайденныеДубли.ПолучитьЭлементы() Цикл + Если ГруппаДублей.Пометка Тогда + Для Каждого Кандидат Из ГруппаДублей.ПолучитьЭлементы() Цикл + Если Кандидат.Основной Тогда + ПоследнийКандидат = Кандидат.Ссылка; + ВсегоОбработано = ВсегоОбработано + 1; + ВсегоОсновных = ВсегоОсновных + 1; + ИначеЕсли Кандидат.Пометка Тогда + ВсегоОбработано = ВсегоОбработано + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Если ВсегоОсновных = 1 Тогда + // Много дублей в один элемент + Если ПоследнийКандидат = Неопределено Тогда + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", ФорматСтроки( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены'"), + ВсегоОбработано) + ); + Иначе + ПоследнийКандидатСтрокой = ОбщегоНазначения.ПредметСтрокой(ПоследнийКандидат); + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", ФорматСтроки( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены + |в ""%2""'"), + ВсегоОбработано, ПоследнийКандидатСтрокой) + ); + КонецЕсли; + Иначе + // Много дублей во много групп + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", ФорматСтроки( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены. + |Оставлено элементов (%2).'"), + ВсегоОбработано, ВсегоОсновных) + ); + КонецЕсли; + КонецЕсли; + + НеобработанныеДубли.ПолучитьЭлементы().Очистить(); + МестаИспользованияНеобработанных.Очистить(); + МестаИспользованияКандидата.Очистить(); + + Если ЗавершеноБезОшибок Тогда + НайденныеДубли.ПолучитьЭлементы().Очистить(); + Возврат Истина; + КонецЕсли; + + // Сохраняем для последующего доступа при анализе ссылок + АдресРезультатаЗамены = ПоместитьВоВременноеХранилище(ТаблицаОшибок, УникальныйИдентификатор); + + // Формируем дерево дублей по ошибкам + ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("НайденныеДубли"), "НеобработанныеДубли"); + + // Анализируем оставшихся + Фильтр = Новый Структура("Ссылка"); + Родители = НеобработанныеДубли.ПолучитьЭлементы(); + ПозицияРодителя = Родители.Количество() - 1; + Пока ПозицияРодителя >= 0 Цикл + Родитель = Родители[ПозицияРодителя]; + + Потомки = Родитель.ПолучитьЭлементы(); + ПозицияПотомка = Потомки.Количество() - 1; + ОсновнойПотомок = Потомки[0]; // Там есть минимум один + + Пока ПозицияПотомка >= 0 Цикл + Потомок = Потомки[ПозицияПотомка]; + + Если Потомок.Основной Тогда + ОсновнойПотомок = Потомок; + Фильтр.Ссылка = Потомок.Ссылка; + Потомок.Количество = ТаблицаОшибок.НайтиСтроки(Фильтр).Количество(); + + ИначеЕсли ТаблицаОшибок.Найти(Потомок.Ссылка, "Ссылка") = Неопределено Тогда + // Был успешно удален, нет ошибок + Потомки.Удалить(Потомок); + + Иначе + Фильтр.Ссылка = Потомок.Ссылка; + Потомок.Количество = ТаблицаОшибок.НайтиСтроки(Фильтр).Количество(); + + КонецЕсли; + + ПозицияПотомка = ПозицияПотомка - 1; + КонецЦикла; + + КоличествоПотомков = Потомки.Количество(); + Если КоличествоПотомков = 1 И Потомки[0].Основной Тогда + Родители.Удалить(Родитель); + Иначе + Родитель.Количество = КоличествоПотомков - 1; + Родитель.Наименование = ОсновнойПотомок.Наименование + " (" + КоличествоПотомков + ")"; + КонецЕсли; + + ПозицияРодителя = ПозицияРодителя - 1; + КонецЦикла; + + Возврат Ложь; +КонецФункции + +&НаСервере +Функция АдресНастроекКомпоновщикаОтбора() + + Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, УникальныйИдентификатор) + +КонецФункции + +&НаСервере +Функция АдресНастроекПравилПоиска() + + Настройки = Новый Структура; + Настройки.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); + Настройки.Вставить("ВсеВариантыСравнения", ВсеВариантыСравнения); + Настройки.Вставить("ПравилаПоиска", РеквизитФормыВЗначение("ПравилаПоиска")); + + Возврат ПоместитьВоВременноеХранилище(Настройки); +КонецФункции + +&НаСервере +Процедура ОбновитьКомпоновщикОтбора(Адрес) + + КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки( ПолучитьИзВременногоХранилища(Адрес) ); + УдалитьИзВременногоХранилища(Адрес); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПравилаПоиска(Адрес) + Настройки = ПолучитьИзВременногоХранилища(Адрес); + Адрес = Неопределено; + + УчитыватьПрикладныеПравила = Настройки.УчитыватьПрикладныеПравила; + ЗначениеВРеквизитФормы(Настройки.ПравилаПоиска, "ПравилаПоиска"); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОписаниеПравилПоиска() + ТекстПравил = ""; + Союз = " " + НСтр("ru = 'И'") + " "; + + Для Каждого Правило Из ПравилаПоиска Цикл + + Если Правило.Правило = "Равно" Тогда + Сравнение = НСтр("ru = '%1 совпадает'"); + ИначеЕсли Правило.Правило = "Подобно" Тогда + Сравнение = НСтр("ru = '%1 совпадает по похожим словам'"); + Иначе + Сравнение = ""; + КонецЕсли; + + ТекстПравил = ТекстПравил + ?(ПустаяСтрока(Сравнение), "", Союз) + СтрЗаменить(Сравнение, "%1", Правило.ПредставлениеРеквизита); + КонецЦикла; + + ПрикладнойТекст = ""; + Если УчитыватьПрикладныеПравила Тогда + Для Позиция = 1 По СтрЧислоСтрок(ОписаниеПрикладныхПравил) Цикл + СтрокаПравила = СокрЛП(СтрПолучитьСтроку(ОписаниеПрикладныхПравил, Позиция)); + Если Не ПустаяСтрока(СтрокаПравила) Тогда + ПрикладнойТекст = ПрикладнойТекст + Союз + СтрокаПравила; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ТекстПравил = ТекстПравил + ПрикладнойТекст; + Если ПустаяСтрока(ТекстПравил) Тогда + Элементы.ПравилаПоиска.Заголовок = НСтр("ru = 'Правила не заданы'"); + Иначе + Элементы.ПравилаПоиска.Заголовок = СокрЛП(Сред(ТекстПравил, СтрДлина(Союз))); + КонецЕсли; + + Элементы.ПравилаПоиска.Доступность = Не ПустаяСтрока(ОбластьПоискаДублей); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОписаниеОтбора() + + ОписаниеОтбора = Строка(КомпоновщикПредварительногоОтбора.Настройки.Отбор); + Если ПустаяСтрока(ОписаниеОтбора) Тогда + ОписаниеОтбора = НСтр("ru = 'Все элементы'"); + Элементы.ОчиститьПравилаОтбора.Доступность = Ложь; + Иначе + Элементы.ОчиститьПравилаОтбора.Доступность = Истина; + КонецЕсли; + + Элементы.ПравилаОтбора.Заголовок = ОписаниеОтбора; + + Элементы.ПравилаОтбора.Доступность = Не ПустаяСтрока(ОбластьПоискаДублей); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОписаниеОбластиПоиска() + + Список = Элементы.ПредставлениеОбластиПоискаДублей.СписокВыбора; + Список.Очистить(); + ЭлементПредставления = Список.Добавить(); + + Текущий = ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоискаДублей); + Если Текущий <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭлементПредставления, Текущий); + КонецЕсли; + + ЭтотОбъект.ОбновитьОтображениеДанных(); +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьОтборПринудительно() + + КомпоновщикПредварительногоОтбора.Настройки.Отбор.Элементы.Очистить(); + ОбновитьОписаниеОтбора(); + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьКомпоновщикОтбораИПравила() + // 1. Очистка всего + КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; + Если ЭтоАдресВременногоХранилища(АдресСхемыКомпоновки) Тогда + УдалитьИзВременногоХранилища(АдресСхемыКомпоновки); + АдресСхемыКомпоновки = ""; + КонецЕсли; + + ОписаниеПрикладныхПравил = Неопределено; + ПравилаПоиска.Очистить(); + + Если ПустаяСтрока(ОбластьПоискаДублей) Тогда + Возврат; + КонецЕсли; + + МетаОбласть = Метаданные.НайтиПоПолномуИмени(ОбластьПоискаДублей); + + // 2. Собираем компоновщик для поиска - отбора + ДоступныеРеквизитыОтбора = ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.СтандартныеРеквизиты); + ДоступныеРеквизитыОтбора = ?(ПустаяСтрока(ДоступныеРеквизитыОтбора), ",", ДоступныеРеквизитыОтбора) + + ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.Реквизиты); + + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Запрос = "ВЫБРАТЬ " + Сред(ДоступныеРеквизитыОтбора, 2) + " ИЗ " + ОбластьПоискаДублей; + НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; + + // Сохраним схему в разрезе основной формы, чтобы компоновщик не терял актуальность + АдресСхемыКомпоновки = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); + + КомпоновщикПредварительногоОтбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); + + // 3. Собираем правила, предлагаемые нами по умолчанию для вида метаданных + ИгнорируемыеРеквизиты = Новый Структура("ПометкаУдаления, Ссылка, Предопределенный, ИмяПредопределенныхДанных, ЭтоГруппа"); + ТаблицаПравил = РеквизитФормыВЗначение("ПравилаПоиска"); + + ВсеВариантыСравнения.Очистить(); + ВсеВариантыСравнения.Добавить("Равно", НСтр("ru = 'Совпадает'")); + ВсеВариантыСравнения.Добавить("Подобно", НСтр("ru = 'Совпадает по похожим словам'")); + + ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, МетаОбласть.СтандартныеРеквизиты); + ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, МетаОбласть.Реквизиты); + + УстановитьЗначенияПравилПоУмолчанию(ОбластьПоискаДублей, КомпоновщикПредварительногоОтбора, ТаблицаПравил); + + // 4. Обрабатываем прикладные данные + Если ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоискаДублей).Пометка Тогда + // Есть прикладной функционал + + // Пустая структура параметров + ОбъектОбработки = РеквизитФормыВЗначение("Объект"); + ПараметрыПоУмолчанию = ОбъектОбработки.ПрикладныеПараметрыПоУмолчанию( + ПравилаПоиска.Выгрузить(,"Реквизит, Правило"), + КомпоновщикПредварительногоОтбора + ); + + // Вызываем прикладной код + МенеджерОбласти = ОбъектОбработки.МенеджерОбластиПоискаДублей(ОбластьПоискаДублей); + МенеджерОбласти.ПараметрыПоискаДублей(ПараметрыПоУмолчанию); + + // Формируем строку прикладных правил + ОписаниеПрикладныхПравил = ""; + Для Каждого Описание Из ПараметрыПоУмолчанию.ОграниченияСравнения Цикл + ОписаниеПрикладныхПравил = ОписаниеПрикладныхПравил + Символы.ПС + Описание.Представление; + КонецЦикла; + ОписаниеПрикладныхПравил = СокрЛП(ОписаниеПрикладныхПравил); + КонецЕсли; + + ТаблицаПравил.Сортировать("ПредставлениеРеквизита"); + ЗначениеВРеквизитФормы(ТаблицаПравил, "ПравилаПоиска"); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДоступныеИменаМетаРеквизитовОтбора(Знач МетаКоллекция) + Результат = ""; + ТипХранилища = Тип("ХранилищеЗначения"); + + Для Каждого МетаРеквизит Из МетаКоллекция Цикл + ЭтоХранилище = МетаРеквизит.Тип.СодержитТип(ТипХранилища); + Если Не ЭтоХранилище Тогда + Результат = Результат + "," + МетаРеквизит.Имя; + КонецЕсли + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервереБезКонтекста +Процедура ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, Знач Игнорировать, Знач ВсеВариантыСравнения, Знач МетаКоллекция) + + Для Каждого МетаРеквизит Из МетаКоллекция Цикл + Если Не Игнорировать.Свойство(МетаРеквизит.Имя) Тогда + ВариантыСравнения = ВариантыСравненияДляТипа(МетаРеквизит.Тип, ВсеВариантыСравнения); + Если ВариантыСравнения <> Неопределено Тогда + // Можно сравнивать + СтрокаПравил = ТаблицаПравил.Добавить(); + СтрокаПравил.Реквизит = МетаРеквизит.Имя; + СтрокаПравил.ВариантыСравнения = ВариантыСравнения; + + ПредставлениеРеквизита = МетаРеквизит.Синоним; + СтрокаПравил.ПредставлениеРеквизита = ?(ПустаяСтрока(ПредставлениеРеквизита), МетаРеквизит.Имя, ПредставлениеРеквизита); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьЗначенияПравилПоУмолчанию(Знач ОбластьПоиска, Знач КомпоновщикОтбора, Знач ПравилаСравнения) + + // Правило отбора + ЭлементыОтбора = КомпоновщикОтбора.Настройки.Отбор.Элементы; + ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.Использование = Истина; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Ложь;; + + // Правило сравнения, только если есть наименование + Правило = ПравилаСравнения.Найти("Наименование", "Реквизит"); + Если Правило <> Неопределено Тогда + Если Правило.ВариантыСравнения.НайтиПоЗначению("Подобно") <> Неопределено Тогда + Правило.Правило = "Подобно"; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВариантыСравненияДляТипа(Знач ДоступныеТипы, Знач ВсеВариантыСравнения) + + ЭтоХранилище = ДоступныеТипы.СодержитТип(Тип("ХранилищеЗначения")); + Если ЭтоХранилище Тогда + // Нельзя сравнивать + Возврат Неопределено; + КонецЕсли; + + ЭтоСтрока = ДоступныеТипы.СодержитТип(Тип("Строка")); + ЭтоФиксированнаяСтрока = ЭтоСтрока И ДоступныеТипы.КвалификаторыСтроки <> Неопределено + И ДоступныеТипы.КвалификаторыСтроки.Длина <> 0; + + Если ЭтоСтрока И Не ЭтоФиксированнаяСтрока Тогда + // Нельзя сравнивать + Возврат Неопределено; + КонецЕсли; + + Результат = Новый СписокЗначений; + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[0]); // Совпадает + + Если ЭтоСтрока Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[1]); // Похоже + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ИнициализироватьОсновныеПараметры() + + // Флаг учета правил ставим безусловно + УчитыватьПрикладныеПравила = Истина; + + ОбъектОбработки = РеквизитФормыВЗначение("Объект"); + МетаОбъектОбработки = ОбъектОбработки.Метаданные(); + + ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(МетаОбъектОбработки); + ИмяОбработки = ?(ЭтоВнешняяОбработка, ОбъектОбработки.ИспользуемоеИмяФайла, МетаОбъектОбработки.Имя); + БазовоеИмяФормы = МетаОбъектОбработки.ПолноеИмя() + ".Форма."; + + ДоступноВыполнениеПроцедурыМодуляОбъектаОбработки = Метаданные.НайтиПоПолномуИмени( + "Подсистема.СтандартныеПодсистемы.Подсистема.БазоваяФункциональность" + ) <> Неопределено; + + ОбъектОбработки.ОбластиПоискаДублей(ОбластиПоискаДублей, Истина); +КонецПроцедуры + +// Построение форматированной строки по шаблону "Текст %1 %2" +// +&НаКлиентеНаСервереБезКонтекста +Функция ФорматСтроки(Знач Шаблон, + Знач П1 = Неопределено, Знач П2 = Неопределено, Знач П3 = Неопределено, Знач П4 = Неопределено, Знач П5 = Неопределено, + Знач П6 = Неопределено, Знач П7 = Неопределено, Знач П8 = Неопределено, Знач П9 = Неопределено +) + + ЧастиСтроки = Новый Массив; + ДопустимыеТипы = Новый ОписаниеТипов("Строка, ФорматированнаяСтрока, Картинка"); + + Начало = 1; + Пока Истина Цикл + Фрагмент = Сред(Шаблон, Начало); + + Позиция = Найти(Фрагмент, "%"); + Если Позиция = 0 Тогда + ЧастиСтроки.Добавить(Фрагмент); + Прервать; + КонецЕсли; + + Следующий = Сред(Фрагмент, Позиция + 1, 1); + + Если Следующий = "1" Тогда + Значение = П1; + + ИначеЕсли Следующий = "2" Тогда + Значение = П2; + + ИначеЕсли Следующий = "3" Тогда + Значение = П3; + + ИначеЕсли Следующий = "4" Тогда + Значение = П4; + + ИначеЕсли Следующий = "5" Тогда + Значение = П5; + + ИначеЕсли Следующий = "6" Тогда + Значение = П6; + + ИначеЕсли Следующий = "7" Тогда + Значение = П7; + + ИначеЕсли Следующий = "8" Тогда + Значение = П8; + + ИначеЕсли Следующий = "9" Тогда + Значение = П9; + + ИначеЕсли Следующий = "%" Тогда + Значение = "%"; + + Иначе + Значение = Неопределено; + Позиция = Позиция - 1; + + КонецЕсли; + + ЧастиСтроки.Добавить(Лев(Фрагмент, Позиция - 1)); + + Если Значение <> Неопределено Тогда + Значение = ДопустимыеТипы.ПривестиЗначение(Значение); + Если Значение <> Неопределено Тогда + ЧастиСтроки.Добавить( Значение ); + КонецЕсли; + КонецЕсли; + + Начало = Начало + Позиция + 1; + КонецЦикла; + + Возврат Новый ФорматированнаяСтрока(ЧастиСтроки); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Пошаговый помощник + +&НаСервере +Процедура ИнициализироватьСценарийМастера() + + // 0. Поиск не выполнялся + ДобавитьШагМастера(Элементы.ШагПоискНеВыполнялся, + ДействиеШагаМастера("ПриАктивации", "ШагПоискНеВыполнялсяПриАктивации", + ДействиеШагаМастера("ПередДействиемДалее", "ШагПоискНеВыполнялсяПередДействиемДалее", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагПоискНеВыполнялсяПередДействиемОтмена", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", НСтр("ru = 'Найти дубли'") + " >", НСтр("ru = 'Найти дубли по указанным критериям'"), Истина, Истина, Истина, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Закрыть'"), НСтр("ru = 'Отказаться от поиска и замены дублей'"), + ))) + ); + + // 1. Длительный поиск + ДобавитьШагМастера(Элементы.ШагВыполнениеПоиска, + ДействиеШагаМастера("ПриАктивации", "ШагВыполнениеПоискаПриАктивации", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагВыполнениеПоискаПередДействиемОтмена", + ДействиеШагаМастера("ПриОбработкеОжидания", "ШагВыполнениеПоискаПриОбработкеОжидания", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Прервать'"), НСтр("ru = 'Прервать поиск дублей'"), + ))) + ); + + // 2. Обработка результатов поиска, выбор основных элементов + ДобавитьШагМастера(Элементы.ШагВыборОсновногоЭлемента, + ДействиеШагаМастера("ПриАктивации", "ШагВыборОсновногоЭлементаПриАктивации", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагВыборОсновногоЭлементаПередДействиемОтмена", + ДействиеШагаМастера("ПередДействиемДалее", "ШагВыборОсновногоЭлементаПередДействиемДалее", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", НСтр("ru = 'Удалить дубли'") + " >", НСтр("ru = 'Удалить дубли'"), Истина, Истина, Истина, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Закрыть'"), НСтр("ru = 'Отказаться от поиска и замены дублей'"), + ))) + ); + + // 3. Длительное удаление дублей + ДобавитьШагМастера(Элементы.ШагВыполнениеУдаления, + ДействиеШагаМастера("ПриАктивации", "ШагВыполнениеУдаленияПриАктивации", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагВыполнениеУдаленияПередДействиемОтмена", + ДействиеШагаМастера("ПриОбработкеОжидания", "ШагВыполнениеУдаленияПриОбработкеОжидания", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Прервать'"), НСтр("ru = 'Прервать удаление дублей'"), + ))) + ); + + // 4. Успешное удаление + ДобавитьШагМастера(Элементы.ШагУспешноеУдаление, + ДействиеШагаМастера("ПриАктивации", "ШагУспешноеУдалениеПриАктивации", + ДействиеШагаМастера("ПередДействиемНазад", "ШагУспешноеУдалениеПередДействиемНазад", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагУспешноеУдалениеПередДействиемОтмена", + ))), + КнопкаШагаМастера("Назад", "< " + НСтр("ru = 'Новый поиск'"), НСтр("ru = 'Начать новый поиск с другими параметрами'"), Истина, Истина, Ложь, + КнопкаШагаМастера("Далее", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Закрыть'"), НСтр("ru = 'Закрыть'"), Истина, Истина, Истина + ))) + ); + + // 5. Неполное удаление + ДобавитьШагМастера(Элементы.ШагНеудачныеЗамены, + ДействиеШагаМастера("ПриАктивации", "ШагНеудачныеЗаменыПриАктивации", + ДействиеШагаМастера("ПередДействиемДалее", "ШагНеудачныеЗаменыПередДействиемДалее", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагНеудачныеЗаменыПередДействиемОтмена", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", НСтр("ru = 'Повторить удаление'") + " >", НСтр("ru = 'Удалить дубли'"), Истина, Истина, Истина, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Закрыть'"), НСтр("ru = 'Закрыть'"), Истина, Истина, Ложь + ))) + ); + + // 6. Дублей не найдено + ДобавитьШагМастера(Элементы.ШагДублейНеНайдено, + ДействиеШагаМастера("ПриАктивации", "ШагДублейНеНайденоПриАктивации", + ДействиеШагаМастера("ПередДействиемДалее", "ШагДублейНеНайденоПередДействиемДалее", + ДействиеШагаМастера("ПередДействиемОтмена", "ШагДублейНеНайденоПередДействиемОтмена", + ))), + КнопкаШагаМастера("Назад", "", "", Ложь, Ложь, Ложь, + КнопкаШагаМастера("Далее", НСтр("ru = 'Найти дубли'") + " >", НСтр("ru = 'Найти дубли по указанным критериям'"), Истина, Истина, Истина, + КнопкаШагаМастера("Отмена", НСтр("ru = 'Закрыть'"), НСтр("ru = 'Закрыть'"), Истина, Истина, Ложь + ))) + ); + +КонецПроцедуры + +// 0. Поиск не выполнялся + +&НаКлиенте +Процедура ШагПоискНеВыполнялсяПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Истина; + + ОбновитьОписаниеОтбора(); + ОбновитьОписаниеОбластиПоиска(); + ОбновитьОписаниеПравилПоиска(); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагПоискНеВыполнялсяПередДействиемДалее(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Возможность поиска + Если Не ПустаяСтрока(ОбластьПоискаДублей) Тогда + ЗавершитьШагМастера(ПараметрыШага); + Возврат; + КонецЕсли; + + ТекстПредупреждения = НСтр("ru = 'Необходимо выбрать область поиска дублей'"); + ПоказатьПредупреждение(, ТекстПредупреждения); +КонецПроцедуры + +&НаКлиенте +Процедура ШагПоискНеВыполнялсяПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + // Запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Отказаться от поиска и замены дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); +КонецПроцедуры + +// 1. Длительный поиск + +&НаКлиенте +Процедура ШагВыполнениеПоискаПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Ложь; + + ЗапуститьФоновыйПоискДублей(); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыполнениеПоискаПриОбработкеОжидания(Прекратить, Знач ДополнительныеПараметры) Экспорт + + // Ожидаем завершения поиска дублей + СостояниеОперации = ПроверитьСостояниеПоискаДублей(); + + Если Не СостояниеОперации.Завершено Тогда + Возврат; + КонецЕсли; + + // Смотрим на результат выполнения + ОписаниеОшибки = Неопределено; + Если СостояниеОперации.ИнформацияОбОшибке <> Неопределено Тогда + ОписаниеОшибки = СостояниеОперации.ИнформацияОбОшибке; + ИначеЕсли СостояниеОперации.Результат = -1 Тогда + ОписаниеОшибки = ОписаниеСостоянияНайденныхДублей; + КонецЕсли; + + Если ОписаниеОшибки <> Неопределено Тогда + Прекратить = Истина; + ПоказатьПредупреждение(, ОписаниеОшибки ); + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + Возврат; + КонецЕсли; + + Если СостояниеОперации.Результат <> Неопределено И СостояниеОперации.Результат > 0 Тогда + // Найдены какие-то дубли + ШагМастера("Далее"); + Возврат; + КонецЕсли; + + // Дублей по текущим установкам не найдено + ПерейтиНаШагМастера(Элементы.ШагДублейНеНайдено, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыполнениеПоискаПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + // Запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Прекратить поиск дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); +КонецПроцедуры + +// 2. Обработка результатов поиска, выбор основных элементов + +&НаКлиенте +Процедура ШагВыборОсновногоЭлементаПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Истина; + + // Разрешаем повторять поиск + Элементы.ПовторитьПоиск.Видимость = Истина; + + РазвернутьГруппуДублейИерархически(); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыборОсновногоЭлементаПередДействиемДалее(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Запрещаем повторять поиск + Элементы.ПовторитьПоиск.Видимость = Ложь; + + ЗавершитьШагМастера(ПараметрыШага); +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыборОсновногоЭлементаПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + // Запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Закрыть поиск дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); +КонецПроцедуры + +// 3. Длительное удаление + +&НаКлиенте +Процедура ШагВыполнениеУдаленияПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Ложь; + + ПараметрыУдаления = Новый Структура; + ПараметрыУдаления.Вставить("СпособУдаления", "Пометка"); + ПараметрыУдаления.Вставить("ПарыЗамен", ПарыЗаменДублей() ); + + ЗапуститьДлительнуюОперациюМастера("ФоновоеУдалениеДублей", ПараметрыУдаления, Истина, НСтр("ru = 'Удаление дублей'") ); +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыполнениеУдаленияПриОбработкеОжидания(Прекратить, Знач ДополнительныеПараметры) Экспорт + + // Ожидаем завершения поиска дублей + СостояниеОперации = ПроверитьСостояниеУдаленияДублей(); + + Если Не СостояниеОперации.Завершено Тогда + Возврат; + КонецЕсли; + + Если СостояниеОперации.ИнформацияОбОшибке = Неопределено Тогда + // Выполнено успешно, данные сформированы и переложены в реквизиты + Если СостояниеОперации.Результат = Истина Тогда + // Успешно заменены все группы дублей + ШагМастера("Далее"); + Иначе + // Не все места использования удалось заменить + ПерейтиНаШагМастера(Элементы.ШагНеудачныеЗамены, Истина); + КонецЕсли; + Иначе + // Фоновое задание завершено с ошибкой + Прекратить = Истина; + ПоказатьПредупреждение(, СостояниеОперации.ИнформацияОбОшибке); + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ШагВыполнениеУдаленияПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + // Запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Прервать удаление дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); +КонецПроцедуры + +// 4. Успешное удаление + +&НаКлиенте +Процедура ШагУспешноеУдалениеПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ШагУспешноеУдалениеПередДействиемНазад(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Переход на начало для работы с новыми параметрами + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагУспешноеУдалениеПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Успешное завершение, запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Закрыть поиск дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +// 5. Неполное удаление + +&НаКлиенте +Процедура ШагНеудачныеЗаменыПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ШагНеудачныеЗаменыПередДействиемДалее(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Повторяем удаление + ПерейтиНаШагМастера(Элементы.ВыполнениеУдаления, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагНеудачныеЗаменыПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Неудачное завершение, запрос подтверждения на отмену + ТекстВопроса = НСтр("ru = 'Закрыть поиск дублей?'"); + Описание = Новый ОписаниеОповещения("ЗавершениеОтменыИЗакрытиеФормы", ЭтотОбъект, Новый Структура); + Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +// 6. Дублей не найдено + +&НаКлиенте +Процедура ШагДублейНеНайденоПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + Элементы.Заголовок.Доступность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ШагДублейНеНайденоПередДействиемДалее(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Переход на повторный поиск + ПерейтиНаШагМастера(Элементы.ШагВыполнениеПоиска, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ШагДублейНеНайденоПередДействиемОтмена(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт + + // Успешное завершение + ЗавершитьРаботуФормы(); + +КонецПроцедуры + + +// Общий обработчик немодального продолжения отмены с закрытием +// +&НаКлиенте +Процедура ЗавершениеОтменыИЗакрытиеФормы(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + // Подтверждаем продолжение процесса + ЗавершитьШагМастера(ДополнительныеПараметры.ПараметрыШага); + Возврат; + КонецЕсли; + + ЗавершитьРаботуФормы(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьРаботуФормы(Знач ТекстВсплывающегоСообщения = Неопределено) + + ОтменитьДлительнуюОперациюМастера(); + + Если ТекстВсплывающегоСообщения <> Неопределено Тогда + ПоказатьОповещениеПользователя( , , ТекстВсплывающегоСообщения, Элементы.Информация32); + КонецЕсли; + + // Закрываем без дополнительных вопросов + ПодтверждениеЗакрытияФормы = Истина; + Закрыть(); +КонецПроцедуры + +// Общий обработчик подтверждения закрытия +&НаКлиенте +Процедура ЗакрытиеФормыЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + ЗавершитьРаботуФормы(); + Иначе + ПодтверждениеЗакрытияФормы = Неопределено; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Блок мастера + +// Для встраивания функционала мастера необходимо: +// +// 1) Нарисовать на форме группу, содержащую страницы помощника +// 2) Определить на форме три команды для действий "Далее", "Назад", "Отмена". Определить им обработчики как: +// +// &НаКлиенте +// Процедура ШагМастераНазад(Команда) +// ШагМастера("Назад"); +// КонецПроцедуры +// +// &НаКлиенте +// Процедура ШагМастераДалее(Команда) +// ШагМастера("Далее"); +// КонецПроцедуры +// +// &НаКлиенте +// Процедура ШагМастераОтмена(Команда) +// ШагМастера("Отмена"); +// КонецПроцедуры +// +// 3) Добавить блок методов пошагового помощника +// +// 4) В коде на сервере: +// - Инициализировать структуры помощника вызовом "ИнициализироватьМастера", передав туда соответствующие +// элементы формы +// +// - Создать сценарий работы последовательным вызовами "ДобавитьШагМастера". Рекомендуется использовать +// вспомогательные функции "ДействиеШагаМастера" и "КнопкаШагаМастера". Например: +// +// ДобавитьШагМастера(Элементы.ШагВыборЦелевогоЭлемента, +// ДействиеШагаМастера("ПриАктивации", "ШагВыборЦелевогоЭлементаПриАктивации", +// ДействиеШагаМастера("ПередДействиемДалее", "ШагВыборЦелевогоЭлементаПередДействиемДалее", +// ДействиеШагаМастера("ПередДействиемОтмена", "ШагВыборЦелевогоЭлементаПередДействиемОтмена", +// ))), +// КнопкаШагаМастера("Далее", НСтр("ru = 'Заменить'") + " >", Истина, Истина, Истина, +// КнопкаШагаМастера("Назад", "", Ложь, Ложь, Ложь, +// КнопкаШагаМастера("Отмена", НСтр("ru = 'Отмена'") +// ))) +// ); +// +// 5) В коде на клиенте (обычно при открытии): +// - Указать начальную страницу мастера при помощи вызова "УстановитьНачальнуюСтраницуМастера" +// - Запустить начальную страницу вызовом "ЗапуститьРаботуМастера" +// + +// Инициализирует структуры мастера. +// +// Параметры: +// ГруппаСтраниц - ГруппаФормы - Элемент формы, группа типа "страницы", содержащая в себе страницы-шаги мастера +// КнопкаДалее - КнопкаФормы, КнопкаКоманднойПанели - Элемент формы, используемый для кнопки "Далее" +// КнопкаНазад - КнопкаФормы, КнопкаКоманднойПанели - Элемент формы, используемый для кнопки "Назад" +// КнопкаОтмена - КнопкаФормы, КнопкаКоманднойПанели - Элемент формы, используемый для кнопки "Отмена" +// +&НаСервере +Процедура ИнициализироватьМастера(Знач ГруппаСтраниц, Знач КнопкаДалее, Знач КнопкаНазад, Знач КнопкаОтмена) + НастройкиМастера = Новый Структура; + + НастройкиМастера.Вставить("Шаги", Новый Массив); + НастройкиМастера.Вставить("НомерТекущегоШага", 0); + НастройкиМастера.Вставить("СтраницаСтарта", Неопределено); + + // Идентификаторы частей интерфейса + НастройкиМастера.Вставить("ГруппаСтраниц", ГруппаСтраниц.Имя); + НастройкиМастера.Вставить("КнопкаДалее", КнопкаДалее.Имя); + НастройкиМастера.Вставить("КнопкаНазад", КнопкаНазад.Имя); + НастройкиМастера.Вставить("КнопкаОтмена", КнопкаОтмена.Имя); + + // Таймаут вызова обработчика + НастройкиМастера.Вставить("ТаймаутОжиданияДлительнойОперации", + ?( ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 5, 3) ); + + // Для обработки длительных операций + НастройкиМастера.Вставить("ИдентификаторФоновогоЗадания"); + НастройкиМастера.Вставить("АдресРезультатаФоновогоЗадания"); + + // Для хранения пользовательских параметров + НастройкиМастера.Вставить("ПользовательскиеПараметры", Новый Соответствие); + + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить( Новый РеквизитФормы("НастройкиПошаговогоМастера", Новый ОписаниеТипов) ); + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + ЭтотОбъект.НастройкиПошаговогоМастера = НастройкиМастера; +КонецПроцедуры + +// Добавляет шаг мастера. Переходы между страницами будут происходить согласно порядку добавления. +// +// Параметры: +// +// Страница - ГруппаФормы - Группа-страница, содержащая элементы текущего шага страницы +// +// Действия - Структура - Описание действий, возможных на текущем шаге. Поля структуры: +// +// * ПриАктивации - Строка - Необязательное имя процедуры, которая будет выполнена перед активацией страницы +// с двумя параметрами: +// <Страница> - ГруппаФормы - группа-страница, которая активизируется +// <ДополнительныеПараметры> - Неопределено +// +// * ПередДействиемДалее - Строка - Необязательное имя процедуры, которая будет выполнена при нажатии кнопки "Далее", +// перед переходом на следующую страницу. Процедура будет вызвана с двумя параметрами: +// <ПараметрыШага> - служебный реквизит. При успешном завершении цепочки немодальных +// вызовов последняя процедура-обработчик должна произвести вызов +// ЗавершитьШагМастера(ПараметрыШага), подтверждая действие. +// <ДополнительныеПараметры> - Неопределено +// +// * ПередДействиемНазад - Строка - Аналогично ПередДействиемДалее, описывает поведение при нажатии кнопки "Назад" +// +// * ПередДействиемОтмена - Строка - Аналогично ПередДействиемДалее, описывает поведение при нажатии кнопки "Отмена" +// +// * ПриОбработкеОжидания - Строка - Необязательное имя процедуры, которая будет периодически вызываться с двумя +// параметрами: +// <Прекратить> - Если при выходе из процедуры установить в значение Истина, то +// периодические вызовы будут прекращены. +// <ДополнительныеПараметры> - Неопределено +// +// Кнопки - Структура - описание кнопок на текущем шаге. Поля структуры: +// +// * Далее - Структура - Описание кнопки "Далее". поля: Заголовок, Подсказка, Доступность, Видимость, КнопкаПоУмолчанию. +// Пустая подсказка заменяется на заголовок. По умолчанию будут использованы значения: +// Заголовок = "Далее >", Доступность = Истина, Видимость = Истина, КнопкаПоУмолчанию = Истина; +// +// * Назад - Структура - Аналогично кнопке "Далее", значения по умолчанию: +// Заголовок = "< Назад", Доступность = Истина, Видимость = Истина, КнопкаПоУмолчанию = Ложь; +// +// * Отмена - Структура - Аналогично кнопке "Далее", значения по умолчанию: +// Заголовок = "Отмена", Доступность = Истина, Видимость = Истина, КнопкаПоУмолчанию = Ложь; +// +// Для составления параметров рекомендуется использовать вспомогательные методы "ДобавитьШагМастера", "ДействиеШагаМастера", "КнопкаШагаМастера" +// +&НаСервере +Процедура ДобавитьШагМастера(Знач Страница, Знач Действия, Знач Кнопки) + + // Умолчания + ОписаниеШага = Новый Структура("ПриАктивации, ПередДействиемДалее, ПередДействиемНазад, ПередДействиемОтмена, ПриОбработкеОжидания"); + + ПоляКнопки = "Доступность, Видимость, КнопкаПоУмолчанию, Подсказка"; + + ОписаниеШага.Вставить("КнопкаДалее", Новый Структура(ПоляКнопки, Истина, Истина, Истина)); + ОписаниеШага.КнопкаДалее.Вставить("Заголовок", НСтр("ru='Далее'") + " >" ); + + ОписаниеШага.Вставить("КнопкаНазад", Новый Структура(ПоляКнопки, Истина, Истина, Ложь)); + ОписаниеШага.КнопкаНазад.Вставить("Заголовок", "< " + НСтр("ru='Назад'")); + + ОписаниеШага.Вставить("КнопкаОтмена",Новый Структура(ПоляКнопки, Истина, Истина, Ложь)); + ОписаниеШага.КнопкаОтмена.Вставить("Заголовок", НСтр("ru='Отмена'")); + + ОписаниеШага.Вставить("Страница", Страница.Имя); + + // Устанавливаем действия + ЗаполнитьЗначенияСвойств(ОписаниеШага, Действия); + + Если Кнопки.Свойство("Далее") Тогда + ЗаполнитьЗначенияСвойств(ОписаниеШага.КнопкаДалее, Кнопки.Далее); + КонецЕсли; + Если Кнопки.Свойство("Назад") Тогда + ЗаполнитьЗначенияСвойств(ОписаниеШага.КнопкаНазад, Кнопки.Назад); + КонецЕсли; + Если Кнопки.Свойство("Отмена") Тогда + ЗаполнитьЗначенияСвойств(ОписаниеШага.КнопкаОтмена, Кнопки.Отмена); + КонецЕсли; + + ЭтотОбъект.НастройкиПошаговогоМастера.Шаги.Добавить(ОписаниеШага); +КонецПроцедуры + +// Вспомогательное формирование структуры, описывающей действие +// +// Параметры: +// Идентификатор - Строка - Идентификатор действия, см описание метода "ДобавитьШагМастера" +// ИмяОбработчика - Строка - Имя процедуры, см описание метода "ДобавитьШагМастера" +// СлужебныеДанные - Структура - Накапливает значения. +// +// Возвращаемое значение - Структура - СлужебныеДанные с добавленными полями +&НаСервере +Функция ДействиеШагаМастера(Знач Идентификатор, Знач ИмяОбработчика, СлужебныеДанные = Неопределено) + Если СлужебныеДанные = Неопределено Тогда + СлужебныеДанные = Новый Структура; + КонецЕсли; + СлужебныеДанные.Вставить(Идентификатор, ИмяОбработчика);; + Возврат СлужебныеДанные; +КонецФункции + +// Вспомогательное формирование структуры, описывающей кнопку +// +// Параметры: +// Идентификатор - Строка - Идентификатор кнопки, может быть "Далее", "Назад" или "Отмена", +// см описание метода "ДобавитьШагМастера" +// Заголовок - Строка - Заголовок кнопки +// Подсказка - Строка - Подсказка для кнопки +// Видимость - Булево - параметр отображения кнопки +// Доступность - Булево - параметр отображения кнопки +// КнопкаПоУмолчанию - Булево - параметр отображения кнопки +// СлужебныеДанные - Структура - Накапливает значения +// +// Возвращаемое значение - Структура - СлужебныеДанные с добавленными полями +// +&НаСервере +Функция КнопкаШагаМастера(Знач Идентификатор, Знач Заголовок = "", Знач Подсказка = "", Знач Видимость = Истина, Знач Доступность = Истина, Знач КнопкаПоУмолчанию = Ложь, Знач СлужебныеДанные = Неопределено) + Если СлужебныеДанные = Неопределено Тогда + СлужебныеДанные = Новый Структура; + КонецЕсли; + + ОписаниеКнопки = Новый Структура; + ОписаниеКнопки.Вставить("Заголовок", Заголовок); + ОписаниеКнопки.Вставить("Подсказка", ?(ПустаяСтрока(Подсказка), Заголовок, Подсказка)); + + ОписаниеКнопки.Вставить("Доступность", Доступность); + ОписаниеКнопки.Вставить("Видимость", Видимость); + ОписаниеКнопки.Вставить("КнопкаПоУмолчанию", КнопкаПоУмолчанию); + + СлужебныеДанные.Вставить(Идентификатор, ОписаниеКнопки); + Возврат СлужебныеДанные; +КонецФункции + +// Устанавливает начальную страницу для первого запуска мастера +// +// Параметры: +// СтартоваяСтраница - Число, Строка, ГруппаФормы - Номер шага, группа-страница, или ее идентификатор +// +&НаКлиенте +Процедура УстановитьНачальнуюСтраницуМастера(Знач Страница) + + ЭтотОбъект.НастройкиПошаговогоМастера.СтраницаСтарта = НомерШагаМастераПоИдентификатору(Страница); + +КонецПроцедуры + +// Запускает начальную работу мастера с шага, установленного предварительно при помощи "УстановитьНачальнуюСтраницуМастера" +&НаКлиенте +Процедура ЗапуститьРаботуМастера() + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + Если НастройкиМастера.СтраницаСтарта = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Перед запуском мастера должна быть установлена начальная страница.'"); + + ИначеЕсли НастройкиМастера.СтраницаСтарта = -1 Тогда + // Разогрев. Проверяем наличие обработчиков действий у всех шагов + ВозможныеДействия = Новый Структура("ПриАктивации, ПередДействиемДалее, ПередДействиемНазад, ПередДействиемОтмена, ПриОбработкеОжидания"); + Для Каждого ОписаниеШага Из НастройкиМастера.Шаги Цикл + Для Каждого КлючЗначение Из ВозможныеДействия Цикл + ИмяДействия = КлючЗначение.Ключ; + ИмяОбработчика = ОписаниеШага[ИмяДействия]; + Если Не ПустаяСтрока(ИмяОбработчика) Тогда + Попытка + Тест = Новый ОписаниеОповещения(ИмяОбработчика, ЭтотОбъект); + Исключение + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"), + ИмяДействия, + ОписаниеШага.Страница, + ИмяОбработчика + ); + ВызватьИсключение Текст; + КонецПопытки; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + // Фактический запуск + ПерейтиНаШагМастера(НастройкиМастера.НомерТекущегоШага, Истина); + Иначе + // По умолчанию все отключено + Элементы[НастройкиМастера.КнопкаДалее].Видимость = Ложь; + Элементы[НастройкиМастера.КнопкаНазад].Видимость = Ложь; + Элементы[НастройкиМастера.КнопкаОтмена].Видимость = Ложь; + + // Отложенный запуск + ЭтотОбъект.НастройкиПошаговогоМастера.НомерТекущегоШага = НастройкиМастера.СтраницаСтарта; + ЭтотОбъект.НастройкиПошаговогоМастера.СтраницаСтарта = -1; + ПодключитьОбработчикОжидания("ЗапуститьРаботуМастера", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +// Выполняет переключение мастера на следующую или предыдущую страницу. +// +// Параметры: +// КодКоманды - Строка - Идентификатор действия, может принимать значения "Далее", "Назад" или "Отмена" +// +&НаКлиенте +Процедура ШагМастера(Знач КодКоманды) + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + Если КодКоманды = "Далее" Тогда + Направление = 1; + ИначеЕсли КодКоманды = "Назад" Тогда + Направление = -1; + ИначеЕсли КодКоманды = "Отмена" Тогда + Направление = 0; + Иначе + ВызватьИсключение НСтр("ru = 'Некорректная команда шага помощника'"); + КонецЕсли; + + ОписаниеШага = НастройкиМастера.Шаги[НастройкиМастера.НомерТекущегоШага]; + + // Останавливаем обработчик, если есть + Если ОписаниеШага.ПриОбработкеОжидания <> Неопределено Тогда + ОтключитьОбработчикОжидания("ОбработкаОжиданияСтраницыМастера"); + КонецЕсли; + + // Отрабатываем уход с текущей страницы + Если Направление = 1 Тогда + Действие = ОписаниеШага.ПередДействиемДалее; + + ИначеЕсли Направление = -1 Тогда + Действие = ОписаниеШага.ПередДействиемНазад; + + Иначе + Действие = ОписаниеШага.ПередДействиемОтмена; + + КонецЕсли; + + Если ПустаяСтрока(Действие) Тогда + ЗавершитьШагМастера(Направление); + Иначе + Оповещение = Новый ОписаниеОповещения(Действие, ЭтотОбъект); + ВыполнитьОбработкуОповещения(Оповещение, Направление); + КонецЕсли; +КонецПроцедуры + +// Выполняет безусловное позиционирование мастера на страницу +// +// Параметры: +// ИдентификаторШага - Число, Строка, ГруппаФормы - Номер, группа-страница формы или ее имя для перехода +// ИнициироватьСобытия - Булево - Флаг того, что необходимо вызывать события, связанные с активацией шага +// +&НаКлиенте +Процедура ПерейтиНаШагМастера(Знач ИдентификаторШага, Знач ИнициироватьСобытия = Ложь) + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + СледующийШаг = НомерШагаМастераПоИдентификатору(ИдентификаторШага); + Если СледующийШаг = Неопределено Тогда + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден шаг помощника %1'"), + ИдентификаторШага + ); + ВызватьИсключение Ошибка; + КонецЕсли; + + ОписаниеШага = НастройкиМастера.Шаги[НастройкиМастера.НомерТекущегоШага]; + + // Останавливаем обработчик, если есть + Если ОписаниеШага.ПриОбработкеОжидания <> Неопределено Тогда + ОтключитьОбработчикОжидания("ОбработкаОжиданияСтраницыМастера"); + КонецЕсли; + + // И запускаем новую страницу + ШагМастераЗавершениеБезусловно(СледующийШаг, ИнициироватьСобытия); +КонецПроцедуры + +// Подтверждает действие шага мастера и вызывает переключение страницы +// +// Параметры: +// ПараметрыШага - Служебный реквизит, полученный в обработчике перед началом действия +// +&НаКлиенте +Процедура ЗавершитьШагМастера(Знач ПараметрыШага) + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + СледующийШаг = НастройкиМастера.НомерТекущегоШага + ПараметрыШага; + ПоследнийШаг = НастройкиМастера.Шаги.ВГраница(); + + Если ПараметрыШага = 0 Тогда + // Подтверждение отмены - ничего не делаем + Возврат; + + ИначеЕсли ПараметрыШага = 1 И СледующийШаг > ПоследнийШаг Тогда + // Попытка сделать шаг за пределы вперед + ВызватьИсключение НСтр("ru='Попытка выхода за последний шаг мастера'"); + + ИначеЕсли ПараметрыШага = -1 И СледующийШаг < 0 Тогда + // Попытка сделать шаг за пределы назад + ВызватьИсключение НСтр("ru='Попытка выхода назад из первого шага мастера'"); + + КонецЕсли; + + ШагМастераЗавершениеБезусловно(СледующийШаг); +КонецПроцедуры + +&НаКлиенте +Процедура ШагМастераЗавершениеБезусловно(Знач СледующийШаг, Знач ИнициироватьСобытия = Истина) + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + ОписаниеШага = НастройкиМастера.Шаги[СледующийШаг]; + ПоследнийШаг = НастройкиМастера.Шаги.ВГраница(); + + // Переключаем на новую страницу + Элементы[НастройкиМастера.ГруппаСтраниц].ТекущаяСтраница = Элементы[ОписаниеШага.Страница]; + + // Обновляем кнопки + ОбновитьСвойстваКнопкиМастера(НастройкиМастера.КнопкаДалее, ОписаниеШага.КнопкаДалее); + ОбновитьСвойстваКнопкиМастера(НастройкиМастера.КнопкаНазад, ОписаниеШага.КнопкаНазад); + ОбновитьСвойстваКнопкиМастера(НастройкиМастера.КнопкаОтмена, ОписаниеШага.КнопкаОтмена); + + // Успешно перешли + ЭтотОбъект.НастройкиПошаговогоМастера.НомерТекущегоШага = СледующийШаг; + + Если ИнициироватьСобытия И Не ПустаяСтрока(ОписаниеШага.ПриАктивации) Тогда + // Отрабатываем "ПриАктивации" новой страницы, он же запустит ожидание + ПодключитьОбработчикОжидания("ОбработкаАктивацииСтраницыМастера", 0.1, Истина); + + ИначеЕсли Не ПустаяСтрока(ОписаниеШага.ПриОбработкеОжидания) Тогда + // Запускаем обработчик ожидания, если надо + ПодключитьОбработчикОжидания("ОбработкаОжиданияСтраницыМастера", 0.1, Истина); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСвойстваКнопкиМастера(Знач ИмяКнопки, Знач Описание) + + КнопкаМастера = Элементы[ИмяКнопки]; + ЗаполнитьЗначенияСвойств(КнопкаМастера, Описание); + КнопкаМастера.РасширеннаяПодсказка.Заголовок = Описание.Подсказка; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаАктивацииСтраницыМастера() + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + ОписаниеШага = НастройкиМастера.Шаги[НастройкиМастера.НомерТекущегоШага]; + Если Не ПустаяСтрока(ОписаниеШага.ПриАктивации) Тогда + Оповещение = Новый ОписаниеОповещения(ОписаниеШага.ПриАктивации, ЭтотОбъект); + ВыполнитьОбработкуОповещения(Оповещение, Элементы[ОписаниеШага.Страница]); + КонецЕсли; + + // И запускаем ожидание, если надо + Если Не ПустаяСтрока(ОписаниеШага.ПриОбработкеОжидания) Тогда + // Первый запуск быстрый + ПодключитьОбработчикОжидания("ОбработкаОжиданияСтраницыМастера", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +// Может быть номер шага или группа-страница, или ее идентификатор +&НаКлиенте +Функция НомерШагаМастераПоИдентификатору(Знач ИдентификаторШага) + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + НомерШага = Неопределено; + + ТипПараметра = ТипЗнч(ИдентификаторШага); + Если ТипПараметра = Тип("Число") Тогда + НомерШага = ИдентификаторШага; + Иначе + ИмяПоиска = ?(ТипПараметра = Тип("ГруппаФормы"), ИдентификаторШага.Имя, ИдентификаторШага); + Для НомерШага=0 По НастройкиМастера.Шаги.ВГраница() Цикл + Если НастройкиМастера.Шаги[НомерШага].Страница = ИмяПоиска Тогда + НомерШага = НомерШага; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат НомерШага; +КонецФункции + +// Возвращает флаг отмены +&НаКлиенте +Функция ОбработкаОжиданияСтраницыМастера() + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + ОписаниеШага = НастройкиМастера.Шаги[НастройкиМастера.НомерТекущегоШага]; + Действие = ОписаниеШага.ПриОбработкеОжидания; + Если ПустаяСтрока(Действие) Тогда + Возврат Ложь; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения(Действие, ЭтотОбъект); + + Прекратить = Ложь; + ВыполнитьОбработкуОповещения(Оповещение, Прекратить); + Продолжать = Не Прекратить; + + Если Продолжать Тогда + ПодключитьОбработчикОжидания("ОбработкаОжиданияСтраницыМастера", НастройкиМастера.ТаймаутОжиданияДлительнойОперации, Истина); + КонецЕсли; + + Возврат Продолжать; +КонецФункции + +// Стартует длительную операцию мастера +// +// Параметры: +// ИмяМетода - Строка - Имя метода для фонового задания +// ПараметрыМетода - Массив - Параметры метода для фонового задания. +// ВозвращаетРезультат - Булево - Флаг необходимости получения результатов. Если установлен в Истина, то +// последним параметром вызова автоматически добавляется адрес хранилища для результата +// ОписаниеМетода - Строка - Необязательное описание метода для отображения в списке фоновых заданий +// +&НаСервере +Процедура ЗапуститьДлительнуюОперациюМастера(Знач ИмяМетода, Знач ПараметрыМетода, Знач ВозвращаетРезультат = Ложь, Знач ОписаниеМетода = "") + + // Отменяем возможно незавершенное предыдущее + ОтменитьДлительнуюОперациюМастера(); + + Если ВозвращаетРезультат Тогда + ЭтотОбъект.НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + Иначе + ЭтотОбъект.НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; + КонецЕсли; + + СлужебныеПараметры = Новый Структура("ДополнительнаяОбработкаСсылка", Неопределено); + СлужебныеПараметры.Вставить("ЭтоВнешняяОбработка", ЭтоВнешняяОбработка); + СлужебныеПараметры.Вставить("ИмяОбработки", ИмяОбработки); + СлужебныеПараметры.Вставить("ИмяМетода", ИмяМетода); + СлужебныеПараметры.Вставить("ПараметрыВыполнения", ПараметрыМетода); + + Если Не ДоступноВыполнениеПроцедурыМодуляОбъектаОбработки Тогда + // Запуск задания будет выполнен прямым вызовом + ЭтотОбъект.НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = СлужебныеПараметры; + Возврат; + КонецЕсли; + + // У нас есть БСП + ПараметрыДлительнойОперации = Новый Массив; + ПараметрыДлительнойОперации.Добавить(СлужебныеПараметры); + ПараметрыДлительнойОперации.Добавить(ЭтотОбъект.НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания); + + Задание = ФоновыеЗадания.Выполнить("ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки", ПараметрыДлительнойОперации, , ОписаниеМетода); + ЭтотОбъект.НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Задание.УникальныйИдентификатор; +КонецПроцедуры + +// Получает состояние текущей длительной операцию +// +// Возвращаемое значение - Структура - Описание состояния с полями: +// Завершено - Булево - Флаг активности длительной операции +// ИнформацияОбОшибке - ИнформацияОбОшибке - Если операция завершилась аварийно, то содержит информацию почему +// Результат - Произвольный - Если длительное задание было запущено с флагом возвращения результата, +// то содержит текущее значение результата. +// +&НаСервере +Функция СостояниеДлительнойОперацииМастера() + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + Данные = Новый Структура("Завершено, Результат, ИнформацияОбОшибке", Истина); + + Если НастройкиМастера.ИдентификаторФоновогоЗадания = Неопределено Тогда + Возврат Данные; + + ИначеЕсли ТипЗнч(НастройкиМастера.ИдентификаторФоновогоЗадания) <> Тип("УникальныйИдентификатор") Тогда + // Отложенное выполнение, которое необходимо произвести здесь + ОбъектОбработки = РеквизитФормыВЗначение("Объект"); + + ИмяМетода = НастройкиМастера.ИдентификаторФоновогоЗадания.ИмяМетода; + ПараметрыВыполнения = НастройкиМастера.ИдентификаторФоновогоЗадания.ПараметрыВыполнения; + АдресРезультата = НастройкиМастера.АдресРезультатаФоновогоЗадания; + + УстановитьБезопасныйРежим(Истина); + Выполнить("ОбъектОбработки." + ИмяМетода + "(ПараметрыВыполнения, АдресРезультата)"); + УстановитьБезопасныйРежим(Ложь); + + Задание = Неопределено; + Иначе + // Нормальное фоновое + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(НастройкиМастера.ИдентификаторФоновогоЗадания); + + КонецЕсли; + + Если Задание <> Неопределено Тогда + // Все непонятное - завершено, см значения по умолчанию + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + Данные.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке); + КонецЕсли; + Данные.Завершено = Задание.Состояние <> СостояниеФоновогоЗадания.Активно; + Если Данные.Завершено Тогда + // Текущие сообщения фонового задания + НакопленныеСообщения = Задание.ПолучитьСообщенияПользователю(Истина); + Если НакопленныеСообщения <> Неопределено Тогда + Для Каждого Сообщение Из НакопленныеСообщения Цикл + Сообщение.Сообщить(); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(НастройкиМастера.АдресРезультатаФоновогоЗадания) Тогда + Данные.Результат = ПолучитьИзВременногоХранилища(НастройкиМастера.АдресРезультатаФоновогоЗадания); + КонецЕсли; + + Если Данные.Завершено Тогда + ЭтотОбъект.НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Неопределено; + ЭтотОбъект.НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; + КонецЕсли; + + Возврат Данные; +КонецФункции + +// Отменяет текущую длительную операцию +&НаСервере +Процедура ОтменитьДлительнуюОперациюМастера() + НастройкиМастера = ЭтотОбъект.НастройкиПошаговогоМастера; + + Если НастройкиМастера.ИдентификаторФоновогоЗадания <> Неопределено Тогда + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(НастройкиМастера.ИдентификаторФоновогоЗадания); + Если Задание <> Неопределено Тогда + Задание.Отменить(); + КонецЕсли; + ЭтотОбъект.НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Неопределено; + КонецЕсли; + + ЭтотОбъект.НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form similarity index 51% rename from SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Form.form rename to SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form index 3bc022dfa..5164b0c72 100644 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Forms/ФормаСписка/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form @@ -1,7 +1,11 @@ - + + + <key>ru</key> + <value>Правила отбора</value> + - Список + КомпоновщикПредварительногоОтбораНастройкиОтбор 1 true true @@ -9,61 +13,21 @@ true - Список + КомпоновщикПредварительногоОтбора.Settings.Filter - true - false None - - Наименование - 4 - true - true - - true - - - Список.Description - - true - - НаименованиеExtendedTooltip - 13 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - СписокКоманднаяПанель + КомпоновщикПредварительногоОтбораНастройкиОтборКоманднаяПанель 3 Left true - СписокСтрокаПоиска - 14 + КомпоновщикПредварительногоОтбораНастройкиОтборСтрокаПоиска + 13 - СписокСтрокаПоискаРасширеннаяПодсказка - 16 + КомпоновщикПредварительногоОтбораНастройкиОтборСтрокаПоискаРасширеннаяПодсказка + 15 Label true true @@ -72,21 +36,21 @@ - СписокСтрокаПоискаКонтекстноеМеню - 15 + КомпоновщикПредварительногоОтбораНастройкиОтборСтрокаПоискаКонтекстноеМеню + 14 true - Список + КомпоновщикПредварительногоОтбораНастройкиОтбор true - СписокСостояниеПросмотра - 17 + КомпоновщикПредварительногоОтбораНастройкиОтборСостояниеПросмотра + 16 - СписокСостояниеПросмотраРасширеннаяПодсказка - 19 + КомпоновщикПредварительногоОтбораНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка + 18 Label true true @@ -95,22 +59,22 @@ - СписокСостояниеПросмотраКонтекстноеМеню - 18 + КомпоновщикПредварительногоОтбораНастройкиОтборСостояниеПросмотраКонтекстноеМеню + 17 true ViewStatusAddition - Список + КомпоновщикПредварительногоОтбораНастройкиОтбор true - СписокУправлениеПоиском - 20 + КомпоновщикПредварительногоОтбораНастройкиОтборУправлениеПоиском + 19 - СписокУправлениеПоискомРасширеннаяПодсказка - 22 + КомпоновщикПредварительногоОтбораНастройкиОтборУправлениеПоискомРасширеннаяПодсказка + 21 Label true true @@ -119,19 +83,19 @@ - СписокУправлениеПоискомКонтекстноеМеню - 21 + КомпоновщикПредварительногоОтбораНастройкиОтборУправлениеПоискомКонтекстноеМеню + 20 true SearchControlAddition - Список + КомпоновщикПредварительногоОтбораНастройкиОтбор true - СписокExtendedTooltip - 12 + КомпоновщикПредварительногоОтбораНастройкиОтборРасширеннаяПодсказка + 4 Label true true @@ -140,10 +104,12 @@ - СписокКонтекстноеМеню + КомпоновщикПредварительногоОтбораНастройкиОтборКонтекстноеМеню 2 true + Tree + true true true true @@ -157,42 +123,62 @@ AutoUse true true + false Auto Auto + ExpandAllLevels true true true - - Список.DefaultPicture - + true None None None true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - + All + false + Bottom + true ФормаКоманднаяПанель -1 - ФормаПереместитьЭлементВверх - 8 + ФормаВыбрать + 5 true true true - ФормаПереместитьЭлементВверхExtendedTooltip + ФормаВыбратьРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 9 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка 10 Label true @@ -201,7 +187,7 @@ Left - Form.Command.ПереместитьЭлементВверх + Form.StandardCommand.Cancel Normal Auto true @@ -209,17 +195,51 @@ UserCmds Auto - - ФормаПереместитьЭлементВниз - 9 + + ФормаГруппаСправки + 11 + + ФормаСправка + 7 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Форма группа справки</value> + + + ru + Форма группа справки + - ФормаПереместитьЭлементВнизExtendedTooltip - 11 + ФормаГруппаСправкиРасширеннаяПодсказка + 12 Label true true @@ -227,33 +247,28 @@ Left - Form.Command.ПереместитьЭлементВниз - Normal - Auto - true - true - UserCmds - Auto + - Left - true + Right - DontBlock + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner true - true true Vertical true true true - UseIfNecessary auto true - Список + Объект 1 - DynamicList + DataProcessorObject.ПоискИУдалениеДублей true @@ -261,70 +276,62 @@ true - - Список.Ref - - - Список.РеквизитДопУпорядочивания -
      true
      - - Catalog.ВидыДокументовФизическихЛиц - true - true - true - true -
      - - ПереместитьЭлементВверх + + ИдентификаторОсновнойФормы <key>ru</key> - <value>Переместить элемент вверх</value> + <value>Идентификатор основной формы</value> + + 2 + + UUID + + + true + + + true + + + + КомпоновщикПредварительногоОтбора + + <key>ru</key> + <value>Компоновщик предварительного отбора</value> + + 3 + + DataCompositionSettingsComposer + + + true + + + true + + true + + + Выбрать + + <key>ru</key> + <value>ОК</value> 1 ru - Переместить элемент вверх + Выбрать true - - StdPicture.MoveUp - - ПереместитьЭлементВверх + Выбрать - Picture - Auto - Auto - - - ПереместитьЭлементВниз - - <key>ru</key> - <value>Переместить элемент вниз</value> - - 2 - - ru - Переместить элемент вниз - - - true - - - StdPicture.MoveDown - - - - ПереместитьЭлементВниз - - - Picture Auto Auto @@ -332,5 +339,5 @@ - +
      diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html new file mode 100644 index 000000000..a51e0d406 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html @@ -0,0 +1,19 @@ + +

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

      +

      Ввод условий отбора

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

        Для удаления отбора нажмите .

        +
      • +

        Для подтверждения и возврата в программу нажмите ОК.

      Группировка условий

      +

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

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

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl new file mode 100644 index 000000000..79c7315c5 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl @@ -0,0 +1,64 @@ +// Ожидаются параметры: +// +// ИдентификаторОсновнойФормы - УникальныйИдентификатор - Идентификатор формы, через хранилище которой происходит обмен +// АдресСхемыКомпоновки - Строка - Адрес временного хранилища схемы компоновки, для которой редактируются настройки +// АдресНастроекКомпоновщикаОтбора - Строка - Адрес временного хранилища редактируемых настроек компоновщика +// ПредставлениеОбластиОтбора - Строка - Представление для формирования заголовка +// +// Возвращается результатом выбора: +// +// Неопределено - Отказ от редактирования +// Строка - Адрес временного хранилища новых настроек компоновщика +// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ИдентификаторОсновнойФормы = Параметры.ИдентификаторОсновнойФормы; + + КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикПредварительногоОтбора.Инициализировать( + Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.АдресСхемыКомпоновки) ); + + АдресНастроекКомпоновщикаОтбора = Параметры.АдресНастроекКомпоновщикаОтбора; + КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(ПолучитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора)); + УдалитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора); + + Заголовок = СтрЗаменить( НСтр("ru = 'Правила отбора ""%1""'"), "%1", Параметры.ПредставлениеОбластиОтбора) +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + + Если Модифицированность Тогда + ЗначениеВыбора = АдресНастроекКомпоновщикаОтбора(); + ОповеститьОВыборе(ЗначениеВыбора); + Иначе + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция АдресНастроекКомпоновщикаОтбора() + + Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, ИдентификаторОсновнойФормы) + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form new file mode 100644 index 000000000..b01c28baf --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form @@ -0,0 +1,761 @@ + + + + ПравилаПоиска + 20 + true + true + + true + + + ПравилаПоиска + + Top + + ПравилаПоискаИспользовать + 30 + true + true + + true + + + ПравилаПоиска.Использовать + + None + + OnChange + ПравилаПоискаИспользоватьПриИзменении + + + ПравилаПоискаИспользоватьРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПравилаПоискаИспользоватьКонтекстноеМеню + 31 + true + + CheckBoxField + Auto + true + Left + true + + + + ПравилаПоискаПредставлениеРеквизита + 24 + true + true + + true + + + ПравилаПоиска.ПредставлениеРеквизита + + + ПравилаПоискаПредставлениеРеквизитаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПравилаПоискаПредставлениеРеквизитаКонтекстноеМеню + 25 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + + ПравилаПоискаВидСравнения + 27 + true + true + + true + + + ПравилаПоиска.Правило + + + ПравилаПоискаВидСравненияРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ПравилаПоискаВидСравненияКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПравилаПоискаВидСравненияНачалоВыбора + + + StartListChoice + ПравилаПоискаВидСравненияНачалоВыбораИзСписка + + + ChoiceProcessing + ПравилаПоискаВидСравненияОбработкаВыбора + + 21 + true + true + false + true + false + ShowInInputField + false + false + false + false + false + true + true + true + OnValueChange + Normal + DontUse + + + None + + ПравилаПоискаКоманднаяПанель + 22 + Left + true + + + ПравилаПоискаСтрокаПоиска + 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 + + + + ПравилаПоискаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПравилаПоискаКонтекстноеМеню + 21 + true + + 50 + true + true + true +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
      + + ГруппаПрикладныхОграничений + 35 + + ОписаниеПрикладныхПравил + 7 + true + true + + true + + + ОписаниеПрикладныхПравил + + None + + ОписаниеПрикладныхПравилРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОписаниеПрикладныхПравилКонтекстноеМеню + 8 + true + + LabelField + Top + Enter + true + Left + true + + true + 3 + true + + + 1 + + + Style.FormBackColor + + + + + УчитыватьПрикладныеПравила + 1 + true + true + + true + + + УчитыватьПрикладныеПравила + + Right + + OnChange + УчитыватьПрикладныеПравилаПриИзменении + + + УчитыватьПрикладныеПравилаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + УчитыватьПрикладныеПравилаКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа прикладных ограничений</value> + + + ru + Группа прикладных ограничений + + + ГруппаПрикладныхОграниченийРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Выбрать + 12 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 16 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппаСправка + 14 + + ФормаСправка + 18 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа справка</value> + + + ru + Форма группа справка + + + ФормаГруппаСправкаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ПоискИУдалениеДублей + + + true + + + true + +
      true
      +
      + + УчитыватьПрикладныеПравила + + <key>ru</key> + <value>Учитывать ограничения</value> + + 2 + + Boolean + + + true + + + true + + true + + + ОписаниеПрикладныхПравил + + <key>ru</key> + <value>С учетом ограничений</value> + + 3 + + + true + + + true + + + + ПравилаПоиска + + <key>ru</key> + <value>Считать элементы дублями, если</value> + + 4 + + ValueTable + + + true + + + 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 + + ValueList + + + true + + + true + + + + ПредставлениеРеквизита + + <key>ru</key> + <value>Реквизит</value> + + 4 + + String + + + + true + + + true + + + + Использовать + + <key>ru</key> + <value>Использовать</value> + + 5 + + Boolean + + + true + + + true + + + + + ОбластьПоискаДублей + + <key>ru</key> + <value>Область поиска дублей</value> + + 5 + + String + + + + true + + + true + + + + ЦветНедоступныеДанные + + <key>ru</key> + <value>Цвет недоступные данные</value> + + 6 + + Color + + + true + + + true + + + + ВсеВидыСравненияПравилПоиска + + <key>ru</key> + <value>Все виды сравнения правил поиска</value> + + 7 + + ValueList + + + true + + + true + + + + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + Auto + Auto + + + + + + +
      diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl new file mode 100644 index 000000000..926ae2042 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -0,0 +1,258 @@ +// Ожидаются параметры: +// +// ОбластьПоискаДублей - Строка - Полное имя метаданных таблицы ранее выбранной области поиска +// ПредставлениеОбластиОтбора - Строка - Представление для формирования заголовка +// ОписаниеПрикладныхПравил - Строка, Неопределено - Текст прикладных правил. Если не указано, то прикладных правил нет +// +// АдресНастроек - Строка - Адрес временного хранилища настроек. Ожидается структура с полями: +// УчитыватьПрикладныеПравила - Булево - Предыдущий флаг настройки, по умолчанию Истина +// ПравилаПоиска - ТаблицаЗначений - Редактируемые настройки. Ожидаются колонки: +// Реквизит - Строка - Имя реквизита для сравнения +// ПредставлениеРеквизита - Строка - Представление реквизита для сравнения +// Правило - Строка - Выбранный вариант сравнения: "Равно" - совпадение по равенству, "Подобно" - совпадение по похожести, "" - не учитывать +// ВариантыСравнения - СписокЗначений - Доступные варианты сравнения, где значение - одно из вариантов правил +// +// Возвращается результатом выбора: +// Неопределено - Отказ от редактирования +// Строка - Адрес временного хранилища новых настроек, указывает на структуру аналогичную параметру АдресНастроек +// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); + ОбластьПоискаДублей = Параметры.ОбластьПоискаДублей; + + Заголовок = СтрЗаменить( НСтр("ru = 'Правила поиска дублей ""%1""'"), "%1", Параметры.ПредставлениеОбластиОтбора); + + ИсходныеНастройки = ПолучитьИзВременногоХранилища(Параметры.АдресНастроек); + УдалитьИзВременногоХранилища(Параметры.АдресНастроек); + ИсходныеНастройки.Свойство("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); + + Если ОписаниеПрикладныхПравил = Неопределено Тогда + // Правила не определены + Элементы.ГруппаПрикладныхОграничений.Видимость = Ложь; + Иначе + Элементы.УчитыватьПрикладныеПравила.Видимость = МожноОтменятьПрикладныеПравила(); + КонецЕсли; + + // Заливаем и корректируем правила + ПравилаПоиска.Загрузить(ИсходныеНастройки.ПравилаПоиска); + Для Каждого СтрокаПравила Из ПравилаПоиска Цикл + СтрокаПравила.Использовать = Не ПустаяСтрока(СтрокаПравила.Правило); + КонецЦикла; + + Для Каждого Элемент Из ИсходныеНастройки.ВсеВариантыСравнения Цикл + Если Не ПустаяСтрока(Элемент.Значение) Тогда + ЗаполнитьЗначенияСвойств(ВсеВидыСравненияПравилПоиска.Добавить(), Элемент); + КонецЕсли; + КонецЦикла; + + УстановитьЦветаИУсловноеОформление(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЭтотОбъект.ОбновитьОтображениеДанных(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура УчитыватьПрикладныеПравилаПриИзменении(Элемент) + + Если УчитыватьПрикладныеПравила Тогда + Возврат; + КонецЕсли; + + Описание = Новый ОписаниеОповещения("ЗавершениеОчисткиИспользованияПрикладныхПравил", ЭтотОбъект); + + ТекстЗаголовка = НСтр("ru = 'Предупреждение'"); + ТекстВопроса = НСтр("ru = 'Внимание: поиск и удаление дублей элементов без учета поставляемых ограничений + |может привести к рассогласованию данных в программе. + | + |Отключить использование поставляемых ограничений?'"); + + ПоказатьВопрос(Описание, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет, ТекстЗаголовка); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыПравилаПоиска + +&НаКлиенте +Процедура ПравилаПоискаИспользоватьПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ПравилаПоиска.ТекущиеДанные; + + Если ТекущиеДанные.Использовать Тогда + Если ПустаяСтрока(ТекущиеДанные.Правило) И ТекущиеДанные.ВариантыСравнения.Количество() > 0 Тогда + ТекущиеДанные.Правило = ТекущиеДанные.ВариантыСравнения[0].Значение + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаПоискаВидСравненияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ТекущиеДанные = Элементы.ПравилаПоиска.ТекущиеДанные; + ДанныеВыбора = ТекущиеДанные.ВариантыСравнения; + +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаПоискаВидСравненияНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаПоискаВидСравненияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ТекущиеДанные = Элементы.ПравилаПоиска.ТекущиеДанные; + ТекущиеДанные.Использовать = Истина; + ТекущиеДанные.Правило = ВыбранноеЗначение; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандыФормы + +&НаКлиенте +Процедура Выбрать(Команда) + + ТекстОшибокВыбора = ОшибкиВыбора(); + Если ТекстОшибокВыбора <> Неопределено Тогда + ПоказатьПредупреждение(, ТекстОшибокВыбора); + Возврат; + КонецЕсли; + + Если Модифицированность Тогда + ОповеститьОВыборе( РезультатВыбора() ); + Иначе + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция ОшибкиВыбора() + + Если ОписаниеПрикладныхПравил <> Неопределено И УчитыватьПрикладныеПравила Тогда + // Есть прикладные правила и они используются - ошибок нет + Возврат Неопределено; + КонецЕсли; + + Для Каждого СтрокаПравил Из ПравилаПоиска Цикл + Если СтрокаПравил.Использовать Тогда + // Задано пользовательское правило - ошибок нет + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + + Возврат НСтр("ru ='Необходимо указать хотя бы одно правило поиска дублей.'"); +КонецФункции + +&НаКлиенте +Процедура ЗавершениеОчисткиИспользованияПрикладныхПравил(Знач Ответ, Знач ДополнительныеПараметры) Экспорт + Если Ответ = КодВозвратаДиалога.Да Тогда + Возврат + КонецЕсли; + + УчитыватьПрикладныеПравила = Истина; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция МожноОтменятьПрикладныеПравила() + + Результат = ПравоДоступа("АдминистрированиеДанных", Метаданные); + Возврат Результат; + +КонецФункции + +&НаСервере +Функция РезультатВыбора() + + Результат = Новый Структура; + Результат.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); + + ВыбранныеПравила = ПравилаПоиска.Выгрузить(); + Для Каждого СтрокаПравил Из ВыбранныеПравила Цикл + Если Не СтрокаПравил.Использовать Тогда + СтрокаПравил.Правило = ""; + КонецЕсли; + КонецЦикла; + ВыбранныеПравила.Колонки.Удалить("Использовать"); + + Результат.Вставить("ПравилаПоиска", ВыбранныеПравила ); + + Возврат ПоместитьВоВременноеХранилище(Результат); +КонецФункции + +&НаСервере +Процедура УстановитьЦветаИУсловноеОформление() + ЭлементыУсловногоОформления = УсловноеОформление.Элементы; + ЭлементыУсловногоОформления.Очистить(); + + ЦветНедоступныеДанные = ЦветСтиляИлиАвто("ЦветНедоступныеДанные", 192, 192, 192); + + Для Каждого ЭлементСписка Из ВсеВидыСравненияПравилПоиска Цикл + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПравилаПоиска.Правило"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = ЭлементСписка.Значение; + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ПравилаПоискаВидСравнения"); + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", ЭлементСписка.Представление); + КонецЦикла; + + // Не использовать + ЭлементОформления = ЭлементыУсловногоОформления.Добавить(); + + ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПравилаПоиска.Использовать"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Ложь; + + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ПравилаПоискаВидСравнения"); + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНедоступныеДанные); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЦветСтиляИлиАвто(Знач Имя, Знач Красный = Неопределено, Зеленый = Неопределено, Синий = Неопределено) + + ЭлементСтиля = Метаданные.ЭлементыСтиля.Найти(Имя); + Если ЭлементСтиля <> Неопределено И ЭлементСтиля.Вид = Метаданные.СвойстваОбъектов.ВидЭлементаСтиля.Цвет Тогда + Возврат ЦветаСтиля[Имя]; + КонецЕсли; + + Возврат ?(Красный = Неопределено, Новый Цвет, Новый Цвет(Красный, Зеленый, Синий)); +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html new file mode 100644 index 000000000..a85b37064 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html @@ -0,0 +1,29 @@ + +

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

      +

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

      +

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

      +

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

      +

      Поиск дублей

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

      Список дублей

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

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

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

      Просмотр ссылок на элементы списка

      +

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

      +

      См. также:

      +

      Работа с формами

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl new file mode 100644 index 000000000..5c43de852 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -0,0 +1,937 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Заполняет список всех возможных областей для поиска дублей +// +// Параметры: +// Список - СписокЗначений - Заполняемый список, в котором устанавливаются: +// Значение - Строка - Полное имя метаданных объекта-таблицы +// Представление - Строка - Представление для пользователя +// Картинка - Картинка - Соответствующая картинка из платформенной библиотеки +// Пометка - Булево - Флаг наличия прикладных правил поиска дублей. +// Устанавливается только если второй параметр равен Истина +// +// АнализироватьПрикладныеПравила - Булево - Флаг необходимости поиска прикладных правил поиска дублей +// +Процедура ОбластиПоискаДублей(Список, Знач АнализироватьПрикладныеПравила = Ложь) Экспорт + + Список.Очистить(); + + ГруппаОбластейПоискаДублей(Список, АнализироватьПрикладныеПравила, Справочники, "Справочник"); + ГруппаОбластейПоискаДублей(Список, АнализироватьПрикладныеПравила, ПланыВидовХарактеристик, "ПланВидовХарактеристик"); + ГруппаОбластейПоискаДублей(Список, АнализироватьПрикладныеПравила, ПланыСчетов, "ПланСчетов"); + ГруппаОбластейПоискаДублей(Список, АнализироватьПрикладныеПравила, ПланыВидовРасчета, "ПланВидовРасчета"); + +КонецПроцедуры + +// Определение менеджера объекта для вызова прикладных правил +// +// Параметры: +// ИмяОбластиПоискаДанных - Строка - Имя области (полное имя метаданных) +// +// Возвращаемое значение: +// СправочникиМенеджер, ПланыВидовХарактеристик.Менеджер, ПланыСчетовПланыВидовРасчета.Менеджер +// +Функция МенеджерОбластиПоискаДублей(Знач ИмяОбластиПоискаДанных) Экспорт + Мета = Метаданные.НайтиПоПолномуИмени(ИмяОбластиПоискаДанных); + + Если Метаданные.Справочники.Содержит(Мета) Тогда + Возврат Справочники[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(Мета) Тогда + Возврат ПланыВидовХарактеристик[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыСчетов.Содержит(Мета) Тогда + Возврат ПланыСчетов[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(Мета) Тогда + Возврат ПланыВидовРасчета[Мета.Имя]; + + КонецЕсли; + + ВызватьИсключение СтрЗаменить( + НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), + "%1", ИмяОбластиПоискаДанных + ); + +КонецФункции + +// Параметры по умолчанию для передачи в прикладной код +// +// Параметры: +// ПравилаПоиска - ТаблицаЗначений - Предлагаемые правила поиска, содержит колонки +// Реквизит - Строка - Имя реквизита области поиска +// Правило - Строка - Идентификатор правила сравнения, "Равно" или "Подобно" +// +// Возвращаемое значение: +// Структура +// +Функция ПрикладныеПараметрыПоУмолчанию(Знач ПравилаПоиска, Знач КомпоновщикОтбора) Экспорт + + ПараметрыПоУмолчанию = Новый Структура; + ПараметрыПоУмолчанию.Вставить("ПравилаПоиска", ПравилаПоиска); + ПараметрыПоУмолчанию.Вставить("ОграниченияСравнения", Новый Массив); + ПараметрыПоУмолчанию.Вставить("КомпоновщикОтбора", КомпоновщикОтбора); + ПараметрыПоУмолчанию.Вставить("КоличествоЭлементовДляСравнения", 1000); + + Возврат ПараметрыПоУмолчанию; + +КонецФункции + +// Обработчик фонового поиска дублей +// +// Параметры: +// Параметры - Структура - Данные для анализа +// АдресРезультата - Строка - Адрес во временном хранилище для сохранения результата +// +Процедура ФоновыйПоискДублей(Знач Параметры, Знач АдресРезультата) Экспорт + + // Собираем компоновщик повторно через схему и настройки + КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; + + КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.СхемаКомпоновки) ); + КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(Параметры.НастройкиКомпоновщикаПредварительногоОтбора); + + Параметры.Вставить("КомпоновщикПредварительногоОтбора", КомпоновщикПредварительногоОтбора); + + // Преобразуем правила поиска в таблицу значений с индексом + ПравилаПоиска = Новый ТаблицаЗначений; + ПравилаПоиска.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка") ); + ПравилаПоиска.Колонки.Добавить("Правило", Новый ОписаниеТипов("Строка") ); + ПравилаПоиска.Индексы.Добавить("Реквизит"); + + Для Каждого Правило Из Параметры.ПравилаПоиска Цикл + ЗаполнитьЗначенияСвойств(ПравилаПоиска.Добавить(), Правило); + КонецЦикла; + Параметры.Вставить("ПравилаПоиска", ПравилаПоиска); + + Параметры.Вставить("РассчитыватьМестаИспользования", Истина); + + // Запускаем поиск + ПоместитьВоВременноеХранилище(ГруппыДублей(Параметры), АдресРезультата); +КонецПроцедуры + +// Обработчик фонового удаления дублей +// +// Параметры: +// Параметры - Структура - Данные для анализа +// АдресРезультата - Строка - Адрес во временном хранилище для сохранения результата +// +Процедура ФоновоеУдалениеДублей(Знач Параметры, Знач АдресРезультата) Экспорт + + ПараметрыЗамены = Новый Структура; + ПараметрыЗамены.Вставить("СпособУдаления", Параметры.СпособУдаления); + ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Истина); + + ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗамены, АдресРезультата); + +КонецПроцедуры + +// Непосредственный поиск дублей +// +// Параметры: +// ПараметрыПоиска - Структура - Описывает параметры поиска +// ЭталонныйОбъект - Произвольный - Объект для сравнения при поиски похожих элементов +// +// Возвращаемое значение: +// ТаблицаЗначений - Реализация дерева значений через Ссылка и Родитель, +// верхний уровень - группы, нижний - найденные дубли +// +Функция ГруппыДублей(Знач ПараметрыПоиска, Знач ЭталонныйОбъект = Неопределено) Экспорт + Перем РазмерВозвращаемойПорции, РассчитыватьМестаИспользования; + + // 1. Определяем параметры с учетом прикладного кода + + ПараметрыПоиска.Свойство("МаксимальноеЧислоДублей", РазмерВозвращаемойПорции); + Если Не ЗначениеЗаполнено(РазмерВозвращаемойПорции) Тогда + // Все найденные + РазмерВозвращаемойПорции = 0; + КонецЕсли; + + Если Не ПараметрыПоиска.Свойство("РассчитыватьМестаИспользования", РассчитыватьМестаИспользования) Тогда + РассчитыватьМестаИспользования = Ложь; + КонецЕсли; + + // Для передачи в прикладной код + ДополнительныеПараметры = Неопределено; + ПараметрыПоиска.Свойство("ДополнительныеПараметры", ДополнительныеПараметры); + + // Вызываем прикладной код + МенеджерОбластиПоиска = МенеджерОбластиПоискаДублей(ПараметрыПоиска.ОбластьПоискаДублей); + ИспользоватьПрикладныеПравила = ПараметрыПоиска.УчитыватьПрикладныеПравила И ЕстьПрикладныеПравилаОбластиПоискаДублей(МенеджерОбластиПоиска); + + ПоляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству + ПоляСравненияНаПодобие = ""; // Имена реквизитов, по которым будем нечетко сравнивать + ПоляДополнительныхДанных = ""; // Имена реквизитов, дополнительно заказанные прикладными правилами + РазмерПрикладнойПорции = 0; // Сколько отдавать в прикладные правила для расчета + + Если ИспользоватьПрикладныеПравила Тогда + ПрикладныеПараметры = ПрикладныеПараметрыПоУмолчанию(ПараметрыПоиска.ПравилаПоиска, ПараметрыПоиска.КомпоновщикПредварительногоОтбора); + + МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); + + ВсеДополнительныеПоля = Новый Соответствие; + Для Каждого Ограничение Из ПрикладныеПараметры.ОграниченияСравнения Цикл + Для Каждого КлючЗначение Из Новый Структура(Ограничение.ДополнительныеПоля) Цикл + ИмяПоля = КлючЗначение.Ключ; + Если ВсеДополнительныеПоля[ИмяПоля] = Неопределено Тогда + ПоляДополнительныхДанных = ПоляДополнительныхДанных + ", " + ИмяПоля; + ВсеДополнительныеПоля[ИмяПоля] = Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + ПоляДополнительныхДанных = Сред(ПоляДополнительныхДанных, 2); + + // Сколько отдавать в прикладные правила для расчета + РазмерПрикладнойПорции = ПрикладныеПараметры.КоличествоЭлементовДляСравнения; + КонецЕсли; + + // Списки полей, возможно измененные прикладным кодом + Для Каждого Строка Из ПараметрыПоиска.ПравилаПоиска Цикл + Если Строка.Правило = "Равно" Тогда + ПоляСравненияНаРавенство = ПоляСравненияНаРавенство + ", " + Строка.Реквизит; + ИначеЕсли Строка.Правило = "Подобно" Тогда + ПоляСравненияНаПодобие = ПоляСравненияНаПодобие + ", " + Строка.Реквизит; + КонецЕсли + КонецЦикла; + ПоляСравненияНаРавенство = Сред(ПоляСравненияНаРавенство, 2); + ПоляСравненияНаПодобие = Сред(ПоляСравненияНаПодобие, 2); + + // 2. Конструируем по возможно измененному компоновщику условия отбора + Фильтр = ФильтрПоискаПоКомпоновщику(ПараметрыПоиска.КомпоновщикПредварительногоОтбора); + + МетаданныеТаблицы = Метаданные.НайтиПоПолномуИмени(ПараметрыПоиска.ОбластьПоискаДублей); + Характеристики= Новый Структура("ДлинаКода, ДлинаНаименования, Иерархический, ВидИерархии", 0, 0, Ложь); + ЗаполнитьЗначенияСвойств(Характеристики, МетаданныеТаблицы); + + ЕстьНаименование = Характеристики.ДлинаНаименования > 0; + ЕстьКод = Характеристики.ДлинаКода > 0; + + Если Характеристики.Иерархический И Характеристики.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + // Среди групп не ищем + Если ПустаяСтрока(Фильтр.Текст) Тогда + Фильтр.Текст = "НЕ ЭтоГруппа"; + Иначе + Фильтр.Текст = "НЕ ЭтоГруппа И (" + Фильтр.Текст + ")"; + КонецЕсли; + КонецЕсли; + + // Дополнительные поля могут пересекаться с остальными, им надо дать псевдонимы. + ТаблицаКандидатов = Новый ТаблицаЗначений; + КолонкиКандидатов = ТаблицаКандидатов.Колонки; + КолонкиКандидатов.Добавить("Ссылка1"); + КолонкиКандидатов.Добавить("Поля1"); + КолонкиКандидатов.Добавить("Ссылка2"); + КолонкиКандидатов.Добавить("Поля2"); + КолонкиКандидатов.Добавить("ЭтоДубли", Новый ОписаниеТипов("Булево")); + ТаблицаКандидатов.Индексы.Добавить("ЭтоДубли"); + + РасшифровкаДополнительныхПолей = Новый Соответствие; + ДополнительныеПсевдонимы = ""; + ПорядковыйНомер = 0; + Для Каждого КлючЗначение Из Новый Структура(ПоляДополнительныхДанных) Цикл + ИмяПоля = КлючЗначение.Ключ; + Псевдоним = "Доп" + Формат(ПорядковыйНомер, "ЧН=; ЧГ=") + "_" + ИмяПоля; + РасшифровкаДополнительныхПолей.Вставить(Псевдоним, ИмяПоля); + + ДополнительныеПсевдонимы = ДополнительныеПсевдонимы + "," + ИмяПоля + " КАК " + Псевдоним; + ПорядковыйНомер = ПорядковыйНомер + 1; + КонецЦикла; + ДополнительныеПсевдонимы = Сред(ДополнительныеПсевдонимы, 2); + + // Одинаковые поля будут сравниваться по равенству + СтруктураПолейИдентичности = Новый Структура(ПоляСравненияНаРавенство); + УсловиеИдентичности = ""; + Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл + ИмяПоля = КлючЗначение.Ключ; + УсловиеИдентичности = УсловиеИдентичности + "И " + ИмяПоля + " = &" + ИмяПоля + " "; + КонецЦикла; + УсловиеИдентичности = Сред(УсловиеИдентичности, 2); + + СтруктураПолейПодобия = Новый Структура(ПоляСравненияНаПодобие); + + ОбщаяЧастьЗапроса = " + |ВЫБРАТЬ + | " + ?(ПустаяСтрока(ПоляСравненияНаРавенство), "", ПоляСравненияНаРавенство + "," ) + " + | " + ?(ПустаяСтрока(ПоляСравненияНаПодобие), "", ПоляСравненияНаПодобие + "," ) + " + | " + ?(ПустаяСтрока(ДополнительныеПсевдонимы), "", ДополнительныеПсевдонимы + "," ) + " + | Ссылка + |"; + Если Не СтруктураПолейИдентичности.Свойство("Код") И Не СтруктураПолейПодобия.Свойство("Код") Тогда + ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + "," + ?(ЕстьКод, "Код", "НЕОПРЕДЕЛЕНО") + " КАК Код"; + КонецЕсли; + Если Не СтруктураПолейИдентичности.Свойство("Наименование") И Не СтруктураПолейПодобия.Свойство("Наименование") Тогда + ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + "," + ?(ЕстьНаименование, "Наименование", "НЕОПРЕДЕЛЕНО") + " КАК Наименование"; + КонецЕсли; + ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + " + |ИЗ + | " + ПараметрыПоиска.ОбластьПоискаДублей + " + |"; + + // Основной запрос - для каждого элемента будем искать кандидаты-дубли + Если ЭталонныйОбъект = Неопределено Тогда + + Запрос = Новый Запрос(ОбщаяЧастьЗапроса + " + |" + ?(ПустаяСтрока(Фильтр.Текст), "", "ГДЕ " + Фильтр.Текст) + " + |УПОРЯДОЧИТЬ ПО + | Ссылка + |"); + Иначе + + ТекстПредвыборки = " + |ВЫБРАТЬ * ПОМЕСТИТЬ ЭталонныйОбъект ИЗ &_ЭталонныйОбъект КАК Эталон + |;//////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | " + ?(ПустаяСтрока(ПоляСравненияНаРавенство), "", ПоляСравненияНаРавенство + "," ) + " + | " + ?(ПустаяСтрока(ПоляСравненияНаПодобие), "", ПоляСравненияНаПодобие + "," ) + " + | " + ?(ПустаяСтрока(ДополнительныеПсевдонимы), "", ДополнительныеПсевдонимы + "," ) + " + | ЗНАЧЕНИЕ(" + ПараметрыПоиска.ОбластьПоискаДублей + ".ПустаяСсылка) КАК Ссылка + |"; + Если Не СтруктураПолейИдентичности.Свойство("Код") И Не СтруктураПолейПодобия.Свойство("Код") Тогда + ТекстПредвыборки = ТекстПредвыборки + "," + ?(ЕстьКод, "Код", "НЕОПРЕДЕЛЕНО") + " КАК Код"; + КонецЕсли; + Если Не СтруктураПолейИдентичности.Свойство("Наименование") И Не СтруктураПолейПодобия.Свойство("Наименование") Тогда + ТекстПредвыборки = ТекстПредвыборки + "," + ?(ЕстьНаименование, "Наименование", "НЕОПРЕДЕЛЕНО") + " КАК Наименование"; + КонецЕсли; + ТекстПредвыборки = ТекстПредвыборки + " + |ИЗ + | ЭталонныйОбъект + |"; + + Запрос = Новый Запрос(ТекстПредвыборки + " + |" + ?(ПустаяСтрока(Фильтр.Текст), "", "ГДЕ " + Фильтр.Текст) + " + |"); + + Запрос.УстановитьПараметр("_ЭталонныйОбъект", ОбъектВТаблицуЗначений(ЭталонныйОбъект)); + КонецЕсли; + + + // Запрос поиска кандидатов к текущей ссылке. + // Сравнение ссылок и упорядочение в предыдущем запросе дают возможность избежать повторных сравнений + ЗапросКандидатов = Новый Запрос(ОбщаяЧастьЗапроса + " + |ГДЕ + | Ссылка > &_ИсходнаяСсылка + | " + ?(ПустаяСтрока(Фильтр.Текст), "", "И (" + Фильтр.Текст + ")") + " + | " + ?(ПустаяСтрока(УсловиеИдентичности), "", "И (" + УсловиеИдентичности+ ")") + " + |"); + + Для Каждого КлючЗначение Из Фильтр.Параметры Цикл + ИмяПараметра = КлючЗначение.Ключ; + ЗначениеПараметра = КлючЗначение.Значение; + Запрос.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); + ЗапросКандидатов.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); + КонецЦикла; + + // Результат и цикл поиска + ТаблицаДублей = Новый ТаблицаЗначений; + КолонкиРезультата = ТаблицаДублей.Колонки; + КолонкиРезультата.Добавить("Ссылка"); + Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл + КолонкиРезультата.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл + КолонкиРезультата.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Если КолонкиРезультата.Найти("Код") = Неопределено Тогда + КолонкиРезультата.Добавить("Код"); + КонецЕсли; + Если КолонкиРезультата.Найти("Наименование") = Неопределено Тогда + КолонкиРезультата.Добавить("Наименование"); + КонецЕсли; + КолонкиРезультата.Добавить("Родитель"); + + ТаблицаДублей.Индексы.Добавить("Ссылка"); + ТаблицаДублей.Индексы.Добавить("Родитель"); + ТаблицаДублей.Индексы.Добавить("Ссылка, Родитель"); + + Результат = Новый Структура("ТаблицаДублей, ОписаниеОшибки", ТаблицаДублей); + + СтруктураПолей = Новый Структура; + СтруктураПолей.Вставить("РасшифровкаДополнительныхПолей", РасшифровкаДополнительныхПолей); + СтруктураПолей.Вставить("СтруктураПолейИдентичности", СтруктураПолейИдентичности); + СтруктураПолей.Вставить("СтруктураПолейПодобия", СтруктураПолейПодобия); + СтруктураПолей.Вставить("СписокПолейИдентичности", ПоляСравненияНаРавенство); + СтруктураПолей.Вставить("СписокПолейПодобия", ПоляСравненияНаПодобие); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + // Отбираем похожих + ЗапросКандидатов.УстановитьПараметр("_ИсходнаяСсылка", Выборка.Ссылка); + Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл + ИмяПоля = КлючЗначение.Ключ; + ЗапросКандидатов.УстановитьПараметр(ИмяПоля, Выборка[ИмяПоля]); + КонецЦикла; + + ВыборкаКандидатов = ЗапросКандидатов.Выполнить().Выбрать(); + Пока ВыборкаКандидатов.Следующий() Цикл + + // Если мы его уже посчитали дублем в какой-то группе, то не трогаем + Если ТаблицаДублей.Найти(ВыборкаКандидатов.Ссылка, "Ссылка") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НеДубли = Ложь; + + // Проигрываем правила подобия для строк + Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл + ИмяПоля = КлючЗначение.Ключ; + Если Не СтрокиПодобны(Выборка[ИмяПоля], ВыборкаКандидатов[ИмяПоля]) Тогда + НеДубли = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если НеДубли Тогда + Продолжить; + КонецЕсли; + + Если ИспользоватьПрикладныеПравила Тогда + // Наполняем таблицу для прикладных правил, вызываем их, если пора + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, ВыборкаКандидатов, СтруктураПолей); + Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ТаблицаКандидатов.Очистить(); + КонецЕсли; + Иначе + ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, ВыборкаКандидатов, СтруктураПолей); + КонецЕсли; + + КонецЦикла; + + // Обрабатываем остаток таблицы для прикладных правил + Если ИспользоватьПрикладныеПравила Тогда + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ТаблицаКандидатов.Очистить(); + КонецЕсли; + + // Завершен анализ группы, смотрим на количество. Много клиенту не отдаем. + Если РазмерВозвращаемойПорции > 0 И (ТаблицаДублей.Количество() > РазмерВозвращаемойПорции) Тогда + // Откатываем последнюю группу + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель ", Выборка.Ссылка) ) Цикл + ТаблицаДублей.Удалить(Строка); + КонецЦикла; + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", Выборка.Ссылка) ) Цикл + ТаблицаДублей.Удалить(Строка); + КонецЦикла; + // Если это была последняя группа, то сообщаем об ошибке + Если ТаблицаДублей.Количество() = 0 Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Найдено слишком много элементов, определены не все группы дублей.'"); + Иначе + Результат.ОписаниеОшибки = НСтр("ru = 'Найдено слишком много элементов. Уточните критерии поиска дублей.'"); + КонецЕсли; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если Результат.ОписаниеОшибки <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + + // Расчет мест использования + Если РассчитыватьМестаИспользования Тогда + НаборСсылок = Новый Массив; + Для Каждого СтрокаДублей Из ТаблицаДублей Цикл + Если ЗначениеЗаполнено(СтрокаДублей.Ссылка) Тогда + НаборСсылок.Добавить(СтрокаДублей.Ссылка); + КонецЕсли; + КонецЦикла; + + МестаИспользования = МестаИспользованияСсылок(НаборСсылок); + МестаИспользования = МестаИспользования.Скопировать( + МестаИспользования.НайтиСтроки(Новый Структура("ВспомогательныеДанные", Ложь)) + ); + МестаИспользования.Индексы.Добавить("Ссылка"); + + Результат.Вставить("МестаИспользования", МестаИспользования); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Определение наличия прикладных правил у объекта +// +// Параметры: +// МенеджерОбласти - СправочникМенеджер - Менеджер проверяемого объекта +// +// Возвращаемое значение: +// Булево - Истина, если прикладные правила определены +// +Функция ЕстьПрикладныеПравилаОбластиПоискаДублей(Знач МенеджерОбласти) Экспорт + + Попытка + Результат = (Истина = МенеджерОбласти.ИспользоватьПоискДублей()); + Исключение + // Нет метода или метод поломан. Считаем, что правил нет + Результат = Ложь; + КонецПопытки; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Преобразуем объект в таблицу для помещения в запрос +Функция ОбъектВТаблицуЗначений(Знач ОбъектДанных) + Результат = Новый ТаблицаЗначений; + СтрокаДанных = Результат.Добавить(); + + МетаОбъект = ОбъектДанных.Метаданные(); + + Для Каждого МетаРеквизит Из МетаОбъект.СтандартныеРеквизиты Цикл + Имя = МетаРеквизит.Имя; + Результат.Колонки.Добавить(Имя, МетаРеквизит.Тип); + СтрокаДанных[Имя] = ОбъектДанных[Имя]; + КонецЦикла; + + Для Каждого МетаРеквизит Из МетаОбъект.Реквизиты Цикл + Имя = МетаРеквизит.Имя; + Результат.Колонки.Добавить(Имя, МетаРеквизит.Тип); + СтрокаДанных[Имя] = ОбъектДанных[Имя]; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Дополнительный анализ кандидатов в дубли прикладном методом +// +Процедура ДобавитьДублиПоПрикладнымПравилам(СтрокиДереваРезультата, Знач МенеджерОбластиПоиска, Знач ОсновныеДанные, Знач ТаблицаКандидатов, Знач СтруктураПолей, Знач ДополнительныеПараметры) + Если ТаблицаКандидатов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МенеджерОбластиПоиска.ПриПоискеДублей(ТаблицаКандидатов, ДополнительныеПараметры); + + Данные1 = Новый Структура; + Данные2 = Новый Структура; + + Для Каждого ПараКандидатов Из ТаблицаКандидатов.НайтиСтроки(Новый Структура("ЭтоДубли", Истина)) Цикл + Данные1.Вставить("Ссылка", ПараКандидатов.Ссылка1); + Данные1.Вставить("Код", ПараКандидатов.Поля1.Код); + Данные1.Вставить("Наименование", ПараКандидатов.Поля1.Наименование); + + Данные2.Вставить("Ссылка", ПараКандидатов.Ссылка2); + Данные2.Вставить("Код", ПараКандидатов.Поля2.Код); + Данные2.Вставить("Наименование", ПараКандидатов.Поля2.Наименование); + + Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейИдентичности Цикл + ИмяПоля = КлючЗначение.Ключ; + Данные1.Вставить(ИмяПоля, ПараКандидатов.Поля1[ИмяПоля]); + Данные2.Вставить(ИмяПоля, ПараКандидатов.Поля2[ИмяПоля]); + КонецЦикла; + Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейПодобия Цикл + ИмяПоля = КлючЗначение.Ключ; + Данные1.Вставить(ИмяПоля, ПараКандидатов.Поля1[ИмяПоля]); + Данные2.Вставить(ИмяПоля, ПараКандидатов.Поля2[ИмяПоля]); + КонецЦикла; + + ДобавитьДубльВРезультат(СтрокиДереваРезультата, Данные1, Данные2, СтруктураПолей); + КонецЦикла; +КонецПроцедуры + +// Добавляем строку в таблицу кандидатов для прикладного метода +// +Функция ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураПолей) + + Строка = ТаблицаКандидатов.Добавить(); + Строка.ЭтоДубли = Ложь; + Строка.Ссылка1 = ДанныеОсновногоЭлемента.Ссылка; + Строка.Ссылка2 = ДанныеКандидата.Ссылка; + + Строка.Поля1 = Новый Структура("Код, Наименование", ДанныеОсновногоЭлемента.Код, ДанныеОсновногоЭлемента.Наименование); + Строка.Поля2 = Новый Структура("Код, Наименование", ДанныеКандидата.Код, ДанныеКандидата.Наименование); + + Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейИдентичности Цикл + ИмяПоля = КлючЗначение.Ключ; + Строка.Поля1.Вставить(ИмяПоля, ДанныеОсновногоЭлемента[ИмяПоля]); + Строка.Поля2.Вставить(ИмяПоля, ДанныеКандидата[ИмяПоля]); + КонецЦикла; + + Для Каждого КлючЗначение Из СтруктураПолей.СтруктураПолейПодобия Цикл + ИмяПоля = КлючЗначение.Ключ; + Строка.Поля1.Вставить(ИмяПоля, ДанныеОсновногоЭлемента[ИмяПоля]); + Строка.Поля2.Вставить(ИмяПоля, ДанныеКандидата[ИмяПоля]); + КонецЦикла; + + Для Каждого КлючЗначение Из СтруктураПолей.РасшифровкаДополнительныхПолей Цикл + ИмяКолонки = КлючЗначение.Значение; + ИмяПоля = КлючЗначение.Ключ; + + Строка.Поля1.Вставить(ИмяКолонки, ДанныеОсновногоЭлемента[ИмяПоля]); + Строка.Поля2.Вставить(ИмяКолонки, ДанныеКандидата[ИмяПоля]); + КонецЦикла; + + Возврат Строка; +КонецФункции + +// Добавляем в дерево результатов найденный вариант +// +Процедура ДобавитьДубльВРезультат(Результат, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураПолей) + + ФильтрГруппы = Новый Структура("Ссылка, Родитель", ДанныеОсновногоЭлемента.Ссылка); + ГруппаДублей = Результат.НайтиСтроки(ФильтрГруппы); + + Если ГруппаДублей.Количество() = 0 Тогда + ГруппаДублей = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(ГруппаДублей, ФильтрГруппы); + + СтрокаДублей = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеОсновногоЭлемента, + "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия + ); + + СтрокаДублей.Родитель = ГруппаДублей.Ссылка; + Иначе + ГруппаДублей = ГруппаДублей[0]; + КонецЕсли; + + СтрокаДублей = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеКандидата, + "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия + ); + + СтрокаДублей.Родитель = ГруппаДублей.Ссылка; +КонецПроцедуры + +// Формируем текст условия запроса и набор параметров +// +Функция ФильтрПоискаПоКомпоновщику(Знач КомпоновщикОтбора) + Результат = Новый Структура("Параметры", Новый Структура); + + СтекГрупп = Новый Массив; + СтекГрупп.Вставить(0, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + + Результат.Вставить("Текст", ТекстОтбораГруппыКомпоновщика(КомпоновщикОтбора.Настройки.Отбор.Элементы, СтекГрупп, Результат.Параметры) ); + Результат.Вставить("Описание", Строка(КомпоновщикОтбора.Настройки.Отбор) ); + + Возврат Результат; +КонецФункции + +// Формируем текст для использования в запросе, заполняем параметры +// +Функция ТекстОтбораГруппыКомпоновщика(Знач ЭлементыГруппы, СтекГрупп, ПараметрыКомпоновщика) + КоличествоЭлементов = ЭлементыГруппы.Количество(); + + Если КоличествоЭлементов = 0 Тогда + // Пустая группа условий + Возврат ""; + КонецЕсли; + + ТипТекущейГруппы = СтекГрупп[0]; + + Текст = ""; + ТокенСравнения = ТокенСравненияГруппыОтбораКомпоновки(ТипТекущейГруппы); + + Для Каждого Элемент Из ЭлементыГруппы Цикл + + Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + // Одиночный элемент + ИмяПараметра = "ПараметрОтбора" + Формат(ПараметрыКомпоновщика.Количество(), "ЧН=; ЧГ="); + + ПоискПоПодобию = Ложь; + Текст = Текст + " " + ТокенСравнения + " " + ТекстСравненияГруппыОтбораКомпоновки(Элемент.ЛевоеЗначение, Элемент.ВидСравнения, "&" + ИмяПараметра, ПоискПоПодобию); + + Если ПоискПоПодобию Тогда + ПараметрыКомпоновщика.Вставить(ИмяПараметра, "%" + Элемент.ПравоеЗначение + "%"); + Иначе + ПараметрыКомпоновщика.Вставить(ИмяПараметра, Элемент.ПравоеЗначение); + КонецЕсли; + Иначе + // Вложенная группа + СтекГрупп.Вставить(0, Элемент.ТипГруппы); + Текст = Текст + " " + ТокенСравнения + " " + ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); + СтекГрупп.Удалить(0); + КонецЕсли; + + КонецЦикла; + + Текст = Сред(Текст, 2 + СтрДлина(ТокенСравнения)); + Возврат ТокенОткрытияГруппыОтбораКомпоновки(ТипТекущейГруппы) + + "(" + Текст + ")"; +КонецФункции + +// Токен сравнения элементов внутри группы +// +Функция ТокенСравненияГруппыОтбораКомпоновки(Знач ТипГруппы) + + Если ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ Тогда + Возврат "И"; + + ИначеЕсли ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли Тогда + Возврат "ИЛИ"; + + ИначеЕсли ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда + Возврат "И"; + + КонецЕсли; + + Возврат ""; +КонецФункции + +// Токен операции перед группой +// +Функция ТокенОткрытияГруппыОтбораКомпоновки(Знач ТипГруппы) + + Если ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда + Возврат "НЕ" + КонецЕсли; + + Возврат ""; +КонецФункции + +// Текст сравнения двух операндов по виду сравнения +// +Функция ТекстСравненияГруппыОтбораКомпоновки(Знач Поле, Знач ВидСравнения, Знач ИмяПараметра, ИспользованПоискПоПодобию = Ложь) + + ИспользованПоискПоПодобию = Ложь; + ПолеСравнения = Строка(Поле); + + Если ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда + Возврат ПолеСравнения + " > " + ИмяПараметра; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда + Возврат ПолеСравнения + " >= " + ИмяПараметра; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда + Возврат ПолеСравнения + " В ИЕРАРХИИ (" + ИмяПараметра + ") "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда + Возврат ПолеСравнения + " В (" + ИмяПараметра + ") "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда + Возврат ПолеСравнения + " В ИЕРАРХИИ (" + ИмяПараметра + ") "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда + ИспользованПоискПоПодобию = Истина; + Возврат ПолеСравнения + " НЕ ПОДОБНО """" "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда + Возврат ПолеСравнения + " < " + ИмяПараметра; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда + Возврат ПолеСравнения + " <= " + ИмяПараметра; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Возврат ПолеСравнения + " НЕ В ИЕРАРХИИ (" + ИмяПараметра + ") "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда + Возврат ПолеСравнения + " НЕ В (" + ИмяПараметра + ")"; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Возврат ПолеСравнения + " НЕ В ИЕРАРХИИ (" + ИмяПараметра + ") "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + ИспользованПоискПоПодобию = Истина; + Возврат ПолеСравнения + " ПОДОБНО """" "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда + Возврат ПолеСравнения + " <> " + ИмяПараметра + " "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит Тогда + ИспользованПоискПоПодобию = Истина; + Возврат ПолеСравнения + " НЕ ПОДОБНО " + ИмяПараметра + " "; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда + Возврат ПолеСравнения + " = " + ИмяПараметра; + + ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда + ИспользованПоискПоПодобию = Истина; + Возврат ПолеСравнения + " ПОДОБНО " + ИмяПараметра + " ";; + + КонецЕсли; + + Возврат ""; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Нечеткое сравнение строк +// + +Функция СтрокиПодобны(Знач Строка1, Знач Строка2) + + Возврат ПроцентПодобияСтрок(Строка1, Строка2) >= 90; + +КонецФункции + +// Возвращает процент похожести: 0 - не похоже, 100 - полное совпадение для строк +// +Функция ПроцентПодобияСтрок(Знач Строка1, Знач Строка2) Экспорт + Если Строка1 = Строка2 Тогда + Возврат 100; + КонецЕсли; + + ВсеСлова = Новый Соответствие; + ВхожденияСлов(ВсеСлова, Строка1, 1); + ВхожденияСлов(ВсеСлова, Строка2, 2); + + // Только различные слова + Сортировщик1 = Новый СписокЗначений; + Сортировщик2 = Новый СписокЗначений; + Для Каждого КлючЗначение Из ВсеСлова Цикл + Если КлючЗначение.Значение = 1 Тогда + Сортировщик1.Добавить(КлючЗначение.Ключ); + ИначеЕсли КлючЗначение.Значение = 2 Тогда + Сортировщик2.Добавить(КлючЗначение.Ключ); + КонецЕсли; + КонецЦикла; + + ПерваяСтрока = СловаИзСписка(Сортировщик1); + ВтораяСтрока = СловаИзСписка(Сортировщик2); + Если ПерваяСтрока = ВтораяСтрока Тогда + Возврат 100; + КонецЕсли; + + Метрика = МетрикаРедактирования(ПерваяСтрока, ВтораяСтрока); + + Возврат 100 - Метрика * 100 / Макс(СтрДлина(Строка1), СтрДлина(Строка2)) +КонецФункции + +Процедура ВхожденияСлов(Результат, Знач ИсходнаяСтрока, Знач Приращение) + + РабочаяСтрока = СокрЛП(ИсходнаяСтрока); + Пока Истина Цикл + Позиция = Найти(РабочаяСтрока, " "); + Если Позиция = 0 Тогда + Прервать; + КонецЕсли; + + ТекущаяСтрока = Лев(РабочаяСтрока, Позиция - 1); + Если Не ПустаяСтрока(ТекущаяСтрока) Тогда + Значение = Результат[ТекущаяСтрока]; + Если Значение = Неопределено Тогда + Значение = 0; + КонецЕсли; + Результат.Вставить(ТекущаяСтрока, Значение + Приращение); + КонецЕсли; + + РабочаяСтрока = Сред(РабочаяСтрока, Позиция + 1); + КонецЦикла; + + Если Не ПустаяСтрока(РабочаяСтрока) Тогда + Значение = Результат[РабочаяСтрока]; + Если Значение = Неопределено Тогда + Значение = 0; + КонецЕсли; + Результат.Вставить(РабочаяСтрока, Значение + Приращение); + КонецЕсли; + +КонецПроцедуры + +Функция СловаИзСписка(Знач СписокСлов) + Результат = ""; + + СписокСлов.СортироватьПоЗначению(); + Для Каждого Элемент Из СписокСлов Цикл + Результат = Результат + " " + Элемент.Значение; + КонецЦикла; + + Возврат Сред(Результат, 2); +КонецФункции + +Функция МетрикаРедактирования(Знач Строка1, Знач Строка2) + Если Строка1 = Строка2 Тогда + Возврат 0; + КонецЕсли; + + Длина1 = СтрДлина(Строка1); + Длина2 = СтрДлина(Строка2); + + Если Длина1 = 0 Тогда + Если Длина2 = 0 Тогда + Возврат 0; + КонецЕсли; + Возврат Длина2; + + ИначеЕсли Длина2 = "" Тогда + Возврат Длина1; + + КонецЕсли; + + // Инициализация + Коэффициенты = Новый Массив(Длина1 + 1, Длина2 + 1); + Для Позиция1 = 0 По Длина1 Цикл + Коэффициенты[Позиция1][0] = Позиция1; + КонецЦикла; + Для Позиция2 = 0 По Длина2 Цикл + Коэффициенты[0][Позиция2] = Позиция2 + КонецЦикла; + + // Расчет + Для Позиция1 = 1 По Длина1 Цикл + ПредПозиция1 = Позиция1 - 1; + Символ1 = Сред(Строка1, Позиция1, 1); + + Для Позиция2 = 1 По Длина2 Цикл + ПредПозиция2 = Позиция2 - 1; + Символ2 = Сред(Строка2, Позиция2, 1); + + Стоимость = ?(Символ1 = Символ2, 0, 1); // Стоимость замены + + Коэффициенты[Позиция1][Позиция2] = Мин( + Коэффициенты[ПредПозиция1][Позиция2] + 1, // Стоимость удаления, + Коэффициенты[Позиция1] [ПредПозиция2] + 1, // Стоимость вставки, + Коэффициенты[ПредПозиция1][ПредПозиция2] + Стоимость + ); + + Если Позиция1 > 1 И Позиция2 > 1 И Символ1 = Сред(Строка2, ПредПозиция2, 1) И Сред(Строка1, ПредПозиция1, 1) = Символ2 Тогда + Коэффициенты[Позиция1][Позиция2] = Мин( + Коэффициенты[Позиция1][Позиция2], + Коэффициенты[Позиция1 - 2][Позиция2 - 2] + Стоимость // Стоимость перестановки + ); + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + Возврат Коэффициенты[Длина1][Длина2]; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +Процедура ГруппаОбластейПоискаДублей(Результат, Знач АнализироватьПрикладныеПравила, Знач МенеджерГруппы, Знач Пиктограмма) + + Для Каждого Элемент Из МенеджерГруппы Цикл + Мета = Метаданные.НайтиПоТипу(ТипЗнч(Элемент)); + Если Не ПравоДоступа("Чтение", Мета) Тогда + // Нет доступа, не отражаем в списке + Продолжить; + КонецЕсли; + + Если АнализироватьПрикладныеПравила Тогда + ЕстьПрикладныеПравила = ЕстьПрикладныеПравилаОбластиПоискаДублей( МенеджерГруппы[Мета.Имя] ); + Иначе + ЕстьПрикладныеПравила = Ложь; + КонецЕсли; + + Результат.Добавить(Мета.ПолноеИмя(), Строка(Мета), ЕстьПрикладныеПравила, БиблиотекаКартинок[Пиктограмма]); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Копия функционала +// + +// [ОбщегоНазначения.МестаИспользования] +Функция МестаИспользованияСсылок(Знач НаборСсылок, Знач АдресРезультата = "") + + Возврат ОбщегоНазначения.МестаИспользования(НаборСсылок, АдресРезультата); + +КонецФункции + +// [ОбщегоНазначения.ЗаменитьСсылки] +Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено, Знач АдресРезультата = "") + + Возврат ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Параметры, АдресРезультата); + +КонецФункции + +#КонецОбласти + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo new file mode 100644 index 000000000..38031d253 --- /dev/null +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo @@ -0,0 +1,60 @@ + + + + + + + ПоискИУдалениеДублей + + ru + Поиск и удаление дублей + + true + DataProcessor.ПоискИУдалениеДублей.Form.ПоискДублей + + + ru + + + + ПоискДублей + + ru + Поиск дублей + + PersonalComputer + MobileDevice + + + ПравилаОтбора + + ru + Правила отбора + + + + ru + + + PersonalComputer + MobileDevice + + + ОбластьПоискаДублей + + ru + Область поиска дублей + + PersonalComputer + MobileDevice + + + ПравилаПоиска + + ru + Правила поиска + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl index 018162669..a76224321 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -12,3 +12,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index 2b65d4ccc..f6aea730b 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,8 +19,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьПоиск(Команда) @@ -29,8 +30,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОткрытьФормуПоиска() @@ -58,3 +60,4 @@ Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); КонецФункции +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl index 3c8110772..45b180df5 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,8 +71,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СтрокаПоискаПриИзменении(Элемент) @@ -132,8 +133,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьПоиск(Команда) @@ -168,23 +170,15 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОткрытьЗначениеПоиска(Значение) - // Механизмы расширения. - СтандартнаяОбработка = Истина; - // При открытии результата из списка найденного в полнотекстовом поиске. - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - МодульБизнесПроцессыИЗадачиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("БизнесПроцессыИЗадачиКлиент"); - МодульБизнесПроцессыИЗадачиКлиент.ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка); - КонецЕсли; - - Если СтандартнаяОбработка = Истина Тогда // Стандартное поведение. - ПоказатьЗначение(, Значение); - КонецЕсли; + ПоказатьЗначение(, Значение); + КонецПроцедуры &НаКлиенте @@ -467,3 +461,5 @@ ОткрытьЗначениеПоиска(ВыбранныйЭлемент.Значение); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html index 44a69acbf..34483a7f7 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 3c2568ddd..3aa022cc3 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -7290,6 +7290,23 @@ true + + АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными + + <key>ru</key> + <value>Активизироваться при закрытии помощника создания обмена данными</value> + + 41 + + Boolean + + + true + + + true + + ОбновитьИнформациюСопоставленияПолностью diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 6d49e49d2..c0e954a35 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -2,22 +2,21 @@ // // Вариант 1 // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка - узел плана обмена, для которого выполняется помощник -// РасширенныйРежимДополненияВыгрузки – Булево - флаг включения механизма настройки дополнения выгрузки по сценарию узла +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется помощник +// РасширенныйРежимДополненияВыгрузки - Булево - флаг включения механизма настройки дополнения выгрузки по сценарию узла // // Вариант 2: // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка - плана обмена, для которого выполняется помощник -// РасширенныйРежимДополненияВыгрузки – Булево - флаг включения механизма настройки дополнения выгрузки по сценарию узла -// ИмяПланаОбмена – Строка - имя менеджера плана обмена которого используется для поиска +// УзелИнформационнойБазы - ПланОбменаСсылка - плана обмена, для которого выполняется помощник +// РасширенныйРежимДополненияВыгрузки - Булево - флаг включения механизма настройки дополнения выгрузки по сценарию узла +// ИмяПланаОбмена - Строка - имя менеджера плана обмена которого используется для поиска // узла плана обмена с кодом, заданными в параметре КодУзлаИнформационнойБазы. // &НаКлиенте Перем ПропускатьКонтрольОтказаТекущейСтраницы; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -28,6 +27,8 @@ Возврат; КонецЕсли; + Параметры.Свойство("АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными", АктивизироватьсяПриЗакрытииПомощникаСозданияОбменаДанными); + ЭтоЗапускИзДругогоПриложения = Ложь; Если Параметры.Свойство("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) Тогда @@ -217,8 +218,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Страница СтраницаНачала @@ -262,8 +264,9 @@ СтандартнаяОбработка = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоИнформацииСтатистики +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоИнформацииСтатистики &НаКлиенте Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -272,8 +275,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаДалее(Команда) @@ -520,8 +524,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура НастроитьПараметрыТранспортаСообщенийОбменаЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт @@ -776,7 +781,6 @@ Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = ОткрытьПомощникСозданияСценарияОбменаДанными; КонецЕсли; - // Устанавливаем текущую таблицу переходов Если ОбменЧерезПодключениеККорреспонденту Тогда @@ -841,16 +845,12 @@ // Удаляет заданный литерал (префикс) в именах ключей переданной структуры. // Создает новую структуру. // -// Параметры: -// Структура. Тип: Структура. -// Структура элементов, на основании которой необходимо создать новую структуру с ключами без заданного литерала. +// Параметры: +// Структура - Структура - Структура элементов, на основании которой необходимо создать новую структуру с ключами без заданного литерала. +// Литерал - Строка - Строка символов, которую необходимо исключить из имени ключей переданной структуры. // -// Литерал. Тип: Строка. -// Строка символов, которую необходимо исключить из имени ключей переданной структуры. -// -// Возвращающее значение: -// Тип. Структура. -// Возвращаемая структура получается на основании копирования исходной структуры. +// Возвращаемое значение: +// Структура - получается на основании копирования исходной структуры. // &НаСервере Функция УдалитьПрефиксВКлючахКоллекции(Структура, Литерал) @@ -906,7 +906,7 @@ УдалитьФайлы(ИмяВременногоКаталога); ИмяВременногоКаталога = ""; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Удаление временных файлов'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Удаление временных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; @@ -2484,3 +2484,5 @@ ТаблицаПереходовНоваяСтрока(17, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index 5963d0f44..df7e7d5d8 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html @@ -1,6 +1,48 @@ -<!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 align="left">На второй странице помощника отображается статистика сопоставления объектов. Перед открытием страницы программа выполняет попытку сопоставить данные автоматически. Автоматическое сопоставление выполняется по заданным по умолчанию полям сопоставления, при этом соблюдаются самые строгие правила сопоставления. Рекомендуется выполнить проверку результатов автоматического сопоставления данных. <br>По кнопке командной панели <strong>Выполнить сопоставление</strong> открывается форма для предварительно просмотра загружаемых данных и выполнения сопоставления объектов.<br>По кнопке командной панели <strong>Получить данные</strong> выполняется загрузка данных для выделенных строк таблицы. Загрузку данных надо использовать в редких случаях, когда требуется сопоставить взаимосвязанные таблицы данных.<br>Перечисленные команды доступны для вызова из контекстного меню таблицы статистики сопоставления. При вызове из контекстного меню эти команды актуальны для множества выделенных строк таблицы.<br>После того как будет выполнено сопоставление всех объектов следует нажать на кнопку <strong>Далее</strong> для загрузки данных. </p> -<p>На третьей странице помощника следует указать данные для отправки в другую программу. Если данные не указывать, то по умолчанию будут отправлены данные, измененные с момента последней сессии синхронизации.</p> -<p>На заключительной странице помощника будет предложено открыть форму настройки расписания обмена данными. Форма настройки расписания будет открыта в том случае, если текущий обмен данными еще не включен ни в одно из существующих расписаний выполнения обмена.</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.16476"></meta></head><body> +<p>Помощник интерактивной синхронизации данных предназначен для выполнения синхронизации данных с возможностью предварительного просмотра и сопоставления загружаемых данных. Помощник позволяет выполнять сопоставление объектов двух информационных баз, между которыми настроена синхронизация данных. После выполнения сопоставления выполняется загрузка данных и последующая выгрузка данных.</p> +<p>Режим интерактивной синхронизации данных следует использовать в случае, когда до начала синхронизации один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим синхронизации данных следует выбирать при первой синхронизации данных между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.</p> +<p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> <strong>Синхронизировать с дополнительными параметрами</strong> в списке <a href="CommonForm.ОбменыДанными/Help">Синхронизация данных</a>.</p> +<h3>Параметры подключения</h3> +<p>На первой странице помощника следует выбрать <a href="InformationRegister.НастройкиТранспортаОбмена/Help">вид транспорта сообщений обмена</a> (можно изменить уже имеющийся вариант подключения, он указан на этой странице), для этого нажмите <img src="StdPicture.Change"></img> <strong>Настроить,</strong> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена.</p> +<p>Для перехода к следующей странице нажмите кнопку <strong>Далее</strong>. </p> +<h3 align="left">Сопоставление данных</h3> +<p>На второй странице помощника отображается статистика сопоставления объектов. Перед открытием страницы программа выполняет попытку сопоставить данные автоматически. </p> +<ul><li>Автоматическое сопоставление выполняется по заданным по умолчанию полям сопоставления, при этом соблюдаются самые строгие правила сопоставления. Рекомендуется выполнить проверку результатов автоматического сопоставления данных. В списке выводится: +<ul><li> +<div><strong>Данные, Всего принято, шт</strong>.</div> +</li><li><img src="CommonPicture.Информация" width="16" height="16"></img> - имеются вопросы по сопоставлению объектов; +</li><li> +<div align="left"><strong>В этой программе, шт</strong>.</div> +<div></div> +</li><li> +<div align="left"><strong>Осталось сопоставить, шт</strong>.</div> +</li><li> +<div align="left"><strong>Сопоставление, %</strong></div></li></ul></li><li>По команде <strong>Выполнить сопоставление</strong> открывается окно для предварительного просмотра загружаемых данных и выполнения <a href="DataProcessor.СопоставлениеОбъектовИнформационныхБаз/Help">сопоставления объектов вручную</a>. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующей синхронизации данных сопоставляются автоматически. При использовании интерактивного режима загрузки рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически. +</li><li> +<div align="left">Список не является динамическим, поэтому для того чтобы увидеть новые данные, полученные и сопоставленные после открытия списка, нажмите <img src="StdPicture.Refresh"></img> <strong>Обновить</strong>.</div> +</li><li> +<div align="left">По команде <strong>Все действия -</strong> <strong>Получить данные</strong> выполняется загрузка данных для выделенных строк таблицы. Загрузку данных надо использовать в редких случаях, когда требуется сопоставить взаимосвязанные таблицы данных.</div> +</li><li> +<div align="left">Перечисленные команды доступны для вызова из контекстного меню таблицы статистики сопоставления. При вызове из контекстного меню эти команды актуальны для множества выделенных строк таблицы.</div></li></ul><p align="left"> После того как прошло сопоставление, программа запоминает правила и эта страница уже не выводится. </p> +<p align="left">Нажмите кнопку <strong>Далее</strong> для перехода к синхронизации данных.</p> +<h3>Данные для отправки</h3> +<p>На третьей странице помощника следует указать данные для отправки в другую программу. Если данные не указывать, то по умолчанию будут отправлены данные, измененные с момента последней сессии синхронизации. По умолчанию переключатель установлен в положение положении <strong>Не добавлять</strong> - в этом случае будут отправлены данные согласно общим настройкам.</p> +<ul><li> +<div align="left">Для дополнительной выгрузки документов нажмите переключатель <strong>Добавить документы</strong>. </div> +<ul><li> +<div align="left">В поле <strong>За период:</strong> <img src="StdPicture.InputFieldSelect"></img> выберите период, за который их необходимо отправить.</div> +</li><li> +<div align="left"> В поле <strong>С отбором:</strong> по умолчанию установлено, что можно отправить <strong>Все документы</strong> (гиперссылка). Нажмите на гиперссылку, для того чтобы установить условия отбора: введите поле для отбора, установите <strong>Вид сравнения</strong>, выберите <strong>Значение</strong> для сравнения. Условий может быть несколько, в этом случае они группируются с помощью логических операций <strong>И</strong>, <strong>Или</strong>, <strong>Не</strong>.</div></li></ul></li><li> +<div align="left">Для того чтобы отправить дополнительные данные, включите переключатель <strong>Добавить данные</strong>. </div> +<ul><li> +<div align="left">Их следует отобрать, для этого перейдите по гиперссылке, которая по умолчанию принимает значение <strong>Дополнительные данные не выбраны</strong>. Подберите <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки/Help">Отправляемые данные</a> из соответствующих списков, нажмите <strong>ОК</strong>. После этого гиперссылка принимает значение перечисления выбранных данных.</div></li></ul></li><li> +<div align="left"><a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.СоставВыгрузки/Help">Статистику по отправляемым данным</a> можно просмотреть, нажав на гиперссылку <strong>Отчет о составе отправляемых данных</strong>.</div> +</li><li> +<div align="left">Нажмите <strong>Настройки</strong>, для того чтобы воспользоваться ранее сохраненными настройками или сохранить вновь введенные.</div></li></ul><p align="left">Нажмите <strong>Далее</strong>, для того чтобы начать синхронизацию данных с выбранными параметрами.</p> +<h3>Синхронизация данных завершена</h3> +<p>На заключительной странице помощника программа выводит сообщения о состоянии синхронизации:</p> +<ul><li><img src="CommonPicture.СостояниеОбменаДаннымиОшибка"></img><strong>Не удалось получить данные</strong> или <strong>Данные успешно получены</strong> и т.д. +</li><li><strong><img src="CommonPicture.СостояниеОбменаДаннымиОшибка" width="16" height="16"></img>Не удалось отправить данные</strong> или <strong>Данные успешно отправлены</strong> и т.д.</li></ul><p>По кнопке <strong>Подробно</strong> можно перейти в журнал регистрации и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</p> +<p>При необходимости можно настроить <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">расписание для синхронизации данных</a> в автоматическом режиме (в том случае, если текущая синхронизация данных еще не включена ни в одно из существующих <a href="Catalog.СценарииОбменовДанными/Help">расписаний выполнения синхронизации</a>). Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img><strong>Настроить</strong>.</p> +<h3>См. также:</h3> +<p><a href="CommonForm.ОбменыДанными/Help">Синхронизация данных</a></p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index 22f6701dc..7575b486d 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -9,8 +8,8 @@ // Получает статистику сопоставления объектов для строк таблицы ИнформацияСтатистики // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// ИндексыСтрок (необязательный) - Массив - индексы строк таблицы ИнформацияСтатистики // для которых необходимо получить информацию статистики сопоставления. // Если не указан, то операция будет выполнена для всех строк таблицы. // @@ -80,8 +79,8 @@ // после автоматического сопоставления // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// ИндексыСтрок (необязательный) - Массив - индексы строк таблицы ИнформацияСтатистики // для которых необходимо выполнить автоматическое сопоставление и получить информацию статистики. // Если не указан, то операция будет выполнена для всех строк таблицы. // @@ -159,8 +158,8 @@ // Повторная загрузка этого сообщения будет отменена. // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// ИндексыСтрок (необязательный) - Массив - индексы строк таблицы ИнформацияСтатистики // для которых необходимо выполнить загрузку данных. // Если не указан, то операция будет выполнена для всех строк таблицы. // @@ -217,8 +216,8 @@ // (ftp, e-mail, сетевой каталог) во временный каталог пользователя операционной системы // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИдентификаторФайлаПакетаДанных – ДатаВремя – дата изменения сообщения обмена; +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// ИдентификаторФайлаПакетаДанных - ДатаВремя - дата изменения сообщения обмена; // выступает в качестве идентификатора файла для подсистемы обмена данными // Процедура ПолучитьСообщениеОбменаВоВременныйКаталог( @@ -291,7 +290,7 @@ // Выполняет анализ входящего сообщения обмена. Заполняет данными таблицу ИнформацияСтатистики // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. // Процедура ВыполнитьАнализСообщенияОбмена(Отказ) Экспорт @@ -459,7 +458,8 @@ // Данные табличной части ИнформацияСтатистики // -// Тип: ТаблицаЗначений +// Возвращаемое значение: +// ТаблицаЗначений - Данные табличной части ИнформацияСтатистики. // Функция ТаблицаИнформацииСтатистики() Экспорт @@ -467,4 +467,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Form.form index 6c2a662af..c92df024b 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Form.form @@ -10,22 +10,94 @@ <items xsi:type="form:FormGroup"> <name>ИзменениеСоставаВыгрузки</name> <id>280</id> - <items xsi:type="form:Decoration"> - <name>Декорация1</name> - <id>331</id> - <title> - <key>ru</key> - <value>Основной состав отправляемых данных определяется общими настройками. -Укажите, какие данные вы хотите добавить:</value> - + + ГруппаОписание + 444 + + Декорация4 + 446 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 448 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 447 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + Декорация5 + 449 + + <key>ru</key> + <value>Состав отправляемых данных определяется автоматически по общим правилам, указанным при настройке синхронизации между приложениями. +Дополнительно к данным, отправляемым автоматически, можно также добавить данные вручную. Однако, фактически будут отправлены только данные, удовлетворяющие ограничениям, заданным в общих правилах.</value> + + true + true + + true + + + Декорация5РасширеннаяПодсказка + 451 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 450 + true + + Label + true + true + false + + Left + + true true true + + <key>ru</key> + <value>Группа описание</value> + + + ru + Группа описание + - Декорация1ExtendedTooltip - 335 + ГруппаОписаниеРасширеннаяПодсказка + 445 Label true true @@ -33,140 +105,44 @@ Left - - Декорация1КонтекстноеМеню - 332 - true - - Label - true - true - - Left + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto ГруппаНастройкиОбменаДанными 284 - Группа15 + ВариантыДополненияВыгрузки 285 - - ДополнениеВыгрузкиВариантВыгрузки0 - 286 - true - true - - true - - - ДополнениеВыгрузки.ВариантВыгрузки - - None - - OnChange - ДополнениеВыгрузкиВариантВыгрузкиПриИзменении - - - ДополнениеВыгрузкиВариантВыгрузки0ExtendedTooltip - 338 - Label - true - true - - Left - - - - ДополнениеВыгрузкиВариантВыгрузки0КонтекстноеМеню - 287 - true - - RadioButtonField - Top - Enter - true - Left - true - - 1 - - - ru - Не добавлять. Будут отправлены только данные согласно общим настройкам. - - - 0 - - - Vertical - - - - ДополнениеВыгрузкиВариантВыгрузки1 - 288 - true - true - - true - - - ДополнениеВыгрузки.ВариантВыгрузки - - None - - OnChange - ДополнениеВыгрузкиВариантВыгрузкиПриИзменении - - - ДополнениеВыгрузкиВариантВыгрузки1ExtendedTooltip - 339 - Label - true - true - - Left - - - - ДополнениеВыгрузкиВариантВыгрузки1КонтекстноеМеню - 289 - true - - RadioButtonField - Top - Enter - true - Left - true - - 1 - - - ru - Добавить документы: - - - 1 - - - Vertical - - - ГруппаОтборВсеДокументы - 290 - - Декорация21 - 291 + ТиповойВариантДополненияНет + 452 + + ДополнениеВыгрузкиВариантВыгрузки0 + 286 true true true + + ДополнениеВыгрузки.ВариантВыгрузки + + None + + OnChange + ДополнениеВыгрузкиВариантВыгрузкиПриИзменении + - Декорация21ExtendedTooltip - 341 + ДополнениеВыгрузкиВариантВыгрузки0ExtendedTooltip + 338 Label true true @@ -175,30 +151,255 @@ - Декорация21КонтекстноеМеню - 292 + ДополнениеВыгрузкиВариантВыгрузки0КонтекстноеМеню + 287 true + RadioButtonField + Top + Enter + true + Left + true + + 1 + + + ru + Не добавлять. + + + 0 + + + Vertical + + + + Группа1 + 494 + + Декорация1 + 499 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 501 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 500 + true + + Label + 3 + true + true + + Left + + + + ТиповойВариантДополненияНетПояснение + 496 + + <key>ru</key> + <value>Типовой вариант дополнения нет пояснение</value> + + true + true + + true + + + ТиповойВариантДополненияНетПояснениеExtendedTooltip + 498 + Label + true + true + + Left + + + + ТиповойВариантДополненияНетПояснениеКонтекстноеМеню + 497 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 495 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Типовой вариант дополнения нет</value> + + + ru + Типовой вариант дополнения нет + + + ТиповойВариантДополненияНетРасширеннаяПодсказка + 453 Label - 3 true true Left + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ТиповойВариантДополненияДокументы + 454 + + ДополнениеВыгрузкиВариантВыгрузки1 + 288 + true + true + + true + + + ДополнениеВыгрузки.ВариантВыгрузки + + None + + OnChange + ДополнениеВыгрузкиВариантВыгрузкиПриИзменении + + + ДополнениеВыгрузкиВариантВыгрузки1ExtendedTooltip + 339 + Label + true + true + + Left + + + + ДополнениеВыгрузкиВариантВыгрузки1КонтекстноеМеню + 289 + true + + RadioButtonField + Top + Enter + true + Left + true + + 1 + + + ru + Добавить документы: + + + 1 + + + Vertical + - Группа9 - 293 + ГруппаОтборВсеДокументы + 290 + + Декорация21 + 291 + true + true + + true + + + Декорация21ExtendedTooltip + 341 + Label + true + true + + Left + + + + Декорация21КонтекстноеМеню + 292 + true + + Label + 3 + true + true + + Left + + - Группа8 - 294 + Группа9 + 293 - Декорация11 - 295 + ТиповойВариантДополненияДокументыПояснение + 502 <key>ru</key> - <value>За период:</value> + <value>Типовой вариант дополнения документы пояснение</value> true true @@ -206,8 +407,8 @@ true - Декорация11ExtendedTooltip - 344 + ТиповойВариантДополненияДокументыПояснениеExtendedTooltip + 504 Label true true @@ -216,32 +417,110 @@ - Декорация11КонтекстноеМеню - 296 + ТиповойВариантДополненияДокументыПояснениеКонтекстноеМеню + 503 true Label true true + + Style.ПоясняющийТекст + Left - - ДополнениеВыгрузкиОбщийПериодДокументов - 297 + + Группа8 + 294 + + Декорация11 + 295 + + <key>ru</key> + <value>За период:</value> + + true + true + + true + + + Декорация11ExtendedTooltip + 344 + Label + true + true + + Left + + + + Декорация11КонтекстноеМеню + 296 + true + + Label + true + true + + Left + + + + ДополнениеВыгрузкиОбщийПериодДокументов + 297 + true + true + + true + + + ДополнениеВыгрузки.ПериодОтбораВсехДокументов + + None + + ДополнениеВыгрузкиОбщийПериодДокументовExtendedTooltip + 345 + Label + true + true + + Left + + + + ДополнениеВыгрузкиОбщийПериодДокументовКонтекстноеМеню + 298 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + true + Normal + + true true true - - ДополнениеВыгрузки.ПериодОтбораВсехДокументов - - None - ДополнениеВыгрузкиОбщийПериодДокументовExtendedTooltip - 345 + Группа8ExtendedTooltip + 343 Label true true @@ -249,31 +528,145 @@ Left - - ДополнениеВыгрузкиОбщийПериодДокументовКонтекстноеМеню - 298 - true - - InputField - Enter - true - Left - true - - - ChoiceProcessing - ДополнениеВыгрузкиОбщийПериодДокументовОбработкаВыбора - - 35 + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа10 + 299 + + Декорация13 + 300 + + <key>ru</key> + <value>С отбором:</value> + + true + true + + true + + + Декорация13ExtendedTooltip + 347 + Label + true + true + + Left + + + + Декорация13КонтекстноеМеню + 301 + true + + Label true true - false - true - true - true - true - true - Normal + + Left + + + + ДополнениеВыгрузкиОбщийОтборДокументов + 302 + + <key>ru</key> + <value>Все документы</value> + + true + true + + true + + + ДополнениеВыгрузкиОбщийОтборДокументовExtendedTooltip + 348 + Label + true + true + + Left + + + + ДополнениеВыгрузкиОбщийОтборДокументовКонтекстноеМеню + 303 + true + + Label + true + 1 + true + + + Click + ДополнениеВыгрузкиОбщийОтборДокументовНажатие + + true + Left + 1 + + + + ДополнениеВыгрузкиОчисткаОбщегоОтбора + 304 + true + true + + true + + + ДополнениеВыгрузкиОчисткаОбщегоОтбораExtendedTooltip + 349 + Label + true + true + + Left + + + UsualButton + Form.Command.ДополнениеВыгрузкиОчисткаОбщегоОтбора + Normal + Picture + 2 + true + 1 + true + UserCmds + Auto + + true + true + + true + + true + + Группа10ExtendedTooltip + 346 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto true @@ -281,9 +674,10 @@ true + false - Группа8ExtendedTooltip - 343 + Группа9ExtendedTooltip + 342 Label true true @@ -293,6 +687,7 @@ UsualGroup + Vertical Auto true true @@ -300,49 +695,297 @@ Auto - - Группа10 - 299 - - Декорация13 - 300 - + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа отбор все документы</value> + + + ru + Группа отбор все документы + + + ГруппаОтборВсеДокументыExtendedTooltip + 340 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Типовой вариант дополнения документы</value> + + + ru + Типовой вариант дополнения документы + + + ТиповойВариантДополненияДокументыРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ТиповойВариантДополненияПроизвольный + 456 + + ДополнениеВыгрузкиВариантВыгрузки2 + 305 + true + true + + true + + + ДополнениеВыгрузки.ВариантВыгрузки + + None + + OnChange + ДополнениеВыгрузкиВариантВыгрузкиПриИзменении + + + ДополнениеВыгрузкиВариантВыгрузки2ExtendedTooltip + 350 + Label + true + true + + Left + + + + ДополнениеВыгрузкиВариантВыгрузки2КонтекстноеМеню + 306 + true + + RadioButtonField + Top + Enter + true + Left + true + + 1 + + ru - С отбором: - - true - true - - true - - - Декорация13ExtendedTooltip - 347 - Label - true - true - - Left - - - - Декорация13КонтекстноеМеню - 301 - true - + Добавить данные: + + + 2 + + + Vertical + + + + Группа14 + 505 + + Декорация27 + 507 + true + true + + true + + + Декорация27РасширеннаяПодсказка + 509 Label true true Left - + + + Декорация27КонтекстноеМеню + 508 + true + + Label + 3 + true + true + + Left + + + + ТиповойВариантДополненияПроизвольныйПояснение + 510 + + <key>ru</key> + <value>Типовой вариант дополнения произвольный пояснение</value> + + true + true + + true + + + ТиповойВариантДополненияПроизвольныйПояснениеExtendedTooltip + 512 + Label + true + true + + Left + + + + ТиповойВариантДополненияПроизвольныйПояснениеКонтекстноеМеню + 511 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + Группа14РасширеннаяПодсказка + 506 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОтборДетальный + 307 + + Декорация22 + 308 + true + true + + true + + + Декорация22ExtendedTooltip + 352 + Label + true + true + + Left + + + + Декорация22КонтекстноеМеню + 309 + true + + Label + 3 + true + true + + Left + + + + Декорация23 + 310 + + <key>ru</key> + <value>С отбором:</value> + + true + true + + true + + + Декорация23ExtendedTooltip + 353 + Label + true + true + + Left + + + + Декорация23КонтекстноеМеню + 311 + true + + Label + true + true + + Left + + + + Группа11 + 312 - ДополнениеВыгрузкиОбщийОтборДокументов - 302 + ДополнениеВыгрузкиДетальныйОтбор + 313 <key>ru</key> - <value>Все документы</value> + <value>Дополнительные данные не выбраны</value> true true @@ -350,8 +993,8 @@ true - ДополнениеВыгрузкиОбщийОтборДокументовExtendedTooltip - 348 + ДополнениеВыгрузкиДетальныйОтборExtendedTooltip + 355 Label true true @@ -360,8 +1003,8 @@ - ДополнениеВыгрузкиОбщийОтборДокументовКонтекстноеМеню - 303 + ДополнениеВыгрузкиДетальныйОтборКонтекстноеМеню + 314 true Label @@ -371,24 +1014,23 @@ Click - ДополнениеВыгрузкиОбщийОтборДокументовНажатие + ДополнениеВыгрузкиДетальныйОтборНажатие true Left - 1 - ДополнениеВыгрузкиОчисткаОбщегоОтбора - 304 + ДополнениеВыгрузкиОчисткаДетальногоОтбора + 315 true true true - ДополнениеВыгрузкиОчисткаОбщегоОтбораExtendedTooltip - 349 + ДополнениеВыгрузкиОчисткаДетальногоОтбораExtendedTooltip + 356 Label true true @@ -397,7 +1039,7 @@ UsualButton - Form.Command.ДополнениеВыгрузкиОчисткаОбщегоОтбора + Form.Command.ДополнениеВыгрузкиОчисткаДетальногоОтбора Normal Picture 2 @@ -412,10 +1054,9 @@ true - true - Группа10ExtendedTooltip - 346 + Группа11ExtendedTooltip + 354 Label true true @@ -437,10 +1078,18 @@ true - false + + <key>ru</key> + <value>Группа отбор детальный</value> + + + ru + Группа отбор детальный + + true - Группа9ExtendedTooltip - 342 + ГруппаОтборДетальныйExtendedTooltip + 351 Label true true @@ -450,7 +1099,6 @@ UsualGroup - Vertical Auto true true @@ -465,15 +1113,15 @@ <key>ru</key> - <value>Группа отбор все документы</value> + <value>Типовой вариант дополнения произвольный</value> ru - Группа отбор все документы + Типовой вариант дополнения произвольный - ГруппаОтборВсеДокументыExtendedTooltip - 340 + ТиповойВариантДополненияПроизвольныйРасширеннаяПодсказка + 457 Label true true @@ -483,6 +1131,7 @@ UsualGroup + Vertical Auto true true @@ -490,71 +1139,28 @@ Auto - - ДополнениеВыгрузкиВариантВыгрузки2 - 305 - true - true - - true - - - ДополнениеВыгрузки.ВариантВыгрузки - - None - - OnChange - ДополнениеВыгрузкиВариантВыгрузкиПриИзменении - - - ДополнениеВыгрузкиВариантВыгрузки2ExtendedTooltip - 350 - Label - true - true - - Left - - - - ДополнениеВыгрузкиВариантВыгрузки2КонтекстноеМеню - 306 - true - - RadioButtonField - Top - Enter - true - Left - true - - 1 - - - ru - Добавить данные: - - - 2 - - - Vertical - - - ГруппаОтборДетальный - 307 - - Декорация22 - 308 + НастраиваемыйВариантДополнения + 458 + + ДополнениеВыгрузкиВариантВыгрузкиУзел + 460 true true true + + ДополнениеВыгрузки.ВариантВыгрузки + + None + + OnChange + ДополнениеВыгрузкиВариантВыгрузкиПриИзменении + - Декорация22ExtendedTooltip - 352 + ДополнениеВыгрузкиВариантВыгрузкиУзелExtendedTooltip + 462 Label true true @@ -563,33 +1169,44 @@ - Декорация22КонтекстноеМеню - 309 + ДополнениеВыгрузкиВариантВыгрузкиУзелКонтекстноеМеню + 461 true - Label - 3 - true - true - - Left + RadioButtonField + Top + Enter + true + Left + true + + 1 + + + ru + Данные по настройкам узла: + + + 3 + + + Vertical - Декорация23 - 310 + ДополнениеВыгрузкиВариантВыгрузкиУзелСтрокой + 463 <key>ru</key> - <value>С отбором:</value> + <value>Дополнение выгрузки вариант выгрузки узел строкой</value> - true true true - Декорация23ExtendedTooltip - 353 + ДополнениеВыгрузкиВариантВыгрузкиУзелСтрокойExtendedTooltip + 465 Label true true @@ -598,8 +1215,8 @@ - Декорация23КонтекстноеМеню - 311 + ДополнениеВыгрузкиВариантВыгрузкиУзелСтрокойКонтекстноеМеню + 464 true Label @@ -610,23 +1227,19 @@ - Группа11 - 312 + ГруппаОтборНастраиваемый + 466 - ДополнениеВыгрузкиДетальныйОтбор - 313 - - <key>ru</key> - <value>Дополнительные данные не выбраны</value> - + ДекорацияОтступГруппыНастраиваемый + 468 true true true - ДополнениеВыгрузкиДетальныйОтборExtendedTooltip - 355 + ДекорацияОтступГруппыНастраиваемыйExtendedTooltip + 470 Label true true @@ -635,34 +1248,303 @@ - ДополнениеВыгрузкиДетальныйОтборКонтекстноеМеню - 314 + ДекорацияОтступГруппыНастраиваемыйКонтекстноеМеню + 469 true Label + 3 true - 1 true - - Click - ДополнениеВыгрузкиДетальныйОтборНажатие - - true Left - - ДополнениеВыгрузкиОчисткаДетальногоОтбора - 315 + + Группа15 + 471 + + НастраиваемыйВариантДополненияПояснение + 473 + + <key>ru</key> + <value>Настраиваемый вариант дополнения пояснение</value> + + true + true + + true + + + НастраиваемыйВариантДополненияПояснениеExtendedTooltip + 475 + Label + true + true + + Left + + + + НастраиваемыйВариантДополненияПояснениеКонтекстноеМеню + 474 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + Группа6 + 476 + + ГруппаПериодВыгрузкиСценарийУзла + 478 + + Декорация16 + 480 + + <key>ru</key> + <value>За период:</value> + + true + true + + true + + + Декорация16ExtendedTooltip + 482 + Label + true + true + + Left + + + + Декорация16КонтекстноеМеню + 481 + true + + Label + true + true + + Left + + + + ДополнениеВыгрузкиПериодОтбораСценарияУзла + 483 + true + true + + true + + + ДополнениеВыгрузки.ПериодОтбораСценарияУзла + + None + + OnChange + ДополнениеВыгрузкиПериодОтбораСценарияУзлаПриИзменении + + + ДополнениеВыгрузкиПериодОтбораСценарияУзлаExtendedTooltip + 485 + Label + true + true + + Left + + + + ДополнениеВыгрузкиПериодОтбораСценарияУзлаКонтекстноеМеню + 484 + true + + InputField + Enter + true + Left + true + + + Clearing + ДополнениеВыгрузкиПериодОтбораСценарияУзлаОчистка + + 29 + true + true + false + true + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа период выгрузки сценарий узла</value> + + + ru + Группа период выгрузки сценарий узла + + false + + ГруппаПериодВыгрузкиСценарийУзлаExtendedTooltip + 479 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа6ExtendedTooltip + 477 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДополнениеВыгрузкиПредставлениеОтбораСценарияУзла + 488 + true + true + + true + + + ДополнениеВыгрузки.ПредставлениеОтбораСценарияУзла + + None + + ДополнениеВыгрузкиПредставлениеОтбораСценарияУзлаExtendedTooltip + 490 + Label + true + true + + Left + + + + ДополнениеВыгрузкиПредставлениеОтбораСценарияУзлаКонтекстноеМеню + 489 + true + + InputField + Enter + true + Left + true + + 50 + true + 3 + true + false + true + true + true + true + + Style.FormBackColor + + Normal + + + + ДополнениеВыгрузкиОтборПоСценариюУзла + 491 + + <key>ru</key> + <value>Изменить параметры отбора</value> + + true + true + + true + + + ДополнениеВыгрузкиОтборПоСценариюУзлаРасширеннаяПодсказка + 493 + Label + true + true + + Left + + + + ДополнениеВыгрузкиОтборПоСценариюУзлаКонтекстноеМеню + 492 + true + + Label + true + true + + + Click + ДополнениеВыгрузкиОтборПоСценариюУзлаНажатие + + true + Left + + true true true - ДополнениеВыгрузкиОчисткаДетальногоОтбораExtendedTooltip - 356 + Группа15ExtendedTooltip + 472 Label true true @@ -670,25 +1552,32 @@ Left - UsualButton - Form.Command.ДополнениеВыгрузкиОчисткаДетальногоОтбора - Normal - Picture - 2 - true - 1 - true - UserCmds - Auto + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + true true true + + <key>ru</key> + <value>Группа отбор настраиваемый</value> + + + ru + Группа отбор настраиваемый + - Группа11ExtendedTooltip - 354 + ГруппаОтборНастраиваемыйExtendedTooltip + 467 Label true true @@ -712,16 +1601,15 @@ <key>ru</key> - <value>Группа отбор детальный</value> + <value>Настраиваемый вариант дополнения</value> ru - Группа отбор детальный + Настраиваемый вариант дополнения - true - ГруппаОтборДетальныйExtendedTooltip - 351 + НастраиваемыйВариантДополненияExtendedTooltip + 459 Label true true @@ -731,6 +1619,7 @@ UsualGroup + Vertical Auto true true @@ -743,10 +1632,18 @@ true + + <key>ru</key> + <value>Варианты дополнения выгрузки</value> + + + ru + Варианты дополнения выгрузки + 85 false - Группа15ExtendedTooltip + ВариантыДополненияВыгрузкиРасширеннаяПодсказка 337 Label true @@ -829,38 +1726,38 @@ - Группа12 + ГруппаЗагрузкаТиповыхВариантовНастроек 318 + + ДополнениеВыгрузкиСоставВыгрузки + 320 + true + true + + true + + + ДополнениеВыгрузкиСоставВыгрузкиExtendedTooltip + 360 + Label + true + true + + Left + + + Hyperlink + Form.Command.ДополнениеВыгрузкиСоставВыгрузки + Normal + PictureAndText + true + true + UserCmds + Auto + Группа13 319 - - ДополнениеВыгрузкиСоставВыгрузки - 320 - true - true - - true - - - ДополнениеВыгрузкиСоставВыгрузкиExtendedTooltip - 360 - Label - true - true - - Left - - - UsualButton - Form.Command.ДополнениеВыгрузкиСоставВыгрузки - Normal - PictureAndText - true - true - UserCmds - Auto - ДополнениеВыгрузкиИсторияОтборов 321 @@ -888,74 +1785,12 @@ UserCmds Auto - true - true - - true - - - Группа13ExtendedTooltip - 359 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Группа14 - 322 - - Декорация6 - 323 - - <key>ru</key> - <value>Открыть отчет по составу отправляемых данных. </value> - - true - true - - true - - - Декорация6ExtendedTooltip - 363 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 324 - true - - Label - true - true - - Left - - Декорация25 325 <key>ru</key> - <value>Выбрать ранее сохраненный вариант настроек.</value> + <value>Сохранить настройки или выбрать ранее сохраненный вариант.</value> true true @@ -990,8 +1825,8 @@ true - Группа14ExtendedTooltip - 362 + Группа13ExtendedTooltip + 359 Label true true @@ -1001,7 +1836,6 @@ UsualGroup - Vertical Auto true true @@ -1014,8 +1848,16 @@ true + + <key>ru</key> + <value>Группа загрузка типовых вариантов настроек</value> + + + ru + Группа загрузка типовых вариантов настроек + - Группа12ExtendedTooltip + ГруппаЗагрузкаТиповыхВариантовНастроекРасширеннаяПодсказка 358 Label true @@ -1026,8 +1868,8 @@ UsualGroup + Vertical Auto - NormalSeparation true true Auto @@ -1099,11 +1941,229 @@ auto + + ОжиданиеВыгрузки + 417 + + Декорация2 + 430 + + <key>ru</key> + <value>Сихронизация данных</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 432 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 431 + true + + Label + true + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + + + + Группа7 + 419 + + Декорация45 + 421 + true + true + + true + + + Декорация45РасширеннаяПодсказка + 423 + Label + true + true + + Left + + + + Декорация45КонтекстноеМеню + 422 + true + + 8 + true + 3 + true + + + CommonPicture.СинхронизацияДанныхДлительнаяОперация48 + + + + + Декорация46 + 424 + + <key>ru</key> + <value>Выполняется синхронизация данных. Это может занять несколько минут. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация46РасширеннаяПодсказка + 426 + Label + true + true + + Left + + + + Декорация46КонтекстноеМеню + 425 + true + + Label + true + true + true + + Style.TextFont + 10.0 + + + Left + Center + + + true + true + + true + + false + + Группа7РасширеннаяПодсказка + 420 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Окончание</value> + + + ru + Ожидание выгрузки + + + ОжиданиеВыгрузкиРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + Page + + Vertical + auto + + Окончание 121 + + Декорация3 + 433 + + <key>ru</key> + <value>Сихронизация данных</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 435 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 434 + true + + Label + true + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + + - Группа6 + ГруппаЗавершеноУспешно 192 Декорация43 @@ -1143,10 +2203,7 @@ 195 <key>ru</key> - <value>Данные отправляются. - -Вы можете продолжить работу в приложении, -не дожидаясь завершения синхронизации.</value> + <value>Сихронизация данных успешно завершена.</value> true true @@ -1186,9 +2243,17 @@ true + + <key>ru</key> + <value>Группа завершено успешно</value> + + + ru + Группа завершено успешно + false - Группа6ExtendedTooltip + ГруппаЗавершеноУспешноРасширеннаяПодсказка 367 Label true @@ -1206,12 +2271,121 @@ Auto + + ГруппаЗавершеноСОшибками + 436 + + Декорация47 + 438 + true + true + + true + + + Декорация47РасширеннаяПодсказка + 440 + Label + true + true + + Left + + + + Декорация47КонтекстноеМеню + 439 + true + + 8 + true + 3 + true + + + CommonPicture.Ошибка32 + + + + + Декорация48 + 441 + + <key>ru</key> + <value>В процессе синхронизации данных возникли ошибки.</value> + + true + true + + true + + + Декорация48РасширеннаяПодсказка + 443 + Label + true + true + + Left + + + + Декорация48КонтекстноеМеню + 442 + true + + Label + true + true + true + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа успешно завершено</value> + + + ru + Группа успешно завершено + + false + + ГруппаЗавершеноСОшибкамиРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + НадписьДалее2 126 <key>ru</key> - <value>Нажмите кнопку "Готово" для завершения работы с помощником.</value> + <value>Нажмите кнопку "Готово" для завершения.</value> true true @@ -1252,8 +2426,12 @@ ru Окончание + + ru + Окончание + - ОкончаниеExtendedTooltip + ОкончаниеРасширеннаяПодсказка 366 Label true @@ -2213,6 +3391,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -2225,6 +3407,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel Close @@ -2235,6 +3421,7 @@ Retry SaveValues Yes + 70 LockOwner true true @@ -2640,6 +3827,39 @@ true + + СостояниеДлительнойОперации + + <key>ru</key> + <value>Состояние длительной операции</value> + + 6 + + + true + + + true + + + + АдресСхемыКомпоновки + + <key>ru</key> + <value>Адрес схемы компоновки</value> + + 5 + + String + + + + true + + + true + + КомандаДалее @@ -2791,7 +4011,7 @@ <name>ДополнениеВыгрузкиСоставВыгрузки</name> <title> <key>ru</key> - <value>Состав данных</value> + <value>Отчет о составе отправляемых данных</value> 10 diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl index e1d52ec5a..be787df0d 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl @@ -1,16 +1,13 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// -// Параметризация формы: +// Параметры формы: // -// УзелИнформационнойБазы: (ПланОбменаСсылка) ссылка на узле плана обмена, для которого -// выполняется помощник (корреспондент обмена) +// УзелИнформационнойБазы - ПланОбменаСсылка - Ссылка на узле плана обмена, для которого +// выполняется помощник (корреспондент обмена) // -// ЗапретитьВыгрузкуТолькоИзмененного: (Булево) если установлено, то вариант отправки -// только измененного недоступен +// ЗапретитьВыгрузкуТолькоИзмененного - Булево - Если Истина, то вариант отправки только измененного недоступен // -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,6 +18,7 @@ КонецЕсли; ТекстОшибки = Неопределено; + Если Не ОбменДаннымиВМоделиСервисаПовтИсп.СинхронизацияДанныхПоддерживается() Тогда ТекстОшибки = НСтр("ru='Синхронизация данных для конфигурации не поддерживается!'"); @@ -39,20 +37,28 @@ // Устанавливаем заголовки, зависящие от узла УстановитьКорреспондентаВЗаголовок(ЭтотОбъект); + // Дополнение выгрузки + ИнициализироватьРеквизитыДополненияВыгрузки(); + // Устанавливаем таблицу переходов в зависимости от параметров ПорядковыйНомерПерехода = 0; - СценарийПолныйВручную(); - // Дополнение выгрузки - ДополнениеВыгрузкиИнициализировать() + Если ДополнениеВыгрузки.ВариантВыгрузки = -1 Тогда + СценарийБезДобавления(); + Иначе + СценарийПолныйВручную(); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ЗакрытьФормуБезусловно = Ложь; + + ЗакрытьФормуБезусловно = Ложь; + // На первый шаг УстановитьПорядковыйНомерПерехода(1); -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -63,33 +69,70 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// +&НаКлиенте +Процедура ПриЗакрытии() + + Если СостояниеДлительнойОперации <> Неопределено Тогда + ЗавершитьФоновоеЗадание(СостояниеДлительнойОперации.Идентификатор); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + // Проверяем на событие дополнения выгрузки. + Если ОбменДаннымиКлиент.ОбработкаВыбораДополненияВыгрузки(ВыбранноеЗначение, ИсточникВыбора, ДополнениеВыгрузки) Тогда + // Событие обработано, обновим отображение типовых + УстановитьОписаниеОтборовДополненияВыгрузки(); + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаДалее(Команда) - ПерейтиДалее(); + + ПерейтиДалее(); + КонецПроцедуры &НаКлиенте Процедура КомандаНазад(Команда) - ПерейтиНазад(); + + ПерейтиНазад(); + КонецПроцедуры &НаКлиенте Процедура КомандаГотово(Команда) + ЗакрытьФормуБезусловно = Истина; Закрыть(); + КонецПроцедуры &НаКлиенте Процедура КомандаОтмена(Команда) + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнениеВыгрузкиСоставВыгрузки(Команда) + + ОбменДаннымиКлиент.ОткрытьФормуДополненияВыгрузкиСоставДанных(ДополнениеВыгрузки, ЭтотОбъект); + КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбора(Команда) + ТекстЗаголовка = НСтр("ru='Подтверждение'"); ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); @@ -99,6 +142,7 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбора(Команда) + ТекстЗаголовка = НСтр("ru='Подтверждение'"); ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); @@ -106,137 +150,160 @@ ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , ,ТекстЗаголовка); КонецПроцедуры -&НаКлиенте -Процедура ДополнениеВыгрузкиСоставВыгрузки(Команда) - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.СоставВыгрузки", - Новый Структура("АдресОбъекта", ДополнениеВыгрузкиАдресОбъекта() )); -КонецПроцедуры - &НаКлиенте Процедура ДополнениеВыгрузкиИсторияОтборов(Команда) - // Выбор из меню - списка - СписокВариантов = ДополнениеВыгрузкиПрочитатьСписокВариантовНастроекСервер(); + // Организуем выбор из меню-списка, все варианты сохраненных настроек + СписокВариантов = ДополнениеВыгрузкиИсторияНастроекСервер(); + // Добавляем вариант сохранения текущих Текст = НСтр("ru='Сохранить текущую настройку...'"); СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); - Оповещение = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовВыборВарианта", ЭтотОбъект); - ПоказатьВыборИзМеню(Оповещение, СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); + ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовВыборИзМеню", ЭтотОбъект); + ПоказатьВыборИзМеню(ОписаниеОповещения, СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -// +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // Страница "ИзменениеСоставаВыгрузки" &НаКлиенте Процедура ДополнениеВыгрузкиВариантВыгрузкиПриИзменении(Элемент) - ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); -КонецПроцедуры - -&НаКлиенте -Процедура ДополнениеВыгрузкиОбщийПериодДокументовОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение.ДействиеВыбора=1 Тогда - // Отбор и период всех документов - ДополнениеВыгрузкиУстановитьПараметрыДополненияВсехДокументов(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=2 Тогда - // Детальная настройка - ДополнениеВыгрузкиУстановитьПараметрыДополненияДетально(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=3 Тогда - // Обновление настроек - ДополнениеВыгрузкиПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; - КонецЕсли; + ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОбщийОтборДокументовНажатие(Элемент) - ДополнениеВыгрузкиОткрытьПодборВсехДокументов(); + + ОбменДаннымиКлиент.ОткрытьФормуДополненияВыгрузкиВсеДокументы(ДополнениеВыгрузки, ЭтотОбъект); + КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиДетальныйОтборНажатие(Элемент) - ДополнениеВыгрузкиОткрытьДетальныйПодбор(); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// - -&НаКлиенте -Процедура ДополнениеВыгрузкиИсторияОтборовВыборВарианта(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - КонецЕсли; - ПредставлениеНастройки = ВыбранныйЭлемент.Значение; - Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); - - Оповещение = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовВыборВариантаЗавершение", ЭтотОбъект, Новый Структура); - Оповещение.ДополнительныеПараметры.Вставить("ПредставлениеНастройки", ПредставлениеНастройки); - - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , ,ТекстЗаголовка); - - ИначеЕсли ПредставлениеНастройки=1 Тогда - // Форма всех настроек - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеСоставаНастроек", - Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", - Истина, 3, ДополнениеВыгрузки, ДополнениеВыгрузкиПредставлениеНастройки - ), Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); - - КонецЕсли; - + ОбменДаннымиКлиент.ОткрытьФормуДополненияВыгрузкиДетальныйОтбор(ДополнениеВыгрузки, ЭтотОбъект); + КонецПроцедуры &НаКлиенте -Процедура ДополнениеВыгрузкиИсторияОтборовВыборВариантаЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт - Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - ДополнениеВыгрузкиУстановитьНастройкиСервер(ДополнительныеПараметры.ПредставлениеНастройки); +Процедура ДополнениеВыгрузкиОтборПоСценариюУзлаНажатие(Элемент) + + ОбменДаннымиКлиент.ОткрытьФормуДополненияВыгрузкиСценарийУзла(ДополнениеВыгрузки, ЭтотОбъект); + КонецПроцедуры +&НаКлиенте +Процедура ДополнениеВыгрузкиПериодОтбораСценарияУзлаПриИзменении(Элемент) + + ДополнениеВыгрузкиИзменениеПериодаСценарияУзла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнениеВыгрузкиПериодОтбораСценарияУзлаОчистка(Элемент, СтандартнаяОбработка) + + // Запрещаем очистку периода + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы.Очистить(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); + ДополнениеВыгрузкиОчисткаОбщегоОтбораСервер(); +КонецПроцедуры + +&НаСервере +Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбораСервер() + + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОчисткаОбщегоОтбора(ДополнениеВыгрузки); + УстановитьОписаниеДополненияОбщегоОтбора(); + КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; - ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); + ДополнениеВыгрузкиОчисткаДетальногоОтбораСервер(); +КонецПроцедуры + +&НаСервере +Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбораСервер() + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОчисткаДетально(ДополнениеВыгрузки); + УстановитьОписаниеДополненияДетально(); +КонецПроцедуры + +&НаКлиенте +Процедура ДополнениеВыгрузкиИсторияОтборовВыборИзМеню(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + ПредставлениеНастройки = ВыбранныйЭлемент.Значение; + Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда + // Выбрали вариант - имя ранее сохраненной настройки + + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Восстановить настройки ""%1""?'"), ПредставлениеНастройки + ); + + ОписаниеОповещения = Новый ОписаниеОповещения("ДополнениеВыгрузкиИсторияОтборовЗавершение", ЭтотОбъект, ПредставлениеНастройки); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + + ИначеЕсли ПредставлениеНастройки = 1 Тогда + // Выбран вариант сохранения, открываем форму всех настроек + ОбменДаннымиКлиент.ОткрытьФормуДополненияВыгрузкиСохранениеНастроек(ДополнениеВыгрузки, ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнениеВыгрузкиИсторияОтборовЗавершение(Ответ, ПредставлениеНастройки) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки); + ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДополнениеВыгрузкиИзменениеПериодаСценарияУзла() + + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиУстановитьПериодаСценарияУзла(ДополнениеВыгрузки); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// &НаСервере Процедура УстановитьКорреспондентаВЗаголовок(ВладелецЗаголовка) - ВладелецЗаголовка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ВладелецЗаголовка.Заголовок, Строка(Объект.УзелИнформационнойБазы)); -КонецПроцедуры + + ВладелецЗаголовка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ВладелецЗаголовка.Заголовок, Строка(Объект.УзелИнформационнойБазы)); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -415,15 +482,15 @@ // Добавляет новую строку в конец текущей таблицы переходов // // Параметры: -// ПорядковыйНомерПерехода (Число) Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (Строка) Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (Строка) Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (Строка) Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (Строка) Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (Строка) Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (Строка) Имя функции-обработчика события перехода на предыдущую страницу помощника -// ДлительнаяОперация (Булево) Признак отображения страницы длительной операции. Ложь - отображается обычная страница. -// ИмяОбработчикаДлительнойОперации (Строка) Имя функции-обработчика длительной операции +// ПорядковыйНомерПерехода - Число - Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы - Строка - Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации - Строка - Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации - Строка - Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии - Строка - Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее - Строка - Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад - Строка - Имя функции-обработчика события перехода на предыдущую страницу помощника +// ДлительнаяОперация - Булево - Признак отображения страницы длительной операции. Ложь - отображается обычная страница. +// ИмяОбработчикаДлительнойОперации - Строка - Имя функции-обработчика длительной операции // &НаСервере Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, ИмяОсновнойСтраницы, ИмяСтраницыНавигации, @@ -483,101 +550,162 @@ // &НаСервере -Процедура ДополнениеВыгрузкиИнициализировать() +Процедура ИнициализироватьРеквизитыДополненияВыгрузки() - ДополнениеВыгрузки.УзелИнформационнойБазы = Объект.УзелИнформационнойБазы; - ДополнениеВыгрузки.ПериодОтбораВсехДокументов.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц; + // Получаем настройки в виде структуры, настройки будут неявно сохранены во временном хранилище формы + НастройкиДополненияВыгрузки = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки( + Объект.УзелИнформационнойБазы, ЭтотОбъект.УникальныйИдентификатор, Истина + ); + + // Настраиваем форму. + // Преобразуем в реквизит формы типа ОбработкаОбъект. Используется для упрощения связи данных с формой + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиРеквизитПоНастройкам(ЭтотОбъект, НастройкиДополненияВыгрузки, "ДополнениеВыгрузки"); - Если Параметры.ЗапретитьВыгрузкуТолькоИзмененного Тогда - Элементы.ДополнениеВыгрузкиВариантВыгрузки0.Видимость = Ложь; - ДополнениеВыгрузки.ВариантВыгрузки = 1; - Иначе - ДополнениеВыгрузки.ВариантВыгрузки = 0; + ПараметрыСценарияДополнения = ДополнениеВыгрузки.ПараметрыСценарияДополнения; + + // Перестраиваем интерфейс по уточненному сценарию. + + // Особые случаи + ТиповыеВариантыЗапрещены = Не ПараметрыСценарияДополнения.ВариантБезДополнения.Использование + И Не ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование + И Не ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование; + + Если ТиповыеВариантыЗапрещены Тогда + Если ПараметрыСценарияДополнения.ВариантДополнительно.Использование Тогда + // Остается один вариант по сценарию узла + Элементы.ДополнениеВыгрузкиВариантВыгрузкиУзелСтрокой.Видимость = Истина; + Элементы.ДополнениеВыгрузкиВариантВыгрузкиУзел.Видимость = Ложь; + Элементы.ДекорацияОтступГруппыНастраиваемый.Видимость = Ложь; + ДополнениеВыгрузки.ВариантВыгрузки = 3; + Иначе + // Нет ни одного варианта, поднимаем флаг пропуска страницы и выходим + ДополнениеВыгрузки.ВариантВыгрузки = -1; + Элементы.ВариантыДополненияВыгрузки.Видимость = Ложь; + Возврат; + КонецЕсли; КонецЕсли; - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + // Устанавливаем типовые поля ввода + Элементы.ТиповойВариантДополненияНет.Видимость = ПараметрыСценарияДополнения.ВариантБезДополнения.Использование; + Если Не ПустаяСтрока(ПараметрыСценарияДополнения.ВариантБезДополнения.Заголовок) Тогда + Элементы.ДополнениеВыгрузкиВариантВыгрузки0.СписокВыбора[0].Представление = ПараметрыСценарияДополнения.ВариантБезДополнения.Заголовок; + КонецЕсли; + Элементы.ТиповойВариантДополненияНетПояснение.Заголовок = ПараметрыСценарияДополнения.ВариантБезДополнения.Пояснение; + Если ПустаяСтрока(Элементы.ТиповойВариантДополненияНетПояснение.Заголовок) Тогда + Элементы.ТиповойВариантДополненияНетПояснение.Видимость = Ложь; + КонецЕсли; - // Компоновщик конструируем по частям - Данные = ОбработкаДополнения.КомпоновщикНастроекОбщегоОтбора(УникальныйИдентификатор); - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Данные.СхемаКомпоновки)); - Компоновщик.ЗагрузитьНастройки(Данные.Настройки); + Элементы.ТиповойВариантДополненияДокументы.Видимость = ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование; + Если Не ПустаяСтрока(ПараметрыСценарияДополнения.ВариантВсеДокументы.Заголовок) Тогда + Элементы.ДополнениеВыгрузкиВариантВыгрузки1.СписокВыбора[0].Представление = ПараметрыСценарияДополнения.ВариантВсеДокументы.Заголовок; + КонецЕсли; + Элементы.ТиповойВариантДополненияДокументыПояснение.Заголовок = ПараметрыСценарияДополнения.ВариантВсеДокументы.Пояснение; + Если ПустаяСтрока(Элементы.ТиповойВариантДополненияДокументыПояснение.Заголовок) Тогда + Элементы.ТиповойВариантДополненияДокументыПояснение.Видимость = Ложь; + КонецЕсли; - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов = Компоновщик; + Элементы.ТиповойВариантДополненияПроизвольный.Видимость = ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование; + Если Не ПустаяСтрока(ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Заголовок) Тогда + Элементы.ДополнениеВыгрузкиВариантВыгрузки2.СписокВыбора[0].Представление = ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Заголовок; + КонецЕсли; + Элементы.ТиповойВариантДополненияПроизвольныйПояснение.Заголовок = ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Пояснение; + Если ПустаяСтрока(Элементы.ТиповойВариантДополненияПроизвольныйПояснение.Заголовок) Тогда + Элементы.ТиповойВариантДополненияПроизвольныйПояснение.Видимость = Ложь; + КонецЕсли; - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); + Элементы.НастраиваемыйВариантДополнения.Видимость = ПараметрыСценарияДополнения.ВариантДополнительно.Использование; + Элементы.ГруппаПериодВыгрузкиСценарийУзла.Видимость = ПараметрыСценарияДополнения.ВариантДополнительно.ИспользоватьПериодОтбора; + Элементы.ДополнениеВыгрузкиОтборПоСценариюУзла.Видимость = Не ПустаяСтрока(ПараметрыСценарияДополнения.ВариантДополнительно.ИмяФормыОтбора); - ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); + Элементы.ДополнениеВыгрузкиВариантВыгрузкиУзел.СписокВыбора[0].Представление = ПараметрыСценарияДополнения.ВариантДополнительно.Заголовок; + Элементы.ДополнениеВыгрузкиВариантВыгрузкиУзелСтрокой.Заголовок = ПараметрыСценарияДополнения.ВариантДополнительно.Заголовок; - Элементы.ДополнениеВыгрузкиИсторияОтборов.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); -КонецПроцедуры - -&НаСервере -Процедура ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки) - - ОбъектДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - ОбъектДополнения.ВосстановитьТекущееИзНастроек( - ПредставлениеНастройки); - ЗначениеВРеквизитФормы(ОбъектДополнения, "ДополнениеВыгрузки"); - - // Текущее представление - ДополнениеВыгрузкиПредставлениеНастройки = ПредставлениеНастройки; - - // И обновляем интерфейс - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); - ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); -КонецПроцедуры - -&НаСервере -Функция ДополнениеВыгрузкиПрочитатьСписокВариантовНастроекСервер() - ОбъектДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - Возврат ОбъектДополнения.ПрочитатьПредставленияСпискаНастроек(Объект.УзелИнформационнойБазы); -КонецФункции - -&НаСервере -Функция ДополнениеВыгрузкиАдресОбъекта() - Возврат ПоместитьВоВременноеХранилище( - РеквизитФормыВЗначение("ДополнениеВыгрузки"), - УникальныйИдентификатор); -КонецФункции - -&НаСервере -Процедура ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость() - - Элементы.ГруппаОтборВсеДокументы.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=1; - Элементы.ГруппаОтборДетальный.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=2; - + Элементы.НастраиваемыйВариантДополненияПояснение.Заголовок = ПараметрыСценарияДополнения.ВариантДополнительно.Пояснение; + Если ПустаяСтрока(Элементы.НастраиваемыйВариантДополненияПояснение.Заголовок) Тогда + Элементы.НастраиваемыйВариантДополненияПояснение.Видимость = Ложь; + КонецЕсли; + + // Заголовки команды + Если Не ПустаяСтрока(ПараметрыСценарияДополнения.ВариантДополнительно.ЗаголовокКомандыФормы) Тогда + Элементы.ДополнениеВыгрузкиОтборПоСценариюУзла.Заголовок = ПараметрыСценарияДополнения.ВариантДополнительно.ЗаголовокКомандыФормы; + КонецЕсли; + + // Выстраиваем доступные в нужном порядке + ПорядокГруппДополнения = Новый СписокЗначений; + Если Элементы.ТиповойВариантДополненияНет.Видимость Тогда + ПорядокГруппДополнения.Добавить(Элементы.ТиповойВариантДополненияНет, + Формат(ПараметрыСценарияДополнения.ВариантБезДополнения.Порядок, "ЧЦ=10; ЧН=; ЧВН=; ЧГ=")); + КонецЕсли; + Если Элементы.ТиповойВариантДополненияДокументы.Видимость Тогда + ПорядокГруппДополнения.Добавить(Элементы.ТиповойВариантДополненияДокументы, + Формат(ПараметрыСценарияДополнения.ВариантВсеДокументы.Порядок, "ЧЦ=10; ЧН=; ЧВН=; ЧГ=")); + КонецЕсли; + Если Элементы.ТиповойВариантДополненияПроизвольный.Видимость Тогда + ПорядокГруппДополнения.Добавить(Элементы.ТиповойВариантДополненияПроизвольный, + Формат(ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Порядок, "ЧЦ=10; ЧН=; ЧВН=; ЧГ=")); + КонецЕсли; + Если Элементы.НастраиваемыйВариантДополнения.Видимость Тогда + ПорядокГруппДополнения.Добавить(Элементы.НастраиваемыйВариантДополнения, + Формат(ПараметрыСценарияДополнения.ВариантДополнительно.Порядок, "ЧЦ=10; ЧН=; ЧВН=; ЧГ=")); + КонецЕсли; + ПорядокГруппДополнения.СортироватьПоПредставлению(); + Для Каждого ЭлементГруппыДополнения Из ПорядокГруппДополнения Цикл + Элементы.Переместить(ЭлементГруппыДополнения.Значение, Элементы.ВариантыДополненияВыгрузки); + КонецЦикла; + + // С настройками можно работать только есть право + ЕстьПравоНаНастройки = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + Элементы.ГруппаЗагрузкаТиповыхВариантовНастроек.Видимость = ЕстьПравоНаНастройки; + Если ЕстьПравоНаНастройки Тогда + // Восстанавливаем предопределенные настройки + УстанавливатьПервыйЭлемент = Не ДополнениеВыгрузкиУстановитьНастройкиСервер(ОбменДаннымиСервер.ДополнениеВыгрузкиИмяАвтоСохраненияНастроек()); + ДополнениеВыгрузки.ПредставлениеТекущейНастройки = ""; + Иначе + УстанавливатьПервыйЭлемент = Истина; + КонецЕсли; + + УстанавливатьПервыйЭлемент = УстанавливатьПервыйЭлемент + Или + ДополнениеВыгрузки.ВариантВыгрузки<0 + Или + ( (ДополнениеВыгрузки.ВариантВыгрузки=0) И (Не ПараметрыСценарияДополнения.ВариантБезДополнения.Использование) ) + Или + ( (ДополнениеВыгрузки.ВариантВыгрузки=1) И (Не ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование) ) + Или + ( (ДополнениеВыгрузки.ВариантВыгрузки=2) И (Не ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование) ) + Или + ( (ДополнениеВыгрузки.ВариантВыгрузки=3) И (Не ПараметрыСценарияДополнения.ВариантДополнительно.Использование) ); + + Если УстанавливатьПервыйЭлемент Тогда + Для Каждого ЭлементГруппыДополнения Из ПорядокГруппДополнения[0].Значение.ПодчиненныеЭлементы Цикл + Если ТипЗнч(ЭлементГруппыДополнения)=Тип("ПолеФормы") И ЭлементГруппыДополнения.Вид = ВидПоляФормы.ПолеПереключателя Тогда + ДополнениеВыгрузки.ВариантВыгрузки = ЭлементГруппыДополнения.СписокВыбора[0].Значение; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Начальное отображение, аналог клиентской ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость + Элементы.ГруппаОтборВсеДокументы.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=1; + Элементы.ГруппаОтборДетальный.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=2; + Элементы.ГруппаОтборНастраиваемый.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=3; + + // Описание начальных типовых отборов + УстановитьОписаниеОтборовДополненияВыгрузки(); КонецПроцедуры &НаСервере -Процедура ДополнениеВыгрузкиУстановитьПараметрыДополненияВсехДокументов(ДанныеВыбора) - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов = ДанныеВыбора.КомпоновщикНастроек; - ДополнениеВыгрузки.ПериодОтбораВсехДокументов = ДанныеВыбора.ПериодДанных; - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); +Процедура УстановитьОписаниеОтборовДополненияВыгрузки() + + УстановитьОписаниеДополненияОбщегоОтбора(); + УстановитьОписаниеДополненияДетально(); + КонецПроцедуры &НаСервере -Процедура ДополнениеВыгрузкиУстановитьПараметрыДополненияДетально(ДанныеВыбора) - - ОбъектВыбора = ПолучитьИзВременногоХранилища(ДанныеВыбора.АдресОбъекта); - ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки, ОбъектВыбора, , "ДополнительнаяРегистрация"); - ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); - Для Каждого Строка Из ОбъектВыбора.ДополнительнаяРегистрация Цикл - ЗаполнитьЗначенияСвойств(ДополнениеВыгрузки.ДополнительнаяРегистрация.Добавить(), Строка); - КонецЦикла; - - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); -КонецПроцедуры - -&НаСервере -Процедура ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = ОбработкаДополнения.ПредставлениеОтбораВсехДокументов(""); +Процедура УстановитьОписаниеДополненияОбщегоОтбора() + Текст = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОписаниеДополненияОбщегоОтбора(ДополнениеВыгрузки); НетОтбора = ПустаяСтрока(Текст); Если НетОтбора Тогда Текст = НСтр("ru='Все документы'"); @@ -588,79 +716,190 @@ КонецПроцедуры &НаСервере -Процедура ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = СтрЗаменить( - СокрЛП(ОбработкаДополнения.ПредставлениеДетальногоОтбора("")), - Символы.ПС, ", "); +Процедура УстановитьОписаниеДополненияДетально() + Текст = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиОписаниеДетальногоОтбора(ДополнениеВыгрузки); НетОтбора = ПустаяСтрока(Текст); Если НетОтбора Тогда - Текст = НСтр("ru='Дополнительные данные не выбраны'") + Текст = НСтр("ru='Дополнительные данные не выбраны'"); КонецЕсли; Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; Элементы.ДополнениеВыгрузкиОчисткаДетальногоОтбора.Видимость = Не НетОтбора; КонецПроцедуры +// Возвращает булево - успешно/нет (настройка не найдена) &НаСервере -Процедура ДополнениеВыгрузкиЗарегистрироватьДанные() +Функция ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки) - Если ДополнениеВыгрузки.ВариантВыгрузки=0 Тогда - Возврат; - КонецЕсли; + Результат = ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиВосстановитьНастройки(ДополнениеВыгрузки, ПредставлениеНастройки); + УстановитьОписаниеОтборовДополненияВыгрузки(); - // Оперируем с объектом, в реквизите остаются текущие настройки! - ДополнениеВыгрузкиОбъект = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - Если ДополнениеВыгрузки.ВариантВыгрузки=1 Тогда - // За период с отбором, очищаем дополнительную - ДополнениеВыгрузкиОбъект.ДополнительнаяРегистрация.Очистить(); - ИначеЕсли ДополнениеВыгрузки.ВариантВыгрузки=2 Тогда - // Детально настроено, очищаем общее - ДополнениеВыгрузкиОбъект.КомпоновщикОтбораВсехДокументов = Неопределено; - ДополнениеВыгрузкиОбъект.ПериодОтбораВсехДокументов = Неопределено; - КонецЕсли; - - ДополнениеВыгрузкиОбъект.ЗарегистрироватьДополнительныеИзменения(); - -КонецПроцедуры + Возврат Результат; +КонецФункции -&НаКлиенте -Процедура ДополнениеВыгрузкиОткрытьПодборВсехДокументов() - ТекстЗаголовка = НСтр("ru='Добавление документов для отправки'"); +&НаСервере +Функция ДополнениеВыгрузкиИсторияНастроекСервер() - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Заголовок", ТекстЗаголовка); - ПараметрыФормы.Вставить("ДействиеВыбора", 1); - ПараметрыФормы.Вставить("ВыборПериода", Истина); - ПараметрыФормы.Вставить("КомпоновщикНастроек", ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов); - ПараметрыФормы.Вставить("ПериодДанных", ДополнениеВыгрузки.ПериодОтбораВсехДокументов); - ПараметрыФормы.Вставить("АдресХранилищаФормы", УникальныйИдентификатор); + Возврат ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиИсторияНастроек(ДополнениеВыгрузки); - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеПериодаИОтбора", - ПараметрыФормы, Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); -КонецПроцедуры +КонецФункции -&НаКлиенте -Процедура ДополнениеВыгрузкиОткрытьДетальныйПодбор() - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ДействиеВыбора", 2); - ПараметрыФормы.Вставить("АдресОбъекта", ДополнениеВыгрузкиАдресОбъекта()); - ПараметрыФормы.Вставить("ОткрытаПоСценарию", Истина); - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма", ПараметрыФормы, Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); +&НаСервере +Процедура ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость() + + Элементы.ГруппаОтборВсеДокументы.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=1; + Элементы.ГруппаОтборДетальный.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=2; + Элементы.ГруппаОтборНастраиваемый.Доступность = ДополнениеВыгрузки.ВариантВыгрузки=3; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// // Обработчики событий перехода и вспомогательное // + +&НаКлиенте +Функция Подключаемый_ОжиданиеВыгрузки_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + // Запуск длительной операции + ФоновоеЗадание = ФоновоеЗаданиеВыгрузкиНаСервере(); + + СостояниеДлительнойОперации = НовоеСостояниеДлительнойОперации(); + СостояниеДлительнойОперации.Идентификатор = ФоновоеЗадание.Идентификатор; + СостояниеДлительнойОперации.АдресРезультата = ФоновоеЗадание.АдресРезультата; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияРегистрацииИВыгрузки", 0.1, Истина); +КонецФункции + +&НаКлиенте Функция Подключаемый_Окончание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - // Регистрируем все, что выбрано - ДополнениеВыгрузкиЗарегистрироватьДанные(); - -КонецФункции + + УспешноеЗавершение = СостояниеДлительнойОперации.ИнформацияОбОшибке = Неопределено; + + Элементы.ГруппаЗавершеноУспешно.Видимость = УспешноеЗавершение; + Элементы.ГруппаЗавершеноСОшибками.Видимость = Не УспешноеЗавершение; +КонецФункции + +// Периодический обработчик ожидания первой фазы - фоновая регистрация +&НаКлиенте +Процедура ОбработчикОжиданияРегистрацииИВыгрузки() + + СостояниеОбмена = СостояниеФоновогоЗаданияНаСервере(СостояниеДлительнойОперации.Идентификатор); + + Если Не СостояниеОбмена.Завершено Тогда + ПодключитьОбработчикОжидания("ОбработчикОжиданияРегистрацииИВыгрузки", СостояниеДлительнойОперации.ИнтервалОжидания, Истина); + Возврат; + КонецЕсли; + + СостояниеДлительнойОперации.ИнформацияОбОшибке = СостояниеОбмена.ИнформацияОбОшибке; + Если СостояниеДлительнойОперации.ИнформацияОбОшибке <> Неопределено Тогда + // Завершено с ошибкой, идем на страницу завершения + ПерейтиДалее(); + Возврат; + КонецЕсли; + + // Выгрузка завершена, будем ожидать завершения сессии + Сессия = ПолучитьИзВременногоХранилища(СостояниеДлительнойОперации.АдресРезультата); + + СостояниеДлительнойОперации = НовоеСостояниеДлительнойОперации(); + СостояниеДлительнойОперации.Идентификатор = Сессия.Сессия; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияКорреспондента", СостояниеДлительнойОперации.ИнтервалОжидания, Истина); +КонецПроцедуры + +// Периодический обработчик ожидания второй фазы - фоновая выгрузка +&НаКлиенте +Процедура ОбработчикОжиданияКорреспондента() + + Статус = СтатусСессииСообщения(СостояниеДлительнойОперации.Идентификатор); + + Если Статус = "Выполняется" Тогда + ПодключитьОбработчикОжидания("ОбработчикОжиданияКорреспондента", СостояниеДлительнойОперации.ИнтервалОжидания, Истина); + + ИначеЕсли Статус = "Успешно" Тогда + ПерейтиДалее(); + + Иначе + СостояниеДлительнойОперации.ИнформацияОбОшибке = НСтр("ru = 'Ошибка сообщения корреспонденту'"); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции +// + +&НаКлиентеНаСервереБезКонтекста +Функция НовоеСостояниеДлительнойОперации() + + СостояниеДлительнойОперации = Новый Структура("ИнформацияОбОшибке, Идентификатор, АдресРезультата"); + СостояниеДлительнойОперации.Вставить("ИнтервалОжидания", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 5, 3) ); + + Возврат СостояниеДлительнойОперации; +КонецФункции + +&НаСервереБезКонтекста +Функция СостояниеФоновогоЗаданияНаСервере(Знач ИдентификаторФоновогоЗадания) + + Результат = Новый Структура("Завершено, ИнформацияОбОшибке", Истина); + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторФоновогоЗадания); + Если Задание <> Неопределено Тогда + // Все непонятное - завершено + Результат.Завершено = Задание.Состояние <> СостояниеФоновогоЗадания.Активно; + Если Результат.Завершено И Задание.ИнформацияОбОшибке <> Неопределено Тогда + Результат.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке); + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервереБезКонтекста +Функция СтатусСессииСообщения(Знач Идентификатор) + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегистрыСведений.СессииОбменаСообщениямиСистемы.СтатусСессии(Идентификатор); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗавершитьФоновоеЗадание(Знач Идентификатор) + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если Задание <> Неопределено Тогда + Задание.Отменить(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ФоновоеЗаданиеВыгрузкиНаСервере() + + Результат = Новый Структура("АдресРезультата", ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор) ); + + ПараметрыФоновогоВыполнения = Новый Массив; + + ПараметрыВыгрузки = Новый Структура; + МетаОбработка = Метаданные.Обработки.ИнтерактивноеИзменениеВыгрузки; + Для Каждого МетаРеквизит Из МетаОбработка.Реквизиты Цикл + ИмяРеквизита = МетаРеквизит.Имя; + ПараметрыВыгрузки.Вставить(ИмяРеквизита, ДополнениеВыгрузки[ИмяРеквизита]); + КонецЦикла; + ПараметрыВыгрузки.Вставить("ДополнительнаяРегистрацияСценарияУзла", ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла.Выгрузить() ); + ПараметрыВыгрузки.Вставить("ДополнительнаяРегистрация", ДополнениеВыгрузки.ДополнительнаяРегистрация.Выгрузить() ); + + ПараметрыФоновогоВыполнения.Добавить( ПараметрыВыгрузки ); + ПараметрыФоновогоВыполнения.Добавить( Результат.АдресРезультата ); + + Задание = ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.ОбменПоТребованию", + ПараметрыФоновогоВыполнения, , НСтр("ru = 'Интерактивный обмен по требованию.'")); + + Результат.Вставить("Идентификатор", Задание.УникальныйИдентификатор); + Возврат Результат; +КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////// // ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ: Инициализация переходов помощника @@ -668,12 +907,21 @@ &НаСервере Процедура СценарийПолныйВручную() + ТаблицаПереходов.Очистить(); - - ТаблицаПереходовНоваяСтрока(1, "ИзменениеСоставаВыгрузки", "СтраницаНавигацииНачало", - ,,); - ТаблицаПереходовНоваяСтрока(2, "Окончание", "СтраницаНавигацииОкончание",, - "Окончание_ПриОткрытии",); - + + ТаблицаПереходовНоваяСтрока(1, "ИзменениеСоставаВыгрузки", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеВыгрузки", "СтраницаНавигацииОжидание" , , "ОжиданиеВыгрузки_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(3, "Окончание", "СтраницаНавигацииОкончание", , "Окончание_ПриОткрытии"); + КонецПроцедуры +&НаСервере +Процедура СценарийБезДобавления() + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ОжиданиеВыгрузки", "СтраницаНавигацииОжидание" , , "ОжиданиеВыгрузки_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(2, "Окончание", "СтраницаНавигацииОкончание", , "Окончание_ПриОткрытии"); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl new file mode 100644 index 000000000..9a42c2750 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl @@ -0,0 +1,98 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработчик фонового задания для регистрации дополнительных данных и обмена +// +// Параметры: +// ОбработкаВыгрузки - ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - инициализированный объект +// АдресХранилища - Строка, УникальныйИдентификатор - Адрес в хранилище для получения результата +// +Процедура ОбменПоТребованию(Знач ОбработкаВыгрузки, Знач АдресХранилища = Неопределено) Экспорт + + ЗарегистрироватьДанныеДополненияВыгрузки(ОбработкаВыгрузки); + + Сессия = ЗапуститьОбменПоТребованию(ОбработкаВыгрузки.УзелИнформационнойБазы); + + Если АдресХранилища <> Неопределено Тогда + ПоместитьВоВременноеХранилище(Новый Структура("Сессия", Сессия), АдресХранилища); + КонецЕсли; + +КонецПроцедуры + +// Регистрирует дополнительные данные по настройкам +// +// Параметры: +// ОбработкаВыгрузки - Структура, ОбработкаОбъект.ИнтерактивноеИзменениеВыгрузки - инициализированный объект +// +Процедура ЗарегистрироватьДанныеДополненияВыгрузки(Знач ОбработкаВыгрузки) + + Если ТипЗнч(ОбработкаВыгрузки) = Тип("Структура") Тогда + Обработка = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); + ЗаполнитьЗначенияСвойств(Обработка, ОбработкаВыгрузки, , "ДополнительнаяРегистрация, ДополнительнаяРегистрацияСценарияУзла"); + ОбменДаннымиСервер.ЗаполнитьТаблицуЗначений(Обработка.ДополнительнаяРегистрация, ОбработкаВыгрузки.ДополнительнаяРегистрация); + ОбменДаннымиСервер.ЗаполнитьТаблицуЗначений(Обработка.ДополнительнаяРегистрацияСценарияУзла, ОбработкаВыгрузки.ДополнительнаяРегистрацияСценарияУзла); + Иначе + Обработка = ОбработкаВыгрузки; + КонецЕсли; + + Если Обработка.ВариантВыгрузки <= 0 Тогда + // Не добавлять + Возврат; + + ИначеЕсли Обработка.ВариантВыгрузки = 1 Тогда + // За период с отбором, очищаем дополнительную + Обработка.ДополнительнаяРегистрация.Очистить(); + + ИначеЕсли Обработка.ВариантВыгрузки = 2 Тогда + // Детально настроено, очищаем общее + Обработка.КомпоновщикОтбораВсехДокументов = Неопределено; + Обработка.ПериодОтбораВсехДокументов = Неопределено; + + КонецЕсли; + + Обработка.ЗарегистрироватьДополнительныеИзменения(); +КонецПроцедуры + +// Запускает обмен по требованию +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - Ссылка на корреспондента +// +Функция ЗапуститьОбменПоТребованию(Знач УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПротолкнутьСинхронизацию() + ); + + Сессия = РегистрыСведений.СессииОбменаСообщениямиСистемы.НоваяСессия(); + + Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Сообщение.Body.SessionId = Сессия; + + СообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииСинхронизацииДанных(),,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + Сессия = Неопределено; + КонецПопытки; + + Если Сессия<>Неопределено Тогда + СообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения(); + КонецЕсли; + + Возврат Сессия; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl index 8b5e27fbf..06667a93f 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // Переопределяемая часть @@ -86,8 +85,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // Поставляемая часть @@ -112,8 +112,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Поставляемая часть @@ -359,13 +360,13 @@ // // Параметры: // -// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника +// ПорядковыйНомерПерехода (обязательный) - Число. Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации (обязательный) - Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации (необязательный) - Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка. Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника // ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. // @@ -501,7 +502,7 @@ &НаСервере Процедура ЗапроситьОтключениеСинхронизации(Отказ) - Если Не ОбменДаннымиВМоделиСервиса.УдалитьНастройкуОбмена(ИмяПланаОбмена, ОбластьДанныхКорреспондента) Тогда + Если Не ОбменДаннымиВМоделиСервиса.УдалитьНастройкуОбмена(ИмяПланаОбмена, ОбластьДанныхКорреспондента, Сессия) Тогда Отказ = Истина; КонецЕсли; @@ -522,3 +523,5 @@ ТаблицаПереходовНоваяСтрока(5, "Окончание", "СтраницаНавигацииОкончание"); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl index 81450088d..547f94594 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // Переопределяемая часть @@ -67,8 +66,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // Поставляемая часть @@ -79,8 +79,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Поставляемая часть @@ -326,13 +327,13 @@ // // Параметры: // -// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника +// ПорядковыйНомерПерехода (обязательный) - Число. Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации (обязательный) - Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации (необязательный) - Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка. Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника // ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. // @@ -560,3 +561,5 @@ ТаблицаПереходовНоваяСтрока(3, "ОжиданиеПолученияДанных", "СтраницаНавигацииОтмена",,,,, Истина, "ОжиданиеПолученияДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Form.form index 8f9f34d63..f3d41fe9b 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Form.form @@ -15,7 +15,7 @@ 96 <key>ru</key> - <value>Настройка синхронизации данных (шаг 1 из 3)</value> + <value>Настройка синхронизации данных (шаг 1 из 4)</value> true true @@ -229,6 +229,113 @@ Auto + + ГруппаРезервноеКопирование + 432 + + Декорация1 + 434 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 436 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 435 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + НадписьРезервноеКопирование + 429 + + <key>ru</key> + <value>Перед настройкой синхронизации рекомендуется создать резервную копию данных.</value> + + true + true + + true + + + НадписьРезервноеКопированиеРасширеннаяПодсказка + 431 + Label + true + true + + Left + + + + НадписьРезервноеКопированиеКонтекстноеМеню + 430 + true + + Label + true + true + + + URLProcessing + НадписьРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа резервное копирование</value> + + + ru + Группа резервное копирование + + + ГруппаРезервноеКопированиеРасширеннаяПодсказка + 433 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + НадписьДалее1 109 @@ -258,7 +365,6 @@ Label true - 3 true true @@ -551,7 +657,7 @@ 139 <key>ru</key> - <value>Сопоставление одинаковых данных (шаг 2 из 3)</value> + <value>Сопоставление одинаковых данных (шаг 2 из 4)</value> true true @@ -943,14 +1049,6 @@ true true true - - ru - ЧН= - - - ru - ЧН= - true true true @@ -992,14 +1090,6 @@ true true true - - ru - ЧН= - - - ru - ЧН= - true true true @@ -1191,10 +1281,10 @@ ИнформацияСтатистикиСтрокаПоиска - 406 + 438 ИнформацияСтатистикиСтрокаПоискаРасширеннаяПодсказка - 408 + 440 Label true true @@ -1204,7 +1294,7 @@ ИнформацияСтатистикиСтрокаПоискаКонтекстноеМеню - 407 + 439 true ИнформацияСтатистики @@ -1214,10 +1304,10 @@ ИнформацияСтатистикиСостояниеПросмотра - 409 + 441 ИнформацияСтатистикиСостояниеПросмотраРасширеннаяПодсказка - 411 + 443 Label true true @@ -1227,7 +1317,7 @@ ИнформацияСтатистикиСостояниеПросмотраКонтекстноеМеню - 410 + 442 true ViewStatusAddition @@ -1238,10 +1328,10 @@ ИнформацияСтатистикиУправлениеПоиском - 412 + 444 ИнформацияСтатистикиУправлениеПоискомРасширеннаяПодсказка - 414 + 446 Label true true @@ -1251,7 +1341,7 @@ ИнформацияСтатистикиУправлениеПоискомКонтекстноеМеню - 413 + 445 true SearchControlAddition @@ -1782,14 +1872,14 @@ - НастройкаПараметровУчета - 143 + ПравилаПолученияДанных + 405 - Заголовок6 - 144 + Заголовок8 + 407 <key>ru</key> - <value>Настройки для правильного отражения документов в учете (шаг 3 из 3)</value> + <value>Правила получения данных (шаг 3 из 4)</value> true true @@ -1797,8 +1887,8 @@ true - Заголовок6ExtendedTooltip - 329 + Заголовок8РасширеннаяПодсказка + 409 Label true true @@ -1807,8 +1897,8 @@ - Заголовок6КонтекстноеМеню - 145 + Заголовок8КонтекстноеМеню + 408 true Label @@ -1830,11 +1920,11 @@ - НастройкиЭтогоПриложения - 184 + ПравилаПолученияЭтогоПриложения + 410 - НаименованиеЭтогоПриложения - 186 + НаименованиеЭтогоПриложенияПравила + 414 true true @@ -1845,8 +1935,8 @@ None - НаименованиеЭтогоПриложенияExtendedTooltip - 331 + НаименованиеЭтогоПриложенияПравилаРасширеннаяПодсказка + 416 Label true true @@ -1855,8 +1945,8 @@ - НаименованиеЭтогоПриложенияКонтекстноеМеню - 187 + НаименованиеЭтогоПриложенияПравилаКонтекстноеМеню + 415 true LabelField @@ -1876,117 +1966,6 @@ - - ПараметрыУчета - 179 - - Декорация99 - 180 - true - true - - true - - - Декорация99ExtendedTooltip - 333 - Label - true - true - - Left - - - - Декорация99КонтекстноеМеню - 181 - true - - 4 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - - - ПараметрыУчетаПоясняющаяНадпись - 182 - true - true - - true - - - ПараметрыУчетаПоясняющаяНадпись - - None - - ПараметрыУчетаПоясняющаяНадписьExtendedTooltip - 334 - Label - true - true - - Left - - - - ПараметрыУчетаПоясняющаяНадписьКонтекстноеМеню - 183 - true - - LabelField - Center - Enter - true - Left - true - - true - 2 - true - false - - Style.ПоясняющийТекст - - - - true - true - - true - - - <key>ru</key> - <value>Параметры учета</value> - - - ru - Параметры учета - - - ПараметрыУчетаExtendedTooltip - 332 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ГруппаОписаниеЗначенийПоУмолчанию 274 @@ -1995,7 +1974,7 @@ 164 <key>ru</key> - <value>Значения для автоматического заполнения реквизитов документов при загрузке в это приложение</value> + <value>Значения для автоматического заполнения реквизитов при получении данных в этом приложении</value> true true @@ -2100,15 +2079,15 @@ <key>ru</key> - <value>Настройки этого приложения</value> + <value>Правила получения этого приложения</value> ru - Настройки этого приложения + Правила получения этого приложения - НастройкиЭтогоПриложенияExtendedTooltip - 330 + ПравилаПолученияЭтогоПриложенияРасширеннаяПодсказка + 411 Label true true @@ -2127,11 +2106,11 @@ - НастройкиКорреспондента - 185 + ПравилаПолученияКорреспондента + 412 - НаименованиеКорреспондента - 188 + НаименованиеКорреспондентаПравила + 417 true true @@ -2142,8 +2121,8 @@ None - НаименованиеКорреспондентаExtendedTooltip - 339 + НаименованиеКорреспондентаПравилаРасширеннаяПодсказка + 419 Label true true @@ -2152,8 +2131,8 @@ - НаименованиеКорреспондентаКонтекстноеМеню - 189 + НаименованиеКорреспондентаПравилаКонтекстноеМеню + 418 true LabelField @@ -2173,117 +2152,6 @@ - - ПараметрыУчетаКорреспондента - 170 - - Декорация98 - 171 - true - true - - true - - - Декорация98ExtendedTooltip - 341 - Label - true - true - - Left - - - - Декорация98КонтекстноеМеню - 172 - true - - 4 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - - - ПараметрыУчетаКорреспондентаПоясняющаяНадпись - 177 - true - true - - true - - - ПараметрыУчетаКорреспондентаПоясняющаяНадпись - - None - - ПараметрыУчетаКорреспондентаПоясняющаяНадписьExtendedTooltip - 342 - Label - true - true - - Left - - - - ПараметрыУчетаКорреспондентаПоясняющаяНадписьКонтекстноеМеню - 178 - true - - LabelField - Center - Enter - true - Left - true - - true - 2 - true - false - - Style.ПоясняющийТекст - - - - true - true - - true - - - <key>ru</key> - <value>Параметры учета корреспондента</value> - - - ru - Параметры учета корреспондента - - - ПараметрыУчетаКорреспондентаExtendedTooltip - 340 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ГруппаОписаниеЗначенийПоУмолчаниюКорреспондента 275 @@ -2292,7 +2160,7 @@ 167 <key>ru</key> - <value>Значения для автоматического заполнения реквизитов документов при загрузке во второе приложение</value> + <value>Значения для автоматического заполнения реквизитов при получении данных во втором приложении</value> true true @@ -2397,14 +2265,598 @@ <key>ru</key> - <value>Настройки корреспондента</value> + <value>Правила получения корреспондента</value> ru - Настройки корреспондента + Правила получения корреспондента - НастройкиКорреспондентаExtendedTooltip + ПравилаПолученияКорреспондентаРасширеннаяПодсказка + 413 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НадписьДалее5 + 420 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для сохранения настроек.</value> + + true + true + + true + + + НадписьДалее5РасширеннаяПодсказка + 422 + Label + true + true + + Left + + + + НадписьДалее5КонтекстноеМеню + 421 + true + + Label + true + 3 + true + true + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Правила получения данных</value> + + + ru + Правила получения данных + + + ПравилаПолученияДанныхРасширеннаяПодсказка + 406 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкаПараметровУчета + 143 + + Заголовок6 + 144 + + <key>ru</key> + <value>Настройки для правильного отражения документов в учете (шаг 4 из 4)</value> + + true + true + + true + + + Заголовок6ExtendedTooltip + 329 + Label + true + true + + Left + + + + Заголовок6КонтекстноеМеню + 145 + true + + Label + true + 2 + true + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ПараметрыУчета + 184 + + НаименованиеЭтогоПриложения + 186 + true + true + + true + + + НаименованиеЭтогоПриложения + + None + + НаименованиеЭтогоПриложенияExtendedTooltip + 331 + Label + true + true + + Left + + + + НаименованиеЭтогоПриложенияКонтекстноеМеню + 187 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + НастройкиЭтогоПриложения + 179 + + Декорация99 + 180 + true + true + + true + + + Декорация99ExtendedTooltip + 333 + Label + true + true + + Left + + + + Декорация99КонтекстноеМеню + 181 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ПараметрыУчетаПоясняющаяНадпись + 182 + true + true + + true + + + ПараметрыУчетаПоясняющаяНадпись + + None + + ПараметрыУчетаПоясняющаяНадписьExtendedTooltip + 334 + Label + true + true + + Left + + + + ПараметрыУчетаПоясняющаяНадписьКонтекстноеМеню + 183 + true + + LabelField + Center + Enter + true + Left + true + + true + 2 + true + false + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Настройки этого приложения</value> + + + ru + Настройки этого приложения + + + НастройкиЭтогоПриложенияРасширеннаяПодсказка + 332 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + НадписьНастройкиПараметровУчета + 423 + true + true + + true + + + НадписьНастройкиПараметровУчета + + None + + НадписьНастройкиПараметровУчетаРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + + НадписьНастройкиПараметровУчетаКонтекстноеМеню + 424 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры учета</value> + + + ru + Параметры учета + + + ПараметрыУчетаРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПараметрыУчетаКорреспондента + 185 + + НаименованиеКорреспондента + 188 + true + true + + true + + + НаименованиеКорреспондента + + None + + НаименованиеКорреспондентаExtendedTooltip + 339 + Label + true + true + + Left + + + + НаименованиеКорреспондентаКонтекстноеМеню + 189 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + НастройкиКорреспондента + 170 + + Декорация98 + 171 + true + true + + true + + + Декорация98ExtendedTooltip + 341 + Label + true + true + + Left + + + + Декорация98КонтекстноеМеню + 172 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ПараметрыУчетаКорреспондентаПоясняющаяНадпись + 177 + true + true + + true + + + ПараметрыУчетаКорреспондентаПоясняющаяНадпись + + None + + ПараметрыУчетаКорреспондентаПоясняющаяНадписьExtendedTooltip + 342 + Label + true + true + + Left + + + + ПараметрыУчетаКорреспондентаПоясняющаяНадписьКонтекстноеМеню + 178 + true + + LabelField + Center + Enter + true + Left + true + + true + 2 + true + false + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Настройки корреспондента</value> + + + ru + Настройки корреспондента + + + НастройкиКорреспондентаРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + НадписьНастройкиПараметровУчетаКорреспондента + 426 + true + true + + true + + + НадписьНастройкиПараметровУчетаКорреспондента + + None + + НадписьНастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка + 428 + Label + true + true + + Left + + + + НадписьНастройкиПараметровУчетаКорреспондентаКонтекстноеМеню + 427 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры учета корреспондента</value> + + + ru + Параметры учета корреспондента + + + ПараметрыУчетаКорреспондентаРасширеннаяПодсказка 338 Label true @@ -3951,7 +4403,7 @@ Retry SaveValues Yes - LockOwner + DontBlock true true Vertical @@ -4887,13 +5339,67 @@ true + + НадписьНастройкиПараметровУчета + + <key>ru</key> + <value>Надпись настройки параметров учета</value> + + 44 + + String + + + + true + + + true + + + + НадписьНастройкиПараметровУчетаКорреспондента + + <key>ru</key> + <value>Надпись настройки параметров учета корреспондента</value> + + 45 + + String + + + + true + + + true + + + + АдресИнструкцииПоВыполнениюРезервногоКопирования + + <key>ru</key> + <value>Адрес инструкции по выполнению резервного копирования</value> + + 46 + + String + + + + true + + + true + + ПользовательОтветилДаНаВопросОСопоставлении <key>ru</key> <value>Пользователь ответил да на вопрос о сопоставлении</value> - 44 + 47 Boolean diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl index 5f9444246..81c2be2ff 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl @@ -1,5 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // Переопределяемая часть @@ -86,6 +85,7 @@ Модифицированность = Истина; + УстановитьТекстРезервногоКопирования(); КонецПроцедуры &НаКлиенте @@ -154,6 +154,7 @@ ПорядковыйНомерПерехода = 0; УстановитьПорядковыйНомерПерехода( НомерСтраницы_ПолучениеСтатистикиСопоставления() ); + КонецЕсли; КонецПроцедуры @@ -213,8 +214,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // Поставляемая часть @@ -333,8 +335,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Поставляемая часть @@ -580,13 +583,13 @@ // // Параметры: // -// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника +// ПорядковыйНомерПерехода (обязательный) - Число. Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) - Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации (обязательный) - Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации (необязательный) - Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) - Строка. Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад (необязательный) - Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника // ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. // @@ -873,6 +876,49 @@ КонецФункции +&НаКлиенте +Процедура НадписьРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылка = "МодельСервиса" Тогда + МодульРезервноеКопированиеОбластейДанныхКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанныхКлиент"); + МодульРезервноеКопированиеОбластейДанныхКлиент.ОткрытьФормуРезервногоКопирования(ЭтотОбъект); + + ИначеЕсли НавигационнаяСсылка = "МодельСервисаТолькоИнструкция" Тогда + ПерейтиПоНавигационнойСсылке(АдресИнструкцииПоВыполнениюРезервногоКопирования); + + ИначеЕсли НавигационнаяСсылка = "РезервноеКопирование" Тогда + МодульРезервноеКопированиеИБКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеИБКлиент"); + МодульРезервноеКопированиеИБКлиент.ОткрытьФормуРезервногоКопирования(ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьТекстРезервногоКопирования() + Вариант = ОбменДаннымиСервер.ВариантРезервногоКопирования(); + + Если ПустаяСтрока(Вариант) Тогда + Возврат; + + ИначеЕсли Вариант = "МодельСервисаТолькоИнструкция" Тогда + АдресИнструкцииПоВыполнениюРезервногоКопирования = ОбменДаннымиВМоделиСервиса.АдресИнструкцииПоВыполнениюРезервногоКопирования(); + Если ПустаяСтрока(АдресИнструкцииПоВыполнениюРезервногоКопирования) Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед настройкой синхронизации рекомендуется сделать резервную копию данных.'"), + Вариант); + + ФорматДок = Новый ФорматированныйДокумент; + ФорматДок.УстановитьHTML(Текст, Новый Структура); + Элементы.НадписьРезервноеКопирование.Заголовок = ФорматДок.ПолучитьФорматированнуюСтроку(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Переопределяемая часть: Обработчики событий переходов @@ -1221,8 +1267,10 @@ Процедура ОбработатьОтветПользователяПриСопоставлении(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда + ПользовательОтветилДаНаВопросОСопоставлении = Истина; ПерейтиДалее(); + КонецЕсли; КонецПроцедуры @@ -1425,7 +1473,22 @@ &НаКлиенте Функция Подключаемый_ПроверкаПараметровУчетаКорреспондентаДлительнаяОперацияОкончание4_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ЗагрузитьПараметрыУчетаКорреспондента(Отказ); + СообщениеОбОшибке = ""; + СообщениеОбОшибкеКорреспондента = ""; + + ЗагрузитьПараметрыУчетаКорреспондента(Отказ, СообщениеОбОшибке, СообщениеОбОшибкеКорреспондента); + + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; + + Если Не ПараметрыУчетаЗаданы Тогда + НадписьНастройкиПараметровУчета = СообщениеОбОшибке; + КонецЕсли; + + Если Не ПараметрыУчетаКорреспондентаЗаданы Тогда + НадписьНастройкиПараметровУчетаКорреспондента = СообщениеОбОшибкеКорреспондента; + КонецЕсли; КонецФункции @@ -1444,11 +1507,13 @@ КонецЕсли; Если Не ПараметрыУчетаЗаданы Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,, "ПараметрыУчетаПоясняющаяНадпись",, Отказ); + НадписьНастройкиПараметровУчета = СообщениеОбОшибке; + Отказ = Истина; КонецЕсли; Если Не ПараметрыУчетаКорреспондентаЗаданы Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибкеКорреспондента,, "ПараметрыУчетаКорреспондентаПоясняющаяНадпись",, Отказ); + НадписьНастройкиПараметровУчетаКорреспондента = СообщениеОбОшибкеКорреспондента; + Отказ = Истина; КонецЕсли; КонецФункции @@ -1527,31 +1592,29 @@ // -// Страница 5 (Настройка параметров учета): +// Страница 5 (Правила получения данных): // Если задание значений по умолчанию не требуется, и заданы все параметры учета, то пропускаем шаг. // &НаКлиенте -Функция Подключаемый_НастройкаПараметровУчета_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) +Функция Подключаемый_ПравилаПолученияДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Если ПараметрыУчетаЗаданы - И ПараметрыУчетаКорреспондентаЗаданы - И Не ПредусмотреныЗначенияПоУмолчаниюНаУзле + Если Не ПредусмотреныЗначенияПоУмолчаниюНаУзле И Не ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда ПропуститьСтраницу = Истина; КонецЕсли; - Элементы.НаименованиеЭтогоПриложения.Видимость = Элементы.ПараметрыУчета.Видимость ИЛИ Элементы.ГруппаОписаниеЗначенийПоУмолчанию.Видимость; - Элементы.НаименованиеКорреспондента.Видимость = Элементы.ПараметрыУчетаКорреспондента.Видимость ИЛИ Элементы.ГруппаОписаниеЗначенийПоУмолчаниюКорреспондента.Видимость; + Элементы.НаименованиеЭтогоПриложенияПравила.Видимость = Элементы.ГруппаОписаниеЗначенийПоУмолчанию.Видимость; + Элементы.НаименованиеКорреспондентаПравила.Видимость = Элементы.ГруппаОписаниеЗначенийПоУмолчаниюКорреспондента.Видимость; КонецФункции -// Страница 5 (Настройка параметров учета): -// Выполняем проверку заполнения настроек параметров учета +// Страница 5 (Правила получения данных): +// Выполняем задание значений по умолчанию // &НаКлиенте -Функция Подключаемый_НастройкаПараметровУчета_ПриПереходеДалее(Отказ) +Функция Подключаемый_ПравилаПолученияДанных_ПриПереходеДалее(Отказ) // Проверяем заполнение реквизитов в форме дополнительных настроек Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда @@ -1604,7 +1667,24 @@ // -// Страница 6 (ожидание): +// Страница 6 (Настройка параметров учета): +// Если задание значений по умолчанию не требуется, и заданы все параметры учета, то пропускаем шаг. +// +&НаКлиенте +Функция Подключаемый_НастройкаПараметровУчета_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ПараметрыУчетаЗаданы + И ПараметрыУчетаКорреспондентаЗаданы Тогда + + ПропуститьСтраницу = Истина; + + КонецЕсли; + +КонецФункции + +// + +// Страница 7 (ожидание): // Сохраняем настройки, заданные пользователем // Регистрируем все данные к выгрузке, кроме справочников // Отправляем сообщение корреспонденту: @@ -1620,7 +1700,7 @@ КонецФункции -// Страница 6 (ожидание): +// Страница 7 (ожидание): // Сохраняем настройки, заданные пользователем // Регистрируем все данные к выгрузке, кроме справочников // Отправляем сообщение корреспонденту @@ -1652,7 +1732,7 @@ КонецПроцедуры -// Страница 6 (ожидание): Ожидаем завершения работы фонового задания +// Страница 7 (ожидание): Ожидаем завершения работы фонового задания // &НаКлиенте Функция Подключаемый_ОжиданиеСохраненияНастроекФоновоеЗадание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -1663,7 +1743,7 @@ КонецФункции -// Страница 6 (ожидание): Ожидаем ответа от корреспондента +// Страница 7 (ожидание): Ожидаем ответа от корреспондента // &НаКлиенте Функция Подключаемый_ОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -1678,7 +1758,7 @@ // -// Страница 6 (ожидание): Фиксация создания настройки обмена в МС +// Страница 7 (ожидание): Фиксация создания настройки обмена в МС // &НаКлиенте Функция Подключаемый_ФиксацияСозданияНастройкиОбмена_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -1687,7 +1767,7 @@ КонецФункции -// Страница 6 (ожидание): Фиксация создания настройки обмена в МС +// Страница 7 (ожидание): Фиксация создания настройки обмена в МС // &НаКлиенте Функция Подключаемый_ФиксацияСозданияНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -1698,7 +1778,7 @@ КонецФункции -// Страница 6 (ожидание): Фиксация создания настройки обмена в МС +// Страница 7 (ожидание): Фиксация создания настройки обмена в МС // &НаКлиенте Функция Подключаемый_ФиксацияСозданияНастройкиОбменаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -1707,7 +1787,7 @@ КонецФункции -// Страница 6 (ожидание): Фиксация создания настройки обмена в МС +// Страница 7 (ожидание): Фиксация создания настройки обмена в МС // &НаСервере Процедура ЗафиксироватьСозданиеНастройкиОбменаВМенеджереСервиса(Отказ) @@ -1756,56 +1836,57 @@ ТаблицаПереходовНоваяСтрока(1, "Начало", "СтраницаНавигацииНачало",,, "Начало_ПриПереходеДалее"); + // Получение значений по умолчанию корреспондента + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондента_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондентаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ПравилаПолученияДанных", "СтраницаНавигацииПродолжение",, "ПравилаПолученияДанных_ПриОткрытии", "ПравилаПолученияДанных_ПриПереходеДалее"); + // Создание настройки и автоматическое сопоставление данных - ТаблицаПереходовНоваяСтрока(2, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(3, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(4, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(5, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(6, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСопоставленияДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(7, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСопоставленияДанныхФоновоеЗаданиеОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(10, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСопоставленияДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(11, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСопоставленияДанныхФоновоеЗаданиеОкончание_ОбработкаДлительнойОперации"); // Получение статистики сопоставления (опционально) - ТаблицаПереходовНоваяСтрока(8, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставления_ОбработкаДлительнойОперации").Метка = "СтраницаСтатистики"; + ТаблицаПереходовНоваяСтрока(12, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставления_ОбработкаДлительнойОперации").Метка = "СтраницаСтатистики"; - ТаблицаПереходовНоваяСтрока(9, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗадание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(10, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗаданиеОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(13, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗадание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(14, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗаданиеОкончание_ОбработкаДлительнойОперации"); // Сопоставление данных пользователем - ТаблицаПереходовНоваяСтрока(11, "СопоставлениеДанных", "СтраницаНавигацииПродолжение",, "СопоставлениеДанных_ПриОткрытии", "СопоставлениеДанных_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(15, "СопоставлениеДанных", "СтраницаНавигацииПродолжение",, "СопоставлениеДанных_ПриОткрытии", "СопоставлениеДанных_ПриПереходеДалее"); // Синхронизация справочников - ТаблицаПереходовНоваяСтрока(12, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(13, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(14, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - - // Получение значений по умолчанию корреспондента - ТаблицаПереходовНоваяСтрока(15, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондента_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(16, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(17, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаЗначенийПоУмолчаниюДляКорреспондентаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(16, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(17, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанныхФоновоеЗадание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(18, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСинхронизацииДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); // Проверка параметров учета корреспондента - ТаблицаПереходовНоваяСтрока(18, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондента_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(19, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(20, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперацияОкончание4_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(19, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондента_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(20, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(21, "ОжиданиеСинхронизацииДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперацияОкончание4_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(21, "НастройкаПараметровУчета", "СтраницаНавигацииПродолжение",, "НастройкаПараметровУчета_ПриОткрытии", "НастройкаПараметровУчета_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(22, "НастройкаПараметровУчета", "СтраницаНавигацииПродолжение",, "НастройкаПараметровУчета_ПриОткрытии"); // Проверка параметров учета корреспондента - ТаблицаПереходовНоваяСтрока(22, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондента_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(23, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(24, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперацияОкончание6_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(23, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондента_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(24, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(25, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ПроверкаПараметровУчетаКорреспондентаДлительнаяОперацияОкончание6_ОбработкаДлительнойОперации"); // Обновление настройки и регистрация данных для синхронизации - ТаблицаПереходовНоваяСтрока(25, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(26, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроекФоновоеЗадание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(27, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(26, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(27, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроекФоновоеЗадание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(28, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); // Отправка сообщения в менеджер сервиса для фиксации факта настройки обмена - ТаблицаПереходовНоваяСтрока(28, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбмена_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(29, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(30, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбменаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(29, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбмена_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(30, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(31, "ОжиданиеСохраненияНастроек", "СтраницаНавигацииОжидание",,,,, Истина, "ФиксацияСозданияНастройкиОбменаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(31, "Окончание", "СтраницаНавигацииОкончание"); + ТаблицаПереходовНоваяСтрока(32, "Окончание", "СтраницаНавигацииОкончание"); КонецПроцедуры @@ -1819,3 +1900,5 @@ Возврат 0; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl index 65c948e96..d0cfcce8d 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl @@ -28,7 +28,7 @@ КодКорреспондента, НаименованиеКорреспондента, КонечнаяТочкаКорреспондента, - НастройкаОтборовНаУзле, + НастройкаОтборовНаУзле.НастройкаОтборовНаУзле, Корреспондент, , , @@ -38,7 +38,7 @@ ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(Корреспондент); // {Обработчик: ПриОтправкеДанныхОтправителя} Начало - ПланыОбмена[ИмяПланаОбмена].ПриОтправкеДанныхОтправителя(НастройкаОтборовНаУзле, Ложь); + ПланыОбмена[ИмяПланаОбмена].ПриОтправкеДанныхОтправителя(НастройкаОтборовНаУзле.НастройкаОтборовНаУзле, Ложь); // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание // Отправляем сообщение корреспонденту @@ -49,7 +49,7 @@ Сообщение.Body.ExchangePlan = ИмяПланаОбмена; Сообщение.Body.CorrespondentCode = КодЭтогоПриложения; Сообщение.Body.CorrespondentName = НаименованиеЭтогоПриложения; - Сообщение.Body.FilterSettings = СериализаторXDTO.ЗаписатьXDTO(НастройкаОтборовНаУзле); + Сообщение.Body.FilterSettings = СериализаторXDTO.ЗаписатьXDTO(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента); Сообщение.Body.Code = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код"); Сообщение.Body.EndPoint = ОбменСообщениямиВнутренний.КодЭтогоУзла(); Сообщение.AdditionalInfo = СериализаторXDTO.ЗаписатьXDTO(Новый Структура("Префикс", ПрефиксКорреспондента)); diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl index ebe5608d9..ffcbd7119 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,3 +13,5 @@ Заголовок = Параметры.Заголовок; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form deleted file mode 100644 index eac805bc5..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form +++ /dev/null @@ -1,2087 +0,0 @@ - - - - <key>ru</key> - <value>Помощник настройки автономного рабочего места</value> - - - ПанельОсновная - 12 - - Начало - 13 - - Заголовок1 - 64 - - <key>ru</key> - <value>Вас приветствует помощник настройки автономного рабочего места</value> - - true - true - - true - - - Заголовок1ExtendedTooltip - 94 - Label - true - true - - Left - - - - Заголовок1КонтекстноеМеню - 65 - true - - Label - true - 2 - true - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - Top - - - - КартинкаСозданиеЛокальногоРабочегоМеста - 66 - true - true - - true - - - КартинкаСозданиеЛокальногоРабочегоМестаExtendedTooltip - 95 - Label - true - true - - Left - - - - КартинкаСозданиеЛокальногоРабочегоМестаКонтекстноеМеню - 67 - true - - 64 - true - 9 - true - - - - - - Группа8 - 83 - - Декорация2 - 84 - - <key>ru</key> - <value>Для того чтобы выполнять синхронизацию данных необходимо указать пароль. -Укажите пароль, который Вы вводили при регистрации.</value> - - true - true - - true - - - Декорация2ExtendedTooltip - 97 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 85 - true - - Label - true - true - true - - Left - - - - Группа7 - 86 - - Пароль - 87 - true - true - - true - - - Пароль - - Left - - ПарольExtendedTooltip - 99 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 88 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - - ЗабылиПароль - 89 - true - true - - true - - - ЗабылиПарольExtendedTooltip - 100 - Label - true - true - - Left - - - Hyperlink - Form.Command.ЗабылиПароль - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - Группа7ExtendedTooltip - 98 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ЗапомнитьПароль - 90 - true - true - - true - - - ЗапомнитьПароль - - Right - - ЗапомнитьПарольExtendedTooltip - 101 - Label - true - true - - Left - - - - ЗапомнитьПарольКонтекстноеМеню - 91 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - false - - Группа8ExtendedTooltip - 96 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - НадписьДалее1 - 68 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для проверки подключения к Интернету.</value> - - true - true - - true - - - НадписьДалее1ExtendedTooltip - 102 - Label - true - true - - Left - - - - НадписьДалее1КонтекстноеМеню - 69 - true - - Label - true - 3 - true - true - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Начало</value> - - - НачалоExtendedTooltip - 93 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ОжиданиеПроверкиПодключения - 28 - - Заголовок4 - 70 - - <key>ru</key> - <value>Проверка подключения</value> - - true - true - - true - - - Заголовок4ExtendedTooltip - 104 - Label - true - true - - Left - - - - Заголовок4КонтекстноеМеню - 71 - true - - Label - true - 2 - true - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - Top - - - - ГруппировкаСообщения - 72 - - ГруппаКартинки - 73 - - Декорация14 - 74 - true - true - - true - - - Декорация14ExtendedTooltip - 107 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 75 - true - - 8 - true - 3 - true - false - - - CommonPicture.ДлительнаяОперация48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ru - Группа картинки - - - ГруппаКартинкиExtendedTooltip - 106 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения - 76 - - Декорация15 - 77 - - <key>ru</key> - <value>Выполняется проверка подключения к Интернету. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация15ExtendedTooltip - 109 - Label - true - true - - Left - - - - Декорация15КонтекстноеМеню - 78 - true - - Label - true - 3 - true - true - false - - System.DefaultGUIFont - 10.0 - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ru - Группа сообщения - - - ГруппаСообщенияExtendedTooltip - 108 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - ru - Группировка сообщения - - - ГруппировкаСообщенияExtendedTooltip - 105 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - ru - Страница 14 - - - ОжиданиеПроверкиПодключенияExtendedTooltip - 103 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - Окончание - 16 - - Заголовок2 - 79 - - <key>ru</key> - <value>Настройка автономного рабочего места завершена</value> - - true - true - - true - - - Заголовок2ExtendedTooltip - 111 - Label - true - true - - Left - - - - Заголовок2КонтекстноеМеню - 80 - true - - Label - true - 2 - true - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - Top - - - - НадписьДалее2 - 81 - - <key>ru</key> - <value>Нажмите кнопку "Готово" для завершения настройки автономного рабочего места.</value> - - true - true - - true - - - НадписьДалее2ExtendedTooltip - 112 - Label - true - true - - Left - - - - НадписьДалее2КонтекстноеМеню - 82 - true - - Label - true - 3 - true - true - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Окончание</value> - - - ОкончаниеExtendedTooltip - 110 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Панель основная</value> - - - ru - Панель навигации - - true - true - - ПанельОсновнаяExtendedTooltip - 92 - Label - true - true - - Left - - - Pages - - Auto - - - - РамкаПанелиНавигации - 38 - - ПанельНавигации - 39 - - СтраницаНавигацииНачало - 40 - - КоманднаяПанельСлева1 - 142 - - КомандаНазад - 42 - true - false - - true - - - КомандаНазадExtendedTooltip - 117 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - КоманднаяПанельСлева1РасширеннаяПодсказка - 143 - Label - true - true - - Left - - - CommandBar - - Left - - - - ОтступКоманднойПанели1 - 139 - true - true - - true - - - ОтступКоманднойПанели1РасширеннаяПодсказка - 141 - Label - true - true - - Left - - - - ОтступКоманднойПанели1КонтекстноеМеню - 140 - true - - Label - true - true - true - - Left - - - - КоманднаяПанельСправа1 - 41 - - КомандаДалее - 43 - true - true - - true - - true - - КомандаДалееExtendedTooltip - 118 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Auto - true - true - true - UserCmds - Auto - - - КомандаОтмена - 44 - true - true - - true - - - КомандаОтменаExtendedTooltip - 119 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 45 - true - true - - true - - - СправкаExtendedTooltip - 120 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - true - - КоманднаяПанельСправа1РасширеннаяПодсказка - 116 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации начало</value> - - - ru - Страница навигации начало - - - СтраницаНавигацииНачалоExtendedTooltip - 115 - Label - true - true - - Left - - - Page - - auto - - - - СтраницаНавигацииПродолжение - 46 - - КоманднаяПанельСлева2 - 147 - - КомандаНазад1 - 48 - true - true - - true - - - КомандаНазад1ExtendedTooltip - 123 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - КоманднаяПанельСлева2РасширеннаяПодсказка - 148 - Label - true - true - - Left - - - CommandBar - - Left - - - - ОтступКоманднойПанели2 - 144 - true - true - - true - - - ОтступКоманднойПанели2РасширеннаяПодсказка - 146 - Label - true - true - - Left - - - - ОтступКоманднойПанели2КонтекстноеМеню - 145 - true - - Label - true - true - true - - Left - - - - КоманднаяПанельСправа2 - 47 - - КомандаДалее1 - 49 - true - true - - true - - true - - КомандаДалее1ExtendedTooltip - 124 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена1 - 50 - true - true - - true - - - КомандаОтмена1ExtendedTooltip - 125 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка1 - 51 - true - true - - true - - - Справка1ExtendedTooltip - 126 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - true - - КоманднаяПанельСправа2РасширеннаяПодсказка - 122 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации продолжение</value> - - - СтраницаНавигацииПродолжениеExtendedTooltip - 121 - Label - true - true - - Left - - - Page - - auto - - - - СтраницаНавигацииОкончание - 52 - - КоманднаяПанельСлева3 - 152 - - КомандаНазад2 - 54 - true - false - - true - - - КомандаНазад2ExtendedTooltip - 129 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - КоманднаяПанельСлева3РасширеннаяПодсказка - 153 - Label - true - true - - Left - - - CommandBar - - Left - - - - ОтступКоманднойПанели3 - 149 - true - true - - true - - - ОтступКоманднойПанели3РасширеннаяПодсказка - 151 - Label - true - true - - Left - - - - ОтступКоманднойПанели3КонтекстноеМеню - 150 - true - - Label - true - true - true - - Left - - - - КоманднаяПанельСправа3 - 53 - - КомандаГотово - 55 - true - true - - true - - - КомандаГотовоExtendedTooltip - 130 - Label - true - true - - Left - - - Form.Command.КомандаГотово - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена2 - 56 - true - true - - true - - - КомандаОтмена2ExtendedTooltip - 131 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка2 - 57 - true - true - - true - - - Справка2ExtendedTooltip - 132 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - true - - КоманднаяПанельСправа3РасширеннаяПодсказка - 128 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации окончание</value> - - - СтраницаНавигацииОкончаниеExtendedTooltip - 127 - Label - true - true - - Left - - - Page - - auto - - - - СтраницаНавигацииОжидание - 58 - - КоманднаяПанельСлева4 - 157 - - КомандаНазад3 - 60 - true - false - - true - - - КомандаНазад3ExtendedTooltip - 135 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - КоманднаяПанельСлева4РасширеннаяПодсказка - 158 - Label - true - true - - Left - - - CommandBar - - Left - - - - ОтступКоманднойПанели4 - 154 - true - true - - true - - - ОтступКоманднойПанели4РасширеннаяПодсказка - 156 - Label - true - true - - Left - - - - ОтступКоманднойПанели4КонтекстноеМеню - 155 - true - - Label - true - true - true - - Left - - - - КоманднаяПанельСправа4 - 59 - - КомандаДалее3 - 61 - - <key>ru</key> - <value>Далее ></value> - - true - false - - true - - - КомандаДалее3ExtendedTooltip - 136 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена3 - 62 - true - false - - true - - - КомандаОтмена3ExtendedTooltip - 137 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка3 - 63 - true - false - - true - - - Справка3ExtendedTooltip - 138 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - false - - true - - true - true - - КоманднаяПанельСправа4РасширеннаяПодсказка - 134 - Label - true - true - - Left - - - CommandBar - - Right - - - true - false - - true - - - <key>ru</key> - <value>Страница навигации ожидание</value> - - true - true - - СтраницаНавигацииОжиданиеExtendedTooltip - 133 - Label - true - true - - Left - - - Page - - auto - - - true - true - - true - - - <key>ru</key> - <value>Панель навигации</value> - - true - - ПанельНавигацииExtendedTooltip - 114 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Рамка панели навигации</value> - - - ru - Рамка панели навигации - - - РамкаПанелиНавигацииExtendedTooltip - 113 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - Auto - Auto - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnOpen - ПриОткрытии - - - BeforeClose - ПередЗакрытием - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - Vertical - 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 - - 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> - - 3 - - Number - - 3 - true - - - - true - - - true - - - - АдресДляВосстановленияПароляУчетнойЗаписи - - <key>ru</key> - <value>Адрес для восстановления пароля учетной записи</value> - - 5 - - String - - - - true - - - true - - - - Пароль - - <key>ru</key> - <value>Пароль</value> - - 4 - - String - - 50 - - - - true - - - true - - - - ПриложениеВСервисе - - <key>ru</key> - <value>Приложение в сервисе</value> - - 6 - - ExchangePlanRef - - - true - - - true - - - - ЗапомнитьПароль - - <key>ru</key> - <value>Запомнить пароль</value> - - 7 - - Boolean - - - true - - - true - - - - ЗакрытьФормуБезусловно - - <key>ru</key> - <value>Закрыть форму безусловно</value> - - 8 - - Boolean - - - true - - - true - - - - КомандаГотово - - <key>ru</key> - <value>Готово</value> - - 1 - - true - - - - КомандаГотово - - - Auto - Auto - - - КомандаДалее - - <key>ru</key> - <value>Далее ></value> - - 2 - - true - - - - КомандаДалее - - - Auto - Auto - - - КомандаНазад - - <key>ru</key> - <value>< Назад</value> - - 3 - - true - - - - КомандаНазад - - - Auto - Auto - - - КомандаОтмена - - <key>ru</key> - <value>Отмена</value> - - 4 - - true - - - - КомандаОтмена - - - Auto - Auto - - - ЗабылиПароль - - <key>ru</key> - <value>Забыли пароль?</value> - - 5 - - ru - Забыли пароль - - - true - - - - ЗабылиПароль - - - Auto - Auto - - - - - - -
      diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png deleted file mode 100644 index 8cec9ae00b777161fdb564972f02341fd838c87b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30975 zcmaI7WmsHGvnV{c1=rvZ+#$FQ?!n#N8QfihySuv+Tmys<+#$HT>)?Fsea?IC_v4;B zKh|`ur)+gqcU5;+M<{-iL`K9%1ONcY(o$l|004y2N4p6g_T$MIPBQfI_t`~U(?tbj z?&5CbWCjp61sR)>O4}J(m?@hXnR+@7oACnxP~=vsnl761a=a!WJ0_!laF{&o96qQ4 z0Dd742O|?3GZ#{0GYczw0rHE^UUE_^Qvq@f4tW-N2T?OiD=9B0GZn9IswQ4GCOoF( zLV~3H9=sn6?95z@NImRq?VWi&1jzs8%lpy(=QT4q>Axs0HUi}TrIe<;BB?0I$&8eP ziG|UGg_D((lbwl`orQ;;hk=xhg_VVwm5rH&i;V)8!RYL1?_%V^Xz%>xKODr& zoK2jp99*nG_N4!CG%^Ocx(JYeX!>8DVCV2ZZ0()@yPG~bjM>A;fti(w<)2Ub52C#M z{~OiL?tieIU6jrKkG}s`#?Gpq4ra{CX3ij2CzB7unSc35lmoA*lbMkV$Vn9hvi(ml zDq4bEK+cvR2U1ZL4klJo4J&(7kh}B0`110+()P|SM)oFV(qaPS9~_vhtW0@1M7f07 zg}GR`#JJg6S;bkog}H@=Ik|;d#JI)9g+)aFLn{U{akVqEcli&k>Hnc+{asdJJNqYnb+!n)rC|1f93bzw5I>7E}RnoD=qVfGR*%N_Wx(-|GfI} zo`0JE4}?d5m?4Fr4=T zj^#mf{RdcC8GH2W{Ul6X4a}$d@0MQqkuA!Y0 zMUlvPEb#CEB0t&%4-SXP;~~Z|@c5}{ReytD80$A;;R(EVtDZhpnv9NVMH~B4!~>i=N(!Yh zGZHJUr@pnxRfj$ah?sCkHrf3$vOC|B4T<0Gyj5OnROUn9QQyA7;-^NLAS^=b9J zYdj(8+`b+3(9o#{x~l$5u;x8~u*Y1>J$ZKb-XgSR)vU|rw;>t#denkS^4e?frO^mc z38g$l=uFz70ih~($K#X-b%86ksPTNgs@+R){IZYcsGeBBsCJl@#+;_TyvWeIJuR!C z2fV;xWN}^f{+ANmc5(Cm_!d~O{GIynH*3oMMk^USrVSKJ!*5i1BM=W(`)p%OP*VyM zfw7k6bc)iZ_ONkHR-NA_pQKQAU~*W+e`&ybi(L*orE$9Iu9`_5U8e>(cCQLE+P;=n2Tmj2dX z+yD&wFCw=FC!N?O*3B;NLucSz&qF(WDI`Lv9K3&fhsewRMf}~vU8K$Eft((A5K|k3 z`Fs9&|^YUe9x_MFutKt;+AyJT^MT3iUYdfDD<}isL zsO0Ns;`Jq)zrqg)5qUBcTN5~nYR%-Gvpl`y|FV~L!5d%ubhup*CChivUmLsR{;wzA z^U2mdOdjjdq~7m9cnw3yo1H%c0m)0@@wl}DrcJccl<>x;+eSmLv9(?t;k=|DE(=#E zDia!sE7W`lNLz7E!p?8`42FQD;e(}{eqWk=S!RlJe+rH3@nwWlZiQ8b%l~j;pvxwp z{mU#V#lsi1UIIjb*~(`r&qcvi?(LU$+*iXOm_oi933msyk4^bjq2$9^@Ix{G)PwFXMWi! zB+|^O>oAE$jz;#P@6vzrqB}dH!5i`p-tu&5#jj+uSRxWlMI7BtBy?{VFfh00H{T9J z1TNhd4bAkNevgZ~#21TVX*T+x0e0`NgrP3| zZJA^+isl46JRXKeoMw6>2kP%z#h>Bd81x+4RP=*sPaZ-<)xqFUa>+>h$%I0h^Tjl0 z@-&%Ivx>Irc=_Ju^BR94@G+54q~p-;%FQsLBvCx?{@-;-B^wLMO70;^d`W%bzQ>%k zv)T~4+uuAz@)6kukcw_&aH)2|@{X?IhyA_lj$_`auYLk>)7!1*p7wGB5434YX0P*l zuVh>Dbh`#4lqSrp?)%wc1ziGpv!#=)L-$nS*H;3^sj;XFoU7y=YZl;6++6+_}*Q= z55BX``{5B^PY)su1nXaRjARuzl_8Bdwoo`tB@ENIKI(VKR9vWhGxzH7^S#IjTSwma zupL$^iRIyhCL3{A>o3Xg5 z^dQPukzL0Y9KtVgMI`m3~(=)AM!hm~b;G-{&irUlug1vWq zDTc!8Yx65}==J{ezm{hq?f8OAyaqLX70jW{&kCoh;j}J?jIHDY6Ki zZAr;SEVllc?MQTF)6w$Ni2oKR)AInBP1jD2zJ>qjU_*;$Q zkoa8&VgV!P?q-OWx5suZq^=#8eEWZMgUdaJon>S1L&=%>0BalpIHr&}S_oD!f(ei_ zUsAhM#Yjd~%1bFf&xkL%H)djJqr+)Bzhh~q592}^A-Vg{_I{)Rb5Q!if6%F!l-Q(vUz<I}m*CqN8 zkwfX)B;Q}Zr%*p;GrfE`yA+xkLy7&1(t_h9x9QEVD-IMO9Bo7h3z5d2n*FrsMk-VP zy<7u1aOvhCx-#qu=vfZad8r_T(}d;kt1xcNf|*clONEjkFS)&h(iWeq_m2Da*>F2sK&H>?F(g6OaaB2=Ar z;QB))!&BR0^4tR&pVf%dFsRkOUWu3NBoP6ZT7omJ?dECRwps(r|1}RBW#p_!bZe!e z92GJSa9)c8MheRmE}s+pMKz%jk2dvNg8sVqpPd%9qWLdF*>L-wHFC~eJZZ5ev1hPi z4fF!N5GDm~$l|bU5m@)(Q@II*0YSbvJqcd03^sX2*2#bUQ+@HPMkhK)&pvy;aP+RG zK~e-AO~KR zE?k82X34!CLhTcx?)`}5{YWw!))Wgz#H<%!N5j~~pNR4kEjsKPGDn(h&vMXqCt7IQi;3FdvYM0`YeHf++vg+~sc(z(usn(6lg&1&9g% zLl~0A9?53sQmIA*l19nz)0sD+&mA?G&^oZZNaBN&dvZA&F0VzBHRS7Y{}vha&a&~@eEG!k=2-};1nQO`dlJ09wk+w>;%vk$uR;>$4k zgwqY6)KnVgLsY&`P2G@Nu};eX%n+!m=3_EEj)#Rh!7MC|w+kIgk_o)~z^1zUe^Q#6 zj+)`x`86g0y9_o3ltIitqmS)o>I4tl>Z|KTgB@Xziz_>-T?IJ>BBfb6jlIRvn*cVH z>ohn*K-h#c(vuVr3HD_&3Im8|tt%q`$T}uF<&enn4BlG8MCCg#_$M}OSgc>+y}j0q zOS{DLvbcUM7f_PRb?Gvg5_vnxayvEQmQ$H3SzId4%eH4G-^&_p&*i{~iu}JtL3RP- zdR8z$lPY~#N*3S-AnhHLjQ3=ql@mX$wI^;boF7pnYG94Z{D4KwA1mP+G^8hFK6D&t z`cC(-JU8ut7D}51CPwDt=a}Sw$V=<4f7x2H7zb4YREE0U#{w-s^E?(Oj+)^wY7sbq zk$_5}jl_Lw>qH917I0HG?>*&m8RUxS#W60QOBsdZ+J=5yYPy9`O13BRZvqAhT7NgM z1FU`HR8FckcWH}^(kX2&uHY21y{AzHdG1=^%x60V9Ws--KRWtCX7226yz=4DK3dGU z@>5KO;*4ZK&!bf*L^*mAki(aoxxh{0C)@ru&DBEY?KV&3N}mcXUh4 ziXuUMQsf`PqgwhLa2-c7vkJds3*t)c3b?v0dF^k& zZxz)-UVHr9#>Wn?e~XxvT7{ej`6+k&UyGvX{93}8^5DXz59~{x1)k1fA7)3ZZin_s zgpenAZ6Tv8QE9<(&%;sm&3rYdaVx}S&qZo5-40s~DqH@sIipHV28-i}U zK4+KGiVWxuoiGpQ@7)L&vu7GUo>bZH(GBkg20AdPJuUbcTCQmQ4L>CMXbsW`h>{JS+7sf)c+)20N-d4rzG_^(`Vh8 zRxlK{A3R$A!HXk=?U_s#ac3Ij9m$1lKv}H-ii8cRxVO7&r&TYsZ*TAOBAaFd2V$=P z=-cB-;=0-km_}1b(?)Q=N>)30Z^3#0XVd<&pf5_b>|h^KCzN7~U`1`mr$WoG3cM%Q zh|^WVIYi0w%?uOW=F6tEn|@oPT<6Y%NUgOVeq03+Py(g1dqBjYB42xjqM@@|6j&eP z-bw0CJ@P9L{=_t<2Tvtv3+GUiqoH1gT$uxf$E9pjX*ypq)3$@hJm30X?Jq%m3z58ygCr!bLqKjWGC)V_;1*3rTHX!tbOsMVdk92QBR${!k1l4 zu3q2HV2B}D`G`XAj~$s&@iZHQmWG(hY3&-&UM+xq69aH^>Iz;jl*=FkvSzTi1a^#S zj0aZ+xQ79~wsvqdCGuwJn@-n@U}Mt+mFnD8vqp~`|29a>f&pYqYqoCO~;@xS3|)tL`#G>ef* z>%Fk}b|v-?!h~fYlHMYHBx{-d1#IEQiAT{J0$$rfz3<}(%@^3QxoG`@S9o z&*TBrp4wnvS}w{;Jx_5jTjAQwDedDv#;NE$ zzmuzph5jYQ5?^fZjq8W6MacLr5S+DTBClt7D({o@KjpJ;6>WRBN6FsB8Dc*h*2NM7SHF_DJ%U)dGhjQCJue97QZxub1 z=Xol6s3;aff)Sp4v^<4I$S-?Q3}4!izHiSN7w{`0hg1SMX)T}X=&&X(_?k!77S^w( zLR<50`!mn7{BHN_)XiaUM0|YvvcfRQH&Wy%d_zSF<`3?AdOUAR%b0p!uGLUV1w~nv zy1p0ca52Cy%t2jDWNjDnK`8FqYl8<8__<%v2x+=wW7yt@9;VdV%^ z*!I0HKWQifT`uUW3`w4r4T`~64I6^3pU#U`_NPoX{D=8{-=7WiV8Xr;!8(_I(wG=f zAT}s&yS6MN;)UpN`u&Fi`tY-)+;>*=Jg4_p4kARc&uFaAu?Q5<`+Cew!LkaO6@)h& z#|Rq_mm+x5Y8N@UL`oioe8i%~H>PZRM~ z_+G>W4@>Cj02y3ixNJ?M(nknuNzBT>p~>t!eE=qQn;D1Oc-U4D^08xK>UYQK0gpRy zzl3jGgc%KdFLLM9ON<=ih{Jb1IRP;MI*3yuXG(23JJr!b-L-YJiQ7*bM>`08&Prr% zuc{`NefInps?pZYeO)+~Qv$z8sGYF`r|YYfe$gL)b>D_+n-InNamfd12|D)z{XAow zc12gqzo@p>z}iniWq|hh*~Og7tR-|K?%u0)uU$5o0eDuh4H-vp=76%fG{RN?$wn1I z^IL*7A_NI!P!x9ppiDW@_*nSyNgWqY*Qc4@JzzPz$;l3*8XrS7q5y%KdUV ziLU7Z)VuTcok@-`3C1e#<=dln&h^<(4HY6djAFrv$Q~5IkYn`j61;qRL5mf0&|&ob zlm=BUBjDU065-x+Gr?CP$B9enWM#va;-!&TtT4fQGxkhWdGSIgBV#rPe&AMhO3uf4Ud0X@Vhw+-VC=Iu#2WDZ6=A=R-tHQD@_!xhl z?XIgTQf2(Fy3l|X1hg}E955#1fMpcraLzck zk8;KC#2%8MfPH0v${cuLkTTNg4+)J|H!&?CJXU|7;k&W2S0o6dX^7xuczP|47SHe6aRON~YVN@#)<_1md<$t4l?!MFvn>OEn$ zT@uK*>>e8?U2%^&%IbVfs#uQ*skaj_xYrz`L#C5F(nH-!!UyqgsHHp6=K9|2<(n&N zE?*9UD#gdf%>nq*r6T8_RKCnlyAIX9H=g$pfD@`I^-?hISUYmZ4}2?Jn39=se8eku zg)N_a*CBnCqhuW@#kF+Bja1QGxg%w=3!s0|d;QXK(NVM0GNPTU?|5>tE2gV6 ze}iF|lk|wXVA8&Jl$~t3K!%n|V=`ckUAO(UD5sPRvbKWC(+MdpO+bsf2MXpvJ()l; z8KC)KclGUgj5v23l)(0V%9>`=X`ag62=dtr_(#* z;XdfZ&X1J2=>Tg7Z2P+b7@wWm^@?8fTX!98ib}A!^b{Aw&@m;B0RTeq_wx=&2p^(B z4Qe_xv~+m(@e*bkv1lsg1XEtjFN@PP-9b=v<12DtdQ%w&uR+sSjtZCDsM zC}H!$QXMzyLs&DxRj5K5ud)8^phXDcg0`=N<0mGW6AMDSdd_Fs-J0ml65Q`=Wa4kt z6u~T}FNzB7cT_3+)@gK=Sfcpn0Q1VDiz92i8dH3cUZ=&@Z!1xjN$Vot(U7b%z-0#x zw92{nC&?weHg3;QT;sRu`J6^TP^w|&efw?fMf%`+Zff$kJ8ycRlGYC;J^o8Y6{bXBJbXHI4T906HZPw?XBE zTrpl{8l3K1JWtecq#)(ZO#hdc@ily9ujjpYpV0NLLcm?@S87U=jFs(SWVi)&jnOXz z-%Hl8io=MxZCY-Pj>r&aoS!}yOExHqaOMP}n@Fl)pQ;bwuWr;=mVV>miD6NGMVWS0 z%^Ws`oKdwZT(*sJ>l+cnSbal#fE2z|Zc`8SVd2LJ$mcwv&o!u9tYRpLS3XiMVVret zU)8V}OLsgNBJmGG3= zjSEjO>Fj2;!+x*?{6mZP`C|{Sn|4}M8G~`Vp_-kQo!cxD`sn#`wmbSt<~U;8}jki z=HkiRmpAow{%JLJM>5V*2Idvw=rR~3{cU;%+kI;20K9lIJ!;Jv+ayB2`vVPLGWiBd z8wQe~MRsljV@)O!+Fg_*lpZpba`;keNf+mOi9xMSNougDzOfsbtsOF4UkLi>%2yCk zF%OlBT|({x#-zq_tDY?%3hJ%7kztY!3vr`hG;ia5Q}l^1BL*9BaKVN5)r}n8z+r;t z;AJ)<0%Hc8qZZkiK_WoC=5ml+A?bf-;+NN6RJlo?bnK3wpY5fz>a}2lX%fcmj`2I< zKGkyzJzu9Ba@-~_5RPWTot<}^zy&5UC)=SC3wrq+fR)C@xiloYqVDrjG*rt?#9VpG z<;Qlypz+6h;B+`<&{9TK8qJDTKGk!GBC$gcrn34BS9Z@=hp*6eSWXbwTjum< zuN!=owchE*!W@5c{&Y{lquSA1+EQ6j(Zjkz6bFY>r`ddYvDocoFEl6?fsaaAADg?_ zE=gPzJnM7DN`ydVh_5sLjF|7Nsqs**u2NA9saeSoNT(1VjwBX``_e}$b{OLx1|U5|y<`JvWdD=+~q6w3A0 zYktM^vqJpu_3|W4hZ5oXmz}{E3>aI7CSa206hB9JS)2xEiqW82k@+E24?46Gkn8Nd z<#}9Ac=q6&bK*KBg{#v{6v}?#v0JPKyr} z9O@~S*x4M7ewxOM#hngQs|D-|T-ih0cE0(b-I`Xw^$K5OB3pMoB#SqODFiY0Z7R`{(>NhVpz7m9?|?j*Bs##T~1kX`Po7 z%>1~w-jc-pc4A@IsscOTT(Bcm%m_G=x<$(|<)u7R48haHLI&FysPSnLn)qfq^!z-0+zAVh(H?E*R9YB2R`HMCpo*Q%1VI+qoa=lM)> zMGCT6yc*u@#5)V6eC-|60FmFPs;@fobAqrizolCqkEA4Dms!`@NI|e?E(W091Bh@| zodGb&mvRxObihT|Av*ItoixA8Pw(9h?Z1AtT z73$(lJP$8X$!Z0^@Ffg)bE-0>=IK79#re5hc$RU**m-!2v^g4c>a>B@UB9CIjS-tw zdQxRwA{6@_t%lY9)8DmeS}n+}2l^a|!N%Pbi3rB{b9ZO~M&BpJexU5!PFhpZ55*v) zotk-9MR8o=q#td)h3YD_92wXrfvBymB2;N`eV7427I?utl4EiRJSzkQnk)4@g@{&+ z=vIuNtA(RSk*%sEYWbdzx^AMlq5DYFg>UpqQ96@z<=~*O z4er(st1+S%KW^$*ajasQLMv(r>rj02j-5~p3ZzChA%TfO)f0Ex&?jQXiB@VrWCV-q zSVo~OlH!ZVxmCcnmqiP_kykC2yB{uKIcc~Lu4cuy7c~=cPz*Jdd^c9Wx7vSfwG>Rn zp*C0+TM>uJxK2A9blxM|SjjJ&ty8zUsQc>EK;hTrWz!>&stt_eIW$>vH|_O3j`Y?Q zzB)9kT4-7KpGO)xA7M>p(8(>PV~WHFc%N}hJdRrT&73(?xy9Cy33*g#{wB%(^qIa!0I3Rj`aNO-v-4pYANk}g`_O)<3DK5nmNKR9``(206$|&`#LC}rStZ- z_zup?a+^sZfzwWSZNa)T=Iu0E=nFdzP@ON#cXed#ycG$>v(Q>q-Bebp+=Z5P2I{z0 zl4QZ}Z9;o*AEPZEPKZDrsfs|@>PNMfCep@NSPyzst(=4|OW{eVKF^hMhS&rT2d1py z99>0*24R30u@E0k*~GWBALjPleCy3__60aS4Bg2_g0Y@wJ()f2hu3-(cR%?V*nYb{ z^Zh;$9^YyJ=qS_maEVA#bu29>pO7v-b$#TW!p|c(_KMg*p#nB^Aq*golWly1YWk8A zSaO!r0ua}^J9ftHxs9q?UsNrJoF;kM3*WdcF0RXV`SZZpD$Br{LVJWZpD!I3A=C7W zRtZ+MR5NKQ=wKivi+AR+e}h)+BACn^ekS$reO(jif_FcGKwqa56HOp)oj>4eYM$tG zK4}0#QYqwOI^x3wAc(SpLUX5hfkG7qcwGRw&^kzy$Ci)a7U#_TyQxtNJ&6t5Cg%5c zbKsR)^pD?Og^0SWVrVhc!nZI#cW#2=c4}1HV+UgGI9VulKjDB_GeTu~Qy?p~liGEA zzNU>==X-Z8&M!Uw1rF)Be=g*-7l5j`*rpbGGRrSLhg6XZp_?`tTIkQ-|EH)zu7?82 zX^C}OO)@|xHP=}^z?cUoR;*v-sjn8QrfK3>?F;cI-?ryZQ{*tK9p^N*k(6|AuPdp{ z9ghw4lOFhUN5Jb(gF9c?@oS$r|<=89@0Ix&v|_i`T7^CAQv#5CWb`>xDOu1{M5RHh`yKt1}G zJF$3#a84~R=Nai>{H+Uu%Bf1#I}-0c<%6**Lu0o^*OcKwi$^y4%|zW_h(2c=;>J{6 zKZT@X)ZmMol^LKJ@1xPyh%aFV&`=)8cELcElu2kMw<=NfmG5LQs&x?_pBk5R(^M0A zzgEm$Co;TKCw&9!bh);YT05TTb=mlzLow&+ahY#}YM$fj?gtjjIO$~U%IOrNoyq0U za~G^)YA(iQha=|U+d@`r+0;79B*~2!*hNz;o&S~v`N9FjJ?zVlor%;Cx{=T30FlGR zg)KCI!Ii3aeo)2G-u2{4UAySQs+)c&o8<^w71I1%1r91BE0@87Ou-@FNpz`*?4q5X z8bgYoxbV}0BGgfdd)||bV4A_@!A0-ivRVb%R7L{{wZonVF0Fc70YZmMBQ*F2TKVVsk-nf-D z8~O`lF_5b1KF|6;gNr1_pZfE(7IIrb<9H~u$HAiOp%zyfe#;nzzKV5b_}c}rQy#)W zxz*4y!luDqgABe`_LJM)W20sc2-o=tMa0eCA);X`EpZYhU}j{CTOX#>PyENskT7 z;=Jp6eRgAl@@C^z2Cu5AlF#lm;j$_<-0BlDdxSvu=pY)kGsS7AvjPlotlg zd5Z*xG44i_Na7`8lhgJvpq!FZc5Dk;<$83V1KK7O0$fC@ErMZfk`hv@nc`tXj*z&b zuyqWZw}_gMk9&O8d4cYle_Q~t6Tpw@uS}uWe>->Y_3p2ITU+aV9-RIj+&HPdP2#9t37Op|bX^*Ee-KI7c^GO@!o?)xor9cK2&wvxzIykLjV-AYIfeG1b$!$XIy>3ul&q^~* za4qNRV1+QfPNdg}UwtwG2Gqz>YK`qi5x)s|cbyl>cwVP{9Bw_p!W_k0%S8k3Jos-8 zkH7E%4wdBW?BWi{RQ1ZTkpe5&?*p5wB3Zz>qw!D;5uzBxdEZCawTlrTZynk1F+%)Tdqyhe>!(iM66eU$#gRiKrUB&9EVNiIowv#j`ccOfJ|`2{1*GWZ zsO2SU-4IyVmLT;pvxQ&UoC41a-K_$hp3^I=XBRr#0PRg(FIv51aFL>1t$hTf9^|Rh z*F;E26h^tq3sD%V!vP`b1iz?-*$d@_z&S}~oIS{*_f;nM(hjtOO?#aI7bKLTGp*3fsUx!b4pR3v1mmKR#LU|!pwqU z!_nn8>nYQp$q|&WGM|=c)9DT50k{mfHS1e{5N-P@o1u+Av29KWN7Q=zVnx0IROjb1 zbK_)E26b@jRuF$s#VUV&o2y~oy}7t>3_k}Hj|{xGz1$u!KMi%x4#a$^4QVv^2A7|L zRX#KK_d*G{oK(b8QX8Rxb+?t}akVEaChcQ{L%ev^P#O=%&*T`!s@NGTSI(=^{j>@` zirc7UB&Yl8pHe^bJRW8b-EaQ3>g();T2m0NxI_TD|h6cImDq6%$W zH4T7MuHCo`*)W{{HMA0Y@uqT8Mq1@cP^dow&3VCqY4Q#8Th8&-H>M@%U&=$3n3!^v z9|wxYaXLVxJzr?C*;Cm4Uuo5pJCXqo* z>jNt_#^9OKP!?kv7zlYfe*aUc^nhPSKu%nEOC6(%qUnz)58)0sTA0Yj(_G} zLg2Nngm8lZU**&uXg_vyPLnLR;4|=~anYimOEs(R3(4Q#l1&J3$`GzEyere!;2sSFA>!UFs2YN_Z!dyVYu?K4YSPNQ;*(Vh{UG>zv za%7d6xJr9iT-39&$FP6(mhh71MRz_7h;K}!o%)^)sS*nhl2_M>0t-WVFP)(OI03B< zDW1|LI=4eUh+`LO8izqa>`&$iHIZ6NbF%L4z)&Yg4$40<1JqREXSTEQs2{N>4Kj&4h zDdqR=zd;_LVE(X~Jd){8qZ;0~8R(EFE#?PWC6ycIqHPVpqIdEq2#LL!|M5yEVz)q|j5jUt1Mb3mJ9|==KLhL_`3b`TO-vH%5{B|5}3A}Y|-And#TuK04>e-t@ut|bN1x(dVPe-ycd9B3c+ zfK}5;5Rf}ryB}`oh3cirrEy@6%O~}s!WO~{xrvC_U(R$IGQc zmgTojQX!Zv&|@g88usB0Z!m|;=XfqEY3OUi7zi$ls zix_)51wjazr`G7ra_F+$5t(rlBj2Izp)t~D#ImDo?us5s3(gltbz7-#IH(-rXAXWU zC(1U$vi7lyL@?XTKvelNK}70)#yue!#ZdM7gquQ%*I?v3BiKjNzX zYg^WL@llsJS@5d-TMCMbjIz~*N@324#+%LUo3r0Ar?Jyfa0@iys_Gt~i3DO9L!mDd zG2#m!%+ocJ9?aMT(} zOo0=fo{v$>O=Yk94iaPRNv+`?DdiZ5H7 z-`=osPdwO?j;Pn^tHc;2wBSQh)=80HyBTG$IiYGMoG#xSguOC|3ol>r6UqAc2 zymliOcF2-|R-6=G+lG0?8di_4)Xp3xdgQI4cDm8>LldiG(Uu1Qb_!;O!}k;VYi`-g zZ8ooEbyk;6R0-E^baN1vy&)~hM+qqzT(eg2V%Eta@R@&PeA`%WkKF=Q+(HOUm>sT^ zjhzOUEQ$8HcKp~X95~oAtd7}1#3C{t+(9KJ#0l-c$=n7~Ln4{SzJsnsc?0o8m61&` zoF|pZ)0ZDpnub_1C=i2=Bm)E_=`zE(c61e96IAip!<`(J_JUqk-m}{_uW>bAR?d)o z63%A7tvwwqxb+{Ygk87-)^bPsvUK>2&JQK<(67Ot^NEfKn*fT$6D}Tf(v|7;NL;x3_a^vEd-oct_0v-ao zmh;BrQNmq8DqC9e76uh0o_O-pA4=gVJsXumSOevSRofh2YokuK_Y}ZBB;~%qXez#n zs!t>O?C#L?O;I7V{+4!T>LJ+7*?|9z=K+&q7T1_W17|GY;Gle_Q@ud3sJ1JOPmyy) zNV-IzRP1V7_x+rnOOEGwH0;Lidg0b|^U*cOVfDewS0<)gIFKBu0)z0@?ME;N)5X%j z3Hhbpul&k$bloJmWBCj#m!L@6Oi!APg3Uq7`3pPrYbW$ntu2bWn+rWcu}sU+K&$-% zfKKbD6<2Xm-~8||u!(X+P17J7nyM;|r86Bm6VDgC2pp!b3gNEn6n(4Y3j0wz5v8P_ zz)@XhFUEB`XAz|qIyu)hP7>N5#{kIveQ${!j4zzlxv~-6Ac0gmc-UeyQOA=3IhY&6 z7YsDnDuF`kmD^O$(y6*9(UkE$vTe0VnBSsNgU04>FOOOG65(td+Fn-&8upeS*RDYQ z$Y1=dp9at6guP1v24#_0WndzjfEFqz7PjpTyMP|4z6gNXLK5TDU^;R4LfypIxMwy? zZAQK1%{%#({O{*{?X~!s`t=yH*QyGn^A6fD zq1=dkUS^XZLPL)~%6D=ps!1yqtqDqiaVA8s~->P;Z4D8*2-# zP8*ZFPqd0!ngn9@+M!(K?N zPNMF{224&x4wf3hPamb2tBe8U?4D^_XnIC(KU5*hat053NLnhc#;g(NtSe1LiQ~*F z6Ul!a`9=6_#6|&pUn+m(wzQqvZmChDDo6(2w>rh|iLTnWI<2`=W3X7guy=3j?XGGk z5D3vaRYq}Kqj|LE48F@bN(evq5ZHI|Ed5F$aunN65*Aa*DlHIoJMw$=D7KC6ZkH#) ztukX0z>TDlb%3C5XrDCp*!eiGz+^HX%_ArbC74r^g}zQK-eF4l7C5@+Wmgwmo+BHF zd*$uldGoy;SFbg0^em(AB4oIbt=;l-&SI?#Y{dwNKN+SAcVImvN$9`xT+nl~8^m=%7!t8-PHo$d52&9~_qu!hgLQ&;!`mWzJ>)6ewql)hn zPMpV<_4Q&)nvG)7yoL$7^)J=?lR{2jh+u1oeF_zXc)0*O+K5{UM zhFHBnv=w^9^QH$8Y=7_DJdf<>0no>wprF5Te4$BssIDMGX!vCa!}zt1D*f-hu^_6w zy-3BI933*R7$X7|Od*NTRa&ibgU4~gM(5RM#Q39y1KR?7aB9kmA$#ayPYk+vhL@gk z9>lUV*`t*^hTxgZ(dBMU6y5NUkX@)Fhw#V!gTMwgVV#fLC|pW+9fkDv%6U(r*Dpm} zpjT6)mp9O4r`^5Q4N3On9w-~b9?vm)OK+=e0xlVPh-ZLES(iuSYNNX z?S3_Q;$?&@Y`pt&Iq&%kN7>ooV~lVeYxU{)%v*{(q zdH1sEA?KTimd6$536gOI{5IBZ!zy6Lhz@H?WYuAw+5-=|PR!Y-vc9iz|I+L@WGzK# zR{Mh0s$^=<=R36%o7*{={7&q&{VI@&@yfb(fU|lLTEaM`b}j6Cqj{q%jl)8R3tv(w z%VG^oaTQiG<<>#=*2Q8Vx(JkIL$8`c8#$I7?Xy0r)LqyJI&7G{zL)3Um0Ai{f=P^2 zW}vrdrYMfqFfsy&j3pgGz-jl>nl+ajDE^GZRpVWU!W@A94x={`;!dy501|rdx{){? zKj(ixFs9V+Z#*D5D;!NZct2}au*n=+n_IzD(%WvN{|>Wnv+l8#D%VBrxVbp_{DVlU z^M|ic3+2A0Yl6{0zs8Nr(TpFv*eF=MB}%*pJaw@+yJy{T%=>5op0L6b+EX-Wv+g)_ z($F#x!aRFo>9IShEUV=MbBs2)sdn79yR3m9`@`#M-`Z}tZa+PA7xI;q3&WB@xJYFz zh;zJ^&XHbkV$9oVK1nYMoGx}XjPx#@;h^Wgn@LlqrmQbuhW#m*UgeiaAuZ#Wr-{PW zzMntuYzFTYwrVmRpvTn8{`9=B29^DkKt>RGypl^I$OxMuFu+;z$VP^p5`{m$!G_nK zs~4O~4(2o90HmTzeTpSNR%J}B)c68ly+OBC8mA1w7|iO65UYwW$e&M@@?^vtPX?hx z(5jDm$A6h)a-Q)~NB{QYop$4~W{8BpSjd2@p?fbO&ENY~Ku6FIj#?${t3Xbf@7C$4 z{T=MU4|mG_wx>JXTCXEq4PU_htQlTR|9BLUnEY|d%Hr#4+NbLUmp8T#2(NH}YUM)@*hJIpl52J1RltEuw>Z4*K32cwQKHS=Z zDTjG{6+xL1HF<5a6lik;7u3$F4#($wV^&L2{_}h2a*P1gzWKs0sWx=RK8iGo*EE0y zd`Vny&&RnAY%vCEYU{=G9dAdr-?1I)7*YG=X;pXMR9|P3;nwP^I3kGb48ews@G__B{};(NHpw9RvpLUZZXzdND!PSm$NJRaiF7U!3RLx= zno*P{Q=y{f8fpn2e(GYP*D)Gx+_1A?S3K*%liCyvcE~bm(_DGI>B#E#BzS{Cu%3Fu z?Iv1LJh8aCq|D{DX}Jj|ZHKd^V&h?1eV++Xm8pjU)u%w;NW>6Q-o2h!$Kxye$y{jE z#^vW?oCJ)@0cGAJnS(c|ql>J~o=x9=q9&f$w_Sga0x=Z^2;3lj9qoeQ;ui~f4?ETX}JRkdyzI)htSC5-C?~5l!8b==27oZ~Oa>>L;(XAU^ zqi*r5n?HIh0p+7~bkIHWy_0c<#>Yj`HF@<{N%ir^D?)kmVr$nU!8WvIso1jY&o5#H5JLqZ%a(Q66YdK2+LPvA$ z6*r#l?4}DQcyKu4hif|a*-xu_TUcRU9ebW>l>hW9s=zDEwjYqC$1K!0!?Dc%&|qfghG>z7NFaJuz3F zkGYca1X5XZd*E8w0bjx>*aR|&xm%Q0OH1?)E2)?6+hWbF6R; zKn0Li${Yw#HgRpQFa{fCyGOF`U;5IVTc3VmEFJY=t@lWdEHV~(3@w882#!bg4)wkFx*f{tNK899-)fg-*`IjsrULjvN@@h zJMSm3cxZbp4$VyyP42t_3sUw6v^MrIYdb4g&Csj}Qetf9x8Y8Il#uqe#33w+#_0hxtYWLDhIwQ1Hq z6#l(%h-aNYq;@w;B(RU@d;R@A5{Jqcnwv_*npws#bxvE*MapQm)`j24x@0W-@UA!S zirc+T#^yNu@%ZBPvZ*t;DKu=C-pq17WU!yY*gERS_C4&0zv&#fG&6JN#7on@@NVOn@XcaS*w)$=tIy_(9zh>{uDaN!sWd>n#i=YXnNyTx zD9|OHFN)cM%#E7Y~sXO#(Kdg@teV!sV z%?H0viA@c{_6Osb{FET*ezQc9F=Yt%`dXK$d{KgUwg~O19K`5trdU$mJ07Q0Qm662 z`)t|{{6Q(=`zYZ$-IvJRv>xj8A4O!IecKK^hGr27t~@7?de^vY{v zX4L!!d}Q0^_Gn`!SM*@%jJhz8YKbImt|N?vB0!6D1tA(u<~{gWgm_Vjwprt$Yun=x zz^pts-;sH-fRp{x0SP)xWh*rKIg~g+vN??S;}Z?K44OoH16HWY+GovBpvJK7n*InR zb4AE=kSZwvE9rA1Njg*+2pIs0wvTK8vZUSDKw8uQ$&Ssy%-=^qD|0pxZ7wGET9UD! z@><&KWwUvx(fWttXUt}@{hm}BDv71uGWXW85S8MCeM#8Jy~H5xUZ<~dOfncT$Gy3p z^ZRq|`RlE(oqte~?=-)soYdcY8e@RS((X`aIsWk6F?)7%jco7Q5}p^q^dNNPW8)l zAbSNwZDOUBKnFX>R$GBtF-BSZp9RPbh8=Uv?CYL;?yX10kEm)m>zX5Hzw*e( z0SeM)`p~l!rrACD-p=~NoO3gY!Y}eUsjj{{9HUE8iGdO=qNnwxl$55wS~0gkw4sRV zBy7n{(c=|e$xK$_W4_0+cxY>P3_?v4RcL_~q(+>R->x?i0j(t+H%GA02WWx~G)+Ax zD#S-+V(iT_>wM9DPAVz0W@5<{!qn?h6K`w|CiAExVw57uq&x{gjD{tAnUtw2l}}=6 zCy49Qs9*i&bEkH08m_gM#5v}vl3h3u-yio-zxa4KSwIJUfF0?pnyc_SpILRdC*q^) zX0-fZ@!~ZPOmCi4{L=Xc&#Ic}oA~iF>t|A!{)K{c{b0YR^B+8FO1vX?cQ&0r1S>HV^ZJm zb}2Ar05m1GtnW=5GR1nO@(?tYF!7z6*oY*hF|z?o!SVxP%$iz)I<34Z9*<(72QEGeaQ*qKS8e&fNe$zKLk^o!)zDn^^(C)voJv9Z#9*n??>=%u zLwtMYr>Ru#%wnk&hy(+v(Zd@$+%7>@-E)Ikf<6kyXhh69%QFyAg(K#RC3mgtYtIxU zmQ>P<>_6QW2d|%Vt`7M!9^l+v)1*ii%|NX4A=#);K7(Ig_Qaq`_~K&A zRNUNsYz;|w%u%(6@71r3;!>_rZfazKjVj_g`IGXq!F?{73v;ls`dml-vMHsAF)gzs zLx`1Y8S&6JKKBrHVE5So>0R+F{;+)0nj80Ro|2h5ah$)gv3B242X3CZ@|CS8QkXtU zcYA9fV0zi(CpARdGCxhGGG`PdDH!zma$}l?Z}oeztVzvY%WPb>2zswiHY26cXkDvcfh#*2u?C zO-j@vb{RnR5~MPSY6&b;NK#E?rSkNd1xXn;i?ydNQPg5^TG^5%8eBHBC>V{P+4(U2 z2=Imcrg`brGm42bsgQ$FA!FjpjM}+ru>(=ZJ`;A?LBD_cF1P|Vc5Jz3O5+5%4yxg> z+55rp5w%BeYwMcZy)M0+!t^n^>v9Uy<-7ZO=l$XMGxGVu#i?xeAbR1u!vTMG)Ue^( zs>8uFW_xA1qya(DpruZop*FJ6hH~p|=~xd>S&tbeGDW{!A|-#ywfe_@_-|J8l8#~o z=!m7j6R0=WZ|c1^xe1YpHC9FJJb5*=NNgikCTN<#X>s%I)Te9(FX!HypvggxnBYou z*y6FUf+1HZD#{*fPjR*eQ6PHE6)YhJ+2#j^FlZ8PS`mR8yKjkuDnnE0okAfGW1GW9 zJhUID192eg*w6v#A_~&zmMh2CjDbQ<3Qim~IzDDZlh`)8W7e>JB8TP@#qKly-_ct; z*QFM;EbhW4EU5C@cBE3je$~8V0}Y-zf}b3lE#_yGVUB$fQaSBsU0O^k zHBFmfocW-pm~bFW>CiX`TudLvd!%(2iiXoC5^%!dHf zZAGOVtf-t!jG1C~-0e?dgp6OdmcivH$3!s(;{; z+%bIKxxfBmQA(Aflz@`kD<-M09VRZ)j8{*|B}aUtT`mQPlu8Y?b=lggaJ)Jk$tsFd zR_hx@^w+7}B&d!M3^?jYHhNvk+8Fj&JRNC|ChDo8@)wIGS93$8n+UAFQdX2tE-!n; zqR^4ml1fXLuNbEn*(dXA8I;GX7Q1u(Ld%9t5@OT8v%DmVl+QZWD>SX@6YSjcGPj>W z5%d|~iM1q3i#5m=Fw4YveLd5!)u3WcC;kGWi;o?qL~hK!08FI{W;b3>xM^LkjJc3? zr7iH8Df}DKzjes#Qr6?K7=9N%aUkm0XVT7{a@$J}iPx{+xS{2)3H4+0#jIS-9;*t4 zigbyy`v_I3B#Fs%+AEbxrlz{G0yF|1w1r0(5t!h`|Tyas}IzT7P78-yZsQVcw1Lhows{j zQsSFxjI*SzE1=ZKrFJ_PmGmuM+#=4XDr3DPRV+eDaqCMZ$=wx;SEaJq5ZzsN6j!flC z#9Cx;K*Ll$YE`1d7Nup-w7Tc|kB%j*V1_1l2tqg|s&;NN#YH*5%7m0DT*8gC;`ir4 zoGW1*Q>{C7a~0r50lzt1p)?xNetZOdbUt(G>5pI`55pRL`g8JmWj5T!4n!UMOxql| zv>WFB@q5dbt-msv&Yl=5h3b4B-%eFuh#I&MhH9)+P(Z0(dM<60i>TCpssL59??HEtUumtBxdazjRJbDoL$m z^?w&E$!f5g&B~ivy5is&HkK=IBBl`|s!LklTEsNvg^}B?SQBb$e`gyjEmxnW;(KBT zQkHBol%UMjPsvc8`8RhMEEt@yAGu4P%Eay(cNLc6ySHCMaC3Df?W- zd;yxOsx^S-A)C!^n?HYk%z>z5p9hd;=FEg&E`&e6w0!A?>$kOZOlb(#xiL=KSBR?M z#EVK)Vw=jvi-{uvW2B;{N)5NZAeG$Py1T04sZ>Y_2N2KpbW7p?*8aQwK5GK&nJX8) zampPB{V9{pU)qy&MXCb6WWG@HkRq5yDzPGaHa+s#3Du_ZCf2>4a1FWyt1E8fv;*`G z%}OA(qSRDJ%Dd-aE_WhavAs!o66@rUTv5JE%4XyxN~pz9tHyTgP*V-cGIr{hl(XW} z8e{W69HvfJ%73!j=Rk{z7K#PfXLwjy#{?6R<^K-k_tt@^V?z<9i($V%o*y5ZKJAka z*UZoL6ziMoMwI#jQ%o2s1=pf>ampg7UF$_{c#En~V~JFtGa8MgGZ~+v4)fy1*t+a5 zUVHexCwn{oGgmFT{VTsYU{*YzIl?81zPwcOlrqqf$rf2s=_q#1FWVLa4;I$arZKx;V0(zAhVAuEeeEL)}IiRk*15w9@v?_&ac&PfgKfbta zTh})iy|?;;Vor|Kg=)y~y84PGPRhh{AQ&-F&ArDfuR9(MbjK5cSTYg7QASjWX2pVQ zL3(@st{3ip|JA;}w?tR|l2EPZxt?@-A}N6<)n4S2N(Zob=-M_4(O|@sE!SOou9V3N zO~C?4)=QI*o7$^Zn@l|+PluN8Wm(R=_|}tLfA~J{pT9k6yB9 z{n;O_T|QHkMQ?Q|QVIuy1yrb!V5rEHDutvElS=7a&YeuBJ*jNQn@Fd8N-{|h(qd8k zsMu3{?3rJ`^T4jWr#FAKGV`Th&bpKcBPF)DZCulKTs)SToQda#Ww+*Q^M!(k=T9)`&*##GD1~cFRUov?Be-6; z>wC}kOZ&Z-u3xhHq+jiSYryaNUS^B*B8#7vN~MEYe73bK2KAH2>S{?(&}(DxO&sLL zKAPIzvEi3CVbOB;9m*%cBlhzz>6JqSxa>BsT#32p-U3iF^tdu6OU%=h-RG4o;ll?+ ze?R6-KInZ<^@#zw_l5mP`PahpCglq-eOOT0fJvoXF1vD|zncz39orj$x^>PN_&eaj z8HMW?KcE2JiuXVI_>=Jzo=t=*pl#`*(rDP_@#@)VQ+|XS z_{|U85wuJ-E5?^ClVFyM&z*oK2P&|{G|etL;j->LK+RfLk7-(Bsis;{BAdbm<=K1L z$kelbp@i5bqGWDgc1}y&a4K0T<}bj+hOqJ)T0Hb+2cnKS)_1tB8SK}5{@TS`b!8^Y z$6!WFDY9?v0dFW`8kWe~-<3gA2c)rXYBFYLbF2GCOc@_#Z6_IYvF7yd$Pnd z!2~)3y6h0L%=abbvhVuyxeoiL_$bkzPb^^r9k5K5TF%3GE*_fA4ooL|2cnKSHb6!p zdH^fp7v%!Dd|?iv<>f~PKn1h=&J7JEWle{TaZRSC#GFbc7Wdo^ngEvgChwYCp~nN9 zbN|i7_FN*!)Q6N;tu`f5#9BXU4hJy65@3@7-z^~lzWhm5m*$uzn?DNpSST>Sagv?txRRtO(Seu_#DS<|jt!I%GDXJzZ|Krf3Z8xF1jtDQHpB|BJynF(coN#9 zd2o4rAbQ*ss`Qq^Rj+jfV{Rov%wy?g6D_$+euZR{RcQi%$vp=sU+2fUS5~Ta63aqcPdCV-TLY^{ zQLH$!ig(Y=&@{X6R*xRQoIM8}bY{SoPX|IwsI;Vmeh6a6mk}9GoRhzkd4)TQpxLqy?(*68_fL16jz^E!OjH&j) zoH12OQYw>|U{zNZHuhwpgFe44mZwnlDCJV9R51i#L20=xvlTAMW9H}JbVSN1v zl{+ZvUbW>~UY1mMc$%VGV7^{`?6 zdg!4LWriS~IB^o}J98$CYHrrmsTHn4bnofH?&JJF2xEjQ(d3+;y8l%gctuU|PHPCl z^u~}5)lJbXtfpYy7R$iqo-Rm9M1!hV>7p-aO*!nK$q(_gf{@sjFPXdD6PcJ|rPi1# zpYV|_wWhMn0aSC(ZIvppVWfPVl$bvaAD$>mN>T|8M=BKx`S%Cwd*ndWvCk7U=TZcn zM+tKfy*rgEzW@(QtJ-Ya)&}b-EH|v93k4?vqIuLP@cVoa2n6)wHa0dY(_OS|-2zLO zEQamdw?i`p>BLEsVe;fjFp1t`Y}7Qtw+2zK*9*f(jDX?XYa^Vyy1Uf|(`uy%yrP#+6E=;jxR~jO<~3>&h_io>FWs6Q534|cq>;L z!?aslTa{(m(j`#e&_E#=g6f(Y3e_p}In7X4S8sOxIk?u>*DDJ%eEm2D1IAPpcb~p4 zy8m9c8<=u#2)JS1ggUxjuN*U3C@HT0n)U>&?@7bfuC%67JxbC_ne(YqA-zp~C=i)T zAXz|Y$)4-bRDFDIUt-g|**s3(>dF(-6eTwGvC33eB^X%~&}ok4O)!AdfjAI#?6VBb ztLV)s6e3e8O@<4qK_#_`E;%YpbkpB{t8z&p0&Uo^Vaj?(M~4DdRGKvuis+7S-MWMABSa7R!XYqa%G5GwnweS-)kGpm!P*V6Vu6Cb z1a6O8QK|vIU;k`DmjE+{hhd))5p}33-M+Lf4qKvWSl5}PfQC zb2UVKsg!IfyOKG;+Gg;H)|1IPTB&U0lFd{iV3SC)PV0=fQjvbv8s#CJyJ;|bh?@RJ zgb?TIb8N4(rOQ{0r8gH-ILx89v*>M2Z?1Wks*`r=W-nW|RDow(TU*&NM^LxAy1H5c z;+8F2Y+o1E=ZqOMlw(JuF$HEkB+*8W9H|^f$+TxO3RH2jG`z)&TyekK+f51=AvtOC zWJTG|nzesLsM=YUzD7^92a1Iv6tI}+;*w3awWXGkNW7Yrx$+~~)C<*4l~$@9Er+IcUCw9Vs(BOOh=~n~3SGW* z$(jo)XT!8zp7rM81F9 zUH>UlroiMWQ}nPwUkueTey$`{tO&w<4nZDP)Ulw25OkPo3vNs0id3z}V0C8-T6@y4 zg@P5_Y6XDcqE0Ja%upq!PWLk37LU)!mnEzC@$h^ofge6v8JYm*@~Kif1`nM(2O>VV z^10WoS^ePr`SZ_nAnMrX9hyo!6S+e#c2u42-duBj8zvTBd-YXVyLJt9b#;{;d*Z~2 z3Q({V27!a>(C72%uDTs05vZ6|XJfKasq#R^iDsnZYE0lJP(@0RkkK0hB|=z9m3_+=9$8w=6)A;~)s;W*`UU zG;v@%v0=l@j7OVg(bmGH+1>2D$=TWixtGj;n|JLVp zxwaIlNwwnluBR*P)>?%v6>IGNdW|(T0;zLY2kWqV`&c}a(%d$zq_+iLqszZ-dcAQG zyaCW;rk^9d8vDghe~tzrVv>mxfGzoYW%<>hV0Y z0k9}n!th|6?0~8w#EgBM8W&=oHd+oa{OwTn!b;ook3#(Kr zytE3*D#TTNJ`eMGef)x;8G$N6A&&8v1kzjS5?jh|vc+75m9dC55?sSh9tO~c*mhT4 zr{&i0WkXV^*VA?al(wW#W`}vQ~^4D3U3umcV{QfsR&0axN+4B(3 z{0VKcs69IL7_cVmdQrd}`v;{AHH`bLlr7xGz>lw|x#0u;TcxlFR>fVUvUP%S@T2Yi-_L#a(|)v|^5J zpft}d)eND5UT=43ny(MNR-OHLVT4`1betcP8`po!{^IJ@p=bGhRuEP8tm2tJr0p`| znP9}8VYwSXAK_>DyNF2wFg~w`gYnZ(KjmQk=%bHzfDFJy-#dT_$O5=&A@_fA+J#{9Of6WrqQr z|4cW3OdF49ZUf>spf-1f=z#wNNL~UeK(~1JE_clVy7%6DZ`bz;s3Q3TaK8Wk`~5_b zl>x9&st6Alv;Weq$GHeFBf|`+0=lJAiNn&aqzX{Q>*Be0Y2ODW%D#2x41e83Ji!%f z+*AQDC=4KzRj35O8~|J(Fasb&VATwt(eTiA5eW79b#83>is>2|q#4yQwFwb~BA zW|I`ueyGhsAhm_5FhB`F^?2MIc-OA|7rS-qre!k8Y$-sMKxS5uFcjv)WUy)O1^}x7cq8s`qkLb~{~WUltGo za0&O{wFOm!I_0Sg@L zj?Z2u2>b^MzuSlncDr1aq4kkYsGig57^>GBLx2Sy+b^|gi_Jlgk)dP>Q0;W|_@-2; z_wL=>^;ki9!lf=0iUhP}TlYT}i?d_Lj&hJ9>0@;N5k3GECHy2*0V^bjpgi$6aLmmL z*hen-%*-^0YkF;srEOxbczkMVnjNKmK-PYiLv?Z>P|eDf$5r(ZfY$AHhHz2!dc1t! zcYKawte_mR_nYMsyPhuTt*hB8t7{IfRy8PAhrR?$uU=(;es+@m>9=3v7pZ$+f3eaxr{{Ab7Dtj96^oz{{;T8&ozegwCzZoIQhiPC<9T5Nvg+qXO zM3o&xh~nz+lMtmXNMGuI866#)qZ2enCxXKaQRBCcTz>9WV(um$X}3F~ezCK6NbdE% zJ*rKk$(qVqtxD>%%YvaGfoD`7S7$P)Ex7#v1B(8UX@3-`B1wcSIDlq^A3z5{;`kw? z0Ql{-qe{B&h>yZP`|PuU`*7yW8D7DFFoSU)%=pM(*IohozYk=V-RvIF-4^He8~ zOmdffVse82A0<(PKx+O!W&jimB`na_Ycv|<)z|W2yinpehUh_X^cx z$BuD#9*PwT)Cfnj`!CyD?cm2<^odD&?ieqp!akVYe>?|}m1Ry);84K0h@eUVzh{>K zgZq#DJ%8Z>n@CM;zj#_LUt)T^g5^~Rtn?nxB|1c)A42wDs#X3wba6#|nLM2sLA0bG zs_Zbj{9d6>leDF1i;_!toKC)3QX1#zq?}5nCISRi&%hVcvt-B1FxGxMi!==AA#GP?*O(T`t4gNaDN$RC(s#>)}(T zWI2_w@E`jJh~Z)aP=EgU=exT9Qi0+YRRMq>`uSxC)S%d>QK_Cdae}?|)?2%VAn<$) zUO~lzOqL-80g!_+aQ_ho&=Y3I*fDxPxJ8ITdjzPWx}#Jq(%;xb#fOG?dW|G#x6}EP zH{N*T?fv+UD~Kw4)=&jWu#Q8VHq_9JH=E4~I>8ni&E`Boa-Lk{=ty$J?eqH`W{B!H z`VRnKm?x-$1U(mrDPop=m1?6HGizymiH=Sc?Iclmw4`qh84ci(+y*S~}J^fI~h02&$v%=M(^=f3jFEB#haBY**4z!v+9 zn66Z{#xa5NIktuT;3I#Xgu@WwHM#^q-rbW2uQr9=@@ID5@Y(Cg=0|x(FSV%N57Q=H|N>&i~H$ z6hxIN(}C&~3UvftA_Nf5M>?rbRVtO4U@$ZvPb9+RmU?!mRFeUAGUM+em%7X2s2vVM zE5iv6Hy^d1Jl;0I@EUN55juEMl?szdDnJ!biIO_Q1;Gla060P!cpNpV=%{+tCUc;jUl2c#)kucaEVpG?UHgQ~phA z)5+cRfKbgtT0UPKg2#Z8rXkUrk3rKCqNGSyH)@qXq+hMkRz?&?0JWzes!Z8Vl^PZ5 zbW+4qk@24^6bf^sYG%XHNR(WEHz_8kEp?14H4-9K=Hiowpi*(d+o{xIAmarR=Pq4BdO4PtK(~ou9PDEPqg{=vO#EQp>HYinxC<`F z{^9w9)U9;?rBXFRRd>^0<$eF>&YkB9xKgd~WSh2q!iXLx4u|;XvbkA@o6eVz=75qD zqQoX4+NJ|mE|;ro>GUrrCnx@$p1MI>T|gAKO#*3CK~$MCd#FMZjtQ8e$~#Uc^Ed%@ zrrmBY_yd8-@l+~6pl~~#t|6;1s?2xg32_hWtpg+LNl;EP52%La%f8R}OLSft7*l4cjvXxS~bf?p9 ze?Xt@ucOiEl2D-=27qFvy3VswqY9$R4wFg+R9_NcP0&d{Pr#UVx!os7p~lTB)h8Yc(6BQj1)rVw|3x>Cn_mw4(8ZB^>vvHtn9f8(eweKkcIvJ?Qkl zzW72PPL1M!S>uUB6nf+VOfzKBj}NHg;v%66wFx(!_w#$a9E5=@FA;F4_XnxEQs3%fwQAxqRNy#IaEP2 zth+Hq+Z+H(5KLw=8N^cOJYMh2_;?C+scuq|0}D%`9wS)aC=_H4QS9Gpw|FU)6#$F* zbq*v60k_-3!jTAb4RX<+KyB{jKD+-T!34M4@At86Cc_oy+i$f_Vz}el;@0)_CvcnEk1SOI2N1^|;P^n3BA!qXW{2bA4mef@um74H|tzxO$D8#su zf>H$>FmM>9PpBu|D;%Gi+8hAMM**oZv4hYAGXDW`v$NSuzwaL=)uxY+?kn+OG0ZeD zSrf+xQ=bsN;5E6~+%`Ae%4*eWkD%Em#aZ-vJd1GA$zwo3wkXtQMF13m*X;8EP6bhA zFS<&V8UK?2EUC*lsnmIb;ju_GIvtJ0Ldf{{RjOvMQiD7}r4LR)@&t;^Tt>B@YSRqL z9seHyRfHab$nt|?ND5h~O^0KcLl;^5W~<3+wGFN~?c8)}1kG+Pn{723^&BbH<JVhcz=K<+Gwpp97Z>tpxLQbEA>Ww zGfPTy72srgSyEBJ6PYV0P*m^d2%3$9@I6uxRio>Bxo0&|OCy)jisZ4;g zT`rfZBeG{99|W`lx{kHMg|K5Qi}x6)zOs zilx)()Af3N*6r~e9~~Ww5H!$|I=oXVZW)p;h@;BR9F$Ns>UBPm>ao@4V}R1EHuc1k zpQ}xjA)$5?)1TT_t+L`Z;HD$Kxt_~4+O6gqx#{UxEVf3k1!(4ltDYB16AL`037Q*+ z>ARsIs!ZAAK@}~j$oL->TU@lH&J8;pb3PvirzAb&X7#Vhojx zZ#EC>cR@i^nX)Gbs#5?}4o-nuO^CrM(}6(nWGo&Jr^Zv>zDl*RVREDO1XYCBaq{6L z1k`@9{}ZZBSWwImK+7u@%+qT4Tl+8z8B zk8JuwdM)Xq7lhhek>EURZn}b~GG)(?N{tGjVneZi3@xb`oI-B@@kAmSPmUzr;c&!h zhN#i_veQth5nZJMg4J4$yZ&aNN;h3!+PTYHEQ{q5pREdzYCWyLJh6l*fmzG0t#$H+ z_03kZxk{imeUwq5B{kkxsjb#LxyX}a2#e$ODcN& zp;FBdg)-G|w|+*?J_dwfydE;_y2>vqD2OUkc94N82d7At%44bI_D>fIg%fnv z&W?_bC67!V@x~Kzrx~J^YPGlg@L?;P%~aa$_LArpS{A^RWk^t+=oZ3YkDPMT6-1RO zdl6JBl2fOc-ja&(e#Z%#N4#ENY6y!oF%8PIMo?Xi#bO!1-@k59oN&|EgsXlix`h-( zl_^v9xGFWm^fIcHP^lr>Fgjn>p+Z$6bB+S|W#OjhU(_-r1yNU2OxX)!!|D(yQ>ILrf~YcO%9JUHDpRIR*+H}a7hnL{7qrVXp0{5B O0000 ПорядковыйНомерПерехода); - - ПорядковыйНомерПерехода = Значение; - - Если ПорядковыйНомерПерехода < 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); - - Возврат; - - КонецЕсли; - -КонецПроцедуры - -// Добавляет новую строку в конец текущей таблицы переходов -// -// Параметры: -// -// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода -// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода -// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода -// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода -// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника -// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника -// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника -// ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. -// Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. -// -&НаСервере -Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, - ИмяОсновнойСтраницы, - ИмяСтраницыНавигации, - ИмяСтраницыДекорации = "", - ИмяОбработчикаПриОткрытии = "", - ИмяОбработчикаПриПереходеДалее = "", - ИмяОбработчикаПриПереходеНазад = "", - ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "") - НоваяСтрока = ТаблицаПереходов.Добавить(); - - НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; - НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; - НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; - НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; - - НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; - НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; - НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; - - НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; - НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; - -КонецПроцедуры - -&НаКлиенте -Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) - - Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл - - Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда - - ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); - - Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда - - Возврат ЭлементФормыПоИмениКоманды; - - КонецЕсли; - - ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда - - Возврат Элемент; - - Иначе - - Продолжить; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть – Служебные процедуры и функции - -&НаСервере -Процедура ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ) - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Объект); - ПараметрыПодключения.WSПароль = Пароль; - - СообщениеПользователю = ""; - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения,, СообщениеПользователю); - Если WSПрокси = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,"Пароль",, Отказ); - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - - УстановитьПривилегированныйРежим(Истина); - - Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); - - Если ЗапомнитьПароль Тогда - - // обновляем запись в РС - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", ПриложениеВСервисе); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); - СтруктураЗаписи.Вставить("WSПароль", Пароль); - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(АвтономнаяРаботаСлужебный.СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); - Возврат; - КонецПопытки; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Обработчики событий переходов - -&НаКлиенте -Функция Подключаемый_Начало_ПриПереходеДалее(Отказ) - - Если ПустаяСтрока(Пароль) Тогда - - НСтрока = НСтр("ru = 'Не указан пароль.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Пароль",, Отказ); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ); - - Если Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Не удалось выполнить операцию.'")); - - КонецЕсли; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Инициализация переходов помощника - -&НаСервере -Процедура СценарийЗавершенияНастройкиАвтономногоРабочегоМеста() - - ТаблицаПереходов.Очистить(); - - ТаблицаПереходовНоваяСтрока(1, "Начало", "СтраницаНавигацииНачало",,, "Начало_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(2, "ОжиданиеПроверкиПодключения", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(3, "Окончание", "СтраницаНавигацииОкончание"); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form index 24938b915..de053530f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Помощник создания автономного рабочего места</value> + <value>Создание автономного рабочего места</value> ПанельОсновная @@ -15,7 +15,7 @@ 31 <key>ru</key> - <value>Вас приветствует помощник создания автономного рабочего места</value> + <value>Создание автономного рабочего места</value> true true @@ -127,7 +127,7 @@ <key>ru</key> <value>Для автономной работы на Вашем компьютере должна быть установлена -платформа "1С:Предприятие 8" версии <ВерсияПриложения></value> +платформа "1С:Предприятие" версии <ВерсияПриложения></value> true true @@ -1251,10 +1251,20 @@ ЗагрузитьНачальныйОбразНаКомпьютерПользователяExtendedTooltip 261 + + <key>ru</key> + <value>При возникновении проблем скачивания файла с использованием веб-клиента можно попробовать использовать для работы тонкий клиент 1С:Предприятия. +Для использования тонкого клиента ознакомьтесь с <link АдресИнструкцииПоНастройкеТонкогоКлиента>инструкцией</> или обратитесь за помощью у администратору.</value> + + true Label true true + + URLProcessing + ЗагрузитьНачальныйОбразНаКомпьютерПользователяРасширеннаяПодсказкаОбработкаНавигационнойСсылки + Left @@ -1265,6 +1275,7 @@ true true UserCmds + Button Auto true @@ -2967,6 +2978,24 @@ true
      + + АдресИнструкцииПоНастройкеТонкогоКлиента + + <key>ru</key> + <value>Адрес инструкции по настройке тонкого клиента</value> + + 17 + + String + + + + true + + + true + + КомандаГотово diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl index 61c477b75..b0662564f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl @@ -1,9 +1,11 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -31,7 +33,7 @@ ИнструкцияПоНастройкеАвтономногоРабочегоМеста = АвтономнаяРаботаСлужебный.ТекстИнструкцииИзМакета("ИнструкцияПоНастройкеАвтономногоРабочегоМеста"); ЗаголовокЭлемента = НСтр("ru = 'Для автономной работы на Вашем компьютере должна быть установлена - |платформа ""1С:Предприятие 8"" версии [ВерсияПлатформы]'"); + |платформа ""1С:Предприятие 8.3"" версии [ВерсияПлатформы]'"); ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "[ВерсияПлатформы]", ОбменДаннымиВМоделиСервиса.ТребуемаяВерсияПлатформы()); Элементы.ПоясняющаяНадписьОВерсииПлатформы.Заголовок = ЗаголовокЭлемента; @@ -58,6 +60,12 @@ КонецЕсли; + // Подсказка о тонком клиенте + АдресИнструкцииПоНастройкеТонкогоКлиента = ОбменДаннымиВМоделиСервиса.АдресИнструкцииПоНастройкеТонкогоКлиента(); + Если ПустаяСтрока(АдресИнструкцииПоНастройкеТонкогоКлиента) Тогда + Элементы.ЗагрузитьНачальныйОбразНаКомпьютерПользователя.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -77,9 +85,11 @@ Возврат; КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ОтменитьСозданиеАвтономногоРабочегоМеста", ЭтотОбъект); + ТекстПредупреждения = НСтр("ru = 'Отменить создание автономного рабочего места?'"); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( - ЭтотОбъект, Отказ, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + ЭтотОбъект, Отказ, ТекстПредупреждения, "ЗакрытьФормуБезусловно", ОписаниеОповещения); КонецПроцедуры @@ -111,8 +121,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИнструкцияПоНастройкеАвтономногоРабочегоМестаДокументСформирован(Элемент) @@ -124,8 +135,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // Поставляемая часть @@ -221,12 +233,42 @@ Процедура СохранитьИнструкциюКак(Команда) АдресВоВременномХранилище = ПолучитьМакет(); - ПолучитьФайл(АдресВоВременномХранилище, "Инструкция по настройке автономного рабочего места.html"); + ПолучитьФайл(АдресВоВременномХранилище, Нстр("ru = 'Инструкция по настройке автономного рабочего места.html'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиРазрешитьСинхронизациюДанных.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиСинхронизации.СинхронизацияДанныхРазрешена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНачальныйОбразНаКомпьютерПользователяРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если НавигационнаяСсылка = "АдресИнструкцииПоНастройкеТонкогоКлиента" Тогда + СтандартнаяОбработка = Ложь; + ПерейтиПоНавигационнойСсылке(АдресИнструкцииПоНастройкеТонкогоКлиента); + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Поставляемая часть @@ -541,8 +583,15 @@ КонецФункции +&НаКлиенте +Процедура ОтменитьСозданиеАвтономногоРабочегоМеста(Результат, ДополнительныеПараметры) Экспорт + + ОбменДаннымиВызовСервера.УдалитьНастройкуСинхронизации(Объект.АвтономноеРабочееМесто); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть – Служебные процедуры и функции +// Переопределяемая часть - Служебные процедуры и функции &НаСервере Процедура СоздатьНачальныйОбразАвтономногоРабочегоМестаНаСервере(Отказ) @@ -808,3 +857,5 @@ ТаблицаПереходовНоваяСтрока(6, "Окончание", "СтраницаНавигацииОкончание",, "Окончание_ПриОткрытии"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl index 50dda6574..dc862d04c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl @@ -1,15 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - - Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда - - СтандартнаяОбработка = Ложь; - - ВыбраннаяФорма = "НастройкаНаСторонеАвтономногоРабочегоМеста"; - - КонецЕсли; - -КонецПроцедуры -#КонецЕсли + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html index 7c203187a..774280feb 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html @@ -1,17 +1,17 @@ -<!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><style>H1 { - TEXT-ALIGN: left; FONT-FAMILY: Arial, Tahoma; COLOR: #003366; FONT-SIZE: 18pt; FONT-WEIGHT: bold +<!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.16476"></meta><style>H1 { + FONT-SIZE: 18pt; FONT-FAMILY: Arial, Tahoma; FONT-WEIGHT: bold; COLOR: #003366; TEXT-ALIGN: left } .Programtext { - FONT-FAMILY: Courier; COLOR: #000080; FONT-SIZE: 10pt + FONT-SIZE: 10pt; FONT-FAMILY: Courier; COLOR: #000080 } H3 { - TEXT-ALIGN: left; FONT-FAMILY: Arial, Tahoma; FONT-SIZE: 11pt; FONT-WEIGHT: bold + FONT-SIZE: 11pt; FONT-FAMILY: Arial, Tahoma; FONT-WEIGHT: bold; TEXT-ALIGN: left } H4 { - TEXT-ALIGN: left; FONT-FAMILY: Arial, Tahoma; FONT-SIZE: 10pt; FONT-WEIGHT: bold + FONT-SIZE: 10pt; FONT-FAMILY: Arial, Tahoma; FONT-WEIGHT: bold; TEXT-ALIGN: left } BODY { - FONT-FAMILY: Verdana; FONT-SIZE: 8pt + FONT-SIZE: 8pt; FONT-FAMILY: Verdana } </style></head><body> <h3><font color="#00008b">Настройка автономного рабочего места на компьютере</font></h3><font color="#00008b"> @@ -35,5 +35,5 @@ BODY { <ul><li><a href="http://1c.ru/rus/partners/franch-citylist.jsp" target="_blank">Несколько способов приобрести наши продукты</a> </li><li><a href="http://users.v8.1c.ru/project.jsp?id=Platform82" target="_blank">Получить последнюю версию платформы 1С:Предприятие</a><br></li></ul><p><strong>2. Как настроить автономное рабочее место для работы других пользователей?</strong></p> <p>Сразу после первого запуска, автономное рабочее место готово для работы. Ваша учетная запись имеет административные права, как и в приложении в Интернете.</p> -<p>В случае если с этим автономным рабочим местом должны работать другие пользователи, то нужно разрешить им доступ к информационной базе в списке <strong>"Пользователи" </strong>раздела <strong>"Администрирование"</strong>. При этом им будут назначены такие же права доступа, как и в приложении в Интернете. Подробнее о ведении списка пользователей и настройке прав доступа см. документацию к программе. </p> +<p>В случае если с этим автономным рабочим местом должны работать другие пользователи, то нужно разрешить им вход в программу в списке <strong>"Пользователи" </strong>раздела <strong>"Администрирование"</strong>. При этом им будут назначены такие же права доступа, как и в приложении в Интернете. Подробнее о ведении списка пользователей и настройке прав доступа см. документацию к программе. </p> <p>Кроме того, если пользователи должны самостоятельно, без вашего участия, выполнять синхронизацию данных с приложением в Интернете, то необходимо изменить настройки подключения к Интернету, заданные по умолчанию. Для этого можно воспользоваться кнопкой <strong>"Настроить подключение..."</strong> в окне <strong>"Автономная работа"</strong> раздела<strong> "Администрирование"</strong>. В форме настройки задать пользователя, от имени которого необходимо выполнять синхронизацию данных. Для этого пользователя в приложении в Интернете следует указать профиль <strong>"Синхронизация данных с другими программами"</strong>.</p></body></html> \ 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 a5168f347..e872aeafd 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/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.16470"></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="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16476"></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 62b7118e5..eba6fe2ac 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo @@ -39,6 +39,18 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="0e2107e2-8648-4b2e-9dfb-c23b1ff5b007"> + <name>АвтономноеРабочееМесто</name> + <synonym> + <key>ru</key> + <value>Автономное рабочее место</value> + </synonym> + <type> + <types>ExchangePlanRef</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <forms uuid="efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f"> <name>НастройкаНаСторонеСервиса</name> <synonym> @@ -48,15 +60,6 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="00c29d0d-338a-4eb0-9e0f-5b64f6521e6e"> - <name>НастройкаНаСторонеАвтономногоРабочегоМеста</name> - <synonym> - <key>ru</key> - <value>Настройка на стороне автономного рабочего места</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <forms uuid="ea0843f4-60fb-4d44-abf4-0021867c636b"> <name>ДополнительноеОписание</name> <synonym> diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl index 16f69ae24..ae10ad50f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,3 +22,5 @@ Заголовок = Параметры.Заголовок; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form deleted file mode 100644 index 6e468dace..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form +++ /dev/null @@ -1,263 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:FormGroup"> - <name>Страницы</name> - <id>3</id> - <items xsi:type="form:FormGroup"> - <name>СтраницаОтображенияПрефиксаИнформационнойБазы</name> - <id>4</id> - <items xsi:type="form:FormField"> - <name>ПрефиксИнформационнойБазы</name> - <id>1</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ПрефиксИнформационнойБазы</segments> - </dataPath> - <skipOnInput>true</skipOnInput> - <extendedTooltip> - <name>ПрефиксИнформационнойБазыExtendedTooltip</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>2</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <readOnly>true</readOnly> - <warningOnEditRepresentation>DontShow</warningOnEditRepresentation> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <passwordMode>false</passwordMode> - <multiLine>false</multiLine> - <extendedEdit>false</extendedEdit> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> - </extInfo> - </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Страница отображения префикса информационной базы</value> - - - ru - Страница отображения префикса информационной базы - - - СтраницаОтображенияПрефиксаИнформационнойБазыExtendedTooltip - 11 - Label - true - true - - Left - - - Page - - Vertical - auto - -
      - - СтраницаОтображенияИнформацииОПустомПрефиксе - 5 - - Декорация1 - 6 - - <key>ru</key> - <value>Префикс для информационной базы не задан. -При настройке синхронизации можно использовать любой префикс.</value> - - true - true - - true - - - Декорация1ExtendedTooltip - 14 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 7 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница отображения информации о пустом префиксе</value> - - - ru - Страница отображения информации о пустом префиксе - - - СтраницаОтображенияИнформацииОПустомПрефиксеExtendedTooltip - 13 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Страницы</value> - - - ru - Страницы - - 30 - - СтраницыExtendedTooltip - 10 - Label - true - true - - Left - - - Pages - - Auto - -
      - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаЗакрыть - 8 - true - true - - true - - - ФормаЗакрытьExtendedTooltip - 9 - Label - true - true - - Left - - - Form.StandardCommand.Close - PictureAndText - true - true - true - UserCmds - Auto - - Right - true - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - Help - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - LockOwner - true - true - Vertical - true - true - UseIfNecessary - auto - true - - ПрефиксИнформационнойБазы - - <key>ru</key> - <value>Префикс этой информационной базы</value> - - 1 - - String - - 2 - - - - true - - - true - - - - - - -
      diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl deleted file mode 100644 index 5a6a47b6b..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl +++ /dev/null @@ -1,19 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - - ПрефиксИнформационнойБазыУстановлен = Не ПустаяСтрока(ПрефиксИнформационнойБазы); - - Элементы.Страницы.ТекущаяСтраница = ?(ПрефиксИнформационнойБазыУстановлен, - Элементы.СтраницаОтображенияПрефиксаИнформационнойБазы, - Элементы.СтраницаОтображенияИнформацииОПустомПрефиксе); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index 7ff31f268..41f8b5c6e 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -256,7 +256,6 @@ true true true - true true true Normal @@ -370,7 +369,7 @@ Label true - 6 + 5 true true false @@ -531,10 +530,9 @@ Label 30 true - 4 true false - false + true System.DefaultGUIFont true @@ -609,10 +607,9 @@ Label 30 true - 4 true false - false + true System.DefaultGUIFont true @@ -792,17 +789,96 @@ Left - - УзнатьПрефиксЭтойИнформационнойБазы - 1069 + + ГруппаРезервноеКопирование + 2446 + + Декорация3 + 2448 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 2450 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 2449 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + НадписьРезервноеКопирование + 2451 + + <key>ru</key> + <value>Перед настройкой синхронизации рекомендуется создать резервную копию данных.</value> + + true + true + + true + + + НадписьРезервноеКопированиеРасширеннаяПодсказка + 2453 + Label + true + true + + Left + + + + НадписьРезервноеКопированиеКонтекстноеМеню + 2452 + true + + Label + true + true + + + URLProcessing + НадписьРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + true true true + + <key>ru</key> + <value>Группа резервное копирование</value> + + + ru + Группа резервное копирование + - УзнатьПрефиксЭтойИнформационнойБазыExtendedTooltip - 1952 + ГруппаРезервноеКопированиеРасширеннаяПодсказка + 2447 Label true true @@ -810,14 +886,15 @@ Left - Hyperlink - Form.Command.УзнатьПрефиксЭтойИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + НадписьДалееВариантРаботыМастера @@ -1349,6 +1426,113 @@ Left + + ГруппаРезервноеКопирование1 + 2454 + + Декорация9 + 2456 + true + true + + true + + + Декорация9РасширеннаяПодсказка + 2458 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 2457 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + НадписьРезервноеКопированиеСервис + 2459 + + <key>ru</key> + <value>Перед настройкой синхронизации рекомендуется создать резервную копию данных.</value> + + true + true + + true + + + НадписьРезервноеКопированиеСервисРасширеннаяПодсказка + 2461 + Label + true + true + + Left + + + + НадписьРезервноеКопированиеСервисКонтекстноеМеню + 2460 + true + + Label + true + true + + + URLProcessing + НадписьРезервноеКопированиеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа резервное копирование</value> + + + ru + Группа резервное копирование + + + ГруппаРезервноеКопирование1РасширеннаяПодсказка + 2455 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисом 1244 @@ -1850,7 +2034,7 @@ 1769 <key>ru</key> - <value>Настройка параметров синхронизации данных</value> + <value>Правила отправки данных</value> true true @@ -2160,6 +2344,10 @@ ВыполнитьНастройкуВыгрузкиДанных1 1780 + + <key>ru</key> + <value>Изменить правила отправки данных</value> + true true @@ -2595,10 +2783,10 @@ ДеревоИнформацииСтатистикиСтрокаПоиска - 2423 + 2478 ДеревоИнформацииСтатистикиСтрокаПоискаРасширеннаяПодсказка - 2425 + 2480 Label true true @@ -2608,7 +2796,7 @@ ДеревоИнформацииСтатистикиСтрокаПоискаКонтекстноеМеню - 2424 + 2479 true ДеревоИнформацииСтатистики @@ -2618,10 +2806,10 @@ ДеревоИнформацииСтатистикиСостояниеПросмотра - 2426 + 2481 ДеревоИнформацииСтатистикиСостояниеПросмотраРасширеннаяПодсказка - 2428 + 2483 Label true true @@ -2631,7 +2819,7 @@ ДеревоИнформацииСтатистикиСостояниеПросмотраКонтекстноеМеню - 2427 + 2482 true ViewStatusAddition @@ -2642,10 +2830,10 @@ ДеревоИнформацииСтатистикиУправлениеПоиском - 2429 + 2484 ДеревоИнформацииСтатистикиУправлениеПоискомРасширеннаяПодсказка - 2431 + 2486 Label true true @@ -2655,7 +2843,7 @@ ДеревоИнформацииСтатистикиУправлениеПоискомКонтекстноеМеню - 2430 + 2485 true SearchControlAddition @@ -3791,7 +3979,7 @@ Группа40 1618 - Группа43 + НастройкиПараметровУчета 1619 НаименованиеЭтойБазы4 @@ -3838,7 +4026,7 @@ - НастройкиПараметровУчета + Группа43 1640 Декорация99 @@ -3911,9 +4099,6 @@ 2 true false - - Style.ПоясняющийТекст - true @@ -3921,16 +4106,8 @@ true - - <key>ru</key> - <value>Настройки параметров учета</value> - - - ru - Настройки параметров учета - - НастройкиПараметровУчетаExtendedTooltip + Группа43РасширеннаяПодсказка 2036 Label true @@ -3948,92 +4125,21 @@ Auto - - РамкаГруппыЗначенийПоУмолчанию6 - 1647 - - ОписаниеЗначенийПоУмолчанию6 - 1624 - - <key>ru</key> - <value>Значения для заполнения реквизитов документов при загрузке в эту информационную базу</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчанию - - - ОписаниеЗначенийПоУмолчанию6ExtendedTooltip - 2040 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчанию6КонтекстноеМеню - 1625 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчанию6 - 1645 - true - true - - true - - - НастройкаЗначенийПоУмолчанию6ExtendedTooltip - 2041 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - + + НадписьНастройкиПараметровУчета + 2437 true true true + + НадписьНастройкиПараметровУчета + + None - РамкаГруппыЗначенийПоУмолчанию6ExtendedTooltip - 2039 + НадписьНастройкиПараметровУчетаРасширеннаяПодсказка + 2439 Label true true @@ -4041,14 +4147,27 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + НадписьНастройкиПараметровУчетаКонтекстноеМеню + 2438 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal true @@ -4068,8 +4187,12 @@ false false + + ru + Настройки параметров учета + - Группа43ExtendedTooltip + НастройкиПараметровУчетаРасширеннаяПодсказка 2034 Label true @@ -4090,7 +4213,7 @@ - Группа45 + НастройкиПараметровУчетаКорреспондента 1626 НаименованиеВторойБазы4 @@ -4137,7 +4260,7 @@ - НастройкиПараметровУчетаКорреспондента + Группа45 1627 Декорация98 @@ -4210,9 +4333,6 @@ 2 true false - - Style.ПоясняющийТекст - true @@ -4220,16 +4340,8 @@ true - - <key>ru</key> - <value>Настройки параметров учета корреспондента</value> - - - ru - Настройки параметров учета корреспондента - - НастройкиПараметровУчетаКорреспондентаExtendedTooltip + Группа45РасширеннаяПодсказка 2044 Label true @@ -4247,92 +4359,21 @@ Auto - - РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента - 1648 - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - 1636 - - <key>ru</key> - <value>Значения для заполнения реквизитов документов при загрузке в приложение, расположенное в Интернете</value> - - true - true - - true - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip - 2048 - Label - true - true - - Left - - - - ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаКонтекстноеМеню - 1637 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - Normal - - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - 1646 - true - true - - true - - - НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервисExtendedTooltip - 2049 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис - Normal - Auto - true - true - UserCmds - Auto - + + НадписьНастройкиПараметровУчетаКорреспондента + 2440 true true true + + НадписьНастройкиПараметровУчетаКорреспондента + + None - РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip - 2047 + НадписьНастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка + 2442 Label true true @@ -4340,14 +4381,27 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + НадписьНастройкиПараметровУчетаКорреспондентаКонтекстноеМеню + 2441 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal true @@ -4355,6 +4409,10 @@ true + + <key>ru</key> + <value>Настройки параметров учета корреспондента</value> + System.DefaultGUIFont true @@ -4362,8 +4420,12 @@ false false + + ru + Настройки параметров учета корреспондента + - Группа45ExtendedTooltip + НастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка 2042 Label true @@ -4474,6 +4536,510 @@ auto + + СтраницаМастераПараметрыПолученияДанных + 2407 + + ЗаголовокСтраницыМастера12 + 2409 + + <key>ru</key> + <value>Правила получения данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастера12РасширеннаяПодсказка + 2411 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера12КонтекстноеМеню + 2410 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + Группа12 + 2412 + + Группа13 + 2414 + + НаименованиеЭтойБазы6 + 2418 + true + true + + true + + + Объект.НаименованиеЭтойБазы + + None + + НаименованиеЭтойБазы6РасширеннаяПодсказка + 2420 + Label + true + true + + Left + + + + НаименованиеЭтойБазы6КонтекстноеМеню + 2419 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + РамкаГруппыЗначенийПоУмолчанию6 + 1647 + + ОписаниеЗначенийПоУмолчанию6 + 1624 + + <key>ru</key> + <value>Значения для заполнения реквизитов при получении данных в этой программе</value> + + true + true + + true + + + ОписаниеЗначенийПоУмолчанию + + + ОписаниеЗначенийПоУмолчанию6ExtendedTooltip + 2040 + Label + true + true + + Left + + + + ОписаниеЗначенийПоУмолчанию6КонтекстноеМеню + 1625 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + НастройкаЗначенийПоУмолчанию6 + 1645 + + <key>ru</key> + <value>Изменить правила получения данных для этой программы</value> + + true + true + + true + + + НастройкаЗначенийПоУмолчанию6ExtendedTooltip + 2041 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкаЗначенийПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + РамкаГруппыЗначенийПоУмолчанию6ExtendedTooltip + 2039 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа13РасширеннаяПодсказка + 2415 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + Группа15 + 2416 + + НаименованиеВторойБазы5 + 2421 + true + true + + true + + + Объект.НаименованиеВторойБазы + + None + + НаименованиеВторойБазы5РасширеннаяПодсказка + 2423 + Label + true + true + + Left + + + + НаименованиеВторойБазы5КонтекстноеМеню + 2422 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента + 1648 + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондента + 1636 + + <key>ru</key> + <value>Значения для заполнения реквизитов при получении данных в приложении, расположенном в Интернете</value> + + true + true + + true + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондента + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip + 2048 + Label + true + true + + Left + + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаКонтекстноеМеню + 1637 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + 1646 + + <key>ru</key> + <value>Изменить правила получения данных для другой программы</value> + + true + true + + true + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервисExtendedTooltip + 2049 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондентаExtendedTooltip + 2047 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа15РасширеннаяПодсказка + 2417 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + Группа12РасширеннаяПодсказка + 2413 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НадписьДалее4 + 2443 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для выполнения синхронизации данных.</value> + + true + true + + true + + + НадписьДалее4РасширеннаяПодсказка + 2445 + Label + true + true + + Left + + + + НадписьДалее4КонтекстноеМеню + 2444 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера параметры получения данных</value> + + + ru + Страница мастера параметры получения данных + + + СтраницаМастераПараметрыПолученияДанныхРасширеннаяПодсказка + 2408 + Label + true + true + + Left + + + Page + + Vertical + auto + + СтраницаМастераВыборРежимаРаботыПомощника 774 @@ -5637,75 +6203,6 @@ UserCmds Auto - - ГруппаComcntr - 1884 - - НадписьОбновитьВерсиюКомпоненты - 1885 - - <key>ru</key> - <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить -ее <link Перерегистрация>перерегистрацию</> (потребуется перезапуск программы).</value> - - true - true - - true - - - НадписьОбновитьВерсиюКомпонентыExtendedTooltip - 2089 - Label - true - true - - Left - - - - НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню - 1886 - true - - true - Label - true - true - false - - - URLProcessing - НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки - - Left - 2 - - - true - true - - true - - - ГруппаComcntrExtendedTooltip - 2088 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - true true @@ -6774,10 +7271,7 @@ true true true - true - true true - true true true Normal @@ -9596,6 +10090,7 @@ true true true + true false true true @@ -17856,6 +18351,77 @@ true + + НадписьНастройкиПараметровУчета + + <key>ru</key> + <value>Надпись настройки параметров учета</value> + + 72 + + String + + + + true + + + true + + + + НадписьНастройкиПараметровУчетаКорреспондента + + <key>ru</key> + <value>Надпись настройки параметров учета корреспондента</value> + + 73 + + String + + + + true + + + true + + + + АдресИнструкцииПоВыполнениюРезервногоКопирования + + <key>ru</key> + <value>Адрес инструкции по выполнению резервного копирования</value> + + 74 + + String + + + + true + + + true + + + + ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ + + <key>ru</key> + <value>Это продолжение настройки в подчиненном узле РИБ</value> + + 76 + + Boolean + + + true + + + true + + КомандаДалее @@ -17990,7 +18556,7 @@ <id>16</id> <toolTip> <key>ru</key> - <value>Настройка значений по умолчанию</value> + <value>Изменить правила получения данных для этой программы</value> </toolTip> <use> <common>true</common> @@ -18172,24 +18738,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>УзнатьПрефиксЭтойИнформационнойБазы</name> - <title> - <key>ru</key> - <value>Узнать префикс этой информационной базы</value> - - 18 - - true - - - - УзнатьПрефиксЭтойИнформационнойБазы - - - Auto - Auto - КакОпределитьПрефиксВторойИнформационнойБазы @@ -18291,7 +18839,7 @@ <id>26</id> <toolTip> <key>ru</key> - <value>Настройка значений по умолчанию</value> + <value>Изменить правила получения данных для этой программы</value> </toolTip> <use> <common>true</common> @@ -18386,6 +18934,10 @@ <value>Изменить правила синхронизации данных</value> 11 + + ru + Изменить правила отправки данных для этой программы и для приложения в Интернете + true diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index 2e5ddb739..cdc899b20 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -1,8 +1,7 @@ &НаКлиенте -Перем ЗакрытьФормуБезусловно, ПользовательОтветилДаНаВопросОСопоставлении, ПропускатьКонтрольОтказаТекущейСтраницы; +Перем ЗакрытьФормуБезусловно, ПользовательОтветилДаНаВопросОСопоставлении, ПропускатьКонтрольОтказаТекущейСтраницы, ВнешниеРесурсыРазрешены; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,6 +21,10 @@ НастройкаОбменаССервисом = Параметры.Свойство("НастройкаОбменаССервисом"); + Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") Тогда + Объект.СсылкаНового = ПланыОбмена[Объект.ИмяПланаОбмена].ПолучитьСсылку(); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); // установка значений по умолчанию - общих @@ -69,7 +72,6 @@ Элементы.РамкаГруппыЗначенийПоУмолчанию1.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; Элементы.РамкаГруппыЗначенийПоУмолчанию2.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; Элементы.РамкаГруппыЗначенийПоУмолчанию6.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; - Элементы.НадписьОбновитьВерсиюКомпоненты.Видимость = Ложь; ОписаниеОграниченийПередачиДанных = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанных(Объект.ИмяПланаОбмена, НастройкаОтборовНаУзле, ВерсияКонфигурацииКорреспондента); ОписаниеЗначенийПоУмолчанию = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчанию(Объект.ИмяПланаОбмена, ЗначенияПоУмолчаниюНаУзле, ВерсияКонфигурацииКорреспондента); @@ -213,6 +215,11 @@ Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ОтключитьИспользованиеУчетныхЗаписей(); + КонецЕсли; + ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); @@ -251,24 +258,30 @@ Элементы.ПараметрыДоступаВИнтернет2.Видимость = Ложь; КонецЕсли; + УстановитьТекстРезервногоКопирования(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; + КонецЕсли; + ЗакрытьФормуБезусловно = Ложь; ПользовательОтветилДаНаВопросОСопоставлении = Ложь; + ВнешниеРесурсыРазрешены = Новый Структура; + ВнешниеРесурсыРазрешены.Вставить("РазрешенCom", Ложь); + ВнешниеРесурсыРазрешены.Вставить("РазрешенFILE", Ложь); + ВнешниеРесурсыРазрешены.Вставить("РазрешенFTP", Ложь); + АутентификацияОперационнойСистемыПриИзменении(); ВариантРаботыИнформационнойБазыПриИзменении(); УстановитьПорядковыйНомерПерехода(1); -#Если ВебКлиент Тогда - Элементы.ГруппаComcntr.Видимость = Ложь; -#КонецЕсли - КонецПроцедуры &НаКлиенте @@ -285,6 +298,16 @@ Возврат; КонецЕсли; + Если ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ТекстПредупреждения = НСтр("ru = 'Выполняется настройка подчиненного узла распределенной информационной базы. + |Отказаться от настройки и использовать значения по умолчанию?'"); + + ОписаниеОповещенияОтказПродолженияРИБ = Новый ОписаниеОповещения("ОписаниеОповещенияОтказОтПродолженияРИБ", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(ЭтотОбъект, Отказ, ТекстПредупреждения, "ЗакрытьФормуБезПредупреждения", ОписаниеОповещенияОтказПродолженияРИБ); + + Возврат; + КонецЕсли; + ТекстПредупреждения = НСтр("ru = 'Отменить настройку синхронизации и выйти из помощника?'"); ОписаниеОповещенияЗакрыть = Новый ОписаниеОповещения("УдалитьНастройкуОбменаДанными", ЭтотОбъект); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(ЭтотОбъект, Отказ, ТекстПредупреждения, "ЗакрытьФормуБезПредупреждения", ОписаниеОповещенияЗакрыть); @@ -322,14 +345,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Страница СтраницаМастераНачало &НаКлиенте Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; НастройкиДиалога = Новый Структура; @@ -408,21 +433,16 @@ КонецПроцедуры -&НаКлиенте -Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ЗакрытьФормуБезусловно = Истина; - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Страница СтраницаМастераЗаданиеПараметровТранспортаFILE &НаКлиенте Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Если Не ИнформационнаяБазаФайловая Тогда + Возврат; + КонецЕсли; + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); КонецПроцедуры @@ -461,8 +481,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоИнформацииСтатистики +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоИнформацииСтатистики &НаКлиенте Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -471,8 +492,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы //////////////////////////////////////////////////////////////////////////////// // Поставляемая часть @@ -495,27 +517,7 @@ &НаКлиенте Процедура КомандаГотово(Команда) - Отказ = Ложь; - Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(); - ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда - ЗавершениеНастройкиОбменаЧерезВебСервис(); - ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда - Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда - ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); - ИначеЕсли ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); - КонецЕсли; - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ОбновитьИнтерфейс(); - - ЗакрытьФормуБезусловно = Истина; - Закрыть(); + ВыполнитьКомандуГотово(); КонецПроцедуры @@ -727,14 +729,18 @@ &НаКлиенте Процедура ПроверитьПодключениеFILE(Команда) - ПроверитьПодключение("FILE"); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFILEЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры &НаКлиенте Процедура ПроверитьПодключениеFTP(Команда) - ПроверитьПодключение("FTP"); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFTPЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,,,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры @@ -748,28 +754,18 @@ &НаКлиенте Процедура ПроверитьПодключениеCOM(Команда) - ОчиститьСообщения(); - - ТекстСообщения = ПроверитьПодключениеCOMНаСервере(); - Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = НСтр("ru = 'Проверка подключения успешно завершена.'"); - КонецЕсли; - ПоказатьПредупреждение(,ТекстСообщения); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры &НаКлиенте Процедура ПроверитьПодключениеWS(Команда) - Отказ = Ложь; - - ПроверитьПодключениеWSНаКлиенте(Отказ); - - Если Не Отказ Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Подключение успешно установлено.'")); - - КонецЕсли; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры @@ -828,13 +824,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УзнатьПрефиксЭтойИнформационнойБазы(Команда) - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.УзнатьПрефиксЭтойИнформационнойБазы", , ЭтотОбъект); - -КонецПроцедуры - &НаКлиенте Процедура ИзменитьПользовательскоеРасписание(Команда) @@ -871,8 +860,75 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ВыполнитьКомандуГотово(Знач ЗакрыватьФорму = Истина) + + Отказ = Ложь; + Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда + ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(ЗакрыватьФорму); + + ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда + ЗавершениеНастройкиОбменаЧерезВебСервис(); + + ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда + Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда + ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); + + ИначеЕсли ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ, ЗакрыватьФорму); + + КонецЕсли; + + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ОбновитьИнтерфейс(); + + Если ЗакрыватьФорму Тогда + ЗакрытьФормуБезусловно = Истина; + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НадписьРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылка = "РезервноеКопирование" Тогда + МодульРезервноеКопированиеИБКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеИБКлиент"); + МодульРезервноеКопированиеИБКлиент.ОткрытьФормуРезервногоКопирования(ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьТекстРезервногоКопирования() + Вариант = ОбменДаннымиСервер.ВариантРезервногоКопирования(); + + Если ПустаяСтрока(Вариант) Тогда + Возврат; + КонецЕсли; + + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Перед настройкой синхронизации рекомендуется сделать резервную копию данных.'"), + Вариант); + + ФорматДок = Новый ФорматированныйДокумент; + ФорматДок.УстановитьHTML(Текст, Новый Структура); + Текст = ФорматДок.ПолучитьФорматированнуюСтроку(); + + Элементы.НадписьРезервноеКопирование.Заголовок = Текст; + Элементы.НадписьРезервноеКопированиеСервис.Заголовок = Текст; +КонецПроцедуры &НаКлиенте Процедура ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения() @@ -1258,15 +1314,104 @@ Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); Если Результат.Соединение = Неопределено Тогда - Если Результат.ОшибкаПодключенияКомпоненты И ИнформационнаяБазаФайловая Тогда - Элементы.НадписьОбновитьВерсиюКомпоненты.Видимость = Истина; - КонецЕсли; Возврат Результат.КраткоеОписаниеОшибки; КонецЕсли; Возврат ""; // успешно КонецФункции +&НаКлиенте +Процедура РазрешитьРесурсЗавершение(Результат, ИмяРазрешения) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ВнешниеРесурсыРазрешены[ИмяРазрешения] = Истина; + ИзменитьПорядковыйНомерПерехода(+1); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект, ЗапрашиватьCOM = Ложь, + ЗапрашиватьFILE = Ложь, ЗапрашиватьWS = Ложь, ЗапрашиватьFTP = Ложь) + + Запись = РегистрыСведений.НастройкиТранспортаОбмена.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(Запись, Объект); + Запись.Узел = Объект.СсылкаНового; + + ЗапросыРазрешений = Новый Массив; + + РегистрыСведений.НастройкиТранспортаОбмена.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, + Запись, ЗапрашиватьCOM, ЗапрашиватьFILE, ЗапрашиватьWS, ЗапрашиватьFTP); + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеCOMЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ОчиститьСообщения(); + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + + КонецЕсли; + + ТекстСообщения = ПроверитьПодключениеCOMНаСервере(); + Если ПустаяСтрока(ТекстСообщения) Тогда + ТекстСообщения = НСтр("ru = 'Проверка подключения успешно завершена.'"); + КонецЕсли; + ПоказатьПредупреждение(,ТекстСообщения); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеFILEЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПроверитьПодключение("FILE"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеFTPЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПроверитьПодключение("FTP"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеWSЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + Отказ = Ложь; + + ПроверитьПодключениеWSНаКлиенте(Отказ); + + Если Не Отказ Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Подключение успешно установлено.'")); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики ожидания @@ -1375,6 +1520,7 @@ Процедура УстановитьВидимостьНаСервере() Элементы.ПояснениеВыбораКаталогаОбменаИнформациейНаСервере.Видимость = Не ИнформационнаяБазаФайловая; + Элементы.FILEКаталогОбменаИнформацией.КнопкаВыбора = ИнформационнаяБазаФайловая; Элементы.ПрефиксИнформационнойБазыИсточника.Видимость = Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; Элементы.ПрефиксИнформационнойБазыИсточника1.Видимость = Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; @@ -1398,7 +1544,6 @@ Элементы.ГруппаФайлаНастроекОбмена1.Видимость = Ложь; Элементы.КакОпределитьПрефиксВторойИнформационнойБазы.Видимость = Ложь; - Элементы.УзнатьПрефиксЭтойИнформационнойБазы.Видимость = Ложь; Элементы.ЗаголовокСтраницыМастера1.Заголовок = НСтр("ru = 'Создание начального образа подчиненного узла РИБ'"); @@ -2135,7 +2280,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗавершениеНастройкиОбменаЧерезВнешнееСоединение() +Процедура ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(Знач ОткрыватьПослеЗакрытияТекущей) Если ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда @@ -2145,8 +2290,15 @@ ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы,,, ВариантОткрытияОкна.ОтдельноеОкно); - + Если ОткрыватьПослеЗакрытияТекущей Тогда + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, ПараметрыОткрытия); + + Иначе + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, , , ВариантОткрытияОкна.ОтдельноеОкно, , ,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2249,7 +2401,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ) +Процедура ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ, Знач ОткрыватьПослеЗакрытияТекущей) Состояние(НСтр("ru = 'Выполняется создание настройки синхронизации данных'")); @@ -2271,8 +2423,15 @@ ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы,,,ВариантОткрытияОкна.ОтдельноеОкно); - + Если ОткрыватьПослеЗакрытияТекущей Тогда + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, ПараметрыОткрытия); + + Иначе + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, , , ВариантОткрытияОкна.ОтдельноеОкно, , ,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2446,6 +2605,15 @@ КонецПроцедуры +// Был отказ от настройки РИБ, принимаем все умолчания +&НаКлиенте +Процедура ОписаниеОповещенияОтказОтПродолженияРИБ(Знач Результат, ДополнительныеПараметры) Экспорт + + // Игнорируем все шаги, настройки должны быть заданы заранее + ВыполнитьКомандуГотово(Ложь); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Значения констант @@ -2632,14 +2800,35 @@ &НаКлиенте Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалее(Отказ) - СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ); + Если Объект.ИспользоватьПараметрыТранспортаFILE Тогда + + Если ПустаяСтрока(Объект.FILEКаталогОбменаИнформацией) Или ВнешниеРесурсыРазрешены.РазрешенFile Тогда + СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ); + Иначе + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенFile"); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Истина; + КонецЕсли; + + КонецЕсли; КонецФункции &НаКлиенте Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалее(Отказ) - СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалееНаСервере(Отказ); + Если Объект.ИспользоватьПараметрыТранспортаFTP Тогда + + Если ПустаяСтрока(Объект.FTPСоединениеПуть) Или ВнешниеРесурсыРазрешены.РазрешенFTP Тогда + СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалееНаСервере(Отказ); + Иначе + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенFTP"); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,,,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Истина; + КонецЕсли; + КонецЕсли; КонецФункции @@ -2663,9 +2852,30 @@ КонецФункции +&НаКлиенте +Функция Подключаемый_СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее(Отказ) + + Если ((РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" И (Не ПустаяСтрока(Объект.COMКаталогИнформационнойБазы) Или Не ПустаяСтрока(Объект.COMИмяСервера1СПредприятия))) + Или (РежимРаботыМастера = "ОбменЧерезВебСервис" И Не ПустаяСтрока(Объект.WSURLВебСервиса))) + И Не ВнешниеРесурсыРазрешены.РазрешенCom Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенCom"); + Если РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект,,, Истина); + ИначеЕсли РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина); + КонецЕсли; + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Истина; + КонецЕсли; + +КонецФункции + &НаКлиенте Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + ВнешниеРесурсыРазрешены.РазрешенFile = Ложь; + Если Не ИспользоватьТранспортСообщенийОбменаFILE Тогда Объект.ИспользоватьПараметрыТранспортаFILE = Ложь; @@ -2679,6 +2889,8 @@ &НаКлиенте Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + ВнешниеРесурсыРазрешены.РазрешенFTP = Ложь; + Если Не ИспользоватьТранспортСообщенийОбменаFTP Тогда Объект.ИспользоватьПараметрыТранспортаFTP = Ложь; @@ -3632,8 +3844,8 @@ Ложь, ТипСоединения, Объект.ИмяПланаОбмена, - СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); - + СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения), + ПропуститьСтраницу); КонецЕсли; @@ -3644,17 +3856,25 @@ ТипСоединения = "ВебСервис"; - ПроверитьНастройкиОтраженияДокументовВУчете(Отказ, ТипСоединения); - - Если Отказ Тогда - Возврат Неопределено; - КонецЕсли; - ПроверитьНастройкиПараметровУчетаНаСервере( Отказ, ТипСоединения, Объект.ИмяПланаОбмена, - СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения), + Ложь); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее(Отказ) + + ТипСоединения = "ВебСервис"; + + ПроверитьПравилаПолученияДанных(Отказ, ТипСоединения); + + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; КонецФункции @@ -3670,7 +3890,7 @@ // &НаКлиенте -Процедура ПроверитьНастройкиОтраженияДокументовВУчете(Отказ, ТипСоединения) +Процедура ПроверитьПравилаПолученияДанных(Отказ, ТипСоединения) Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда @@ -3702,7 +3922,8 @@ Отказ, Знач ТипСоединения, Знач ИмяПланаОбмена, - ПараметрыПодключения) + ПараметрыПодключения, + ПропуститьСтраницу) СообщениеОбОшибке = ""; СообщениеОбОшибкеКорреспондента = ""; @@ -3790,13 +4011,19 @@ Возврат; КонецЕсли; + Если НастройкиПараметровУчетаЗаданы И НастройкиПараметровУчетаКорреспондентаЗаданы Тогда + ПропуститьСтраницу = Истина; + Возврат; + КонецЕсли; + Если Не НастройкиПараметровУчетаЗаданы Тогда Если ПустаяСтрока(СообщениеОбОшибке) Тогда СообщениеОбОшибке = НСтр("ru = 'Не заданы параметры учета в этой программе.'"); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,, "НастройкиПараметровУчетаПоясняющаяНадпись",, Отказ); + НадписьНастройкиПараметровУчета = СообщениеОбОшибке; + Отказ = Истина; КонецЕсли; @@ -3806,7 +4033,8 @@ СообщениеОбОшибкеКорреспондента = НСтр("ru = 'Не заданы параметры учета в приложении, расположенном в Интернете.'"); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибкеКорреспондента,, "НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись",, Отказ); + НадписьНастройкиПараметровУчетаКорреспондента = СообщениеОбОшибкеКорреспондента; + Отказ = Истина; КонецЕсли; @@ -3918,22 +4146,14 @@ &НаСервере Процедура СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ) - Если Объект.ИспользоватьПараметрыТранспортаFILE Тогда - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - - КонецЕсли; + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FILE); КонецПроцедуры &НаСервере Процедура СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалееНаСервере(Отказ) - Если Объект.ИспользоватьПараметрыТранспортаFTP Тогда - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - - КонецЕсли; + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Объект, Перечисления.ВидыТранспортаСообщенийОбмена.FTP); КонецПроцедуры @@ -4101,12 +4321,7 @@ ВнешнееСоединение = Результат.Соединение; ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; Если ВнешнееСоединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.КраткоеОписаниеОшибки,,,, Отказ); - - Если ОшибкаПодключенияКомпоненты И ИнформационнаяБазаФайловая Тогда - Элементы.НадписьОбновитьВерсиюКомпоненты.Видимость = Истина; - КонецЕсли; Возврат; КонецЕсли; @@ -4150,18 +4365,18 @@ Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); - Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда - Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПрефиксИнформационнойБазыПоУмолчанию(); - КонецЕсли; - - Элементы.ПрефиксИнформационнойБазыПриемника.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; - // Проверка на существование обмена с базой-корреспондентом ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); Если Отказ Тогда Возврат; КонецЕсли; + Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПрефиксИнформационнойБазыПоУмолчанию(); + КонецЕсли; + + Элементы.ПрефиксИнформационнойБазыПриемника.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; + Объект.НаименованиеВторойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); ЗаданоНаименованиеВторойБазы = Не ПустаяСтрока(Объект.НаименованиеВторойБазы); @@ -4256,7 +4471,7 @@ ТаблицаПереходов.Очистить(); ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачало", "", "СтраницаНавигацииНачало"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераВыборРежимаРаботыПомощника", "", "СтраницаНавигацииПродолжение"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераВыборРежимаРаботыПомощника", "", "СтраницаНавигацииПродолжение", "СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее"); ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриПереходеДалее",,"СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриОткрытии"); ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее",,"СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриОткрытии"); @@ -4280,6 +4495,64 @@ // Настройка параметров для выгрузки данных (отборы на узлах) ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"); + // Значения по умолчанию при загрузке данных + ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераПараметрыПолученияДанных",, "СтраницаНавигацииПродолжение", "СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее"); + + // Создание настройки обмена; Регистрация справочников для выгрузки + ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Получение справочников от корреспондента + ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Выполнение автоматического сопоставления данных; Получение статистики сопоставления + ТаблицаПереходовНоваяСтрока(11, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); + + // Ручное сопоставление данных + ТаблицаПереходовНоваяСтрока(12, "СтраницаМастераСопоставлениеДанных",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее",, "СтраницаМастераСопоставлениеДанных_ПриОткрытии"); + + // Синхронизация справочников + ТаблицаПереходовНоваяСтрока(13, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(14, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(15, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(16, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Настройки параметров учета + ТаблицаПереходовНоваяСтрока(17, "СтраницаМастераНастройкиОтраженияДокументовВУчете",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее",, "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"); + + // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников + ТаблицаПереходовНоваяСтрока(18, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(19, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Синхронизация всех данных, кроме справочников + ТаблицаПереходовНоваяСтрока(20, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(21, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(22, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(23, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(24, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(25, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(26, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено",, "СтраницаНавигацииОкончание",,, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"); + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовРасширеннойНастройкиОбменаССервисом() + + ТаблицаПереходов.Очистить(); + + // Задание параметров подключения; Проверка подключения + ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачалоНастройкиОбменаССервисом", "", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераОжиданиеПроверкиПодключенияКСервису", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"); + + // Настройка параметров для выгрузки данных (отборы на узлах) + ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераНастройкаПараметровОбменаДанными", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"); + + // Значения по умолчанию при загрузке данных + ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераПараметрыПолученияДанных",, "СтраницаНавигацииПродолжение", "СтраницаМастераПараметрыПолученияДанных_ПриПереходеДалее"); + // Создание настройки обмена; Регистрация справочников для выгрузки ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); @@ -4290,7 +4563,7 @@ ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); // Выполнение автоматического сопоставления данных; Получение статистики сопоставления - ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); // Ручное сопоставление данных ТаблицаПереходовНоваяСтрока(11, "СтраницаМастераСопоставлениеДанных",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее",, "СтраницаМастераСопоставлениеДанных_ПриОткрытии"); @@ -4301,7 +4574,7 @@ ТаблицаПереходовНоваяСтрока(14, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(15, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Настройки параметров учета; Значения по умолчанию при загрузке данных. + // Настройки параметров учета ТаблицаПереходовНоваяСтрока(16, "СтраницаМастераНастройкиОтраженияДокументовВУчете",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее",, "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"); // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников @@ -4320,57 +4593,4 @@ КонецПроцедуры -&НаСервере -Процедура ТаблицаПереходовРасширеннойНастройкиОбменаССервисом() - - ТаблицаПереходов.Очистить(); - - // Задание параметров подключения; Проверка подключения - ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачалоНастройкиОбменаССервисом", "", "СтраницаНавигацииНачало"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераОжиданиеПроверкиПодключенияКСервису", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"); - - // Настройка параметров для выгрузки данных (отборы на узлах) - ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераНастройкаПараметровОбменаДанными", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"); - - // Создание настройки обмена; Регистрация справочников для выгрузки - ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); - - // Получение справочников от корреспондента - ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - // Выполнение автоматического сопоставления данных; Получение статистики сопоставления - ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); - - // Ручное сопоставление данных - ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераСопоставлениеДанных",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее",, "СтраницаМастераСопоставлениеДанных_ПриОткрытии"); - - // Синхронизация справочников - ТаблицаПереходовНоваяСтрока(11, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(12, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(13, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(14, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - // Настройки параметров учета; Значения по умолчанию при загрузке данных. - ТаблицаПереходовНоваяСтрока(15, "СтраницаМастераНастройкиОтраженияДокументовВУчете",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее",, "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"); - - // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников - ТаблицаПереходовНоваяСтрока(16, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(17, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); - - // Синхронизация всех данных, кроме справочников - ТаблицаПереходовНоваяСтрока(18, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(19, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(20, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(21, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(22, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(23, "ОжиданиеСинхронизацииДанных",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - - ТаблицаПереходовНоваяСтрока(24, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено",, "СтраницаНавигацииОкончание",,, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"); - -КонецПроцедуры - - - +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index fd09e668d..5ea46beeb 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -1,9 +1,107 @@ - -

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

      -

      При настройке синхронизации данных будут определены следующие параметры:

      -
      • Параметры подключения и проверка работоспособности введенных параметров; + +

        Предназначен для настройки синхронизации данных между двумя программами. Возможна настройка синхронизации данных по правилам обмена, без использования правил обмена и организация совместной работы в распределенной информационной базе (РИБ).

        +

        Этапы настройки параметров синхронизации данных

        +

        Настройка синхронизации данных при выборе варианта подключения через другие каналы связи выполняется в два этапа. Первый шаг настройки синхронизации данных выполняется в текущей программе, затем необходимо перейти в другую программу и закончить в ней настройку синхронизации данных. Для передачи информации между этапами настройки синхронизации данных используется временный файл с настройками. При настройке синхронизации данных через прямое соединение с базой или через веб-сервисы вся настройка для обеих программ выполняется в текущей программе.

        +

        Во время настройки определяются следующие параметры:

        +
        • Параметры подключения. Производится также проверка работоспособности введенных параметров;
        • Правила синхронизации данных;
        • Значения по умолчанию для использования при загрузке данных; -
        • Префикс информационной базы, если он не был задан ранее.


        На заключительном шаге первого этапа настройки синхронизации данных будет предложено сохранить файл с настройками для второго этапа. В начале второго этапа следует выбрать файл с настройками и продолжить настройку синхронизации данных в другой программе.

        Если настраивается синхронизация данных по правилам обмена, то на заключительном шаге первого этапа настройки синхронизации данных будет предложено выполнить выгрузку данных. Рекомендуется выполнить выгрузку данных для возможности последующего сопоставления объектов в конце второго этапа настройки.

        -

        Особенности настройки синхронизации данных в клиент-серверном варианте

        -


        При настройке синхронизации данных в клиент-серверном варианте работы информационной базы необходимо иметь в виду, что данные синхронизируются на компьютере, на котором установлен сервер 1С:Предприятия. Для сервера 1С:Предприятия под управлением операционной системы Microsoft Windows это путь вида:
        \\servername\resource
        а для сервера под управлением Linux:
        //servername/resource.
        Необходимо убедиться в том, что каталог синхронизации доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами на каталог, используемый для синхронизации данных. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.

        \ No newline at end of file +
      • Префикс информационной базы, если он не был задан ранее.

      Если настраивается синхронизация данных по правилам обмена, то на заключительном шаге первого этапа настройки синхронизации данных будет предложено выполнить отправку данных. Рекомендуется выполнить выгрузку данных для возможности последующего сопоставления объектов в конце второго этапа настройки. Для этого включите соответствующий флажок.

      +

      При указании пользователя и пароля необходимо помнить, что этот пользователь должен иметь соответствующий доступ (например, к серверу 1С:Предприятия), для того чтобы синхронизация данных состоялась.

      +

      Рассмотрим подробнее все этапы.

      +

      Выбор шага настройки синхронизации данных

      +

      На этой странице Помощника необходимо выбрать, с какого шага начнется синхронизация. Выберите с помощью переключателя:

      +
      • Шаг 1 - Настроить новую синхронизацию данных (первый этап). +
        • +
          По гиперссылке Подробное описание можно просмотреть информацию о программах, принимающих участие в этой синхронизации.
      • Шаг 2 - Продолжить настройку синхронизации данных - следует выбрать в том случае, если вы продолжаете настройку синхронизации данных на стороне другой программы - приемника (второй этап). +
        • +

          Укажите имя файла с сохраненными настройками синхронизации данных. Если он был утерян, в списке Синхронизация данных откройте настройку синхронизации, нажмите Все действия - Получить настройки синхронизации для другой программы.

      • Перед настройкой синхронизации рекомендуется выполнить резервное копирование. Пройдите по гиперссылке, для того чтобы создать резервную копию данных (рекомендуется).

      Нажмите Далее для продолжения настройки синхронизации данных.

      +

      Выбор варианта подключения к другой программе

      +

      С помощью переключателя можно выбрать:

      +
      • Прямое подключение на этом компьютере или в локальной сети (в этом случае после настройки первого этапа следует переход ко второму этапу настройки синхронизации, при этом настройка происходит в одной и той же программе). +
        • +

          Укажите параметры подключения к другой программе:

          +
          • Выберите месторасположение программы-приемника: +
            • На данном компьютере или на компьютере в локальной сети; +
              •  Выберите Каталог информационной базы.
            • На сервере 1С:Предприятия; +
              • Введите Кластер серверов; +
              • Введите Имя информационной базы.
          • с помощью переключателя выберите: +
            • Аутентификация 1С:Предприятия: +
              • Введите имя Пользователя, от лица которого будет производиться синхронизация данных и его Пароль. 
            • Аутентификация операционной системы.
        • Нажмите Проверить подключение, для того чтобы проконтролировать введенные данные.
      • Прямое подключение к программе через интернет: +
        • Введите Адрес программы в интернете; +
        • Введите Имя пользователя и его Пароль; +
        • включите флажок Запомнить пароль. +
        • При необходимости настройте параметры прокси-сервера, перейдя по гиперссылке Параметры доступа в Интернет. +
        • Нажмите Проверить подключение, для того чтобы проконтролировать введенные данные.
      • Другие каналы связи (сетевой каталог, FTP, электронная почта)

      Нажмите кнопку Далее для перехода к дальнейшей настройке синхронизации данных.

      +

      Настройка параметров подключения через локальный или сетевой каталог

      +
      • +
        Включите флажок Настроить подключение через локальный или сетевой каталог.
        +
      • В поле Каталог  Выберите путь к папке на компьютере или сетевому диску. +
      • Для того чтобы сократить размер пересылаемого сообщения, включите флажок Сжимать отправляемые данные в архив, при необходимости введите Пароль архива. +
      • Для того чтобы убедиться в правильности введенных настроек, нажмите Проверить подключение.

      Нажмите кнопку Далее для перехода к дальнейшей настройке синхронизации данных.

      +

      Настройка параметров подключения через FTP-ресурс

      +
      • Включите флажок Настроить подключение через FTP-ресурс. +
      • Укажите Путь к каталогу, Порт проставляется автоматически. +
      • Заполните поля Пользователь (Логин) и Пароль. +
      • Укажите Максимальный размер файла, если объем данных на FTP-ресурсе ограничен. +
      • При необходимости включите флажок Пассивное соединение. +
      • Для того чтобы сократить размер пересылаемого сообщения, включите флажок Сжимать отправляемые данные в архив, при необходимости введите Пароль архива. +
      • При необходимости перейдите по гиперссылке Параметры доступа в интернет и укажите параметры прокси-сервера. +
      • Для того чтобы убедиться в правильности введенных настроек, нажмите Проверить подключение.

      Нажмите Далее для перехода к дальнейшей настройке синхронизации данных.

      +

      Настройка параметров подключения по электронной почте

      +
      • Включите флажок Настроить подключение по электронной почте. +
      • В поле Учетная запись электронной почты  Выберите из списка или нажмите Создать (клавишу F8) для добавления в список новой учетной записи. +
      • Введите Допустимый размер вложения письма. +
      • При необходимости для сокращения размеров пересылаемых сообщений включите флажок Сжимать отправляемые данные в архив, введите Пароль архива. +
      • Нажмите Проверить подключение.

      Нажмите Далее для перехода к дальнейшей настройке синхронизации данных.

      +

      Настройка параметров синхронизации данных

      +
      • Введите Наименование этой информационной базы; +
      • Введите Наименование другой информационной базы, ее Префикс; +
      • Укажите Основной способ подключения - способов подключения может быть несколько, при настройке параметров синхронизации данных выберите основной. +
      • Укажите правила синхронизации данных: +
      • Выводятся Правила отправки данных в другую программу по умолчанию. Для изменения нажмите гиперссылку Изменить правила выгрузки данных. +
      • Укажите Правила получения данных из другой программы (автозаполнение незаполненных полей) - обязательное к заполнению, нажмите гиперссылку Изменить значения автоматического заполнения, выберите значения из списка. Отсутствует для синхронизации без использования правил обмена.

      Нажмите Далее для проверки параметров и завершения настройки синхронизации данных для этой программы (в случае прямого подключения к другой программе будет предложено настроить и проверить параметры и для другой программы).

      +

      Все готово для начала синхронизации данных

      +

      На этой странице Помощника выводятся настройки синхронизации данных для первой программы (в случае прямого подключения к другой программе будет предложено проверить параметры и для другой программы). Проверьте настройки и нажмите Далее для продолжения. 

      +

      Первый этап настройки успешно завершен

      +

      На этом этапе настройки синхронизации будут сохранены в файл в указанном ранее каталоге. В случае прямого подключения настройка синхронизации завершается.

      +
      • +
        Программа указывает путь к файлу. Нажмите кнопку Сохранить.
        +
      • +
        По умолчанию включен флажок Выполнить отправку данных в другую программу (рекомендуется выполнить отправку).
        +
      • +
        Нажмите кнопку Готово для завершения синхронизации.

      Особенности настройки синхронизации данных в клиент-серверном варианте

      +

      При настройке синхронизации данных в клиент-серверном варианте работы информационной базы необходимо иметь в виду, что данные синхронизируются на компьютере, на котором установлен сервер 1С:Предприятия. Для сервера 1С:Предприятия под управлением операционной системы Microsoft Windows это путь вида:
      \\servername\resource
      а для сервера под управлением Linux:
      //servername/resource.

      +

      Необходимо убедиться в том, что каталог синхронизации доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами на каталог, используемый для синхронизации данных. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.

      +

      Особенности создания узла РИБ.

      +

      На первом этапе создается начальный образ РИБ. Все страницы помощника остаются без изменений. На странице Первый этап настройки успешно завершен по умолчанию включен флажок Создать начальный образ подчиненного узла РИБ (рекомендуется это сделать сразу). Этот шаг можно сделать и позже, из настройки синхронизации в любой момент.

      +
      • +
        После нажатия на кнопку Готово с включенным флажком предлагается создать начальный образ РИБ. Для этого перейдите по гиперссылке Создать начальный образ.
        +
      • +
        По умолчанию файл с настройками для создания узла РИБ будет создан в каталоге, который был выбран для обмена, На данном компьютере или на компьютере в локальной сети.
        +
      • +
        Однако можно с помощью переключателя выбрать создание На сервере 1С: Предприятия. В этом случае необходимо заполнить Параметры информационной базы:
        +
      • +
        Введите Кластер серверов 1С:Предприятия.
        +
      • +
        Напишите Имя информационной базы.
        +
      • +
         Выберите параметры в поле Защищенное соединение.
        +
      • +
         Выберите Тип СУБД.
        +
      • +
        Напишите Имя базы данных и Пароль пользователя.
        +
      • +
        Укажите Смещение дат.
        +
      • +
        Укажите Язык программы.
        +
      • +
        При необходимости включите флажок Установить блокировку регламентных заданий.
        +
      • +
        Нажмите Создать начальный образ.
        +
      • +
        Созданный файл с начальным образом подчиненного узла распределенной информационной базы сохраните на компьютере филиала в новую папку, которая будет рабочим каталогом новой базы.
        +
      • +
        Создайте новую базу, выбрав Добавление в список существующей информационной базы, укажите путь к файлу с начальным образом. Указанная информационная база будет добавлена в список баз.
        +
      • +
        После входа в программу автоматически запустится Помощник на странице Продолжение настройки синхронизации данных с главным узлом, продолжите настройку синхронизации, нажмите кнопку Далее, чтобы продолжить настройку и задать вариант подключения к главному узлу.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 70d09b38d..5d143c208 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -2,8 +2,7 @@ Перем ПолеСтрокаСообщенияОбОшибке; // Строка - переменная содержит строку с сообщением об ошибке -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -17,7 +16,7 @@ // - выполняет регистрацию всех данных на текущем узле плана обмена с учетом правил регистрации объектов // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры // Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, @@ -92,7 +91,7 @@ Попытка // создаем новый узел - СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); + СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле.НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); // загружаем настройки транспорта сообщений ОбновитьНастройкиТранспортаСообщенийОбмена(); @@ -121,23 +120,23 @@ WSПрокси.CreateExchange(ИмяПланаОбмена, СтрокаПараметровМастераXML, - Сериализатор.ЗаписатьXDTO(ЭкранироватьПеречисления(НастройкаОтборовНаУзле)), + Сериализатор.ЗаписатьXDTO(ЭкранироватьПеречисления(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента)), Сериализатор.ЗаписатьXDTO(ЭкранироватьПеречисления(ЗначенияПоУмолчаниюНаУзле))); ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); - WSПрокси.CreateExchange(ИмяПланаОбмена, - СтрокаПараметровМастераXML, - Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле), + WSПрокси.CreateExchange(ИмяПланаОбмена, + СтрокаПараметровМастераXML, + Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента), Сериализатор.ЗаписатьXDTO(ЗначенияПоУмолчаниюНаУзле)); Иначе - WSПрокси.CreateExchange(ИмяПланаОбмена, - СтрокаПараметровМастераXML, - ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзле), + WSПрокси.CreateExchange(ИмяПланаОбмена, + СтрокаПараметровМастераXML, + ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзле.НастройкаОтборовНаУзлеБазыКорреспондента), ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзле)); КонецЕсли; @@ -581,8 +580,8 @@ // Выполняет выгрузку параметров помощника во временное хранилище для продолжения настройки обмена во второй базе // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// АдресВременногоХранилища – Строка – при успешной выгрузке xml-файла с настройками +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// АдресВременногоХранилища - Строка - при успешной выгрузке xml-файла с настройками // в эту переменную записывается адрес временного хранилища, // по которому будут доступны данные файла на сервере и на клиенте // @@ -620,7 +619,7 @@ // Выполняет выгрузку параметров помощника в константу для продолжения настройки обмена в подчиненном узле РИБ // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры // Процедура ВыполнитьВыгрузкуПараметровМастераВКонстанту(Отказ) Экспорт @@ -641,8 +640,8 @@ // Выполняет загрузку параметров помощника из временного хранилища для продолжения настройки обмена во второй базе // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// АдресВременногоХранилища – Строка – адрес временного хранилища с данными xml-файла для загрузки +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// АдресВременногоХранилища - Строка - адрес временного хранилища с данными xml-файла для загрузки // Процедура ВыполнитьЗагрузкуПараметровМастераИзВременногоХранилища(Отказ, АдресВременногоХранилища) Экспорт @@ -670,7 +669,7 @@ // Выполняет загрузку параметров помощника из константы для продолжения настройки обмена во второй базе // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры // Процедура ВыполнитьЗагрузкуПараметровМастераИзКонстанты(Отказ) Экспорт @@ -732,7 +731,8 @@ // Сообщение об ошибке при обмене данными // -// Тип: Строка +// Возвращаемое значение: +// Строка - Сообщение об ошибке при обмене данными. // Функция СтрокаСообщенияОбОшибке() Экспорт @@ -883,6 +883,10 @@ КонецЕсли; + Если СсылкаНового <> Неопределено Тогда + НовыйУзел.УстановитьСсылкуНового(СсылкаНового); + КонецЕсли; + НовыйУзел.ДополнительныеСвойства.Вставить("Загрузка"); НовыйУзел.Записать(); @@ -896,9 +900,6 @@ СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", ВидТранспортаСообщенийОбмена); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 200); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 200); - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILМаксимальныйДопустимыйРазмерСообщения"); @@ -930,9 +931,6 @@ СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.COM); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 200); - СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 200); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMАутентификацияОперационнойСистемы"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMВариантРаботыИнформационнойБазы"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); @@ -1322,4 +1320,6 @@ Возврат Результат; КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html index 6b0d4e95b..80b6322e3 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html @@ -1,4 +1,4 @@ - +

      Параметры подключения

      Для настройки синхронизации данных необходимо знать где находится программа, с которой нужно настроить синхронизацию (другая программа). Для этого достаточно открыть программу. В главном меню выбрать пункт "Справка\О программе...".

      diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html index e6903e8ad..c9e696016 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html @@ -1,4 +1,4 @@ - +

      Параметры подключения

      Для настройки синхронизации данных нужно знать где находится программа, с которой нужно настроить синхронизацию (другая программа). Для этого достаточно открыть программу в режиме веб-клиента. В главном меню выбрать пункт "Справка\О программе...".

      diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html index c5d7e4863..d98f74f09 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html @@ -1,4 +1,4 @@ - +

      Параметры подключения

      Для настройки синхронизации данных с приложением, расположенным в Интернете, необходимо указать в поле Адрес веб-ссылку к этому приложению (точно такую же, как при открытии этого приложения в браузере).
      Например: http://www.1cfresh.com/ea_demo/123/
      В полях Пользователь и Пароль необходимо указать имя и пароль администратора приложения.

      diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html index 5235992a8..b104fa918 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 +

      Для того чтобы узнать префикс второй информационной базы следует выполнить запуск программы и перейти в форму синхронизации данных.
      Если во второй информационной базе префикс не задан, то следует указать любой желаемый префикс. Этот префикс будет установлен во второй базе при настройке синхронизации данных.

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html index aeb848895..b3fa25420 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html @@ -1,4 +1,4 @@ - +

      Файл с настройками синхронизации данных

      Если файл настроек синхронизации данных утерян, то для формирования нового файла необходимо:

      diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index 88ecde270..dce18e27f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -686,6 +686,18 @@ + + СсылкаНового + + ru + Ссылка нового + + + ExchangePlanRef + + + + УзелИнформационнойБазы @@ -1018,15 +1030,6 @@ PersonalComputer MobileDevice - - УзнатьПрефиксЭтойИнформационнойБазы - - ru - Узнать префикс этой информационной базы - - PersonalComputer - MobileDevice - КакОпределитьПараметрыПодключения diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl index e5d2a8d05..0e57bbe3e 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -37,8 +37,9 @@ Элементы.СписокКонстант.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокКонстант +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКонстант // &НаКлиенте @@ -48,8 +49,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // // Производит выбор константы @@ -61,8 +63,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // // Производит выбор и оповещает о нем @@ -95,3 +98,5 @@ КонецЕсли; Возврат Неопределено; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form index 468d1324e..52180fa5c 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -430,7 +430,6 @@ Form.Command.ВыбратьТекущуюСтроку Normal - PictureAndText true true UserCmds diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl index 2151a544d..761d07736 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -67,8 +67,9 @@ Колонки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -76,8 +77,9 @@ Элементы.СписокДанных.Обновить(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокДанных +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокДанных // &НаКлиенте @@ -86,8 +88,9 @@ ОткрытьФормуТекущегоОбъекта(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -105,8 +108,9 @@ ПроизвестиВыбор(Ложь); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -204,3 +208,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca deleted file mode 100644 index dceae1b97..000000000 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - ДеревоУзловОбменаКод - - - - - ДеревоУзловОбмена.Ссылка - NotFilled - - - - - Видимость - false - - - Отображать - false - - - - diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl index 0a10168af..0f758954f 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl @@ -1,9 +1,11 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); @@ -30,8 +32,9 @@ Элементы.ДеревоУзловОбмена.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоУзлов +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоУзлов // &НаКлиенте @@ -44,8 +47,9 @@ ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // // Выбирает узел и передает выбранные значения в вызывающую форму. @@ -63,9 +67,29 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаКод.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры // &НаКлиенте @@ -206,3 +230,5 @@ КонецЦикла; Возврат Неопределено; КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl index 3fc1623cf..f11ee1c6c 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -15,7 +15,7 @@ ТекущийОбъект = ЭтотОбъект(); ТекущийОбъект.ПрочитатьНастройки(); - ТекущийОбъект.ПрочитатьПризнакПоддержкиБСП(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); Строка = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); Если НРег(Прав(Строка, 4)) = ".epf" Тогда @@ -54,8 +54,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -75,8 +76,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -96,8 +98,9 @@ Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаКлиенте @@ -130,12 +133,24 @@ ТекущийОбъект = ЭтотОбъект(); Если ВариантИспользованияКонсолиЗапросов = 2 Тогда + + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + Если Лев(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" + И Прав(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" + Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = Сред(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, + 2, СтрДлина(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) - 2); + КонецЕсли; + Если НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) <> ".epf" Тогда ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) + ".epf"; КонецЕсли; + ИначеЕсли ВариантИспользованияКонсолиЗапросов = 0 Тогда ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ""; + КонецЕсли; + Результат = ТекущийОбъект.ПроверитьКорректностьНастроек(); ЭтотОбъект(ТекущийОбъект); @@ -160,3 +175,5 @@ ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ПутьКФайлу; ЭтотОбъект(ТекущийОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl index 191bd0c36..6324e6539 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -21,8 +21,9 @@ Заголовок = УзелОбменаСсылка; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // // Производит запись измененных данных и закрывает форму. @@ -33,8 +34,9 @@ Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // &НаСервере @@ -65,3 +67,5 @@ Данные = Новый Структура("НомерОтправленного, НомерПринятого", НомерОтправленного, НомерПринятого); ЭтотОбъект().УстановитьПараметрыУзлаОбмена(УзелОбменаСсылка, Данные); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform index ca7dfea49512edab996a9a99c569c193745dfcd4..1db2eeecbc65b7811f94e6e75e5aea8bfad51014 100644 GIT binary patch delta 292 zcmccQ*x31Tr>1W;w&6Vrr0P zmS|>Rq-$boX`*YAVvwerXk=-oYm%01VVRO*oM>TSKKU}|8R8Tk=6bARVrFKTlxA$A zYnGA - - - - - ДеревоУзловОбменаНомерСообщения - - - - - 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 index d43715fe0..aa5af13c3 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form @@ -1206,7 +1206,7 @@ ru Снять пометку у всех узлов - 4 + 3 ru Снять пометку всем узлам @@ -1231,7 +1231,7 @@ ru Изменить пометку всех узлов - 3 + 4 ru Изменить пометку всех узлов diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl index f1068f0c9..c25f8c05d 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl @@ -1,9 +1,11 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); @@ -13,7 +15,7 @@ ТекущийОбъект = ЭтотОбъект(); ТекущийОбъект.ПрочитатьНастройки(); - ТекущийОбъект.ПрочитатьПризнакПоддержкиБСП(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); ЭтотОбъект(ТекущийОбъект); ОбъектРегистрации = Параметры.ОбъектРегистрации; @@ -40,8 +42,9 @@ РазвернутьВсеУзлы(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоУзловОбмена +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоУзловОбмена // &НаКлиенте @@ -67,8 +70,9 @@ ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -159,8 +163,57 @@ ОткрытьФормуНастроекОбработки(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаНомерСообщения.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Пометка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'ДеревоУзловОбменаНомерСообщения'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаКод.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаАвторегистрация.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры // &НаКлиенте @@ -309,4 +362,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 0697af8c5..000000000 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - СписокСсылокНомерСообщения - - - - - СписокСсылок.НеВыгружалось - 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 index 476cfe466..63900dcbf 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -750,33 +750,6 @@ UserCmds Auto - - ПоказатьРезультатВыгрузки - 133 - true - true - - true - - - ПоказатьРезультатВыгрузкиExtendedTooltip - 224 - Label - true - true - - Left - - - Form.Command.ПоказатьРезультатВыгрузки - Normal - Auto - true - true - UserCmds - - Auto - ФормаОткрытьФормуРегистрацииНаУзлах 182 @@ -810,6 +783,88 @@ Auto + + ФормаГруппаКнопокРИБ + 316 + + ПоказатьРезультатВыгрузки + 133 + true + true + + true + + + ПоказатьРезультатВыгрузкиExtendedTooltip + 224 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Normal + Auto + true + true + UserCmds + + Auto + + + ФормаЗарегистрироватьИОМИПредопределенные + 314 + true + true + + true + + + ФормаЗарегистрироватьИОМИПредопределенныеРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + Form.Command.ЗарегистрироватьИОМИПредопределенные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа кнопок РИБ</value> + + + ru + Форма группа кнопок РИБ + + + ФормаГруппаКнопокРИБРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + true true @@ -949,6 +1004,7 @@ Left true + 28 true true true @@ -964,8 +1020,6 @@ Объекты регистрации true - true - true ДеревоМетаданныхГруппа1ExtendedTooltip 243 @@ -1023,9 +1077,9 @@ Left true + 2 true true - true @@ -1073,7 +1127,7 @@ true true - true + false true @@ -1086,8 +1140,6 @@ Информация о регистрации true - true - true ДеревоМетаданныхГруппа2ExtendedTooltip 246 @@ -1116,10 +1168,10 @@ ДеревоМетаданныхСтрокаПоиска - 316 + 320 ДеревоМетаданныхСтрокаПоискаРасширеннаяПодсказка - 318 + 322 Label true true @@ -1129,7 +1181,7 @@ ДеревоМетаданныхСтрокаПоискаКонтекстноеМеню - 317 + 321 true ДеревоМетаданных @@ -1139,10 +1191,10 @@ ДеревоМетаданныхСостояниеПросмотра - 319 + 323 ДеревоМетаданныхСостояниеПросмотраРасширеннаяПодсказка - 321 + 325 Label true true @@ -1152,7 +1204,7 @@ ДеревоМетаданныхСостояниеПросмотраКонтекстноеМеню - 320 + 324 true ViewStatusAddition @@ -1163,10 +1215,10 @@ ДеревоМетаданныхУправлениеПоиском - 322 + 326 ДеревоМетаданныхУправлениеПоискомРасширеннаяПодсказка - 324 + 328 Label true true @@ -1176,7 +1228,7 @@ ДеревоМетаданныхУправлениеПоискомКонтекстноеМеню - 323 + 327 true SearchControlAddition @@ -1633,6 +1685,7 @@ true Tree + 50 true true true @@ -1851,10 +1904,10 @@ СписокКонстантСтрокаПоиска - 337 + 341 СписокКонстантСтрокаПоискаРасширеннаяПодсказка - 339 + 343 Label true true @@ -1864,7 +1917,7 @@ СписокКонстантСтрокаПоискаКонтекстноеМеню - 338 + 342 true СписокКонстант @@ -1874,10 +1927,10 @@ СписокКонстантСостояниеПросмотра - 340 + 344 СписокКонстантСостояниеПросмотраРасширеннаяПодсказка - 342 + 346 Label true true @@ -1887,7 +1940,7 @@ СписокКонстантСостояниеПросмотраКонтекстноеМеню - 341 + 345 true ViewStatusAddition @@ -1898,10 +1951,10 @@ СписокКонстантУправлениеПоиском - 343 + 347 СписокКонстантУправлениеПоискомРасширеннаяПодсказка - 345 + 349 Label true true @@ -1911,7 +1964,7 @@ СписокКонстантУправлениеПоискомКонтекстноеМеню - 344 + 348 true SearchControlAddition @@ -2450,10 +2503,10 @@ СписокСсылокСтрокаПоиска - 357 + 361 СписокСсылокСтрокаПоискаРасширеннаяПодсказка - 359 + 363 Label true true @@ -2463,7 +2516,7 @@ СписокСсылокСтрокаПоискаКонтекстноеМеню - 358 + 362 true СписокСсылок @@ -2473,10 +2526,10 @@ СписокСсылокСостояниеПросмотра - 360 + 364 СписокСсылокСостояниеПросмотраРасширеннаяПодсказка - 362 + 366 Label true true @@ -2486,7 +2539,7 @@ СписокСсылокСостояниеПросмотраКонтекстноеМеню - 361 + 365 true ViewStatusAddition @@ -2497,10 +2550,10 @@ СписокСсылокУправлениеПоиском - 363 + 367 СписокСсылокУправлениеПоискомРасширеннаяПодсказка - 365 + 369 Label true true @@ -2510,7 +2563,7 @@ СписокСсылокУправлениеПоискомКонтекстноеМеню - 364 + 368 true SearchControlAddition @@ -3163,10 +3216,10 @@ СписокНаборовЗаписейСтрокаПоиска - 376 + 380 СписокНаборовЗаписейСтрокаПоискаРасширеннаяПодсказка - 378 + 382 Label true true @@ -3176,7 +3229,7 @@ СписокНаборовЗаписейСтрокаПоискаКонтекстноеМеню - 377 + 381 true СписокНаборовЗаписей @@ -3186,10 +3239,10 @@ СписокНаборовЗаписейСостояниеПросмотра - 379 + 383 СписокНаборовЗаписейСостояниеПросмотраРасширеннаяПодсказка - 381 + 385 Label true true @@ -3199,7 +3252,7 @@ СписокНаборовЗаписейСостояниеПросмотраКонтекстноеМеню - 380 + 384 true ViewStatusAddition @@ -3210,10 +3263,10 @@ СписокНаборовЗаписейУправлениеПоиском - 382 + 386 СписокНаборовЗаписейУправлениеПоискомРасширеннаяПодсказка - 384 + 388 Label true true @@ -3223,7 +3276,7 @@ СписокНаборовЗаписейУправлениеПоискомКонтекстноеМеню - 383 + 387 true SearchControlAddition @@ -4679,7 +4732,7 @@ ru Добавить регистрацию результата подбора - 9 + 8 ru Добавить регистрацию результата подбора @@ -4701,7 +4754,7 @@ ru Добавить по результату запроса - 10 + 9 ru Добавить по результату запроса @@ -4723,7 +4776,7 @@ ru Удалить по результату запроса - 11 + 10 ru Удалить по результату запроса @@ -4745,7 +4798,7 @@ ru Добавить регистрацию константы - 12 + 11 ru Добавить регистрацию константы @@ -4767,7 +4820,7 @@ ru Удалить регистрацию константы - 13 + 12 ru Удалить регистрацию константы @@ -4789,7 +4842,7 @@ ru Редактировать номера сообщений - 14 + 13 ru Редактировать номера сообщений @@ -4811,7 +4864,7 @@ ru Результат стандартной выгрузки (РИБ) - 15 + 14 ru Показать результат выгрузки @@ -4833,7 +4886,7 @@ ru Добавить регистрацию результата отбора - 8 + 15 ru Добавить регистрацию результата отбора @@ -5119,6 +5172,28 @@ Auto Auto + + ЗарегистрироватьИОМИПредопределенные + + <key>ru</key> + <value>Зарегистрировать данные для восстановления подчиненного узла РИБ</value> + + 28 + + ru + Зарегистрировать данные для восстановления подчиненного узла РИБ + + + true + + + + ЗарегистрироватьИОМИПредопределенные + + + Auto + Auto + ДополнительнаяОбработкаСсылка diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index 6175e720e..3ee3c31e9 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -17,12 +17,13 @@ &НаКлиенте Перем ТекущаяСтрокаМетаданных; -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); @@ -30,6 +31,8 @@ Возврат; КонецЕсли; + ПроверитьВерсиюИРежимСовместимостиПлатформы(); + ПараметрТаблицаРегистрации = Неопределено; ПараметрОбъектРегистрации = Неопределено; @@ -82,7 +85,7 @@ // Настройки объекта инициализируем всегда ТекущийОбъект.ПрочитатьНастройки(); - ТекущийОбъект.ПрочитатьПризнакПоддержкиБСП(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); ЭтотОбъект(ТекущийОбъект); // Остальное инициализируем, только если будем открывать эту форму, @@ -193,8 +196,9 @@ ПроконтролироватьНастройки(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -238,8 +242,9 @@ ОбновитьСодержимоеСтраницы(ТекущаяСтраница); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоМетаданных +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоМетаданных // &НаКлиенте @@ -255,8 +260,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокКонстант +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКонстант // &НаКлиенте @@ -275,8 +281,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокСсылок +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСсылок // &НаКлиенте @@ -284,8 +291,9 @@ ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокНаборовЗаписей +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокНаборовЗаписей // &НаКлиенте @@ -294,7 +302,7 @@ ПараметрыЗаписи = СтруктураКлючаНабораЗаписей(Элемент.ТекущиеДанные); Если ПараметрыЗаписи <> Неопределено Тогда - ОткрытьФорму(ПараметрыЗаписи.ИмяФормы, Новый Структура("Ключ", ПараметрыЗаписи.Ключ)); + ОткрытьФорму(ПараметрыЗаписи.ИмяФормы, Новый Структура(ПараметрыЗаписи.Параметр, ПараметрыЗаписи.Значение)); КонецЕсли; КонецПроцедуры @@ -304,8 +312,9 @@ ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // &НаКлиенте @@ -606,8 +615,91 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ЗарегистрироватьИОМИПредопределенные(Команда) + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = СтрЗаменить( + НСтр("ru = 'Зарегистрировать данные для восстановления подчиненного узла РИБ + |на узле ""%1""?'"), + "%1", УзелОбменаСсылка + ); + + Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьИОМЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСсылокНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокСсылок.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокКонстантНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокКонстант.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокНаборовЗаписейНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокНаборовЗаписей.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоМетаданныхКоличествоИзмененийСтрокой.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоМетаданных.КоличествоИзменений"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Нет изменений'")); + +КонецПроцедуры // // Экспортный обработчик команд для подсистемы дополнительных отчетов и обработок @@ -638,6 +730,20 @@ КонецПроцедуры +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ЗарегистрироватьИОМЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Истина, ЗарегистрироватьИОМИПредопределенныеНаСервере() ); + + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + // Обработчик оповещения продолжения диалога &НаКлиенте Процедура ОбработкаВыбораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт @@ -792,6 +898,19 @@ ПоследняяАктивнаяСтрокаМетаданных = Неопределено; Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; + // Обновляем команды, зависящие от узла + + МетаПланОбменаУзла = УзелОбменаСсылка.Метаданные(); + + Если Объект.ДоступнаРаботаРИБ // Доступна работа с ИОМ по версии БСП + И (ПланыОбмена.ГлавныйУзел() = Неопределено) // Текущая база - главный узел + И МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза // Текущий узел - РИБ + Тогда + Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Истина; + Иначе + Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -839,16 +958,21 @@ Проверка = ТекущийОбъект.ПроверитьКорректностьНастроек(); ЭтотОбъект(ТекущийОбъект); + Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов <> Неопределено Тогда Возврат Неопределено; + ИначеЕсли ПустаяСтрока(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) Тогда Возврат Неопределено; + ИначеЕсли НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) = ".epf" Тогда Обработка = ВнешниеОбработки.Создать(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); ИдентификаторФормы = ".ФормаОбъекта"; - Иначе + + Иначе Обработка = Обработки[ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов].Создать(); ИдентификаторФормы = ".Форма"; + КонецЕсли; Возврат Обработка.Метаданные().ПолноеИмя() + ИдентификаторФормы; @@ -1366,9 +1490,18 @@ Фильтр = Новый Структура("МетаПолноеИмя", МетаПолноеИмя); Для Каждого СтрокаУдаления Из СтрокиДерева.НайтиСтроки(Фильтр, Ложь) Цикл СтрокиДерева.Удалить(СтрокаУдаления); + // Если это был последний потомок, то удаляем и родителя + Если СтрокиДерева.Количество() = 0 Тогда + РодительскаяСтрока = СтрокиДерева.Родитель; + Если РодительскаяСтрока.Родитель <> Неопределено Тогда + РодительскаяСтрока.Родитель.Строки.Удалить(РодительскаяСтрока); + // И иерархически вниз уже не ходим + Возврат; + КонецЕсли; + КонецЕсли; КонецЦикла; - // И из оставшихся иерархически + // Удаляем из оставшихся подчиненных Для Каждого СтрокаДерева Из СтрокиДерева Цикл УдалитьСтрокиДереваЗначенийМетаданных(МетаПолноеИмя, СтрокаДерева.Строки); КонецЦикла; @@ -1546,7 +1679,7 @@ НастроитьВидимостьКомандОбщегоМеню(); КонецПроцедуры -// Вывод изменений для ссылочного типа (cправочник, документ, план видов характеристик, +// Вывод изменений для ссылочного типа (справочник, документ, план видов характеристик, // план счетов, вид расчета, бизнес-процессы, задачи) // &НаСервере @@ -2076,14 +2209,15 @@ &НаСервере Функция СтруктураКлючаНабораЗаписей(Знач ТекущиеДанные) - Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокНаборовЗаписейИмяТаблицы); + + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокНаборовЗаписейИмяТаблицы); Если Описание = Неопределено Тогда // Неизвестный источник Возврат Неопределено; КонецЕсли; - Результат = Новый Структура("Ключ, ИмяФормы"); + Результат = Новый Структура("ИмяФормы, Параметр, Значение"); Измерения = Новый Структура; ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); @@ -2097,15 +2231,69 @@ Результат = Неопределено; Иначе Результат.ИмяФормы = МетаРегистратора.ПолноеИмя() + ".ФормаОбъекта"; - Результат.Ключ = Измерения.Регистратор; + Результат.Параметр = "Ключ"; + Результат.Значение = Измерения.Регистратор; КонецЕсли; + ИначеЕсли Измерения.Количество() = 0 Тогда // Вырожденный набор записей Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка"; + Иначе - Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаЗаписи"; - Результат.Ключ = Описание.Менеджер.СоздатьКлючЗаписи(Измерения); + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из Измерения Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Набор.Прочитать(); + Если Набор.Количество() = 1 Тогда + // Одиночный элемент + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаЗаписи"; + Результат.Параметр = "Ключ"; + + Ключ = Новый Структура; + Для Каждого КолонкаНабора Из Набор.Выгрузить().Колонки Цикл + ИмяКолонки = КолонкаНабора.Имя; + Ключ.Вставить(ИмяКолонки, Набор[0][ИмяКолонки]); + КонецЦикла; + Результат.Значение = Описание.Менеджер.СоздатьКлючЗаписи(Ключ); + Иначе + // Список + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка"; + Результат.Параметр = "Отбор"; + Результат.Значение = Измерения; + КонецЕсли; + КонецЕсли; Возврат Результат; КонецФункции + +&НаСервере +Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() + + Информация = Новый СистемнаяИнформация; + Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" + И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать + Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_2_16"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]))) Тогда + + ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + |1С:Предприятие 8.3 с отключенным режимом совместимости или выше'"); + + КонецЕсли; + +КонецФункции + +&НаСервере +Функция ЗарегистрироватьИОМИПредопределенныеНаСервере() + + ТекущийОбъект = ЭтотОбъект(); + Возврат ТекущийОбъект.БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(УзелОбменаСсылка); + +КонецФункции + + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html new file mode 100644 index 000000000..b049a87ad --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html @@ -0,0 +1,24 @@ + +

      Предназначена для регистрации изменений данных в программе. Это необходимо для последующей отправки данных при синхронизации в другие программы.

      +

      Список можно открыть по команде Все действия - Состав отправляемых данных из списка Синхронизации данных.

      +

      Ведется регистрация номеров сообщений. Нажмите на гиперссылку с номерами сообщений, чтобы просмотреть их или исправить.

      +

      Возможен отбор изменений - выберите из списка:

      +
      • Все; +
      • Только выгруженные; +
      • Только невыгруженные.

      Список состоит из двух частей:

      +
      • левая часть состоит из двух колонок: +
        • Объект конфигурации - перечислены объекты программы (справочники, документы и т.д.) в виде дерева; +
        • Зарегистрировано/не выгружено - количество измененных (или вновь введенных) и не выгруженных элементов в этих объектах;
      • правая часть меняется в зависимости от выделенного объекта в левой части: +
        • По выделенной группе объектов в колонке Описание приводится подробное описание статистических данных левой части. +
        • По выделенному объекту программы правая часть делится на две колонки: +
          • Наименование объекта конкретного (например, Валюта) - приводится перечень всех измененных и не выгруженных элементов списка; +
          • Номер отправленного - номер сообщения, в котором отправлены измененные элементы списка (указывается номер сообщения или выводится Не выгружалось);

      Регистрация изменений и отмена регистрации

      +

      Измененные и вновь вводимые объекты программа регистрирует автоматически. Для ручной регистрации объектов выберите объект в дереве с помощью флажков, нажмите Зарегистрировать изменения: 

      +
      • - всех объектов выбранных типов - можно выбрать объект и все его подчиненные объекты; +
      • - объектов выбранных типов с авторегистрацией; +
      • - одиночного объекта (выберите из списка объект или создайте новый); +
      • - объектов при помощи отбора (задайте отбор, отберите нужные элементы); +
      • - результатов запроса.

      Для того чтобы отменить отправку всех данных, приготовленных для других программ, в дереве объектов выделите корень (информационную базу) и нажмите Отменить регистрацию изменений - Всех объектов выбранных типов) - все настройки аналогичны предыдущим.

      +

      Другие возможные действия:

      +
      • Для того чтобы настроить параметры регистрации изменений объектов, нажмите Настройка. Можно настроить параметры авторегистрации, установить номер сообщения при регистрации, при необходимости указать путь к каталогу консоли запросов. +
      • Для того чтобы просмотреть результат выгрузки, выделите объект, по которому зарегистрированы изменения, в левой части списка, при этом в правой части появляется список элементов, выделите нужный элемент, нажмите Показать результат выгрузки или Все действия - Стандартный результат выгрузки.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index 23158936b..abe564c3d 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// +#Область ПрограммныйИнтерфейс // Возвращает дерево значений, заполненное данными для выбора узла обмена. В дереве 2 уровня: // план обмена -> узлы обмена. Служебные узлы выброшены. @@ -66,8 +64,7 @@ | НомерПринятого КАК НомерПринятого, | NULL КАК НомерСообщения, | NULL КАК НеВыгружалось, - | 0 КАК Пометка, - | 0 КАК ИсходнаяПометка + | 0 КАК КоличествоИзмененийНаУзле |ИЗ | ПланОбмена.{0} КАК ПланОбмена |ГДЕ @@ -104,28 +101,21 @@ |ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕССЫЛКИ(ПланОбмена.Ссылка) КАК Наименование, | ВЫБОР - | КОГДА ПланОбмена.Ссылка.ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 + | КОГДА ПланОбмена.ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 | КОНЕЦ КАК ИндексКартинки, | - | ""{0}"" КАК ПланОбменаИмя, - | ПланОбмена.Ссылка.Код КАК Код, - | ПланОбмена.Ссылка.Ссылка КАК Ссылка, - | ПланОбмена.Ссылка.НомерОтправленного КАК НомерОтправленного, - | ПланОбмена.Ссылка.НомерПринятого КАК НомерПринятого, - | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ""{0}"" КАК ПланОбменаИмя, + | ПланОбмена.Код КАК Код, + | ПланОбмена.Ссылка КАК Ссылка, + | ПланОбмена.НомерОтправленного КАК НомерОтправленного, + | ПланОбмена.НомерПринятого КАК НомерПринятого, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, | ВЫБОР | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК НеВыгружалось, - | ВЫБОР - | КОГДА КОЛИЧЕСТВО(ТаблицаИзменений.Узел) > 0 ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК Пометка, - | ВЫБОР - | КОГДА КОЛИЧЕСТВО(ТаблицаИзменений.Узел) > 0 ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК ИсходнаяПометка + | КОЛИЧЕСТВО(ТаблицаИзменений.Узел) КАК КоличествоИзмененийНаУзле |ИЗ | ПланОбмена.{0} КАК ПланОбмена |ЛЕВОЕ СОЕДИНЕНИЕ @@ -183,6 +173,9 @@ НоваяСтрока = СтрокаПлана.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаУзла); + НоваяСтрока.ИсходнаяПометка = ?(СтрокаУзла.КоличествоИзмененийНаУзле > 0, 1, 0); + НоваяСтрока.Пометка = НоваяСтрока.ИсходнаяПометка; + НоваяСтрока.ИндексКартинкиАвторегистрация = Авторегистрация; НоваяСтрока.ИдентификаторСтроки = ТекНомерСтроки; @@ -931,7 +924,7 @@ Строка = Измерения.Добавить(); Строка.Имя = "Регистратор"; Строка.ТипЗначения = Документы.ТипВсеСсылки(); - Строка.Заголовок = "Регистратор"; + Строка.Заголовок = НСтр("ru = 'Регистратор'"); КонецЕсли; // Период @@ -939,7 +932,7 @@ Строка = Измерения.Добавить(); Строка.Имя = "Период"; Строка.ТипЗначения = Новый ОписаниеТипов("Дата"); - Строка.Заголовок = "Период"; + Строка.Заголовок = НСтр("ru = 'Период'"); КонецЕсли; // Измерения @@ -957,7 +950,7 @@ Строка = Измерения.Добавить(); Строка.Имя = "ОбъектПерерасчета"; Строка.ТипЗначения = Документы.ТипВсеСсылки(); - Строка.Заголовок = "Объект перерасчета"; + Строка.Заголовок = НСтр("ru = 'Объект перерасчета'"); КонецЕсли; Возврат Измерения; @@ -1177,14 +1170,16 @@ // Устанавливаем флаги поддержки БСП // -Процедура ПрочитатьПризнакПоддержкиБСП() Экспорт +Процедура ПрочитатьПризнакиПоддержкиБСП() Экспорт КонфигурацияПоддерживаетБСП = БСП_ДоступнаТребуемаяВерсия(); Если КонфигурацияПоддерживаетБСП Тогда // Используем внешний интерфейс регистрации - ДоступнаРегистрацияСредствамиБСП = БСП_ДоступнаТребуемаяВерсия("2.1.5.11"); + ДоступнаРегистрацияСредствамиБСП = БСП_ДоступнаТребуемаяВерсия("2.1.5.11"); + ДоступнаРаботаРИБ = БСП_ДоступнаТребуемаяВерсия("2.1.3.25"); Иначе ДоступнаРегистрацияСредствамиБСП = Ложь; + ДоступнаРаботаРИБ = Ложь; КонецЕсли; КонецПроцедуры @@ -1224,22 +1219,26 @@ ИначеЕсли НРег(Прав(СокрЛП(НастройкаАдресВнешнейОбработкиЗапросов), 4)) = ".epf" Тогда // Файл обработки Файл = Новый Файл(НастройкаАдресВнешнейОбработкиЗапросов); - Если Не Файл.Существует() Тогда - Текст = НСтр("ru = 'Файл ""%1"" не доступен %2'"); - - Текст = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов); - Если ЭтоФайловаяБаза() Тогда - РасположениеФайла = ""; + Попытка + Если Файл.Существует() Тогда + ВнешниеОбработки.Создать(НастройкаАдресВнешнейОбработкиЗапросов); Иначе - РасположениеФайла = НСтр("ru = 'на сервере'"); + Если ЭтоФайловаяБаза() Тогда + Текст = НСтр("ru = 'Файл ""%1"" не доступен'"); + Иначе + Текст = НСтр("ru = 'Файл ""%1"" не доступен на сервере'"); + КонецЕсли; + Результат.НастройкаАдресВнешнейОбработкиЗапросов = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов);; + Результат.ЕстьОшибки = Истина; КонецЕсли; - - Текст = СтрЗаменить(Текст, "%2", РасположениеФайла); - Результат.НастройкаАдресВнешнейОбработкиЗапросов = Текст; + Исключение + // Некорректный файл или запрет профилями безопасности + Информация = ИнформацияОбОшибке(); + Результат.НастройкаАдресВнешнейОбработкиЗапросов = КраткоеПредставлениеОшибки(Информация); Результат.ЕстьОшибки = Истина; - КонецЕсли; - + КонецПопытки; + Иначе // В составе конфигурации Если Метаданные.Обработки.Найти(НастройкаАдресВнешнейОбработкиЗапросов) = Неопределено Тогда @@ -1302,8 +1301,9 @@ Возврат Инфо; КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // // @@ -1643,11 +1643,15 @@ // Функция ОбщегоНазначенияОбщийМодуль(Знач ИмяМодуля) - Если Метаданные.ОбщиеМодули.Найти(ИмяМодуля) <> Неопределено Тогда - Возврат Вычислить(ИмяМодуля); + Если Метаданные.ОбщиеМодули.Найти(ИмяМодуля) = Неопределено Тогда + Возврат Неопределено; КонецЕсли; - Возврат Неопределено; + УстановитьБезопасныйРежим(Истина); + Результат = Вычислить(ИмяМодуля); + УстановитьБезопасныйРежим(Ложь); + + Возврат Результат; КонецФункции // Возвращает флаг того, что БСП в текущей конфигурации обеспечивает функционал @@ -1694,13 +1698,26 @@ // Возвращает флаг контроля объекта в БСП // -Функция БСП_КонтрольВыгрузкиОбъекта(Узлы, ОбъектРегистрации) - МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); - - Отправка = ОтправкаЭлементаДанных.Авто; - МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узлы); +Функция БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) - Возврат Отправка <> ОтправкаЭлементаДанных.Удалить; + МодульОбменДаннымиПовтИсп = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиПовтИсп"); + Если МодульОбменДаннымиПовтИсп <> Неопределено Тогда + РежимВыгрузкиОбъекта = МодульОбменДаннымиПовтИсп.РежимВыгрузкиОбъекта(ОбъектРегистрации.Метаданные().ПолноеИмя(), Узел); + Если РежимВыгрузкиОбъекта = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости Тогда + // Выгружаемые по ссылке можно всегда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Отправка = ОтправкаЭлементаДанных.Авто; + МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); + Если МодульОбменДаннымиСобытия <> Неопределено Тогда + МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узел); + Возврат Отправка <> ОтправкаЭлементаДанных.Удалить; + КонецЕсли; + + // Неизвестная версия БСП + Возврат Истина; КонецФункции // Проверяет ссылку на возможность регистрации изменения в БСП. @@ -1892,4 +1909,78 @@ Возврат Результат; КонецФункции +// Обновляет данные ИОМ и регистрируем на переданном узле +// +Функция БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(Знач Узел) Экспорт + + Результат = Новый Структура("Всего, Успешно", 0 , 0); + + МетаПланОбменаУзла = Узел.Метаданные(); + + Если (Не ДоступнаРаботаРИБ) // Недоступна работа с ИОМ из-за версии БСП + Или (ПланыОбмена.ГлавныйУзел() <> Неопределено) // Текущая база - подчиненный узел + Или (Не МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза) // Узел-параметр не РИБ + Тогда + Возврат Результат; + КонецЕсли; + + // Актуализируем + МодульСтандартныеПодсистемыСервер = ОбщегоНазначенияОбщийМодуль("СтандартныеПодсистемыСервер"); + МодульСтандартныеПодсистемыСервер.ОбновитьПараметрыРаботыПрограммы(); + + // Для РИБ все регистрируем без контроля правил БСП + + // Сам справочник + МетаСправочник = Метаданные.Справочники["ИдентификаторыОбъектовМетаданных"]; + Если МетаПланОбменаУзла.Состав.Содержит(МетаСправочник) Тогда + ПланыОбмена.ЗарегистрироватьИзменения(Узел, МетаСправочник); + + Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) КАК КоличествоЭлементов ИЗ Справочник.ИдентификаторыОбъектовМетаданных"); + Результат.Успешно = Запрос.Выполнить().Выгрузить()[0].КоличествоЭлементов; + КонецЕсли; + + // Предопределенные элементы + Результат.Успешно = Результат.Успешно + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.Справочники) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыВидовХарактеристик) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыСчетов) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыВидовРасчета); + + Результат.Всего = Результат.Успешно; + Возврат Результат; +КонецФункции + +Функция ЗарегистрироватьИзменениеПредопределенныхДляУзла(Знач Узел, Знач КоллекцияМетаданных) + + СоставУзла = Узел.Метаданные().Состав; + Результат = 0; + Запрос = Новый Запрос; + + Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл + Если СоставУзла.Содержит(ОбъектМетаданных) Тогда + + Запрос.Текст = " + |ВЫБРАТЬ + | Ссылка + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя() + " + |ГДЕ + | Предопределенный"; + Выборка = Запрос.Выполнить().Выбрать(); + + Результат = Результат + Выборка.Количество(); + + // Для РИБ регистрируем без контроля правил БСП + Пока Выборка.Следующий() Цикл + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка); + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo index 6ec3413f4..098431a23 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo @@ -12,6 +12,11 @@ true DataProcessor.РегистрацияИзмененийДляОбменаДанными.Form.Форма DataProcessor.РегистрацияИзмененийДляОбменаДанными.Form.СообщениеОбОбычномИнтерфейсе + + + ru + + НастройкаАвторегистрацияПоследовательностей @@ -114,6 +119,18 @@ + + ДоступнаРаботаРИБ + + ru + Доступна работа РИБ + + + Boolean + + + + ВыборУзлаПланаОбмена diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index 758735e6c..ac16beeb8 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 ce14da397..ba9c842c6 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -104,8 +104,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) @@ -114,8 +115,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Записать(Команда) @@ -139,8 +141,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗаписатьИЗакрытьЗавершение(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -254,3 +257,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/ConditionalAppearance.dcssca deleted file mode 100644 index cc68d7b86..000000000 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/ConditionalAppearance.dcssca +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Конец - - - - - ТаблицаФоновыеЗадания.Конец - NotFilled - - - - - Текст - <> - - - - diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 7950b4c29..74369fc27 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -1108,7 +1108,6 @@ ВидОтбораПоПериоду 110 - true true @@ -1197,7 +1196,6 @@ true - ВидПериодаExtendedTooltip 212 @@ -1338,7 +1336,6 @@ true - 35 false @@ -3027,7 +3024,7 @@ ru Обновить - 4 + 1 ru Обновить список регламентных и фоновых заданий (с учетом отбора) @@ -3054,7 +3051,7 @@ ru Открыть... - 6 + 2 ru Открыть фоновое задание @@ -3079,7 +3076,7 @@ ru Отменить фоновое задание - 7 + 3 ru Отменить фоновое задание @@ -3101,7 +3098,7 @@ ru Открыть расписание... - 13 + 4 ru Открыть расписание @@ -3126,7 +3123,7 @@ ru Выполнить сейчас - 10 + 5 ru Выполнить процедуру регламентного задания либо в этом сеансе (для файловой ИБ), либо в фоновом задании на сервере (для серверной ИБ) @@ -3152,7 +3149,7 @@ ru Включить - 1 + 6 ru Включить регламентное задание @@ -3174,7 +3171,7 @@ ru Выключить - 2 + 7 ru Выключить регламентное задание diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 78f9eea19..019a8bd19 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -54,8 +56,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВидОтбораПоПериодуПриИзменении(Элемент) @@ -93,8 +96,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаФоновыеЗадания +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаФоновыеЗадания &НаКлиенте Процедура ТаблицаФоновыеЗаданияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -103,8 +107,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаРегламентныеЗадания +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаРегламентныеЗадания &НаКлиенте Процедура ТаблицаРегламентныеЗаданияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -153,8 +158,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьРегламентноеЗаданиеВручную(Команда) @@ -319,8 +325,28 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Конец.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаФоновыеЗадания.Конец"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<>'")); + +КонецПроцедуры &НаКлиенте Процедура ТаблицаРегламентныеЗаданияПередУдалениемЗавершение(Ответ, Неопределен) Экспорт @@ -907,3 +933,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html index 92d41889c..91c1ea3c0 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 fba767aa0..851895e86 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -56,3 +56,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index 554d2dd9a..0be9b6826 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html @@ -1,4 +1,4 @@ - +

      В целях администрирования регламентных и фоновых заданий система предоставляет следующие возможности:

      1. Контроль выполнения регламентных заданий.
      2. Регламентные задания. diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl new file mode 100644 index 000000000..581644ee1 --- /dev/null +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl @@ -0,0 +1,17 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + ПараметрыРезервногоКопирования = ПараметрыРаботы.РезервноеКопированиеИБ; + + ПараметрыФормы = Новый Структура(); + + Если ПараметрыРезервногоКопирования.Свойство("РезультатКопирования") Тогда + ПараметрыФормы.Вставить("РежимРаботы", ?(ПараметрыРезервногоКопирования.РезультатКопирования, "УспешноВыполнено", "НеВыполнено")); + ПараметрыФормы.Вставить("ИмяФайлаРезервнойКопии", ПараметрыРезервногоКопирования.ИмяФайлаРезервнойКопии); + КонецЕсли; + + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html index e927b27c4..21523a86e 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html @@ -1,6 +1,6 @@ - +

        Выполняет восстановление данных из резервной копии.

        Обязательное заполнение: Путь к файлу с резервной копией. В данном поле необходимо выбрать файл, из которого будет восстановлена информационная база. Примечание: в данном помощнике при восстановлении данных можно использовать только архивы формата .zip, содержащие один файл - файл информационной базы 1cv8.cd. Лучше всего использовать архивы, созданные помощником создания резервной копии.

        -

        Также предоставляет возможность сделать резервную копию базы перед ее восстановлением - таким образом, можно сохранить те данные, которые имеются на данный момент. Для формирования резервной копии необходимо установить флажок "Сделать резервную копию перед восстановлением данных". Кроме того, потребуется указать каталог, куда будет сохранена резервная копия.

        +

        Также предоставляет возможность создать резервную копию базы перед ее восстановлением - таким образом, можно сохранить те данные, которые имеются на данный момент. Для формирования резервной копии необходимо установить флажок "Создать резервную копию перед восстановлением данных". Кроме того, потребуется указать каталог, куда будет сохранена резервная копия.

        При нажатии кнопки "Далее" и правильном заполнении реквизитов, программа проверит ваши права, а также количество пользователей, которые кроме вас работают с базой. Если они присутствуют, будет запущен механизм отключения их от информационной базы.

        Важно: для того, чтобы войти в информационную базу, если восстановление данных не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index 601019b23..2a3e807c0 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,7 +12,11 @@ Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); + КонецЕсли; + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'В клиент-серверном варианте работы резервное копирование следует выполнять сторонними средствами (средствами СУБД).'"); КонецЕсли; @@ -84,8 +88,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПутьККаталогуАрхивовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -107,8 +112,9 @@ ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ФормаОтмена(Команда) @@ -156,8 +162,9 @@ ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Функция ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия() @@ -603,4 +610,6 @@ РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html index 28ba2a1a4..4de176c53 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 f40c6c034..dd2ec86a9 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,6 +12,10 @@ Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); + КонецЕсли; + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'В клиент-серверном варианте работы резервное копирование следует выполнять сторонними средствами (средствами СУБД).'"); КонецЕсли; @@ -35,21 +39,16 @@ КонецЕсли; Объект.КаталогСРезервнымиКопиями = НастройкиРезервногоКопирования.КаталогХраненияРезервныхКопий; - Если НастройкиРезервногоКопирования.ПервыйЗапуск Тогда + Если НастройкиРезервногоКопирования.ДатаПоследнегоРезервногоКопирования = Дата(1, 1, 1) Тогда ТекстЗаголовка = НСтр("ru = 'Резервное копирование еще ни разу не проводилось'"); Иначе ТекстЗаголовка = НСтр("ru = 'В последний раз резервное копирование проводилось: %1'"); - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(Формат(НастройкиРезервногоКопирования.ДатаПоследнегоРезервногоКопирования, "ДЛФ=ДДВ")); - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(ТекстЗаголовка, МассивПараметров); + ДатаПоследнегоКопирования = Формат(НастройкиРезервногоКопирования.ДатаПоследнегоРезервногоКопирования, "ДЛФ=ДДВ"); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, ДатаПоследнегоКопирования); КонецЕсли; Элементы.НадписьДатаПроведенияПоследнегоРезервногоКопирования.Заголовок = ТекстЗаголовка; - Если НастройкиРезервногоКопирования.ВыборПунктаНастройки = 1 Или НастройкиРезервногоКопирования.ВыборПунктаНастройки = 2 Тогда - - Элементы.ГруппаАвтоматическоеРезервноеКопирование.Видимость = Ложь; - - КонецЕсли; + Элементы.ГруппаАвтоматическоеРезервноеКопирование.Видимость = Не НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование; // Первая часть проверки на сервере - если в информационной базе есть пользователи ТребуетсяВводПароля = (ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0); @@ -60,6 +59,9 @@ КонецЕсли; + РучнойЗапуск = (Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаВыполненияРезервногоКопирования); + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("РучнойЗапускПоследнегоРезервногоКопирования", РучнойЗапуск); + КонецПроцедуры &НаКлиенте @@ -86,7 +88,6 @@ КонецЕсли; ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); - ПерейтиНаСтраницу(Элементы.СтраницыПомощника.ТекущаяСтраница); @@ -118,7 +119,7 @@ ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); - Если ПараметрыРезервногоКопированияИБ.ПроцессВыполняется Тогда + Если ПараметрыРезервногоКопированияИБ.ПроцессВыполняется Тогда ПараметрыРезервногоКопированияИБ.ПроцессВыполняется = Ложь; РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь); КонецЕсли; @@ -161,8 +162,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Далее(Команда) @@ -199,8 +201,9 @@ ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Функция ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия() @@ -269,7 +272,7 @@ УстановитьБлокировкуСоединений = Истина; Если РезервноеКопированиеИБВызовСервера.КоличествоАктивныхПользователей() = 1 Тогда - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений("Для выполнения резервного копирования.", "РезервноеКопирование"); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(Ложь); @@ -288,7 +291,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли; - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений("Для выполнения резервного копирования.", "РезервноеКопирование"); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(УстановитьБлокировкуСоединений); УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); @@ -503,7 +506,38 @@ Если Ответ = КодВозвратаДиалога.Да Тогда НачатьРезервноеКопирование(); - КонецЕсли; + Иначе + ОчиститьСообщения(); + ОтменитьПодготовку(); +КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтменитьПодготовку() + + ИменаАктивныхСеансов = ""; + НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); + Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса <> НомерТекущегоСеанса Тогда + ИменаАктивныхСеансов = ИменаАктивныхСеансов + "• " + Сеанс + Символы.ПС; + КонецЕсли; + КонецЦикла; + СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ИменаАктивныхСеансов); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось принудительно отключить сеансы: + |%1. + |Подготовка к резервному копированию отменена. Информационная база разблокирована.'"), ИменаАктивныхСеансов); + + Элементы.НадписьНеУдалось.Заголовок = ТекстСообщения; + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаОшибокПриКопировании; + Элементы.ПерейтиВЖурналРегистрации1.Видимость = Ложь; + Элементы.Далее.Видимость = Ложь; + Элементы.Отмена.Заголовок = НСтр("ru = 'Закрыть'"); + Элементы.Отмена.КнопкаПоУмолчанию = Истина; + + СоединенияИБ.РазрешитьРаботуПользователей(); КонецПроцедуры @@ -580,9 +614,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - ///////////////////////////////////////////////////////////////////////////////////////////////////////// // Обработчики событий формы на сервере и изменения настроек резервного копирования. @@ -862,3 +893,5 @@ СтандартнаяОбработка = Ложь; ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt index 75ae708e5..e53442216 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt @@ -53,27 +53,24 @@ break; case 4: setProgress("Восстановление данных"); - break; - case 5: - setProgress("Cоздание резервной копии информационной базы"); ret = backupDB(); break; - case 6: + case 5: setProgress("Ожидание завершения восстановления данных"); break; - case 7: + case 6: ret = WaitUntilFinish(); break; - case 8: + case 7: setProgress("Разрешение подключений новых соединений"); break; - case 9: + case 8: ret = allowConnections(); break; - case 10: + case 9: setProgress("Завершение"); break; - case 11: + case 10: // Все готово. finalize(true); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 1c0b32af3..9f605d800 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -533,10 +533,6 @@ function doDisconnectAndBlockUsersHTA(connection) if (connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) return 0; - - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединение. - doDisconnectConnections(connection); if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) { connection.СоединенияИБ.РазрешитьРаботуПользователей(); @@ -629,10 +625,6 @@ function doDisconnectAndBlockUsers() log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); return 3; } - - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединения. - doDisconnectConnections(connection); if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) { connection.СоединенияИБ.РазрешитьРаботуПользователей(); @@ -653,12 +645,6 @@ function doDisconnectAndBlockUsers() return result; } -function doDisconnectConnections(connection) -{ - var adminParams = connection.СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - connection.СоединенияИБ.ОтключитьСоединенияИБ(adminParams); -} - // Завершение работы пользователей и запрет на подключение новых соединений function disconnectAndBlockUsers() { diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index ec6d4b587..a48d4f2e3 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -497,9 +497,6 @@ function doDisconnectAndBlockUsersHTA(connection) if (connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) return 0; - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединение. - doDisconnectConnections(connection); if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) { connection.СоединенияИБ.РазрешитьРаботуПользователей(); @@ -593,10 +590,6 @@ function doDisconnectAndBlockUsers() log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); return 3; } - - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединения. - doDisconnectConnections(connection); if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) { connection.СоединенияИБ.РазрешитьРаботуПользователей(); @@ -617,12 +610,6 @@ function doDisconnectAndBlockUsers() return result; } -function doDisconnectConnections(connection) -{ - var adminParams = connection.СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - connection.СоединенияИБ.ОтключитьСоединенияИБ(adminParams); -} - // Завершение работы пользователей и запрет на подключение новых соединений function disconnectAndBlockUsers() { diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo b/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo index a4783a1d7..ca8456a6d 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -184,4 +184,13 @@ ActionsPanelTools Auto + + ПоказатьРезультат + + ru + Показать результат + + NavigationPanelSeeAlso + Auto + diff --git a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl index 0b256ae38..1ad88080b 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,16 +19,17 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ПодключитьОбработчикОжидания("УстановкаПериодаРассчитанныхИтогов", 0.1, Истина); + ПодключитьОбработчикОжидания("УстановитьПериодРассчитанныхИтогов", 0.1, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура УстановкаПериодаРассчитанныхИтогов() +Процедура УстановитьПериодРассчитанныхИтогов() ВремяНачала = ОбщегоНазначенияКлиент.ДатаСеанса(); - УстановкаПериодаРассчитанныхИтоговНаСервереБезКонтекста(); + УстановитьПериодРассчитанныхИтоговНаСервереБезКонтекста(); СкоростьВыполненияВСекундах = ОбщегоНазначенияКлиент.ДатаСеанса() - ВремяНачала; Если СкоростьВыполненияВСекундах >= 5 Тогда Закрыть(); @@ -43,7 +44,9 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановкаПериодаРассчитанныхИтоговНаСервереБезКонтекста() +Процедура УстановитьПериодРассчитанныхИтоговНаСервереБезКонтекста() УстановитьПривилегированныйРежим(Истина); - УправлениеИтогамиИАгрегатамиСлужебный.УстановкаПериодаРассчитанныхИтогов(); + УправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html index 83c742003..75e5d2eb8 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/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl index 136227f39..c12657421 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -68,6 +68,14 @@ &НаКлиенте Процедура Печать(Команда) + Отказ = Ложь; + + ПроверитьЗаполнениеФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + ПараметрКоманды = Новый Массив; Если СубъектыПерсональныхДанных.Количество() > 0 И ЗначениеЗаполнено(СубъектыПерсональныхДанных[0].Субъект) Тогда ПараметрКоманды.Добавить(СубъектыПерсональныхДанных[0].Субъект); @@ -83,6 +91,14 @@ &НаКлиенте Процедура ПечатьMSWord(Команда) + Отказ = Ложь; + + ПроверитьЗаполнениеФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(MSWord)", ДанныеПечатиСогласия(), ЭтотОбъект); КонецПроцедуры @@ -90,12 +106,21 @@ &НаКлиенте Процедура ПечатьOOWritter(Команда) + Отказ = Ложь; + + ПроверитьЗаполнениеФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(ODT)", ДанныеПечатиСогласия(), ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УстановитьДоступностьСпискаВыбораСубъектов() @@ -167,7 +192,7 @@ НСтр("ru = 'Выполняется формирование печатной формы...'")); Состояние(ТекстСообщения); - МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.ПолучитьМакетыИДанныеОбъектов(ИмяМенеджераПечати, ИмяМакета, Субъекты); + МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, Субъекты); Для Каждого Субъект Из Субъекты Цикл НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Строка(Субъект.ФИО) + Строка(Субъект.Адрес) + Строка(Субъект.ПаспортныеДанные), МакетИДанныеОбъекта, ИмяМакета, МакетИДанныеОбъекта.ЛокальныйКаталогФайловПечати); @@ -197,25 +222,25 @@ КонецЕсли; // Вывод обычных областей с параметрами - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Заголовок"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["НомерДата"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["НомерДата"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Преамбула"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Преамбула"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["ОсновнойТекст"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ОсновнойТекст"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["РеквизитыОператора"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыОператора"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Подпись"]); + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Подпись"]); УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма); @@ -228,3 +253,15 @@ УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЗаполнениеФормы(Отказ) + + Если ВариантПечатиСогласия = "ВыводитьПоСубъектам" И СубъектыПерсональныхДанных.Количество() = 0 Тогда + ТекстСообщения = НСтр("ru = 'Субъекты персональных данных не выбраны.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "СубъектыПерсональныхДанных", , Отказ); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index ebdcf67c9..a700e246d 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -51,7 +51,7 @@ ОбластиМакета.Вставить("РеквизитыОператора"); ОбластиМакета.Вставить("РеквизитыСубъекта"); - Макет = УправлениеПечатью.ПолучитьМакет("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"); + Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"); // Общие данные одинаковые для любого субъекта ОбщиеДанные = Субъекты[0]; @@ -125,21 +125,21 @@ Для Каждого ИмяМакета Из МассивИменМакетов Цикл Если ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(MSWord)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.ПолучитьМакет("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных")); + ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных")); ТипыМакетов.Вставить(ИмяМакета, "DOC"); ИначеЕсли ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(ODT)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.ПолучитьМакет("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных")); + ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных")); ТипыМакетов.Вставить(ИмяМакета, "ODT"); КонецЕсли; ОписаниеОбластей.Вставить(ИмяМакета, ПолучитьОписаниеОбластейМакетаОфисногоДокумента()); КонецЦикла; Возврат Новый Структура("Данные, Макеты", - ДанныеПоВсемОбъектам, - Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов", - ОписаниеОбластей, - ТипыМакетов, - ДвоичныеДанныеМакетов)); + ДанныеПоВсемОбъектам, + Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов", + ОписаниеОбластей, + ТипыМакетов, + ДвоичныеДанныеМакетов)); КонецФункции diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl index 6e839d17f..e00113152 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,8 +19,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокПолейСопоставленияПриИзменении(Элемент) @@ -29,8 +30,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьСопоставление(Команда) @@ -46,8 +48,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОбновитьТекстПоясняющейНадписи() @@ -65,3 +68,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl index d4de52e4a..ee9df6048 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Применить(Команда) @@ -40,3 +41,5 @@ ОповеститьОВыборе(Неопределено); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl index 5bcf7e898..080f581bb 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Применить(Команда) @@ -52,8 +53,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Функция МаксимальноеКоличествоПользовательскихПолей() @@ -61,3 +63,5 @@ Возврат ОбменДаннымиКлиент.МаксимальноеКоличествоПолейСопоставленияОбъектов(); КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl index 09d7e56cc..54a14e451 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Применить(Команда) @@ -28,3 +29,5 @@ ОповеститьОВыборе(Неопределено); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 7683712de..5149d35e2 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -60,8 +59,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Применить(Команда) @@ -358,8 +358,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция ПоместитьТаблицуАвтоматическиСопоставленныхОбъектовВоВременноеХранилище() @@ -380,8 +381,8 @@ ПолеИсточника = СтрЗаменить(ИмяПоляИсточника, "NN", Строка(НомерПоля)); ПолеПриемника = СтрЗаменить(ИмяПоляПриемника, "NN", Строка(НомерПоля)); - ЭтаФорма.Элементы[ПолеИсточника].Видимость = Ложь; - ЭтаФорма.Элементы[ПолеПриемника].Видимость = Ложь; + Элементы[ПолеИсточника].Видимость = Ложь; + Элементы[ПолеПриемника].Видимость = Ложь; КонецЦикла; @@ -394,12 +395,12 @@ ПолеПриемника = СтрЗаменить(ИмяПоляПриемника, "NN", Строка(НомерПоля)); // устанавливаем видимость полей - ЭтаФорма.Элементы[ПолеИсточника].Видимость = Элемент.Пометка; - ЭтаФорма.Элементы[ПолеПриемника].Видимость = Элемент.Пометка; + Элементы[ПолеИсточника].Видимость = Элемент.Пометка; + Элементы[ПолеПриемника].Видимость = Элемент.Пометка; // устанавливаем заголовки полей - ЭтаФорма.Элементы[ПолеИсточника].Заголовок = Элемент.Представление; - ЭтаФорма.Элементы[ПолеПриемника].Заголовок = Элемент.Представление; + Элементы[ПолеИсточника].Заголовок = Элемент.Представление; + Элементы[ПолеПриемника].Заголовок = Элемент.Представление; КонецЦикла; @@ -473,7 +474,6 @@ КонецФункции - // Страница 1 (ожидание): Сопоставление объектов // &НаКлиенте @@ -563,7 +563,7 @@ Исключение Отказ = Истина; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Возврат; @@ -580,7 +580,7 @@ ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(АдресВременногоХранилища)); Исключение Отказ = Истина; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Возврат; @@ -610,7 +610,6 @@ КонецПроцедуры - // Страница 2: Работа с результатом автоматического сопоставления // &НаКлиенте @@ -624,7 +623,6 @@ КонецФункции - // Страница 3: Пустой результат автоматического сопоставления // &НаКлиенте @@ -655,3 +653,5 @@ ТаблицаПереходовНоваяСтрока(6, "ПустойРезультатСопоставленияОбъектов",,, "ПустойРезультатСопоставленияОбъектовПустойРезультатСопоставленияОбъектов_ПриОткрытии"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 6e1394d9d..000000000 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - ТаблицаСопоставленияПриемникПоле1 - - - - - ТаблицаСопоставления.СтатусСопоставления - Equal - -1 - - - - - ЦветТекста - style:ТекстЗапрещеннойЯчейкиЦвет - - - Текст - Нет соответствия, объект будет скопирован - - - - - - - ТаблицаСопоставленияИсточникПоле1 - - - - - ТаблицаСопоставления.СтатусСопоставления - Equal - 1 - - - - - ЦветТекста - style:ТекстЗапрещеннойЯчейкиЦвет - - - Текст - Нет соответствия, объект будет скопирован - - - - diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index 14a1d8238..5d4bc704f 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -3676,7 +3676,7 @@ ru Обновить - 4 + 3 ru Обновить @@ -3703,7 +3703,7 @@ ru Сопоставить автоматически... - 6 + 4 ru Выполнить автоматическое сопоставление @@ -3729,7 +3729,7 @@ ru Видимость полей... - 7 + 5 ru Изменить поля таблицы @@ -3751,7 +3751,7 @@ ru Сортировать - 12 + 6 true @@ -3773,7 +3773,7 @@ ru Колонки... - 22 + 7 ru Настройка списка полей таблицы @@ -3799,7 +3799,7 @@ ru Записать - 5 + 8 ru Записать изменения @@ -3824,7 +3824,7 @@ ru Записать и закрыть - 8 + 9 ru Записать и закрыть @@ -3846,7 +3846,7 @@ ru Загрузить данные из другой программы - 3 + 10 ru Выполнить загрузку данных в информационную базу diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index f58759685..ea3fbfa0d 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -293,8 +295,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборПоСтатусуСопоставленияПриИзменении(Элемент) @@ -303,8 +306,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаСопоставления +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСопоставления &НаКлиенте Процедура ТаблицаСопоставленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -315,8 +319,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -414,9 +419,10 @@ &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) - ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; - Закрыть(); + ПрименитьТаблицуНеутвержденныхЗаписей = Истина; + ЗаписатьИЗакрыть = Истина; + ОбновитьТаблицуСопоставления(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -672,8 +678,46 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаСопоставленияПриемникПоле1.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаСопоставления.СтатусСопоставления"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = -1; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Нет соответствия, объект будет скопирован'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаСопоставленияИсточникПоле1.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаСопоставления.СтатусСопоставления"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 1; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Нет соответствия, объект будет скопирован'")); + +КонецПроцедуры &НаКлиенте Процедура ВыполнитьЗагрузкуДанныхЗавершение1(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт @@ -1289,7 +1333,6 @@ КонецФункции - // Страница 1 (ожидание): Сопоставление объектов // &НаКлиенте @@ -1404,7 +1447,7 @@ Исключение Отказ = Истина; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Возврат; @@ -1421,7 +1464,7 @@ ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(АдресВременногоХранилища)); Исключение Отказ = Истина; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Возврат; @@ -1482,3 +1525,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl index 92b848db2..326fa9ca1 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl @@ -23,8 +23,7 @@ // После открытия формы данные с адресом АдресВременногоХранилища будут удалены из временного хранилища // -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -40,7 +39,6 @@ Элементы.Шапка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Объект в ""%1""'"), Параметры.Программа2); - // Построим и подготовим на форме таблицу выбора ПостроитьТаблицуВыбора(Параметры.МаксимальноеКоличествоПользовательскихПолей, Параметры.СписокИспользуемыхПолей, @@ -49,8 +47,9 @@ УстановитьКурсорТаблицыВыбора(Параметры.НомерПоПорядкуСтрокиНачала); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаВыбора +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаВыбора &НаКлиенте Процедура ТаблицаВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -58,16 +57,18 @@ ПроизвестиВыбор(ВыбраннаяСтрока); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) ПроизвестиВыбор(Элементы.ТаблицаВыбора.ТекущаяСтрока); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроизвестиВыбор(Знач ИдентификаторСтрокиВыбора) @@ -138,3 +139,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index f12df74a2..86b327a5f 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html @@ -1,8 +1,17 @@ - -

        Помощник интерактивного обмена данными предназначен для выполнения выгрузки и загрузки данных с возможностью предварительного просмотра и сопоставления загружаемых данных. По команде Автоматическое сопоставление (по умолчанию) выполняется процесс сопоставления объектов. По команде Выполнить сопоставление открывается форма для предварительно просмотра загружаемых данных и выполнения сопоставления объектов вручную. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующего обмена, сопоставляются автоматически. При использовании интерактивного режима загрузки, рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически.

        -

        Режим интерактивного обмена данными следует использовать в случае, когда до начала обмена один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим обмена следует выбирать при первом обмене данными между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.

        + +

        Предназначена для сопоставления данных двух программ.

        +

        Список открывается по команде Выполнить сопоставление на странице Сопоставление данных Помощника интерактивной синхронизации данных. Также можно дважды щелкнуть мышью по строке, в которой обнаружены проблемы сопоставления данных.

        +

        Список состоит из двух колонок, каждая из которых соответствует информационной базе, участвующей в обмене. Данные сгруппированы по объектам программы (документы, списки). В нижней части списка выводится информационная строка: сколько элементов сопоставлено, сколько не сопоставлено.

        +

        В поле Выводить можно выбрать, какие данные показывать в списке. По умолчанию выводятся Несопоставленные данные.

        +

        Сопоставление объектов

        +
        • Нажмите Сопоставить автоматически (рекомендуется), выберите поля для сопоставления с помощью флажков. Некоторые поля выбраны программой по умолчанию. Для того чтобы подтвердить свой выбор, нажмите Выполнить сопоставление. После поиска программа выводит на просмотр сопоставленные ею данные. Для подтверждения нажмите Применить. +
        • После автоматического сопоставления можно оставшиеся объекты сопоставить вручную или изменить сопоставление объектов. Выделите нужные объекты двух баз, нажмите Отменить соответствие, для того чтобы попытаться сопоставить объекты вручную, нажмите Установить соответствие для того чтобы сопоставить объекты. +
        • Для подтверждения нажмите Записать и закрыть.

        Настройка полей таблицы сопоставления

        +

        Нажмите Колонки, чтобы добавить поля в колонки списка. С помощью флажков можно отметить дополнительные поля, для подтверждения нажмите Применить.

        +

        Получение данных из другой программы

        +

        Для того чтобы получить данные из другой программы, нажмите Все действия -  Загрузить данные из другой программы.

        Порядок сопоставления объектов

        Рекомендуется выполнять сопоставление и загрузку данных с учетом ссылочных связей. Особенно, если поле используется для сопоставления объектов.

        -

        Например, в конфигурации имеется справочник договоров контрагентов, который подчинен справочнику контрагентов.  Сопоставление договоров контрагентов выполняется по справочнику-владельцу, т.е. по справочнику контрагентов. Следовательно, для правильного сопоставления данных необходимо сначала сопоставить и загрузить справочник контрагентов, а затем - справочник договоров контрагентов.

        +

        Например, в конфигурации имеется справочник договоров контрагентов, который подчинен справочнику контрагентов. Сопоставление договоров контрагентов выполняется по справочнику-владельцу, т.е. по справочнику контрагентов. Следовательно, для правильного сопоставления данных необходимо сначала сопоставить и загрузить справочник контрагентов, а затем - справочник договоров контрагентов.

        В противном случае поля таблицы сопоставления могут содержать фиктивные ссылки вида:
        <Объект не найден> (26:a0b9001b24e002fe11dfba347dd41412).

        Фиктивная ссылка указывает на объект в текущей информационной базе, который еще не был загружен из сообщения обмена.

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index d35be37f0..0836a0453 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -5,8 +5,7 @@ Перем ПолеДайджестСопоставления; Перем ПолеТипСтрокаНеограниченнойДлины; -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -16,12 +15,12 @@ // Выявляет следующие типы связей объектов: // - объекты, сопоставленные по ссылке (жесткая связь) // - объекты, сопоставленные по информации в регистре сведений СоответствияОбъектовИнформационныхБаз (нежесткая связь) -// - объекты, сопоставленные по неутвержденным связям – связям незаписанным в информационную базу (текущие изменения) +// - объекты, сопоставленные по неутвержденным связям - связям незаписанным в информационную базу (текущие изменения) // - несопоставленные объекты источника // - несопоставленные объекты приемника (этой базы) // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры // Процедура ВыполнитьСопоставлениеОбъектов(Отказ) Экспорт @@ -37,8 +36,8 @@ // Формирует таблицу автоматического сопоставления для вывода пользователю. // // Параметры: -// Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// СписокПолейСопоставления – СписокЗначений – список значений с полями, +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры +// СписокПолейСопоставления - СписокЗначений - список значений с полями, // по которым необходимо выполнить сопоставление объектов // Процедура ВыполнитьАвтоматическоеСопоставлениеОбъектов(Отказ, СписокПолейСопоставления) Экспорт @@ -98,7 +97,7 @@ ЗафиксироватьТранзакцию(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Отказ = Истина; @@ -248,7 +247,8 @@ // Таблица сопоставления объектов // -// Тип: ТаблицаЗначений +// Возвращаемое значение: +// ТаблицаЗначений - Таблица сопоставления объектов. // Функция ТаблицаСопоставления() Экспорт @@ -267,7 +267,8 @@ // Количество объектов текущего типа данных в файле сообщения обмена // -// Тип: Число +// Возвращаемое значение: +// Число - количество объектов текущего типа данных в файле сообщения обмена. // Функция КоличествоОбъектовВИсточнике() Экспорт @@ -277,7 +278,8 @@ // Количество объектов текущего типа данных в этой информационной базе // -// Тип: Число +// Возвращаемое значение: +// Число - Количество объектов текущего типа данных в этой информационной базе. // Функция КоличествоОбъектовВПриемнике() Экспорт @@ -287,7 +289,8 @@ // Количество объектов, которые сопоставлены для текущего типа данных // -// Тип: Число +// Возвращаемое значение: +// Число - Количество объектов, которые сопоставлены для текущего типа данных. // Функция КоличествоОбъектовСопоставленных() Экспорт @@ -297,7 +300,8 @@ // Количество объектов, которые не сопоставлены для текущего типа данных // -// Тип: Число +// Возвращаемое значение: +// Число - Количество объектов, которые не сопоставлены для текущего типа данных. // Функция КоличествоОбъектовНесопоставленных() Экспорт @@ -307,7 +311,8 @@ // Процент сопоставления объектов для текущего типа данных // -// Тип: Число +// Возвращаемое значение: +// Число - процент сопоставления объектов для текущего типа данных. // Функция ПроцентСопоставленияОбъектов() Экспорт @@ -1094,7 +1099,6 @@ // // ТаблицаАвтоматическиСопоставленныхОбъектов = ТаблицаАвтоматическиСопоставленныхОбъектовПоПолям + ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID - ТекстЗапроса = " |//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID} |ВЫБРАТЬ @@ -1903,4 +1907,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl index aef44780d..068494ebb 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -18,8 +17,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтвеченныеАнкетыВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -38,8 +38,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьПараметрыДинамическогоСпискаДереваАнкет() @@ -61,3 +62,5 @@ УстановитьПараметрыДинамическогоСпискаДереваАнкет(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl index a30e6c4a3..61f7bdde5 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -31,8 +31,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ДеревоАнкетПередНачаломИзменения(Элемент, Отказ) @@ -49,9 +50,6 @@ СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.АнкетаОпрос); СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - Если ТекущиеДанные.Статус = "Отвеченные анкеты" Тогда - СтруктураПараметров.Вставить("ТолькоПросмотр",Истина); - КонецЕсли; ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); @@ -71,8 +69,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура АрхивАнкет(Команда) @@ -88,8 +87,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПолучитьТаблицуАнкетРеспондента() @@ -157,3 +157,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 8c900c2de..7626eb1f4 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -14,8 +14,7 @@ Перем ТелоСообщенияСжатое; // текст тела сообщения с вложением - сжатым файлом Перем ТелоСообщенияПакетное; // текст тела сообщения с вложением - сжатый файл, в котором с набор файлов -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -26,7 +25,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт @@ -42,7 +41,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ОтправитьСообщение() Экспорт @@ -64,7 +63,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ПолучитьСообщение() Экспорт @@ -104,7 +103,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож – нет +// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет // Функция ФайлСообщенияОбменаСуществует() Экспорт @@ -118,7 +117,7 @@ ПараметрыЗагрузки.Вставить("ПолучениеЗаголовков", Истина); Попытка - НаборСообщений = ЭлектроннаяПочта.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); + НаборСообщений = РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(103); @@ -163,7 +162,7 @@ // Нет. // // Возвращаемое значение: -// Булево – Истина – подключение может быть установлено; Ложь – нет +// Булево - Истина - подключение может быть установлено; Ложь - нет // Функция ПодключениеУстановлено() Экспорт @@ -176,7 +175,7 @@ СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; - ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(EMAILУчетнаяЗапись, Неопределено, СообщениеОбОшибке, ДополнительноеСообщение); + РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(EMAILУчетнаяЗапись, Неопределено, СообщениеОбОшибке, ДополнительноеСообщение); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПолучитьСообщениеОбОшибке(107); @@ -193,7 +192,8 @@ // Время изменения файла сообщения обмена // -// Тип: Дата +// Возвращаемое значение: +// Строка - время изменения файла сообщения обмена // Функция ДатаФайлаСообщенияОбмена() Экспорт @@ -215,7 +215,8 @@ // Полное имя файла сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя файла сообщения обмена // Функция ИмяФайлаСообщенияОбмена() Экспорт @@ -233,7 +234,8 @@ // Полное имя каталога сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя каталога сообщения обмена. // Функция ИмяКаталогаСообщенияОбмена() Экспорт @@ -379,7 +381,7 @@ ПараметрыЗагрузки.Вставить("ПолучениеЗаголовков", Истина); Попытка - НаборСообщений = ЭлектроннаяПочта.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); + НаборСообщений = РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(103); @@ -420,7 +422,7 @@ ПараметрыЗагрузки.Вставить("ЗаголовкиИдентификаторы", ТаблицаСообщенийОбмена[0].Идентификатор); Попытка - НаборСообщений = ЭлектроннаяПочта.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); + НаборСообщений = РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(105); @@ -587,7 +589,7 @@ ПараметрыСообщения.Вставить("Вложения", Вложения); Попытка - РаботаСПочтовымиСообщениями.ОтправитьСообщение(EMAILУчетнаяЗапись, ПараметрыСообщения); + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(EMAILУчетнаяЗапись, ПараметрыСообщения); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПолучитьСообщениеОбОшибке(102); @@ -611,4 +613,6 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index c0597f54b..eec177082 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -10,8 +10,7 @@ Перем ВременныйКаталогСообщенийОбмена; // временный каталог для сообщений обмена Перем КаталогОбменаИнформацией; // сетевой каталог для обмена сообщениями -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -22,7 +21,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт @@ -38,7 +37,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ОтправитьСообщение() Экспорт @@ -68,7 +67,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ПолучитьСообщение() Экспорт @@ -110,7 +109,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож – нет +// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет // Функция ФайлСообщенияОбменаСуществует() Экспорт @@ -135,7 +134,7 @@ // Нет. // // Возвращаемое значение: -// Булево – Истина – подключение может быть установлено; Ложь – нет +// Булево - Истина - подключение может быть установлено; Ложь - нет // Функция ПодключениеУстановлено() Экспорт @@ -172,7 +171,8 @@ // Функция-свойство: полное имя файла сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя файла сообщения обмена. // Функция ИмяФайлаСообщенияОбмена() Экспорт @@ -190,7 +190,8 @@ // Функция-свойство: полное имя каталога сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя каталога сообщения обмена. // Функция ИмяКаталогаСообщенияОбмена() Экспорт @@ -208,7 +209,8 @@ // Функция-свойство: полное имя каталога обмена информацией (сетевой или локальный ресурс) // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя каталога обмена информацией (сетевой или локальный ресурс). // Функция ИмяКаталогаОбменаИнформацией() Экспорт @@ -226,7 +228,8 @@ // Функция-свойство: время изменения файла сообщения обмена // -// Тип: Дата +// Возвращаемое значение: +// Дата - время изменения файла сообщения обмена. // Функция ДатаФайлаСообщенияОбмена() Экспорт @@ -310,7 +313,7 @@ Попытка - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, "Файл сообщения обмена"); + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, Нстр("ru = 'Файл сообщения обмена'")); Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); Архиватор.Записать(); @@ -510,7 +513,7 @@ Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) Если Сообщение = Неопределено Тогда - Сообщение = "Внутренняя ошибка"; + Сообщение = Нстр("ru = 'Внутренняя ошибка'"); КонецЕсли; СтрокаСообщенияОбОшибке = Сообщение; @@ -578,4 +581,6 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 60556739c..5c6fc4e03 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -11,8 +11,7 @@ Перем ВременныйФайлСообщенияОбмена; // временный файл сообщения обмена для выгрузки/загрузки данных Перем ВременныйКаталогСообщенийОбмена; // временный каталог для сообщений обмена -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции @@ -23,7 +22,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт @@ -39,7 +38,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ОтправитьСообщение() Экспорт @@ -61,7 +60,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина – удалось выполнить функцию, Ложь – произошла ошибка +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка // Функция ПолучитьСообщение() Экспорт @@ -101,7 +100,7 @@ // Нет. // // Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож – нет +// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет // Функция ФайлСообщенияОбменаСуществует() Экспорт @@ -150,7 +149,7 @@ // Нет. // // Возвращаемое значение: -// Булево – Истина – подключение может быть установлено; Ложь – нет +// Булево - Истина - подключение может быть установлено; Ложь - нет // Функция ПодключениеУстановлено() Экспорт @@ -198,7 +197,8 @@ // Функция-свойство: время изменения файла сообщения обмена // -// Тип: Дата +// Возвращаемое значение: +// Дата - время изменения файла сообщения обмена. // Функция ДатаФайлаСообщенияОбмена() Экспорт @@ -220,7 +220,8 @@ // Функция-свойство: полное имя файла сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя файла сообщения обмена. // Функция ИмяФайлаСообщенияОбмена() Экспорт @@ -238,7 +239,8 @@ // Функция-свойство: полное имя каталога сообщения обмена // -// Тип: Строка +// Возвращаемое значение: +// Строка - полное имя каталога сообщения обмена. // Функция ИмяКаталогаСообщенияОбмена() Экспорт @@ -307,7 +309,7 @@ Попытка - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, "Файл сообщения обмена"); + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, Нстр("ru = 'Файл сообщения обмена'")); Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); Архиватор.Записать(); @@ -499,7 +501,7 @@ Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) Если Сообщение = Неопределено Тогда - Сообщение = "Внутренняя ошибка"; + Сообщение = Нстр("ru = 'Внутренняя ошибка'"); КонецЕсли; СтрокаСообщенияОбОшибке = Сообщение; @@ -685,4 +687,6 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca deleted file mode 100644 index 35058298e..000000000 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,58 +0,0 @@ - - - - false - - - ПричиныНеудаления - - - ПричиныНеудаленияПредставление - - - - - СвязиНеУдаленных.УдаляемыйСсылка - Equal - НеУдаленные.УдаляемыйСсылка - - - - - Видимость - false - - - Отображать - false - - - - - - - ПричиныНеудаления - - - ПричиныНеудаленияПредставление - - - - - СвязиНеУдаленных.Видимость - Equal - false - - - - - Видимость - false - - - Отображать - false - - - - diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index fe28fe0fc..20d099a7e 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -2746,7 +2746,6 @@ 378 true - true Label true 2 @@ -3818,7 +3817,7 @@ ru < Назад - 5 + 4 true @@ -3836,7 +3835,7 @@ ru Обновить - 7 + 5 ru Обновить список помеченных на удаление @@ -3863,7 +3862,7 @@ ru Пометить на удаление / Снять пометку - 9 + 6 ru Пометить на удаление / Снять пометку @@ -3888,7 +3887,7 @@ ru Заменить во всех местах использования... - 10 + 7 ru Заменить во всех местах использования... @@ -3910,7 +3909,7 @@ ru Изменить - 4 + 8 ru Дерево помеченных на удаление изменить @@ -3936,7 +3935,7 @@ ru Пометить на удаление / Снять пометку - 6 + 9 ru Пометить на удаление / Снять пометку diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index b9b635ada..af570b37e 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -1,11 +1,11 @@ &НаКлиенте Перем ПараметрыОбработчика; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -66,8 +66,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РежимУдаленияПриИзменении(Элемент) @@ -81,8 +82,9 @@ СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(ПараметрыФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПомеченныхНаУдаление +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПомеченныхНаУдаление &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеПометкаПриИзменении(Элемент) @@ -99,8 +101,9 @@ ПоказатьОбъектТаблицы(Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НеУдаленные +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНеУдаленные &НаКлиенте Процедура НеУдаленныеПриАктивизацииСтроки(Элемент) @@ -131,8 +134,9 @@ ПоказатьОбъектТаблицы(Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СвязиНеУдаленных +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСвязиНеУдаленных &НаКлиенте Процедура СвязиНеУдаленныхПередНачаломИзменения(Элемент, Отказ) @@ -152,8 +156,9 @@ ПоказатьОбъектТаблицы(Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаДалее(Команда) @@ -251,27 +256,27 @@ ПометитьВыделенныеОбъектыТаблицыНаУдаление(Элементы.СвязиНеУдаленных); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Обработчики асинхронных диалогов +#Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура ПометитьВыделенныеОбъектыТаблицыНаУдалениеЗавершение(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - ПометкаУдаления = Не ПараметрыВыполнения.ЕстьПомеченныеНаУдаление; - РезультатРаботыСервера = ИзменитьПометкуУдаленияОбъектов(ПараметрыВыполнения.МассивСсылок, ПометкаУдаления); - Для Каждого СтрокаТаблицы Из ПараметрыВыполнения.МассивСтрокТаблицы Цикл - Если СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления Тогда - Продолжить; - КонецЕсли; - СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления; - СтрокаТаблицы.НомерКартинки = СтрокаТаблицы.НомерКартинки + ?(ПометкаУдаления, 1, -1); - КонецЦикла; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатРаботыСервера); +&НаСервере +Процедура УстановитьУсловноеОформление() + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СвязиНеУдаленных.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПричиныНеУдаленияПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СвязиНеУдаленных.Видимость"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -343,6 +348,7 @@ Если ПоказыватьТекстОшибки Тогда Элементы.СвязиНеУдаленных.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); ПоказыватьТекстОшибки = Ложь; + //Прервать; КонецЕсли; КонецЕсли; КонецЦикла; @@ -408,7 +414,7 @@ Если КоличествоВыделено = 0 Тогда Возврат; КонецЕсли; - ТаблицаРеквизит = ЭтаФорма[ТаблицаЭлемент.Имя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаЭлемент.Имя]; МассивСтрокТаблицы = Новый Массив; МассивСсылокПомеченныхНаУдаление = Новый Массив; МассивСсылокНеПомеченныхНаУдаление = Новый Массив; @@ -448,7 +454,14 @@ Иначе МассивСсылокНеПомеченныхНаУдаление.Добавить(Значение); КонецЕсли; - МассивСтрокТаблицы.Добавить(СтрокаТаблицы); + Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда + Найденные = ТаблицаРеквизит.НайтиСтроки(Новый Структура(ИмяРеквизитаЗначение, Значение)); + Для Каждого СтрокаПоСсылке Из Найденные Цикл + МассивСтрокТаблицы.Добавить(СтрокаПоСсылке); + КонецЦикла; + Иначе + МассивСтрокТаблицы.Добавить(СтрокаТаблицы); + КонецЕсли; КонецЦикла; КоличествоМожноУдалить = МассивСтрокТаблицы.Количество(); @@ -492,6 +505,23 @@ ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Нет); КонецПроцедуры +&НаКлиенте +Процедура ПометитьВыделенныеОбъектыТаблицыНаУдалениеЗавершение(Ответ, ПараметрыВыполнения) Экспорт + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + ПометкаУдаления = Не ПараметрыВыполнения.ЕстьПомеченныеНаУдаление; + РезультатРаботыСервера = ИзменитьПометкуУдаленияОбъектов(ПараметрыВыполнения.МассивСсылок, ПометкаУдаления); + Для Каждого СтрокаТаблицы Из ПараметрыВыполнения.МассивСтрокТаблицы Цикл + Если СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + СтрокаТаблицы.ПометкаУдаления = ПометкаУдаления; + СтрокаТаблицы.НомерКартинки = СтрокаТаблицы.НомерКартинки + ?(ПометкаУдаления, 1, -1); + КонецЦикла; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатРаботыСервера); +КонецПроцедуры + &НаКлиенте Процедура ДеревоПомеченныхНаУдалениеУстановитьПометкуВСписке(Данные, Пометка, ПроверятьРодителя) @@ -1062,3 +1092,4 @@ ЗначениеВРеквизитФормы(ТаблицаСвязиНеУдаленных, "СвязиНеУдаленных"); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 791eef6e5..00e92caed 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,6 +1,26 @@ - -

        Удаление помеченных объектов доступно пользователю с административными правами. Удаление выполняется с контролем целостности информационной базы. Это значит, что если на тот или иной объект системы (документ, элемент справочника и т.д.) ссылаются другие объекты то удаление объекта не будет выполнено. Тем не менее, следует помнить, что удаление объектов - необратимая операция.

        -

        Удаление помеченных ранее объектов можно выполнить двумя способами:

        -
        • "Автоматическое удаление всех объектов" - производится попытка автоматического удаления всех объектов, помеченных на удаление. -
        • "Выборочное удаление объектов" - этот режим позволяет предварительно выбрать объекты для удаления.

        По завершении удаления выводится список объектов, удаление которых не выполнено для сохранения ссылочной целостности информационной базы. В этом списке объекты сгруппированы по виду и для каждого объекта выводятся те объекты, которые препятствуют его удалению.

        -

        Можно выполнить редактирование объектов, препятствующих удалению того или иного помеченного на удаление объекта, после чего повторить процедуру удаления.

        \ No newline at end of file + +

        Предназначена для окончательного удаления помеченных объектов.

        +

        В процессе работы с программой можно помечать на удаление объекты (например, ошибочно введенные). Помеченные на удаление объекты могут быть безвозвратно удалены пользователем с административными правами.

        +

        Команда Удаление помеченных объектов находится в разделе Настройка и администрирование - Поддержка и обслуживание.

        +

        Удаление выполняется с контролем ссылочной целостности. Это значит, что если на тот или иной объект программы (документ, элемент справочника и т.д.) ссылаются другие объекты, то удаление объекта не будет выполнено. Тем не менее, следует помнить, что удаление помеченных объектов - необратимая операция.

        +

        Удаление ранее помеченных объектов можно выполнить двумя способами, которые можно выбрать с помощью переключателя:

        +

        Автоматическое удаление всех отмеченных объектов 

        +
        • Нажмите Удалить. +
        • При выборе режима программа производит поиск и удаление всех помеченных объектов. Через некоторое время программа выводит сообщение о количестве удаленных объектов, при этом вмешательство потребуется, только если удаление невозможно в случае обнаружения ссылок на удаляемые объекты.

        Выборочное удаление объектов

        +
        • Нажмите Далее. +
        • При выборе режима программа формирует список объектов, помеченных на удаление. +
          •  В списке объекты сгруппированы по виду, по умолчанию все объекты помечены флажками на удаление. +
          • Сняв флажки в списке, можно оставить в программе те объекты, которые были помечены на удаление. +
          • Двойным щелчком мыши по объекту или с помощью кнопки  Изменить можно открыть его и принять решение о правомерности его удаления.
        • Для окончательного удаления объектов из программы нажмите Удалить. +
        • По окончании физического удаления объектов выводится сообщение о количестве удаленных объектов. +
        • Если на объекты имеются ссылки, то программа выдает предупреждение и выводит перечень объектов, которые не удалось удалить, а также объекты, которые препятствуют удалению.

        Действия при невозможности удаления объектов

        +

        Список неудаленных объектов состоит из двух частей: слева перечень объектов, справа список Места использования. 

        +
        • Для окончательного удаления объектов можно: +
          • Двойным щелчком мыши в списке или с помощью кнопки  Изменить можно открыть объект, который препятствует удалению, например, для того чтобы вручную удалить в нем ссылки на удаляемый объект. +
          • указать ссылку на другой элемент из списка. Нажмите кнопку Заменить во всех местах использования, чтобы перейти к замене элементов. Для замены ссылок выберите из списка другой элемент вместо удаляемого. +
          •  Пометить на удаление все связанные с удаляемым элементом объекты (в правой части списка - Места использования), +
          •  Снять пометку на удаление с объекта, помеченного на удаление.
        • После этого нажмите Повторить удаление, для того чтобы попытаться удалить объекты еще раз. +
        • Нажмите В начало, для того чтобы выбрать другой способ удаления. +
        • Нажмите Закрыть, для того чтобы вернуться в программу без продолжения попыток удаления.

        См. также

        +

         

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 941e65eab..570b004aa 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -1,7 +1,30 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Вызывается после удаления помеченных объектов. + // + // Параметры: + // ПараметрыВыполнения - Структура - Контекст удаления помеченных объектов. + // * Удаленные - Массив - Ссылки удаленных объектов. + // * НеУдаленные - Массив - Ссылки объектов, которые не получилось удалить. + // + // Синтаксис: + // Процедура ПослеУдаленияПомеченных(Знач ПараметрыВыполнения) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПослеУдаленияПомеченных"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Интерактивное удаление помеченных @@ -94,6 +117,12 @@ // Удаление циклов (кольцевых связей объектов). УдалитьОставшиесяОбъектыВОднойТранзакции(ПараметрыВыполнения); + // Подключаемые обработчики подсистем БСП. + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.БазоваяФункциональность\ПослеУдаленияПомеченных"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПослеУдаленияПомеченных(ПараметрыВыполнения); + КонецЦикла; + КонецПроцедуры // Удаление одиночного объекта с контролем результата и откатом транзакции в случае неудачи. @@ -199,6 +228,13 @@ ПоискСсылок.Добавить(Ссылка); Результат.ПрепятствующиеУдалению = НайтиПоСсылкам(ПоискСсылок); + + ПоискНеПрепятствующих = Новый Структура(Результат.ПрепятствующиеУдалению.Колонки[1].Имя, Ссылка); + НеПрепятствующие = Результат.ПрепятствующиеУдалению.НайтиСтроки(ПоискНеПрепятствующих); + Для Каждого СтрокаТаблицы Из НеПрепятствующие Цикл + Результат.ПрепятствующиеУдалению.Удалить(СтрокаТаблицы); + КонецЦикла; + Результат.Количество = Результат.Количество + Результат.ПрепятствующиеУдалению.Количество(); КонецПроцедуры @@ -269,7 +305,6 @@ Объект = Ссылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда // Объект уже удален. - МассивСсылок.Удалить(ОбратныйИндекс); Продолжить; КонецЕсли; Если Объект.ПометкаУдаления <> Истина Тогда @@ -608,7 +643,6 @@ Информация.ТекстЗапросаПоПодчиненным = ТекстЗапроса; КонецЕсли; - Если Информация.ПолноеИмя = "СПРАВОЧНИК.ИДЕНТИФИКАТОРЫОБЪЕКТОВМЕТАДАННЫХ" Или Информация.ПолноеИмя = "СПРАВОЧНИК.ПРЕДОПРЕДЕЛЕННЫЕВАРИАНТЫОТЧЕТОВ" Тогда Информация.Технический = Истина; @@ -642,4 +676,6 @@ ТекстДляЖурнала); КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form index 5da31c206..95d079c22 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -421,11 +421,11 @@ true true true - false ru БЛ='На сервере 1С:Предприятия'; БИ='На данном компьютере или на компьютере в локальной сети' + true true true diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 0bb17a901..02ebfeb3e 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,6 +13,8 @@ Возврат; КонецЕсли; + ПроверитьВерсиюИРежимСовместимостиПлатформы(); + Объект.ЭтоИнтерактивныйРежим = Истина; ЗаголовокФормы = НСтр("ru = 'Универсальный обмен данными в формате XML (%ВерсияОбработки%)'"); @@ -104,8 +105,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура АрхивироватьФайлПриИзменении(Элемент) @@ -380,8 +382,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПравилВыгрузки +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПравилВыгрузки &НаКлиенте Процедура ТаблицаПравилВыгрузкиПередНачаломИзменения(Элемент, Отказ) @@ -414,8 +417,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ УдаляемыеДанные +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУдаляемыеДанные &НаКлиенте Процедура УдаляемыеДанныеПриИзменении(Элемент) @@ -427,8 +431,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ТестПодключения(Команда) @@ -625,7 +630,6 @@ НастройкаОтладкиЗагрузкиЗавершение(Истина, АдресФайлаОбменаВХранилище, ИмяФайлаДляРасширения, Неопределено); КонецЕсли; - КонецПроцедуры @@ -708,8 +712,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Открывает файл обмена во внешнем приложении // @@ -822,7 +827,7 @@ КонецЦикла; СтрокаДерева = ДеревоДанных.Строки.Добавить(); - СтрокаДерева.Представление = "Планы видов характеристик"; + СтрокаДерева.Представление = НСтр("ru = 'Планы видов характеристик'"); Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл @@ -837,7 +842,7 @@ КонецЦикла; СтрокаДерева = ДеревоДанных.Строки.Добавить(); - СтрокаДерева.Представление = "Документы"; + СтрокаДерева.Представление = Нстр("ru = 'Документы'"); Для каждого ОбъектМД Из Метаданные.Документы Цикл @@ -1798,4 +1803,25 @@ Возврат ЭтоLinuxКлиент; -КонецФункции \ No newline at end of file +КонецФункции + +&НаСервере +Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() + + Информация = Новый СистемнаяИнформация; + Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" + И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать + Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_2_16"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"] + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]))) Тогда + + ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + |1С:Предприятие 8.3 с отключенным режимом совместимости или выше'"); + + КонецЕсли; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl index 18d9118ea..e1cbc2448 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -34,8 +33,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтладкаАлгоритмовПриИзменении(Элемент) @@ -74,8 +74,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Готово(Команда) @@ -114,8 +115,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьВидимость() @@ -240,4 +242,6 @@ Сообщение.ПутьКДанным = ПутьКДанным; Сообщение.Сообщить(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html index fbb75cb50..2b4057220 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 02658ff33..3d853fd67 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -260,7 +260,7 @@ // ПолучитьСтроковыйНомерБезПрефиксов("УТ0000001234") = "0000001234" // // Параметры: -// Номер – Строка – номер, из которого необходимо вычислить результат функции +// Номер - Строка - номер, из которого необходимо вычислить результат функции // // Возвращаемое значение: // строка номера без символьных префиксов @@ -788,13 +788,64 @@ Иначе Результат = Менеджер.ТипСсылкиСтрокой; - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; Возврат Результат; КонецФункции // одТипЗначенияСтрокой() +// Возвращает XML представление объекта ОписаниеТипов +// Функция может быть использована в обработчиках событий, программный код +// которых хранится в правила обмена данными. +// Параметры: +// ОписаниеТипов - объект ОписаниеТипов, XML представление которого требуется получить +// +// Возвращаемое значение: +// Строка - XML представление переданного объекта ОписаниеТипов +// +Функция одПолучитьXMLПредставлениеОписанияТипов(ОписаниеТипов) Экспорт + + УзелТипов = СоздатьУзел("Типы"); + + Если ТипЗнч(ОписаниеТипов) = Тип("Структура") Тогда + УстановитьАтрибут(УзелТипов, "ДопустимыйЗнак", СокрЛП(ОписаниеТипов.ДопустимыйЗнак)); + УстановитьАтрибут(УзелТипов, "Разрядность", СокрЛП(ОписаниеТипов.Разрядность)); + УстановитьАтрибут(УзелТипов, "РазрядностьДробнойЧасти", СокрЛП(ОписаниеТипов.РазрядностьДробнойЧасти)); + УстановитьАтрибут(УзелТипов, "Длина", СокрЛП(ОписаниеТипов.Длина)); + УстановитьАтрибут(УзелТипов, "ДопустимаяДлина", СокрЛП(ОписаниеТипов.ДопустимаяДлина)); + УстановитьАтрибут(УзелТипов, "СоставДаты", СокрЛП(ОписаниеТипов.ЧастиДаты)); + + Для каждого СтрТип Из ОписаниеТипов.Типы Цикл + УзелТипа = СоздатьУзел("Тип"); + УзелТипа.ЗаписатьТекст(СокрЛП(СтрТип)); + ДобавитьПодчиненный(УзелТипов, УзелТипа); + КонецЦикла; + Иначе + КвЧисла = ОписаниеТипов.КвалификаторыЧисла; + КвСтроки = ОписаниеТипов.КвалификаторыСтроки; + КвДаты = ОписаниеТипов.КвалификаторыДаты; + + УстановитьАтрибут(УзелТипов, "ДопустимыйЗнак", СокрЛП(КвЧисла.ДопустимыйЗнак)); + УстановитьАтрибут(УзелТипов, "Разрядность", СокрЛП(КвЧисла.Разрядность)); + УстановитьАтрибут(УзелТипов, "РазрядностьДробнойЧасти", СокрЛП(КвЧисла.РазрядностьДробнойЧасти)); + УстановитьАтрибут(УзелТипов, "Длина", СокрЛП(КвСтроки.Длина)); + УстановитьАтрибут(УзелТипов, "ДопустимаяДлина", СокрЛП(КвСтроки.ДопустимаяДлина)); + УстановитьАтрибут(УзелТипов, "СоставДаты", СокрЛП(КвДаты.ЧастиДаты)); + + Для каждого Тип Из ОписаниеТипов.Типы() Цикл + УзелТипа = СоздатьУзел("Тип"); + УзелТипа.ЗаписатьТекст(одТипЗначенияСтрокой(Тип)); + ДобавитьПодчиненный(УзелТипов, УзелТипа); + КонецЦикла; + КонецЕсли; + + УзелТипов.ЗаписатьКонецЭлемента(); + + Возврат(УзелТипов.Закрыть()); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЗапись @@ -950,7 +1001,7 @@ СтрокаЗаписи = УдалитьНедопустимыеСимволыXML(СтрокаЗаписи); - КонецЕсли; + КонецЕсли; Узел.ЗаписатьАтрибут(Имя, СтрокаЗаписи); @@ -1342,8 +1393,7 @@ Если ВзвестиФлагОшибок Тогда УстановитьФлагОшибки(Истина); - - СообщитьПользователю(ИтоговаяСтрокаДляЗаписи); + СообщитьПользователю(ИтоговаяСтрокаДляЗаписи); Иначе @@ -1351,7 +1401,6 @@ И (БезусловнаяЗаписьВПротоколОбмена ИЛИ ВыводВОкноСообщенийИнформационныхСообщений) Тогда СообщитьПользователю(ИтоговаяСтрокаДляЗаписи); - КонецЕсли; @@ -2955,13 +3004,11 @@ Если ФлагОшибки Тогда - ТекстПредупреждения = НСтр("ru = 'При выгрузке обработчиков были обнаружены ошибки.'"); - СообщитьПользователю(ТекстПредупреждения); + СообщитьПользователю(НСтр("ru = 'При выгрузке обработчиков были обнаружены ошибки.'")); Иначе - ТекстПредупреждения = НСтр("ru = 'Обработчики успешно выгружены.'"); - СообщитьПользователю(ТекстПредупреждения); + СообщитьПользователю(НСтр("ru = 'Обработчики успешно выгружены.'")); КонецЕсли; @@ -3464,7 +3511,7 @@ // Процедура ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, ИмяАлгоритма, СтрокаПрефикса, Заголовок) - ЗаголовокАлгоритма = "//============================ " + Заголовок + " """ + ТРег(ИмяАлгоритма) + """ ============================"; + ЗаголовокАлгоритма = "//============================ " + Заголовок + " """ + ИмяАлгоритма + """ ============================"; ОбработчикНовый = ОбработчикНовый + Символы.ПС; ОбработчикНовый = ОбработчикНовый + Символы.ПС + СтрокаПрефикса + ЗаголовокАлгоритма; @@ -3541,7 +3588,7 @@ //Инициализируем возвращаемое значение ОбработчикНовый = ""; - ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, АлгоритмВладелец, СтрокаПрефикса, "{НАЧАЛО АЛГОРИТМА}"); + ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, АлгоритмВладелец, СтрокаПрефикса, НСтр("ru = '{НАЧАЛО АЛГОРИТМА}'")); Для Индекс = 1 По СтрЧислоСтрок(Обработчик) Цикл @@ -3560,12 +3607,14 @@ Если МассивЗапрошенныхЭлементов.Найти(ВРег(Алгоритм)) <> Неопределено Тогда //Рекурсивный вызов алгоритма - ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, Алгоритм, СтрокаПрефиксаДляВложенногоКода, "{РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА}"); + ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, Алгоритм, СтрокаПрефиксаДляВложенногоКода, НСтр("ru = '{РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА}'")); + + СтрокаОператора = Нстр("ru = 'ВызватьИсключение ""РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА: %1"";'"); + СтрокаОператора = ПодставитьПараметрыВСтроку(СтрокаОператора, Алгоритм); - СтрокаОператора = "ВызватьИсключение ""РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА: "+ ТРег(Алгоритм) + """;"; ОбработчикНовый = ОбработчикНовый + Символы.ПС + СтрокаПрефиксаДляВложенногоКода + СтрокаОператора; - ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, Алгоритм, СтрокаПрефиксаДляВложенногоКода, "{РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА}"); + ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, Алгоритм, СтрокаПрефиксаДляВложенногоКода, НСтр("ru = '{РЕКУРСИВНЫЙ ВЫЗОВ АЛГОРИТМА}'")); СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("Алгоритм_1", АлгоритмВладелец); @@ -3587,7 +3636,7 @@ КонецЦикла; - ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, АлгоритмВладелец, СтрокаПрефикса, "{КОНЕЦ АЛГОРИТМА} "); + ЗаписатьЗаголовокБлокаАлгоритма(ОбработчикНовый, АлгоритмВладелец, СтрокаПрефикса, НСтр("ru = '{КОНЕЦ АЛГОРИТМА}'")); Возврат ОбработчикНовый; @@ -5967,8 +6016,8 @@ Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", - ТипОбъекта, Неопределено, "Последовательность полей поиска"); - + ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'")); + КонецПопытки; НеНужноВыполнятьПоиск = ПрекратитьПоиск = Истина @@ -6577,9 +6626,9 @@ Если ФлагКомментироватьОбработкуОбъектов Тогда Если Нпп <> 0 Тогда - СтрокаСообщения = "Загрузка объекта № " + Нпп; + СтрокаСообщения = ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка объекта № %1'"), Нпп); Иначе - СтрокаСообщения = "Загрузка объекта № " + ГНпп; + СтрокаСообщения = ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка объекта № %1'"), ГНпп); КонецЕсли; ЗП = ПолучитьСтруктуруЗаписиПротокола(); @@ -6816,10 +6865,10 @@ Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта (глобальный)"); - + ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); + КонецПопытки; - + Если Отказ Тогда // Отказ от загрузки объекта одПропустить(ФайлОбмена, "Объект"); @@ -7190,7 +7239,7 @@ Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта (глобальный)"); + ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); КонецПопытки; @@ -7791,7 +7840,7 @@ Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(8); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, ОписаниеОшибки(), ИмяФайлаЗаписей + ": Ошибка при создании временного файла для выгрузки данных"); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, ОписаниеОшибки(), ИмяФайлаЗаписей + ": " + НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных'")); КонецПопытки; @@ -9034,15 +9083,12 @@ СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; - Если ТолькоПолучитьУзелСсылки Тогда - СтрокаПользователю = "Конвертация ссылки на объект: "; - Иначе - СтрокаПользователю = "Конвертация объекта: "; - КонецЕсли; + СтрокаПользователю = ?(ТолькоПолучитьУзелСсылки, Нстр("ru = 'Конвертация ссылки на объект: %1'"), Нстр("ru = 'Конвертация объекта: %1'")); + СтрокаПользователю = ПодставитьПараметрыВСтроку(СтрокаПользователю, ПрОбъекта); ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; - ЗаписатьВПротоколВыполнения(СтрокаПользователю + ПрОбъекта + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); + ЗаписатьВПротоколВыполнения(СтрокаПользователю + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); КонецЕсли; @@ -9105,7 +9151,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, "ПередКонвертациейОбъекта (глобальный)"); + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); КонецПопытки; Если Отказ Тогда // Отказ от дальнейшей обработки правила @@ -9561,7 +9607,8 @@ ПрОбъекта = ТипЗнч(Объект); КонецПопытки; - ЗаписатьВПротоколВыполнения("ВЫГРУЗКА ОБЪЕКТА: " + ПрОбъекта, , Ложь, 1, 7); + СтрокаСообщения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Выгрузка объекта: %1'"), ПрОбъекта); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, 1, 7); КонецЕсли; @@ -9587,7 +9634,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОписаниеОшибки(), Правило.Имя, "ПередВыгрузкойОбъектаВыборки (глобальный)", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; Если Отказ Тогда @@ -9642,7 +9689,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОписаниеОшибки(), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки (глобальный)", Объект); + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОписаниеОшибки(), Правило.Имя, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'"), Объект); КонецПопытки; КонецЕсли; @@ -9804,32 +9851,6 @@ | |"; - Если ВыборкаДляОчисткиДанных - И УдалятьОбъектыНепосредственно Тогда - - Если (ИмяТипа = "Справочник" - ИЛИ ИмяТипа = "ПланВидовХарактеристик") Тогда - - Попытка - НужнаИерархия = МетаданныеОбъектов.Иерархический; - Исключение - НужнаИерархия = Ложь - КонецПопытки; - - Если НужнаИерархия Тогда - - Запрос.Текст = Запрос.Текст + " - | ГДЕ ОбъектДляВыгрузки.Родитель = &Родитель - |"; - - Запрос.УстановитьПараметр("Родитель", Свойства.Менеджер.ПустаяСсылка()); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - ИначеЕсли ИмяТипа = "Документ" Тогда Если ВыгружатьТолькоРазрешенные Тогда @@ -10086,7 +10107,8 @@ Если ФлагКомментироватьОбработкуОбъектов Тогда - ЗаписатьВПротоколВыполнения("ПРАВИЛО ВЫГРУЗКИ ДАННЫХ: " + СокрЛП(Правило.Имя) + " (" + СокрЛП(Правило.Наименование) + ")", , Ложь, , 4); + СтрокаСообщения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Правило выгрузки данных: %1 (%2)'"), СокрЛП(Правило.Имя), СокрЛП(Правило.Наименование)); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, , 4); КонецЕсли; @@ -10548,8 +10570,9 @@ Если ТекущаяСтрокаПравилаВыгрузки <> Неопределено Тогда Если ФлагКомментироватьОбработкуОбъектов Тогда - - ЗаписатьВПротоколВыполнения("ПРАВИЛО ВЫГРУЗКИ ДАННЫХ: " + СокрЛП(ТекущаяСтрокаПравилаВыгрузки.Имя) + " (" + СокрЛП(ТекущаяСтрокаПравилаВыгрузки.Наименование) + ")", , Ложь, , 4); + СтрокаСообщения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Правило выгрузки данных: %1 (%2)'"), + СокрЛП(ТекущаяСтрокаПравилаВыгрузки.Имя), СокрЛП(ТекущаяСтрокаПравилаВыгрузки.Наименование)); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, , 4); КонецЕсли; @@ -11713,8 +11736,8 @@ Исключение - Текст = НСтр("ru = 'Обработчик: ""ПослеЗагрузкиПравилОбмена"": %Ошибка%'"); - Текст = СтрЗаменить(Текст, "%Ошибка%", КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Текст = НСтр("ru = 'Обработчик: ""ПослеЗагрузкиПравилОбмена"": %1'"); + Текст = ПодставитьПараметрыВСтроку(Текст, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(Текст); @@ -11773,7 +11796,7 @@ // Выполняет последовательное чтение файла сообщения обмена и записывает данные в информационную базу // // Параметры: -// РезультирующаяСтрокаСИнформациейОбОшибке – Строка – результирующая строка с информацией об ошибке +// РезультирующаяСтрокаСИнформациейОбОшибке - Строка - результирующая строка с информацией об ошибке // Процедура ПроизвестиЧтениеДанных(РезультирующаяСтрокаСИнформациейОбОшибке = "") Экспорт @@ -11817,9 +11840,10 @@ Если Отказ = Истина Тогда Если Не ПустаяСтрока(ПричинаОтказа) Тогда - ВызватьИсключение "Загрузка данных отменена по причине: " + ПричинаОтказа; + СтрокаИсключения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Загрузка данных отменена по причине: %1'"), ПричинаОтказа); + ВызватьИсключение СтрокаИсключения; Иначе - ВызватьИсключение "Загрузка данных отменена"; + ВызватьИсключение Нстр("ru = 'Загрузка данных отменена'"); КонецЕсли; КонецЕсли; @@ -11895,9 +11919,9 @@ Исключение - СтрокаОшибки = ОписаниеОшибки(); + СтрокаОшибки = ПодставитьПараметрыВСтроку(Нстр("ru = 'Ошибка при загрузке данных: %1'"), ОписаниеОшибки()); - РезультирующаяСтрокаСИнформациейОбОшибке = ЗаписатьВПротоколВыполнения("Ошибка при загрузке данных: " + СтрокаОшибки, Неопределено, Истина, , , Истина); + РезультирующаяСтрокаСИнформациейОбОшибке = ЗаписатьВПротоколВыполнения(СтрокаОшибки, Неопределено, Истина, , , Истина); ЗавершитьВедениеПротоколаОбмена(); ФайлОбмена.Закрыть(); @@ -11913,10 +11937,10 @@ // выполняем необходимые обработчики событий. // // Параметры: -// СтрокаДанных – имя файла для загрузки данных или строка-XML, содержащая данные для загрузки +// СтрокаДанных - имя файла для загрузки данных или строка-XML, содержащая данные для загрузки // // Возвращаемое значение: -// Истина – загрузка данных из файла возможна; Ложь – нет. +// Истина - загрузка данных из файла возможна; Ложь - нет. // Функция ВыполнитьДействияПередЧтениемДанных(СтрокаДанных = "") Экспорт @@ -11949,7 +11973,8 @@ Возврат Ложь; КонецЕсли; - ЗаписатьВПротоколВыполнения("Начало загрузки: " + ТекущаяДатаСеанса(), , Ложь, , , Истина); + СтрокаСообщения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Начало загрузки: %1'"), ТекущаяДатаСеанса()); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, , , Истина); Если ФлагРежимОтладки Тогда ИспользоватьТранзакции = Ложь; @@ -12003,7 +12028,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), "ПередЗагрузкойДанных (конвертация)"); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -12063,21 +12088,22 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), "ПослеЗагрузкиДанных (конвертация)"); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; ДеструкторВнешнейОбработкиОбработчиковСобытий(); - ЗаписатьВПротоколВыполнения("Окончание загрузки: " + ТекущаяДатаСеанса(), , Ложь, , , Истина); - ЗаписатьВПротоколВыполнения("Загружено объектов: " + мСчетчикЗагруженныхОбъектов, , Ложь, , , Истина); + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание загрузки: %1'"), ТекущаяДатаСеанса()), , Ложь, , , Истина); + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружено объектов: %1'"), мСчетчикЗагруженныхОбъектов), , Ложь, , , Истина); ЗавершитьВедениеПротоколаОбмена(); Если ЭтоИнтерактивныйРежим Тогда - ТекстСообщения = НСтр("ru = 'Загрузка данных завершена.'"); - СообщитьПользователю(ТекстСообщения); + СообщитьПользователю(НСтр("ru = 'Загрузка данных завершена.'")); КонецЕсли; КонецПроцедуры @@ -12110,7 +12136,7 @@ ИмяФайлаОбмена = СтрЗаменить(ИмяФайлаОбмена, ".xml", ".zip"); КонецЕсли; - Архиватор = Новый ЗаписьZipФайла(ИмяФайлаОбмена, ПарольДляСжатияФайлаОбмена, "Файл обмена данными"); + Архиватор = Новый ЗаписьZipФайла(ИмяФайлаОбмена, ПарольДляСжатияФайлаОбмена, Нстр("ru = 'Файл обмена данными'")); Архиватор.Добавить(ИмяИсходногоФайлаОбмена); Архиватор.Записать(); @@ -12125,11 +12151,11 @@ // Составляет полное имя файла из имени каталога и имени файла. // // Параметры -// ИмяКаталога – Строка, содержащая путь к каталогу файла на диске. -// ИмяФайла – Строка, содержащая имя файла, без имени каталога. +// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске. +// ИмяФайла - Строка, содержащая имя файла, без имени каталога. // // Возвращаемое значение: -// Строка – полное имя файла с учетом каталога. +// Строка - полное имя файла с учетом каталога. // Функция ПолучитьИмяФайлаОбмена(ИмяКаталога, ИмяФайла) Экспорт @@ -12184,8 +12210,8 @@ // Выполняет передачу строки данных для загрузки в базе-приемнике // // Параметры: -// ИнформацияДляЗаписиВФайл – Строка (текст XML) – строка с данными -// СтрокаОшибкиВБазеПриемнике – Строка – содержит описание ошибки при загрузке в базе-приемнике +// ИнформацияДляЗаписиВФайл - Строка (текст XML) - строка с данными +// СтрокаОшибкиВБазеПриемнике - Строка - содержит описание ошибки при загрузке в базе-приемнике // Процедура ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике = "") Экспорт @@ -12195,10 +12221,11 @@ Если Не ПустаяСтрока(СтрокаОшибкиВБазеПриемнике) Тогда - ЗаписатьВПротоколВыполнения("ЗАГРУЗКА В ПРИЕМНИКЕ: " + СтрокаОшибкиВБазеПриемнике, Неопределено, Истина, , , Истина); + СтрокаСообщения = ПодставитьПараметрыВСтроку(Нстр("ru = 'Загрузка в приемнике: %1'"), СтрокаОшибкиВБазеПриемнике); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, Неопределено, Истина, , , Истина); КонецЕсли; - + КонецПроцедуры Функция ВыполнитьПередачуИнформацииОНачалеОбменаВПриемник(ТекущаяСтрокаДляЗаписи) @@ -12373,10 +12400,11 @@ Возврат; КонецЕсли; - ЗаписатьВПротоколВыполнения("Начало выгрузки: " + ТекущаяДатаСеанса(), , Ложь, , , Истина); - - ИнициализироватьМенеджерыИСообщения(); - + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало выгрузки: %1'"), ТекущаяДатаСеанса()), , Ложь, , , Истина); + + ИнициализироватьМенеджерыИСообщения(); + мСчетчикВыгруженныхОбъектов = 0; мСчетчикНПП = 0; ФлагОшибки = Ложь; @@ -12386,9 +12414,9 @@ ЗагрузитьПравилаОбмена(); Если ФлагОшибки Тогда - ЗавершитьВедениеПротоколаОбмена(); - мОбработкаДляЗагрузкиДанных = Неопределено; - Возврат; + ЗавершитьВедениеПротоколаОбмена(); + мОбработкаДляЗагрузкиДанных = Неопределено; + Возврат; КонецЕсли; Иначе @@ -12396,9 +12424,9 @@ Для каждого Правило Из ТаблицаПравилКонвертации Цикл Правило.Выгруженные.Очистить(); Правило.ВыгруженныеТолькоСсылки.Очистить(); - КонецЦикла; + КонецЦикла; - КонецЕсли; + КонецЕсли; //Присваиваем параметры установленные в диалоге УстановитьПараметрыИзДиалога(); @@ -12454,8 +12482,8 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), "ПередВыгрузкойДанных (конвертация)"); - Отказ = Истина; + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), Нстр("ru = 'ПередВыгрузкойДанных (конвертация)'")); + Отказ = Истина; КонецПопытки; Если Отказ Тогда // Отказ от выгрузки данных @@ -12516,14 +12544,15 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), "ПослеВыгрузкиДанных (конвертация)"); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), Нстр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); КонецПопытки; Исключение СтрокаОшибки = ОписаниеОшибки(); - ЗаписатьВПротоколВыполнения("Ошибка при выгрузке данных: " + СтрокаОшибки, Неопределено, Истина, , , Истина); + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выгрузке данных: %1'"), СтрокаОшибки), Неопределено, Истина, , , Истина); ВыполнитьПередачуИнформацииПриЗавершенииПередачиДанных(); @@ -12556,10 +12585,12 @@ КонецЕсли; ВыполнитьПередачуИнформацииПриЗавершенииПередачиДанных(); - - ЗаписатьВПротоколВыполнения("Окончание выгрузки: " + ТекущаяДатаСеанса(), , Ложь, , ,Истина); - ЗаписатьВПротоколВыполнения("Выгружено объектов: " + мСчетчикВыгруженныхОбъектов, , Ложь, , , Истина); - + + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание выгрузки: %1'"), ТекущаяДатаСеанса()), , Ложь, , ,Истина); + ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выгружено объектов: %1'"), мСчетчикВыгруженныхОбъектов), , Ложь, , , Истина); + ЗавершитьВедениеПротоколаОбмена(); мОбработкаДляЗагрузкиДанных = Неопределено; @@ -12567,8 +12598,7 @@ ДеструкторВнешнейОбработкиОбработчиковСобытий(); Если ЭтоИнтерактивныйРежим Тогда - ТекстСообщения = НСтр("ru = 'Выгрузка данных завершена.'"); - СообщитьПользователю(ТекстСообщения); + СообщитьПользователю(НСтр("ru = 'Выгрузка данных завершена.'")); КонецЕсли; КонецПроцедуры @@ -12863,98 +12893,98 @@ // Процедура ИнициализацияСообщений() - одСообщения = Новый Соответствие; - - одСообщения.Вставить(2, "Ошибка распаковки файла обмена. Файл заблокирован."); - одСообщения.Вставить(3, "Указанный файл правил обмена не существует."); - одСообщения.Вставить(4, "Ошибка при создании COM-объекта Msxml2.DOMDocument"); - одСообщения.Вставить(5, "Ошибка открытия файла обмена"); - одСообщения.Вставить(6, "Ошибка при загрузке правил обмена"); - одСообщения.Вставить(7, "Ошибка формата правил обмена"); - одСообщения.Вставить(8, "Не корректно указано имя файла для выгрузки данных"); - одСообщения.Вставить(9, "Ошибка формата файла обмена"); - одСообщения.Вставить(10, "Не указано имя файла для выгрузки данных (Имя файла данных)"); - одСообщения.Вставить(11, "Ссылка на несуществующий объект метаданных в правилах обмена"); - одСообщения.Вставить(12, "Не указано имя файла с правилами обмена (Имя файла правил)"); - - одСообщения.Вставить(13, "Ошибка получения значения свойства объекта (по имени свойства источника)"); - одСообщения.Вставить(14, "Ошибка получения значения свойства объекта (по имени свойства приемника)"); + одСообщения = Новый Соответствие; - одСообщения.Вставить(15, "Не указано имя файла для загрузки данных (Имя файла для загрузки)"); - - одСообщения.Вставить(16, "Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)"); - одСообщения.Вставить(17, "Ошибка получения значения свойства подчиненного объекта (по имени свойства приемника)"); - - одСообщения.Вставить(19, "Ошибка в обработчике события ПередЗагрузкойОбъекта"); - одСообщения.Вставить(20, "Ошибка в обработчике события ПриЗагрузкеОбъекта"); - одСообщения.Вставить(21, "Ошибка в обработчике события ПослеЗагрузкиОбъекта"); - одСообщения.Вставить(22, "Ошибка в обработчике события ПередЗагрузкойДанных (конвертация)"); - одСообщения.Вставить(23, "Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)"); - одСообщения.Вставить(24, "Ошибка при удалении объекта"); - одСообщения.Вставить(25, "Ошибка при записи документа"); - одСообщения.Вставить(26, "Ошибка записи объекта"); - одСообщения.Вставить(27, "Ошибка в обработчике события ПередОбработкойПравилаОчистки"); - одСообщения.Вставить(28, "Ошибка в обработчике события ПослеОбработкиПравилаОчистки"); - одСообщения.Вставить(29, "Ошибка в обработчике события ПередУдалениемОбъекта"); + одСообщения.Вставить(2, НСтр("ru = 'Ошибка распаковки файла обмена. Файл заблокирован'")); + одСообщения.Вставить(3, НСтр("ru = 'Указанный файл правил обмена не существует'")); + одСообщения.Вставить(4, НСтр("ru = 'Ошибка при создании COM-объекта Msxml2.DOMDocument'")); + одСообщения.Вставить(5, НСтр("ru = 'Ошибка открытия файла обмена'")); + одСообщения.Вставить(6, НСтр("ru = 'Ошибка при загрузке правил обмена'")); + одСообщения.Вставить(7, НСтр("ru = 'Ошибка формата правил обмена'")); + одСообщения.Вставить(8, НСтр("ru = 'Не корректно указано имя файла для выгрузки данных'")); + одСообщения.Вставить(9, НСтр("ru = 'Ошибка формата файла обмена'")); + одСообщения.Вставить(10, НСтр("ru = 'Не указано имя файла для выгрузки данных (Имя файла данных)'")); + одСообщения.Вставить(11, НСтр("ru = 'Ссылка на несуществующий объект метаданных в правилах обмена'")); + одСообщения.Вставить(12, НСтр("ru = 'Не указано имя файла с правилами обмена (Имя файла правил)'")); - одСообщения.Вставить(31, "Ошибка в обработчике события ПередОбработкойПравилаВыгрузки"); - одСообщения.Вставить(32, "Ошибка в обработчике события ПослеОбработкиПравилаВыгрузки"); - одСообщения.Вставить(33, "Ошибка в обработчике события ПередВыгрузкойОбъекта"); - одСообщения.Вставить(34, "Ошибка в обработчике события ПослеВыгрузкиОбъекта"); - - одСообщения.Вставить(39, "Ошибка при выполнении алгоритма, содержащегося в файле обмена"); - - одСообщения.Вставить(41, "Ошибка в обработчике события ПередВыгрузкойОбъекта"); - одСообщения.Вставить(42, "Ошибка в обработчике события ПриВыгрузкеОбъекта"); - одСообщения.Вставить(43, "Ошибка в обработчике события ПослеВыгрузкиОбъекта"); - - одСообщения.Вставить(45, "Не найдено правило конвертации объектов"); - - одСообщения.Вставить(48, "Ошибка в обработчике события ПередОбработкойВыгрузки группы свойств"); - одСообщения.Вставить(49, "Ошибка в обработчике события ПослеОбработкиВыгрузки группы свойств"); - одСообщения.Вставить(50, "Ошибка в обработчике события ПередВыгрузкой (объекта коллекции)"); - одСообщения.Вставить(51, "Ошибка в обработчике события ПриВыгрузке (объекта коллекции)"); - одСообщения.Вставить(52, "Ошибка в обработчике события ПослеВыгрузки (объекта коллекции)"); - одСообщения.Вставить(53, "Ошибка в глобальном обработчике события ПередЗагрузкойОбъекта (конвертация)"); - одСообщения.Вставить(54, "Ошибка в глобальном обработчике события ПослеЗагрузкиОбъекта (конвертация)"); - одСообщения.Вставить(55, "Ошибка в обработчике события ПередВыгрузкой (свойства)"); - одСообщения.Вставить(56, "Ошибка в обработчике события ПриВыгрузке (свойства)"); - одСообщения.Вставить(57, "Ошибка в обработчике события ПослеВыгрузки (свойства)"); + одСообщения.Вставить(13, НСтр("ru = 'Ошибка получения значения свойства объекта (по имени свойства источника)'")); + одСообщения.Вставить(14, НСтр("ru = 'Ошибка получения значения свойства объекта (по имени свойства приемника)'")); - одСообщения.Вставить(62, "Ошибка в обработчике события ПередВыгрузкойДанных (конвертация)"); - одСообщения.Вставить(63, "Ошибка в обработчике события ПослеВыгрузкиДанных (конвертация)"); - одСообщения.Вставить(64, "Ошибка в глобальном обработчике события ПередКонвертациейОбъекта (конвертация)"); - одСообщения.Вставить(65, "Ошибка в глобальном обработчике события ПередВыгрузкойОбъекта (конвертация)"); - одСообщения.Вставить(66, "Ошибка получения коллекции подчиненных объектов из входящих данных "); - одСообщения.Вставить(67, "Ошибка получения свойства подчиненного объекта из входящих данных "); - одСообщения.Вставить(68, "Ошибка получения свойства объекта из входящих данных "); + одСообщения.Вставить(15, НСтр("ru = 'Не указано имя файла для загрузки данных (Имя файла для загрузки)'")); - одСообщения.Вставить(69, "Ошибка в глобальном обработчике события ПослеВыгрузкиОбъекта (конвертация)"); + одСообщения.Вставить(16, НСтр("ru = 'Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)'")); + одСообщения.Вставить(17, НСтр("ru = 'Ошибка получения значения свойства подчиненного объекта (по имени свойства приемника)'")); - одСообщения.Вставить(71, "Не найдено соответствие для значения Источника"); + одСообщения.Вставить(19, НСтр("ru = 'Ошибка в обработчике события ПередЗагрузкойОбъекта'")); + одСообщения.Вставить(20, НСтр("ru = 'Ошибка в обработчике события ПриЗагрузкеОбъекта'")); + одСообщения.Вставить(21, НСтр("ru = 'Ошибка в обработчике события ПослеЗагрузкиОбъекта'")); + одСообщения.Вставить(22, НСтр("ru = 'Ошибка в обработчике события ПередЗагрузкойДанных (конвертация)'")); + одСообщения.Вставить(23, НСтр("ru = 'Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)'")); + одСообщения.Вставить(24, НСтр("ru = 'Ошибка при удалении объекта'")); + одСообщения.Вставить(25, НСтр("ru = 'Ошибка при записи документа'")); + одСообщения.Вставить(26, НСтр("ru = 'Ошибка записи объекта'")); + одСообщения.Вставить(27, НСтр("ru = 'Ошибка в обработчике события ПередОбработкойПравилаОчистки'")); + одСообщения.Вставить(28, НСтр("ru = 'Ошибка в обработчике события ПослеОбработкиПравилаОчистки'")); + одСообщения.Вставить(29, НСтр("ru = 'Ошибка в обработчике события ПередУдалениемОбъекта'")); - одСообщения.Вставить(72, "Ошибка при выгрузке данных для узла плана обмена "); + одСообщения.Вставить(31, НСтр("ru = 'Ошибка в обработчике события ПередОбработкойПравилаВыгрузки'")); + одСообщения.Вставить(32, НСтр("ru = 'Ошибка в обработчике события ПослеОбработкиПравилаВыгрузки'")); + одСообщения.Вставить(33, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкойОбъекта'")); + одСообщения.Вставить(34, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиОбъекта'")); - одСообщения.Вставить(73, "Ошибка в обработчике события ПоследовательностьПолейПоиска "); + одСообщения.Вставить(39, НСтр("ru = 'Ошибка при выполнении алгоритма, содержащегося в файле обмена'")); - одСообщения.Вставить(74, "Необходимо перезагрузить правила обмена для выгрузки данных."); + одСообщения.Вставить(41, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкойОбъекта'")); + одСообщения.Вставить(42, НСтр("ru = 'Ошибка в обработчике события ПриВыгрузкеОбъекта'")); + одСообщения.Вставить(43, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиОбъекта'")); - одСообщения.Вставить(75, "Ошибка при выполнении алгоритма после загрузки значений параметров"); + одСообщения.Вставить(45, НСтр("ru = 'Не найдено правило конвертации объектов'")); - одСообщения.Вставить(76, "Ошибка в обработчике события ПослеВыгрузкиОбъектаВФайл"); + одСообщения.Вставить(48, НСтр("ru = 'Ошибка в обработчике события ПередОбработкойВыгрузки группы свойств'")); + одСообщения.Вставить(49, НСтр("ru = 'Ошибка в обработчике события ПослеОбработкиВыгрузки группы свойств'")); + одСообщения.Вставить(50, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкой (объекта коллекции)'")); + одСообщения.Вставить(51, НСтр("ru = 'Ошибка в обработчике события ПриВыгрузке (объекта коллекции)'")); + одСообщения.Вставить(52, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузки (объекта коллекции)'")); + одСообщения.Вставить(53, НСтр("ru = 'Ошибка в глобальном обработчике события ПередЗагрузкойОбъекта (конвертация)'")); + одСообщения.Вставить(54, НСтр("ru = 'Ошибка в глобальном обработчике события ПослеЗагрузкиОбъекта (конвертация)'")); + одСообщения.Вставить(55, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкой (свойства)'")); + одСообщения.Вставить(56, НСтр("ru = 'Ошибка в обработчике события ПриВыгрузке (свойства)'")); + одСообщения.Вставить(57, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузки (свойства)'")); - одСообщения.Вставить(77, "Не указан файл внешней обработки с подключаемыми процедурами обработчиков событий."); + одСообщения.Вставить(62, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкойДанных (конвертация)'")); + одСообщения.Вставить(63, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиДанных (конвертация)'")); + одСообщения.Вставить(64, НСтр("ru = 'Ошибка в глобальном обработчике события ПередКонвертациейОбъекта (конвертация)'")); + одСообщения.Вставить(65, НСтр("ru = 'Ошибка в глобальном обработчике события ПередВыгрузкойОбъекта (конвертация)'")); + одСообщения.Вставить(66, НСтр("ru = 'Ошибка получения коллекции подчиненных объектов из входящих данных'")); + одСообщения.Вставить(67, НСтр("ru = 'Ошибка получения свойства подчиненного объекта из входящих данных'")); + одСообщения.Вставить(68, НСтр("ru = 'Ошибка получения свойства объекта из входящих данных'")); - одСообщения.Вставить(78, "Ошибка создания внешней обработки из файла с процедурами обработчиков событий."); + одСообщения.Вставить(69, НСтр("ru = 'Ошибка в глобальном обработчике события ПослеВыгрузкиОбъекта (конвертация)'")); - одСообщения.Вставить(79, "Код алгоритмов не может быть интегрирован в обработчик из-за обнаруженного рекурсивного вызова алгоритмов. + одСообщения.Вставить(71, НСтр("ru = 'Не найдено соответствие для значения Источника'")); + + одСообщения.Вставить(72, НСтр("ru = 'Ошибка при выгрузке данных для узла плана обмена'")); + + одСообщения.Вставить(73, НСтр("ru = 'Ошибка в обработчике события ПоследовательностьПолейПоиска'")); + + одСообщения.Вставить(74, НСтр("ru = 'Необходимо перезагрузить правила обмена для выгрузки данных'")); + + одСообщения.Вставить(75, НСтр("ru = 'Ошибка при выполнении алгоритма после загрузки значений параметров'")); + + одСообщения.Вставить(76, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиОбъектаВФайл'")); + + одСообщения.Вставить(77, НСтр("ru = 'Не указан файл внешней обработки с подключаемыми процедурами обработчиков событий'")); + + одСообщения.Вставить(78, НСтр("ru = 'Ошибка создания внешней обработки из файла с процедурами обработчиков событий'")); + + одСообщения.Вставить(79, НСтр("ru = 'Код алгоритмов не может быть интегрирован в обработчик из-за обнаруженного рекурсивного вызова алгоритмов. |Если в процессе отладки нет необходимости отлаживать код алгоритмов, то укажите режим ""не отлаживать алгоритмы"" |Если необходимо выполнять отладку алгоритмов с рекурсивным вызовом, то укажите режим ""алгоритмы отлаживать как процедуры"" - |и повторите выгрузку."); + |и повторите выгрузку.'")); - одСообщения.Вставить(80, "Обмен данными можно проводить только под полными правами."); + одСообщения.Вставить(80, НСтр("ru = 'Обмен данными можно проводить только под полными правами'")); - одСообщения.Вставить(1000, "Ошибка при создании временного файла выгрузки данных"); + одСообщения.Вставить(1000, НСтр("ru = 'Ошибка при создании временного файла выгрузки данных'")); КонецПроцедуры @@ -13276,7 +13306,6 @@ СообщитьПользователю(СтрокаСообщенияОбОшибке); - НаличиеОшибок = Истина; КонецЕсли; @@ -13344,8 +13373,9 @@ Исключение - СтрокаСообщенияОбОшибке = НСтр("ru = 'При попытке соединения с COM-сервером произошла следующая ошибка:'") + Символы.ПС - + ОписаниеОшибки(); + СтрокаСообщенияОбОшибке = НСтр("ru = 'При попытке соединения с COM-сервером произошла следующая ошибка: + |%1'"); + СтрокаСообщенияОбОшибке = ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -13379,10 +13409,10 @@ // Выделяет из имени файла его расширение (набор символов после последней точки). // // Параметры -// ИмяФайла – Строка, содержащая имя файла, неважно с именем каталога или без. +// ИмяФайла - Строка, содержащая имя файла, неважно с именем каталога или без. // // Возвращаемое значение: -// Строка – расширение файла. +// Строка - расширение файла. // Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт @@ -13431,7 +13461,7 @@ // Нет. // // Возвращаемое значение: -// ОбработкаОбъект – УниверсальныйОбменДаннымиXML – обработка базы-приемника для загрузки данных в базу-приемник +// ОбработкаОбъект - УниверсальныйОбменДаннымиXML - обработка базы-приемника для загрузки данных в базу-приемник // Функция ВыполнитьПодключениеКИБПриемнику() Экспорт @@ -13457,7 +13487,8 @@ РезультатПодключения = ОбъектПодключения.Обработки.УниверсальныйОбменДаннымиXML.Создать(); Исключение - Текст = НСтр("ru='При попытке создания обработки УниверсальныйОбменДаннымиXML произошла ошибка:'") + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Текст = НСтр("ru='При попытке создания обработки УниверсальныйОбменДаннымиXML произошла ошибка: %1'"); + Текст = ПодставитьПараметрыВСтроку(Текст, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(Текст); РезультатПодключения = Неопределено; КонецПопытки; @@ -13486,7 +13517,7 @@ // (физическое удаление или пометка на удаление) // // Параметры: -// ИмяТипаДляУдаления – Строка – имя типа в строковом представлении +// ИмяТипаДляУдаления - Строка - имя типа в строковом представлении // Процедура УдалитьОбъектыТипа(ИмяТипаДляУдаления) Экспорт @@ -13741,6 +13772,38 @@ КонецПроцедуры +// Подставляет параметры в строку. Максимально возможное число параметров - 9. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// Параметр - Строка - подставляемый параметр. +// +// Возвращаемое значение: +// Строка - текстовая строка с подставленными параметрами. +// +// Пример: +// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". +// +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт + + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%4", Параметр4); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%5", Параметр5); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%6", Параметр6); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%7", Параметр7); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%8", Параметр8); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%9", Параметр9); + + Возврат СтрокаПодстановки; + +КонецФункции + Функция ЭтоВнешняяОбработка() Возврат ?(Найти(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, ".") <> 0, Истина, Ложь); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt index 98a97617b..aec85c49a 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt @@ -56,6 +56,8 @@ Перем Правила; Перем Алгоритмы; Перем Запросы; +Перем ТаблицаПравилВыгрузки; +Перем ТаблицаНастройкиПараметров; Перем УзелДляОбмена; // только для on-line обмена Перем ОбщиеПроцедурыФункции; Перем ДатаНачала; @@ -87,10 +89,12 @@ Перем ЗначениеПустаяДата; #Область Конструктор_ТелоПроцедуры -Параметры = Владелец.Параметры; -ОбщиеПроцедурыФункции = Владелец; -Запросы = Владелец.Запросы; -Правила = Владелец.Правила; +ОбщиеПроцедурыФункции = Владелец; +Параметры = Владелец.Параметры; +Запросы = Владелец.Запросы; +Правила = Владелец.Правила; +ТаблицаПравилВыгрузки = Владелец.ТаблицаПравилВыгрузки; +ТаблицаНастройкиПараметров = Владелец.ТаблицаНастройкиПараметров; КомментарийПриВыгрузкеДанных = Владелец.КомментарийПриВыгрузкеДанных; КомментарийПриЗагрузкеДанных = Владелец.КомментарийПриЗагрузкеДанных; @@ -144,7 +148,7 @@ Алгоритмы = Новый Структура; #Область Конструктор_ТелоПроцедуры_ИнтеграцияКодаАлгоритмов -Алгоритмы = Неопределено; +Алгоритмы = Владелец.Алгоритмы; #Область Конструктор_ТелоПроцедуры_НеИспользоватьОтладкуАлгоритмов Алгоритмы = Владелец.Алгоритмы; @@ -179,7 +183,7 @@ Приемник = Неопределено, ВходящиеДанные = Неопределено, ИсходящиеДанные = Неопределено, - ИмяПКО = "") + ИмяПКО = "") Экспорт Возврат ОбщиеПроцедурыФункции.ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО); @@ -195,7 +199,7 @@ // Возвращаемое значение: // Объект нового xml-узла // -Функция СоздатьУзел(Имя) +Функция СоздатьУзел(Имя) Экспорт Возврат ОбщиеПроцедурыФункции.СоздатьУзел(Имя); @@ -214,7 +218,7 @@ // Возвращаемое значение: // Новый xml-узел, добавленный к указанному узлу-родителю // -Функция ДобавитьУзел(УзелРодитель, Имя) +Функция ДобавитьУзел(УзелРодитель, Имя) Экспорт Возврат ОбщиеПроцедурыФункции.ДобавитьУзел(УзелРодитель, Имя); @@ -232,7 +236,7 @@ // Возвращаемое значение: // Новый xml - копия указанного узла // -Функция КопироватьУзел(Узел) +Функция КопироватьУзел(Узел) Экспорт Возврат ОбщиеПроцедурыФункции.КопироватьУзел(Узел); @@ -244,7 +248,7 @@ // Объект - объект, для которого устанавливается свойство // Значение - значение устанавливаемого свойства "Загрузка" // -Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина) +Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина) Экспорт ОбщиеПроцедурыФункции.УстановитьОбменДаннымиЗагрузка(Объект, Значение); @@ -257,11 +261,11 @@ // Имя - имя атрибута // Значение - устанавливаемое значение // -Процедура УстановитьАтрибут(Узел, Имя, Значение) +Процедура УстановитьАтрибут(Узел, Имя, Значение) Экспорт ОбщиеПроцедурыФункции.УстановитьАтрибут(Узел, Имя, Значение); -КонецПроцедуры +КонецПроцедуры // Подчиняет xml-узел указанному узлу-родителю // @@ -269,7 +273,7 @@ // УзелРодитель - xml-узел-родитель // Узел - подчиняемый узел // -Процедура ДобавитьПодчиненный(УзелРодитель, Узел) +Процедура ДобавитьПодчиненный(УзелРодитель, Узел) Экспорт ОбщиеПроцедурыФункции.ДобавитьПодчиненный(УзелРодитель, Узел); @@ -285,9 +289,9 @@ // Имя - Строка. Имя элемента // Значение - Значение элемента // -Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") +Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Экспорт - ОбщиеПроцедурыФункции.одЗаписатьЭлемент(Объект, Имя, Значение); + ОбщиеПроцедурыФункции.одЗаписатьЭлемент(Объект, Имя, Значение); КонецПроцедуры @@ -303,7 +307,7 @@ // Возвращаемое значение: // Значение атрибута полученное по имени и приведенное к указанному типу // -Функция одАтрибут(Объект, Тип, Имя) +Функция одАтрибут(Объект, Тип, Имя) Экспорт Возврат ОбщиеПроцедурыФункции.одАтрибут(Объект, Тип, Имя); @@ -315,11 +319,11 @@ // Объект - объект типа XMLЧтение // Имя - имя узла, до конца которого пропускаем элементы // -Процедура одПропустить(Объект, Имя = "") +Процедура одПропустить(Объект, Имя = "") Экспорт ОбщиеПроцедурыФункции.одПропустить(Объект, Имя); -КонецПроцедуры // одПропустить() +КонецПроцедуры // Читает текст элемента и приводит значение к указанному типу // @@ -332,11 +336,11 @@ // Возвращаемое значение: // Значение xml-элемента, приведенное к соответствующему типу // -Функция одЗначениеЭлемента(Объект, Тип, ИскатьПоСвойству = "", ОбрезатьСтрокуСправа = Истина) +Функция одЗначениеЭлемента(Объект, Тип, ИскатьПоСвойству = "", ОбрезатьСтрокуСправа = Истина) Экспорт Возврат ОбщиеПроцедурыФункции.одЗначениеЭлемента(Объект, Тип, ИскатьПоСвойству, ОбрезатьСтрокуСправа); -КонецФункции // одЗначениеЭлемента() +КонецФункции //////////////////////////////////////////////////////////////////////////////// // РАБОТА С ДАННЫМИ @@ -353,11 +357,11 @@ // Возвращаемое значение: // Строка - имя переданного значения перечисления. // -Функция одИмяЗначенияПеречисления(Значение) +Функция одИмяЗначенияПеречисления(Значение) Экспорт Возврат ОбщиеПроцедурыФункции.одИмяЗначенияПеречисления(Значение); -КонецФункции // одИмяЗначенияПеречисления() +КонецФункции // Определяет заполнено ли переданное значение // @@ -367,11 +371,11 @@ // Возвращаемое значение: // Истина - значение не заполнено, ложь - иначе. // -Функция одПустое(Значение, ЭтоNULL=Ложь) +Функция одПустое(Значение, ЭтоNULL=Ложь) Экспорт Возврат ОбщиеПроцедурыФункции.одПустое(Значение, ЭтоNULL); -КонецФункции // одПустое() +КонецФункции // Возвращает объект ОписаниеТипов, содержащий указанный тип. // @@ -381,11 +385,11 @@ // Возвращаемое значение: // ОписаниеТипов // -Функция одОписаниеТипа(ЗначениеТипа) +Функция одОписаниеТипа(ЗначениеТипа) Экспорт Возврат ОбщиеПроцедурыФункции.одОписаниеТипа(ЗначениеТипа); -КонецФункции // одОписаниеТипа() +КонецФункции // Возвращает пустое (дефолтное) значение указанного типа // @@ -395,11 +399,11 @@ // Возвращаемое значение: // Пустое значение указанного типа. // -Функция одПолучитьПустоеЗначение(Тип) +Функция одПолучитьПустоеЗначение(Тип) Экспорт Возврат ОбщиеПроцедурыФункции.одПолучитьПустоеЗначение(Тип); -КонецФункции // ПолучитьПустоеЗначение() +КонецФункции // Осуществляет простой поиск объекта информационной базы по указанному свойству. // @@ -415,14 +419,14 @@ Функция одНайтиОбъектПоСвойству(Менеджер, Свойство, Значение, НайденныйОбъектПоУникальномуИдентификатору = Неопределено, ОбщаяСтруктураСвойств = Неопределено, ОбщиеСвойстваПоиска = Неопределено, - РежимПоискаОсновногоОбъекта = Истина, СтрокаЗапросаПоискаПоУникальномуИдентификатору = "") + РежимПоискаОсновногоОбъекта = Истина, СтрокаЗапросаПоискаПоУникальномуИдентификатору = "") Экспорт Возврат ОбщиеПроцедурыФункции.одНайтиОбъектПоСвойству(Менеджер, Свойство, Значение, НайденныйОбъектПоУникальномуИдентификатору, ОбщаяСтруктураСвойств, ОбщиеСвойстваПоиска, РежимПоискаОсновногоОбъекта, СтрокаЗапросаПоискаПоУникальномуИдентификатору); -КонецФункции // одНайтиОбъектПоСвойству() +КонецФункции // Осуществляет простой поиск объекта информационной базы по указанному свойству. // @@ -435,11 +439,11 @@ // Возвращаемое значение: // Найденный объект информационной базы // -Функция одПолучитьЗначениеПоСтроке(Стр, Тип, Свойство = "") +Функция одПолучитьЗначениеПоСтроке(Стр, Тип, Свойство = "") Экспорт Возврат ОбщиеПроцедурыФункции.одПолучитьЗначениеПоСтроке(Стр, Тип, Свойство); -КонецФункции // одПолучитьЗначениеПоСтроке() +КонецФункции // Возвращает строковое представление типа значения // @@ -449,11 +453,11 @@ // Возвращаемое значение: // Строка - строковое представление типа значения // -Функция одТипЗначенияСтрокой(ЗначениеИлиТип) +Функция одТипЗначенияСтрокой(ЗначениеИлиТип) Экспорт Возврат ОбщиеПроцедурыФункции.одТипЗначенияСтрокой(ЗначениеИлиТип); -КонецФункции // одТипЗначенияСтрокой() +КонецФункции // Возвращает XML представление объекта ОписаниеТипов // Функция может быть использована в обработчиках событий, программный код @@ -467,11 +471,11 @@ // Возвращаемое значение: // Строка - XML представление переданного объекта ОписаниеТипов // -Функция одПолучитьXMLПредставлениеОписанияТипов(ОписаниеТипов) +Функция одПолучитьXMLПредставлениеОписанияТипов(ОписаниеТипов) Экспорт Возврат ОбщиеПроцедурыФункции.одПолучитьXMLПредставлениеОписанияТипов(ОписаниеТипов); -КонецФункции // одПолучитьXMLПредставлениеОписанияТипов() +КонецФункции //////////////////////////////////////////////////////////////////////////////// // РАБОТА СО СТРОКАМИ @@ -488,11 +492,11 @@ // Возвращаемое значение: // Правая часть строки - до символа-разделителя. // -Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) +Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) Экспорт Возврат ОбщиеПроцедурыФункции.ОтделитьРазделителем(Стр, Разделитель, Режим); -КонецФункции // ОтделитьРазделителем() +КонецФункции // Преобразует значения из строки в массив, используя указанный разделитель // @@ -503,13 +507,13 @@ // Возвращаемое значение: // Массив значений // -Функция МассивИзСтроки(Знач Стр, Разделитель=",") +Функция МассивИзСтроки(Знач Стр, Разделитель=",") Экспорт Возврат ОбщиеПроцедурыФункции.МассивИзСтроки(Стр, Разделитель); -КонецФункции // МассивИзСтроки() +КонецФункции -Функция ПолучитьСтроковыйНомерБезПрефиксов(Номер) +Функция ПолучитьСтроковыйНомерБезПрефиксов(Номер) Экспорт Возврат ОбщиеПроцедурыФункции.ПолучитьСтроковыйНомерБезПрефиксов(Номер); @@ -525,7 +529,7 @@ // Возвращаемое значение: // Префикс строки // -Функция ПолучитьПрефиксЧислоНомера(Знач Стр, ЧисловаяЧасть = "", Режим = "") +Функция ПолучитьПрефиксЧислоНомера(Знач Стр, ЧисловаяЧасть = "", Режим = "") Экспорт Возврат ОбщиеПроцедурыФункции.ПолучитьПрефиксЧислоНомера(Стр, ЧисловаяЧасть, Режим); @@ -546,11 +550,11 @@ // Возвращаемое значение: // Строка - код или номер, приведенная к требуемой длине. // -Функция ПривестиНомерКДлине(Знач Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера = Истина, Префикс = "") +Функция ПривестиНомерКДлине(Знач Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера = Истина, Префикс = "") Экспорт Возврат ОбщиеПроцедурыФункции.ПривестиНомерКДлине(Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера, Префикс); -КонецФункции // ПривестиНомерКДлине() +КонецФункции // Добавляет к префиксу номера или кода подстроку // Функция может быть использована в обработчиках событий, программный код @@ -567,11 +571,11 @@ // Возвращаемое значение: // Строка - номер или код, к префиксу которого добавлена указанная подстрока. // -Функция ДобавитьКПрефиксу(Знач Стр, Добавок = "", Длина = "", Режим = "Слева") +Функция ДобавитьКПрефиксу(Знач Стр, Добавок = "", Длина = "", Режим = "Слева") Экспорт Возврат ОбщиеПроцедурыФункции.ДобавитьКПрефиксу(Стр, Добавок, Длина, Режим); -КонецФункции // ДобавитьКПрефиксу() +КонецФункции // Дополняет строку указанным символом до указанной длины. // @@ -583,11 +587,11 @@ // Возвращаемое значение: // Строка, дополненная указанным символом до указанной длины. // -Функция одДополнитьСтроку(Стр, Длина, Чем = " ") +Функция одДополнитьСтроку(Стр, Длина, Чем = " ") Экспорт Возврат ОбщиеПроцедурыФункции.одДополнитьСтроку(Стр, Длина, Чем); -КонецФункции // одДополнитьСтроку() +КонецФункции //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ФАЙЛОМ ОБМЕНА @@ -597,11 +601,11 @@ // Параметры: // Узел - xml-узел, сохранямый в файл // -Процедура ЗаписатьВФайл(Узел) +Процедура ЗаписатьВФайл(Узел) Экспорт ОбщиеПроцедурыФункции.ЗаписатьВФайл(Узел); -КонецПроцедуры // ЗаписатьВФайл() +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ПРАВИЛАМИ ОБМЕНА @@ -616,7 +620,7 @@ // Возвращаемое значение: // Ссылка на правило конвертации (строка в таблице правил) // -Функция НайтиПравило(Объект, ИмяПравила="") +Функция НайтиПравило(Объект, ИмяПравила="") Экспорт Возврат ОбщиеПроцедурыФункции.НайтиПравило(Объект, ИмяПравила); @@ -626,19 +630,19 @@ //////////////////////////////////////////////////////////////////////////////// // -Процедура ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике = "") +Процедура ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике = "") Экспорт ОбщиеПроцедурыФункции.ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике); КонецПроцедуры -Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") +Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") Экспорт ОбщиеПроцедурыФункции.ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации); КонецПроцедуры -Процедура ПередатьДополнительныеПараметрыВПриемник() +Процедура ПередатьДополнительныеПараметрыВПриемник() Экспорт ОбщиеПроцедурыФункции.ПередатьДополнительныеПараметрыВПриемник(); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ПараметрыОбработчиков/Template.mxlx b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ПараметрыОбработчиков/Template.mxlx index 9d053398a..1af784b84 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ПараметрыОбработчиков/Template.mxlx +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ПараметрыОбработчиков/Template.mxlx @@ -3464,7 +3464,24 @@ - 233 + 232 + + + 1 + + 0 + + + ru + НаборЗаписей + + + + + + + + 234 1 @@ -3481,7 +3498,7 @@ - 234 + 235 1 @@ -3498,7 +3515,7 @@ - 235 + 236 1 @@ -3515,7 +3532,7 @@ - 236 + 237 1 @@ -3532,7 +3549,7 @@ - 237 + 238 1 @@ -3549,7 +3566,7 @@ - 238 + 239 1 @@ -3566,7 +3583,7 @@ - 239 + 240 1 @@ -3583,7 +3600,7 @@ - 240 + 241 1 @@ -3600,7 +3617,7 @@ - 242 + 243 1 @@ -3616,23 +3633,6 @@ - - 243 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 244 @@ -3643,7 +3643,7 @@ ru - Источник + ФайлОбмена @@ -3660,7 +3660,7 @@ ru - Приемник + Источник @@ -3677,7 +3677,7 @@ ru - ВходящиеДанные + Приемник @@ -3694,7 +3694,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -3711,7 +3711,7 @@ ru - ПКО + ИсходящиеДанные @@ -3728,7 +3728,7 @@ ru - ПКГС + ПКО @@ -3745,7 +3745,7 @@ ru - Отказ + ПКГС @@ -3762,7 +3762,7 @@ ru - КоллекцияОбъектов + Отказ @@ -3779,7 +3779,7 @@ ru - НеЗамещать + КоллекцияОбъектов @@ -3796,7 +3796,7 @@ ru - УзелКоллекцииСвойств + НеЗамещать @@ -3805,6 +3805,23 @@ 254 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 255 1 @@ -3821,7 +3838,7 @@ - 256 + 257 1 @@ -3837,23 +3854,6 @@ - - 257 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 258 @@ -3864,7 +3864,7 @@ ru - Источник + ФайлОбмена @@ -3881,7 +3881,7 @@ ru - Приемник + Источник @@ -3898,7 +3898,7 @@ ru - ВходящиеДанные + Приемник @@ -3915,7 +3915,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -3928,11 +3928,11 @@ 1 - 2 + 0 ru - ПКО + ИсходящиеДанные @@ -3949,7 +3949,7 @@ ru - ПКГС + ПКО @@ -3962,11 +3962,11 @@ 1 - 0 + 2 ru - Отказ + ПКГС @@ -3983,7 +3983,7 @@ ru - ОбъектКоллекции + Отказ @@ -4000,7 +4000,7 @@ ru - УзелКоллекцииСвойств + ОбъектКоллекции @@ -4009,6 +4009,23 @@ 267 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 268 1 @@ -4025,7 +4042,7 @@ - 269 + 270 1 @@ -4041,23 +4058,6 @@ - - 270 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 271 @@ -4068,7 +4068,7 @@ ru - Источник + ФайлОбмена @@ -4085,7 +4085,7 @@ ru - Приемник + Источник @@ -4102,7 +4102,7 @@ ru - ВходящиеДанные + Приемник @@ -4119,7 +4119,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -4132,11 +4132,11 @@ 1 - 2 + 0 ru - ПКО + ИсходящиеДанные @@ -4153,7 +4153,7 @@ ru - ПКГС + ПКО @@ -4166,11 +4166,11 @@ 1 - 0 + 2 ru - ОбъектКоллекции + ПКГС @@ -4187,7 +4187,7 @@ ru - УзелКоллекцииОбъектов + ОбъектКоллекции @@ -4204,7 +4204,7 @@ ru - УзелОбъектаКоллекции + УзелКоллекцииОбъектов @@ -4221,7 +4221,7 @@ ru - УзелКоллекцииСвойств + УзелОбъектаКоллекции @@ -4230,6 +4230,23 @@ 281 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 282 1 @@ -4246,7 +4263,7 @@ - 283 + 284 1 @@ -4262,23 +4279,6 @@ - - 284 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 285 @@ -4289,7 +4289,7 @@ ru - Источник + ФайлОбмена @@ -4306,7 +4306,7 @@ ru - Приемник + Источник @@ -4323,7 +4323,7 @@ ru - ВходящиеДанные + Приемник @@ -4340,7 +4340,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -4353,11 +4353,11 @@ 1 - 2 + 0 ru - ПКО + ИсходящиеДанные @@ -4374,7 +4374,7 @@ ru - ПКГС + ПКО @@ -4387,11 +4387,11 @@ 1 - 0 + 2 ru - Отказ + ПКГС @@ -4408,7 +4408,7 @@ ru - ОбъектКоллекции + Отказ @@ -4425,7 +4425,7 @@ ru - УзелКоллекцииОбъектов + ОбъектКоллекции @@ -4442,7 +4442,7 @@ ru - УзелКоллекцииСвойств + УзелКоллекцииОбъектов @@ -4451,6 +4451,23 @@ 295 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 296 1 @@ -4467,7 +4484,7 @@ - 297 + 298 1 @@ -4483,23 +4500,6 @@ - - 298 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 299 @@ -4510,7 +4510,7 @@ ru - Источник + ФайлОбмена @@ -4527,7 +4527,7 @@ ru - Приемник + Источник @@ -4544,7 +4544,7 @@ ru - ВходящиеДанные + Приемник @@ -4561,7 +4561,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -4574,11 +4574,11 @@ 1 - 2 + 0 ru - ПКО + ИсходящиеДанные @@ -4595,7 +4595,7 @@ ru - ПКГС + ПКО @@ -4608,11 +4608,11 @@ 1 - 0 + 2 ru - Отказ + ПКГС @@ -4629,7 +4629,7 @@ ru - УзелКоллекцииСвойств + Отказ @@ -4638,6 +4638,23 @@ 307 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 308 1 @@ -4654,7 +4671,7 @@ - 309 + 310 1 @@ -4670,23 +4687,6 @@ - - 310 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 311 @@ -4697,7 +4697,7 @@ ru - Источник + ФайлОбмена @@ -4714,7 +4714,7 @@ ru - Приемник + Источник @@ -4731,7 +4731,7 @@ ru - ВходящиеДанные + Приемник @@ -4748,7 +4748,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -4765,7 +4765,7 @@ ru - ПКС + ИсходящиеДанные @@ -4782,7 +4782,7 @@ ru - ПКО + ПКС @@ -4799,7 +4799,7 @@ ru - ОбъектКоллекции + ПКО @@ -4816,7 +4816,7 @@ ru - Отказ + ОбъектКоллекции @@ -4833,7 +4833,7 @@ ru - Значение + Отказ @@ -4850,7 +4850,7 @@ ru - ТипПриемника + Значение @@ -4867,7 +4867,7 @@ ru - ИмяПКО + ТипПриемника @@ -4884,7 +4884,7 @@ ru - ИмяПКОВидСубконто + ИмяПКО @@ -4901,7 +4901,7 @@ ru - Пусто + ИмяПКОВидСубконто @@ -4918,7 +4918,7 @@ ru - Выражение + Пусто @@ -4935,7 +4935,7 @@ ru - УзелКоллекцииСвойств + Выражение @@ -4944,6 +4944,23 @@ 326 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 327 1 @@ -4960,7 +4977,7 @@ - 328 + 329 1 @@ -4976,23 +4993,6 @@ - - 329 - - - 1 - - 0 - - - ru - ФайлОбмена - - - - - - 330 @@ -5003,7 +5003,7 @@ ru - Источник + ФайлОбмена @@ -5020,7 +5020,7 @@ ru - Приемник + Источник @@ -5037,7 +5037,7 @@ ru - ВходящиеДанные + Приемник @@ -5054,7 +5054,7 @@ ru - ИсходящиеДанные + ВходящиеДанные @@ -5071,7 +5071,7 @@ ru - ПКС + ИсходящиеДанные @@ -5088,7 +5088,7 @@ ru - ПКО + ПКС @@ -5105,7 +5105,7 @@ ru - ОбъектКоллекции + ПКО @@ -5122,7 +5122,7 @@ ru - Отказ + ОбъектКоллекции @@ -5139,7 +5139,7 @@ ru - Значение + Отказ @@ -5156,7 +5156,7 @@ ru - КлючИЗначение + Значение @@ -5173,7 +5173,7 @@ ru - ВидСубконто + КлючИЗначение @@ -5190,7 +5190,7 @@ ru - Субконто + ВидСубконто @@ -5207,7 +5207,7 @@ ru - Пусто + Субконто @@ -5224,7 +5224,7 @@ ru - ИмяПКО + Пусто @@ -5241,7 +5241,7 @@ ru - ПКОСвойств + ИмяПКО @@ -5258,7 +5258,7 @@ ru - УзелСвойства + ПКОСвойств @@ -5275,7 +5275,7 @@ ru - УзелКоллекцииСвойств + УзелСвойства @@ -5284,6 +5284,23 @@ 347 + + + 1 + + 0 + + + ru + УзелКоллекцииСвойств + + + + + + + + 348 1 @@ -5300,7 +5317,7 @@ - 349 + 350 1 @@ -5317,7 +5334,7 @@ - 350 + 351 1 @@ -5334,7 +5351,7 @@ - 351 + 352 1 @@ -5351,7 +5368,7 @@ - 352 + 353 1 @@ -5368,7 +5385,7 @@ - 353 + 354 1 @@ -5385,7 +5402,7 @@ - 354 + 355 1 @@ -5402,7 +5419,7 @@ - 355 + 356 1 @@ -5419,7 +5436,7 @@ - 356 + 357 1 @@ -5436,7 +5453,7 @@ - 357 + 358 1 @@ -5453,7 +5470,7 @@ - 358 + 359 1 @@ -5470,7 +5487,7 @@ - 359 + 360 1 @@ -5487,7 +5504,7 @@ - 360 + 361 1 @@ -5504,7 +5521,7 @@ - 361 + 362 1 @@ -5521,7 +5538,7 @@ - 362 + 363 1 @@ -5538,7 +5555,7 @@ - 363 + 364 1 @@ -5555,7 +5572,7 @@ - 364 + 365 1 @@ -5572,7 +5589,7 @@ - 365 + 366 1 @@ -5589,7 +5606,7 @@ - 366 + 367 1 @@ -5606,7 +5623,7 @@ - 367 + 368 1 @@ -5623,7 +5640,7 @@ - 368 + 369 1 @@ -5640,7 +5657,7 @@ - 369 + 370 1 @@ -5657,7 +5674,7 @@ - 371 + 372 1 @@ -5674,7 +5691,7 @@ - 372 + 373 1 @@ -5691,7 +5708,7 @@ - 374 + 375 1 @@ -5709,14 +5726,14 @@ true 5 - 376 - 376 + 377 + 377 Алгоритм_ПоУмолчанию Rows - 375 - 375 + 376 + 376 -1 -1 @@ -5875,8 +5892,8 @@ Обработка_Конструктор Rows - 372 - 372 + 373 + 373 -1 -1 @@ -5925,8 +5942,8 @@ ПКГС_ПередВыгрузкой Rows - 257 - 267 + 258 + 268 -1 -1 @@ -5935,8 +5952,8 @@ ПКГС_ПередОбработкойВыгрузки Rows - 243 - 254 + 244 + 255 -1 -1 @@ -5945,8 +5962,8 @@ ПКГС_ПослеВыгрузки Rows - 284 - 295 + 285 + 296 -1 -1 @@ -5955,8 +5972,8 @@ ПКГС_ПослеОбработкиВыгрузки Rows - 298 - 307 + 299 + 308 -1 -1 @@ -5965,8 +5982,8 @@ ПКГС_ПриВыгрузке Rows - 270 - 281 + 271 + 282 -1 -1 @@ -6015,8 +6032,8 @@ ПКО_ПоследовательностьПолейПоиска Rows - 234 - 240 + 235 + 241 -1 -1 @@ -6026,7 +6043,7 @@ Rows 224 - 231 + 232 -1 -1 @@ -6055,8 +6072,8 @@ ПКС_ПередВыгрузкой Rows - 310 - 326 + 311 + 327 -1 -1 @@ -6065,8 +6082,8 @@ ПКС_ПослеВыгрузки Rows - 350 - 369 + 351 + 370 -1 -1 @@ -6075,8 +6092,8 @@ ПКС_ПриВыгрузке Rows - 329 - 347 + 330 + 348 -1 -1 diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca deleted file mode 100644 index 51bf11d1f..000000000 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - ИтогиАгрегатыИтоги - - - - - СписокИтогов.АгрегатыИтоги - Equal - 0 - - - - - Текст - Итоги - - - Регистр в режиме Итогов - - - - - ИтогиАгрегатыИтоги - - - - - СписокИтогов.АгрегатыИтоги - Equal - 1 - - - - - Текст - Агрегаты - - - Регистр в режиме Агрегатов - - - - - ИтогиАгрегатыИтоги - - - - - СписокИтогов.АгрегатыИтоги - Equal - 2 - - - - - Текст - - - - Просто итоговый регистр - - - - - ИтогиРазделениеИтогов - - - - - СписокИтогов.РазрешитьРазделениеИтогов - Equal - false - - - - - ЦветФона - web:Gainsboro - - - Невозможно выполнять разделение итогов - - - - - ИтогиИспользоватьТекущиеИтоги - - - ИтогиПериодИтогов - - - ИтогиРазделениеИтогов - - - - - СписокИтогов.ОборотныйРег - Equal - false - - - - - ЦветФона - web:Gainsboro - - - Невозможно управлять итогами - - - - - ИтогиАгрегатыИтоги - - - - - СписокИтогов.АгрегатыИтоги - Equal - 2 - - - - - ЦветФона - web:Gainsboro - - - Это обычный регистр - - - - - ИтогиИспользоватьИтоги - - - - - СписокИтогов.АгрегатыИтоги - Equal - 1 - - - - - ЦветФона - web:Gainsboro - - - false - Текст - Агрегаты - - - Регистр в режиме Агрегатов - - - - - АгрегатыПоРегистрам - - - - - АгрегатыПоРегистрам.ПостроениеОптимально - Equal - false - - - - - Шрифт - - - - Нужно заменить оптимальные агрегата в метаданных - - diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index 8d0c71e75..de74e75a2 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -14,7 +14,7 @@ БыстрыйДоступИтоги 212 - ГруппаУстановкаПериодаРассчитанныхИтогов + ГруппаУстановитьПериодРассчитанныхИтогов 278 УстановитьПериодРассчитанныхИтогов @@ -98,14 +98,14 @@ <key>ru</key> - <value>Группа установка периода рассчитанных итогов</value> + <value>Группа установить период рассчитанных итогов</value> ru - Группа установка периода рассчитанных итогов + Группа установить период рассчитанных итогов - ГруппаУстановкаПериодаРассчитанныхИтоговExtendedTooltip + ГруппаУстановитьПериодРассчитанныхИтоговРасширеннаяПодсказка 333 Label true @@ -4089,7 +4089,7 @@ ru Установить период итогов... - 8 + 6 ru Установить период рассчитанных итогов @@ -4111,7 +4111,7 @@ ru Включить разделение итогов - 9 + 7 ru Включить разделение итогов @@ -4133,7 +4133,7 @@ ru Выключить разделение итогов - 10 + 8 ru Выключить разделение итогов @@ -4155,7 +4155,7 @@ ru Обновить состояние - 24 + 9 ru Обновить информацию об агрегатах @@ -4182,7 +4182,7 @@ ru Включить режим агрегатов - 21 + 10 ru Включить режим агрегатов @@ -4204,7 +4204,7 @@ ru Включить использование агрегатов - 22 + 11 ru Включить использование агрегатов @@ -4226,7 +4226,7 @@ ru Включить режим итогов - 23 + 12 ru Включить режим итогов @@ -4248,7 +4248,7 @@ ru Выключить использование агрегатов - 27 + 13 ru Выключить использование агрегатов @@ -4270,7 +4270,7 @@ ru Перестроить ... - 28 + 14 ru Перестроить использование агрегатов @@ -4292,7 +4292,7 @@ ru Очистить - 29 + 15 ru Очистить агрегаты @@ -4314,7 +4314,7 @@ ru Обновить - 30 + 16 ru Обновить агрегаты @@ -4336,7 +4336,7 @@ ru Оптимальные ... - 31 + 17 ru Рассчитать оптимальные агрегаты @@ -4358,7 +4358,7 @@ ru Установить период рассчитанных итогов - 6 + 18 ru Установить период рассчитанных итогов по всем регистрам @@ -4380,7 +4380,7 @@ ru Включить использование итогов - 7 + 19 ru Включить использование итогов для всех регистров, у которых это использование отключено @@ -4402,7 +4402,7 @@ ru Перестроить и заполнить - 13 + 20 ru Заполнить агрегаты и выполнить перестроение @@ -4424,7 +4424,7 @@ ru Получить оптимальные агрегаты - 15 + 21 ru Рассчитать оптимальные агрегаты для всех регистров @@ -4446,7 +4446,7 @@ ru Пересчитать итоги - 35 + 22 ru Выполнить пересчет итогов @@ -4468,7 +4468,7 @@ ru Пересчитать итоги за период... - 36 + 23 ru Выполнить пересчет итогов за период @@ -4490,7 +4490,7 @@ ru Пересчитать текущие итоги - 37 + 24 ru Выполнить пересчет текущих итогов diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index fbf4175b2..459615598 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -1,11 +1,12 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -129,8 +130,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ГиперссылкаСТекстомНажатие(Элемент, СтандартнаяОбработка) @@ -141,8 +143,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокИтогов +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокИтогов &НаКлиенте Процедура СписокИтоговПриАктивизацииСтроки(Элемент) @@ -178,8 +181,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьИспользованиеИтогов(Команда) @@ -548,7 +552,6 @@ УправлениеАгрегатом(ПараметрыИтогов); - ПараметрыИтогов = Новый Структура; ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Заполнение агрегатов ...'")); ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Заполнение агрегатов завершено'")); @@ -636,8 +639,120 @@ Диалог.Показать(Обработчик); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Итоги'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 1; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Агрегаты'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 2; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Просто итоговый регистр'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьТекущиеИтоги.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиПериодИтогов.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиРазделениеИтогов.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.ОборотныйРег"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 2; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьИтоги.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 1; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АгрегатыПоРегистрам.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АгрегатыПоРегистрам.ПостроениеОптимально"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики асинхронных диалогов @@ -1365,5 +1480,4 @@ КонецФункции - - +#КонецОбласти diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html index 555b60978..7d5df467e 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 d858a5d74..c287ae965 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,8 +16,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПериодДляРегистровНакопленияПриИзменении(Элемент) @@ -33,8 +34,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -46,8 +48,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Функция КонецПериода(Дата) @@ -56,5 +59,4 @@ КонецФункции - - +#КонецОбласти diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html index fa74305d1..4ce22ff2c 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 154c771d7..c2c108fbc 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -17,8 +17,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -29,3 +30,5 @@ ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html index 83c742003..75e5d2eb8 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/УправлениеПолнотекстовымПоиском/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl index 86d89afd1..1042f2789 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Commands/УправлениеПолнотекстовымПоиском/CommandModule.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.УправлениеПолнотекстовымПоиском.Форма", Новый Структура, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/ConditionalAppearance.dcssca deleted file mode 100644 index 60b2f5f4f..000000000 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - СтатусИндекса - - - - - ИндексАктуален - Equal - false - - - - - Шрифт - - - - - diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl index f157ccf34..52719aa90 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -12,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьИндекс(Команда) @@ -37,8 +40,30 @@ Состояние(НСтр("ru = 'Очистка полнотекстового индекса завершена.'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатусИндекса.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИндексАктуален"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + +КонецПроцедуры &НаСервере Процедура ОбновитьИндексСервер() @@ -74,3 +99,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html index a064b6ccb..274ae0112 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html @@ -1,4 +1,4 @@ - +

            Данная обработка позволяет управлять индексом полнотекстового поиска, обновлять и очищать его.
            В клиент-серверном варианте обновление полнотекстового индекса выполняется автоматически.

            Команды:

            diff --git a/SSL/src/DefinedTypes/БезопасныйРежим/БезопасныйРежим.mdo b/SSL/src/DefinedTypes/БезопасныйРежим/БезопасныйРежим.mdo new file mode 100644 index 000000000..d22d81d8f --- /dev/null +++ b/SSL/src/DefinedTypes/БезопасныйРежим/БезопасныйРежим.mdo @@ -0,0 +1,18 @@ + + + + + + БезопасныйРежим + + ru + Безопасный режим + + + Boolean + String + + 200 + + + diff --git a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo index 7f19d2753..a6e50a4fb 100644 --- a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo +++ b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo @@ -10,7 +10,6 @@ Типы значений и групп значений - CatalogRef.ФизическиеЛица CatalogRef.ВнешниеПользователи CatalogRef.ГруппыВнешнихПользователей CatalogRef.ГруппыПользователей diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html index 92603eff4..772ef81dc 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html @@ -1,4 +1,4 @@ - +

            Настройки работы с почтой

            Как настроить подпись к письму?

            Как указать, что для всех отправляемых писем по умолчанию необходимо уведомление о доставке и прочтении?

            diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index 3529f5682..4ae379dc3 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -55,8 +54,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВключатьПодписьДляНовыйСообщенийПриИзменении(Элемент) @@ -105,7 +105,7 @@ Иначе ДополнительныеПараметры = Новый Структура("КонтекстВызова", "ДляНовыхСообщений"); - ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтаФорма, ДополнительныеПараметры); + ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; @@ -142,14 +142,15 @@ Иначе ДополнительныеПараметры = Новый Структура("КонтекстВызова", "ПриОтветеПересылке"); - ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтаФорма, ДополнительныеПараметры); + ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) @@ -159,8 +160,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УправлениеДоступностью() @@ -264,4 +266,6 @@ УправлениеДоступностью(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html index 9bbfaff1c..50429419f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html @@ -1,4 +1,4 @@ - +

            Параметры электронного письма

            Какая информация отображается в данной форме?

            Какая информация отображается в данной форме?

            diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl index 3afa61e77..8b552e213 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +20,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОК(Команда) @@ -30,8 +31,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыбратьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -110,3 +112,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index 3462f04a9..f4deab972 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТекстHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) @@ -52,3 +53,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index 632c5261c..000000000 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - Свойства - - - - - Свойства.НеРассмотрено - Greater - 0 - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - - - - Папки - - - - - Папки.НеРассмотрено - Greater - 0 - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - - - - Категории - - - - - Категории.НеРассмотрено - Greater - 0 - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - - - - СписокИсходящие - - - Список - - - СписокВходящие - - - - - Список.Рассмотрено - Equal - false - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - - - - СтрокаПоиска - - - - - AndGroup - - СтрокаПоиска - Equal - - - - РасширенныйПоиск - Equal - false - - - - - - ЦветФона - style:FieldBackColor - - - - diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index c8969e269..03e412b0d 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -1038,10 +1038,10 @@ КонтактыПанелиНавигацииСтрокаПоиска - 765 + 774 КонтактыПанелиНавигацииСтрокаПоискаРасширеннаяПодсказка - 767 + 776 Label true true @@ -1051,7 +1051,7 @@ КонтактыПанелиНавигацииСтрокаПоискаКонтекстноеМеню - 766 + 775 true КонтактыПанелиНавигации @@ -1061,10 +1061,10 @@ КонтактыПанелиНавигацииСостояниеПросмотра - 768 + 777 КонтактыПанелиНавигацииСостояниеПросмотраРасширеннаяПодсказка - 770 + 779 Label true true @@ -1074,7 +1074,7 @@ КонтактыПанелиНавигацииСостояниеПросмотраКонтекстноеМеню - 769 + 778 true ViewStatusAddition @@ -1085,10 +1085,10 @@ КонтактыПанелиНавигацииУправлениеПоиском - 771 + 780 КонтактыПанелиНавигацииУправлениеПоискомРасширеннаяПодсказка - 773 + 782 Label true true @@ -1098,7 +1098,7 @@ КонтактыПанелиНавигацииУправлениеПоискомКонтекстноеМеню - 772 + 781 true SearchControlAddition @@ -1713,10 +1713,10 @@ ПредметыПанельНавигацииСтрокаПоиска - 786 + 795 ПредметыПанельНавигацииСтрокаПоискаРасширеннаяПодсказка - 788 + 797 Label true true @@ -1726,7 +1726,7 @@ ПредметыПанельНавигацииСтрокаПоискаКонтекстноеМеню - 787 + 796 true ПредметыПанельНавигации @@ -1736,10 +1736,10 @@ ПредметыПанельНавигацииСостояниеПросмотра - 789 + 798 ПредметыПанельНавигацииСостояниеПросмотраРасширеннаяПодсказка - 791 + 800 Label true true @@ -1749,7 +1749,7 @@ ПредметыПанельНавигацииСостояниеПросмотраКонтекстноеМеню - 790 + 799 true ViewStatusAddition @@ -1760,10 +1760,10 @@ ПредметыПанельНавигацииУправлениеПоиском - 792 + 801 ПредметыПанельНавигацииУправлениеПоискомРасширеннаяПодсказка - 794 + 803 Label true true @@ -1773,7 +1773,7 @@ ПредметыПанельНавигацииУправлениеПоискомКонтекстноеМеню - 793 + 802 true SearchControlAddition @@ -2188,10 +2188,10 @@ ЗакладкиСтрокаПоиска - 808 + 817 ЗакладкиСтрокаПоискаРасширеннаяПодсказка - 810 + 819 Label true true @@ -2201,7 +2201,7 @@ ЗакладкиСтрокаПоискаКонтекстноеМеню - 809 + 818 true Закладки @@ -2211,10 +2211,10 @@ ЗакладкиСостояниеПросмотра - 811 + 820 ЗакладкиСостояниеПросмотраРасширеннаяПодсказка - 813 + 822 Label true true @@ -2224,7 +2224,7 @@ ЗакладкиСостояниеПросмотраКонтекстноеМеню - 812 + 821 true ViewStatusAddition @@ -2235,10 +2235,10 @@ ЗакладкиУправлениеПоиском - 814 + 823 ЗакладкиУправлениеПоискомРасширеннаяПодсказка - 816 + 825 Label true true @@ -2248,7 +2248,7 @@ ЗакладкиУправлениеПоискомКонтекстноеМеню - 815 + 824 true SearchControlAddition @@ -2688,10 +2688,10 @@ СвойстваСтрокаПоиска - 826 + 835 СвойстваСтрокаПоискаРасширеннаяПодсказка - 828 + 837 Label true true @@ -2701,7 +2701,7 @@ СвойстваСтрокаПоискаКонтекстноеМеню - 827 + 836 true Свойства @@ -2711,10 +2711,10 @@ СвойстваСостояниеПросмотра - 829 + 838 СвойстваСостояниеПросмотраРасширеннаяПодсказка - 831 + 840 Label true true @@ -2724,7 +2724,7 @@ СвойстваСостояниеПросмотраКонтекстноеМеню - 830 + 839 true ViewStatusAddition @@ -2735,10 +2735,10 @@ СвойстваУправлениеПоиском - 832 + 841 СвойстваУправлениеПоискомРасширеннаяПодсказка - 834 + 843 Label true true @@ -2748,7 +2748,7 @@ СвойстваУправлениеПоискомКонтекстноеМеню - 833 + 842 true SearchControlAddition @@ -3285,10 +3285,10 @@ ПапкиСтрокаПоиска - 845 + 854 ПапкиСтрокаПоискаРасширеннаяПодсказка - 847 + 856 Label true true @@ -3298,7 +3298,7 @@ ПапкиСтрокаПоискаКонтекстноеМеню - 846 + 855 true Папки @@ -3308,10 +3308,10 @@ ПапкиСостояниеПросмотра - 848 + 857 ПапкиСостояниеПросмотраРасширеннаяПодсказка - 850 + 859 Label true true @@ -3321,7 +3321,7 @@ ПапкиСостояниеПросмотраКонтекстноеМеню - 849 + 858 true ViewStatusAddition @@ -3332,10 +3332,10 @@ ПапкиУправлениеПоиском - 851 + 860 ПапкиУправлениеПоискомРасширеннаяПодсказка - 853 + 862 Label true true @@ -3345,7 +3345,7 @@ ПапкиУправлениеПоискомКонтекстноеМеню - 852 + 861 true SearchControlAddition @@ -3983,10 +3983,10 @@ КатегорииСтрокаПоиска - 864 + 873 КатегорииСтрокаПоискаРасширеннаяПодсказка - 866 + 875 Label true true @@ -3996,7 +3996,7 @@ КатегорииСтрокаПоискаКонтекстноеМеню - 865 + 874 true Категории @@ -4006,10 +4006,10 @@ КатегорииСостояниеПросмотра - 867 + 876 КатегорииСостояниеПросмотраРасширеннаяПодсказка - 869 + 878 Label true true @@ -4019,7 +4019,7 @@ КатегорииСостояниеПросмотраКонтекстноеМеню - 868 + 877 true ViewStatusAddition @@ -4030,10 +4030,10 @@ КатегорииУправлениеПоиском - 870 + 879 КатегорииУправлениеПоискомРасширеннаяПодсказка - 872 + 881 Label true true @@ -4043,7 +4043,7 @@ КатегорииУправлениеПоискомКонтекстноеМеню - 871 + 880 true SearchControlAddition @@ -4760,6 +4760,40 @@ true + + Ссылка + 761 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 763 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 762 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокКоманднаяПанель 4 @@ -5575,10 +5609,10 @@ СписокСтрокаПоиска - 883 + 892 СписокСтрокаПоискаРасширеннаяПодсказка - 885 + 894 Label true true @@ -5588,7 +5622,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 884 + 893 true Список @@ -5598,10 +5632,10 @@ СписокСостояниеПросмотра - 886 + 895 СписокСостояниеПросмотраРасширеннаяПодсказка - 888 + 897 Label true true @@ -5611,7 +5645,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 887 + 896 true ViewStatusAddition @@ -5622,10 +5656,10 @@ СписокУправлениеПоиском - 889 + 898 СписокУправлениеПоискомРасширеннаяПодсказка - 891 + 900 Label true true @@ -5635,7 +5669,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 890 + 899 true SearchControlAddition @@ -6369,6 +6403,40 @@ true + + СсылкаВходящие + 764 + true + true + + + Список.Ref + + + СсылкаВходящиеРасширеннаяПодсказка + 766 + Label + true + true + + Left + + + + СсылкаВходящиеКонтекстноеМеню + 765 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокВходящиеКоманднаяПанель 216 @@ -7098,10 +7166,10 @@ СписокВходящиеСтрокаПоиска - 907 + 917 СписокВходящиеСтрокаПоискаРасширеннаяПодсказка - 909 + 919 Label true true @@ -7111,7 +7179,7 @@ СписокВходящиеСтрокаПоискаКонтекстноеМеню - 908 + 918 true СписокВходящие @@ -7121,10 +7189,10 @@ СписокВходящиеСостояниеПросмотра - 910 + 920 СписокВходящиеСостояниеПросмотраРасширеннаяПодсказка - 912 + 922 Label true true @@ -7134,7 +7202,7 @@ СписокВходящиеСостояниеПросмотраКонтекстноеМеню - 911 + 921 true ViewStatusAddition @@ -7145,10 +7213,10 @@ СписокВходящиеУправлениеПоиском - 913 + 923 СписокВходящиеУправлениеПоискомРасширеннаяПодсказка - 915 + 925 Label true true @@ -7158,7 +7226,7 @@ СписокВходящиеУправлениеПоискомКонтекстноеМеню - 914 + 924 true SearchControlAddition @@ -7942,6 +8010,40 @@ true + + СсылкаИсходящие + 767 + true + true + + + Список.Ref + + + СсылкаИсходящиеРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + + СсылкаИсходящиеКонтекстноеМеню + 768 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокИсходящиеКоманднаяПанель 258 @@ -8588,10 +8690,10 @@ СписокИсходящиеСтрокаПоиска - 932 + 943 СписокИсходящиеСтрокаПоискаРасширеннаяПодсказка - 934 + 945 Label true true @@ -8601,7 +8703,7 @@ СписокИсходящиеСтрокаПоискаКонтекстноеМеню - 933 + 944 true СписокИсходящие @@ -8611,10 +8713,10 @@ СписокИсходящиеСостояниеПросмотра - 935 + 946 СписокИсходящиеСостояниеПросмотраРасширеннаяПодсказка - 937 + 948 Label true true @@ -8624,7 +8726,7 @@ СписокИсходящиеСостояниеПросмотраКонтекстноеМеню - 936 + 947 true ViewStatusAddition @@ -8635,10 +8737,10 @@ СписокИсходящиеУправлениеПоиском - 938 + 949 СписокИсходящиеУправлениеПоискомРасширеннаяПодсказка - 940 + 951 Label true true @@ -8648,7 +8750,7 @@ СписокИсходящиеУправлениеПоискомКонтекстноеМеню - 939 + 950 true SearchControlAddition @@ -10902,7 +11004,7 @@ ru Установить ответственного - 4 + 3 ru Установить ответственного @@ -10927,7 +11029,7 @@ ru Раcсмотрено - 5 + 4 ru Установить признак рассмотрено @@ -10954,7 +11056,7 @@ ru Установить предмет взаимодействия - 6 + 5 ru Установить предмет взаимодействия @@ -10979,7 +11081,7 @@ ru Отложить рассмотрение - 7 + 6 ru Отложить рассмотрение @@ -11005,7 +11107,7 @@ ru Встречу - 8 + 7 ru Создать встречу @@ -11030,7 +11132,7 @@ ru Запланированное взаимодействие - 9 + 8 ru Создать запланированное взаимодействие @@ -11055,7 +11157,7 @@ ru Телефонный звонок - 10 + 9 ru Создать телефонный звонок @@ -11080,7 +11182,7 @@ ru Электронное письмо - 11 + 10 ru Создать электронное письмо @@ -11106,7 +11208,7 @@ ru Отправить и получить - 12 + 11 ru Отправить и получить почту @@ -11133,7 +11235,7 @@ ru По закладкам - 13 + 12 ru Установить вариант навигации по закладкам @@ -11155,7 +11257,7 @@ ru Добавить в закладки - 3 + 13 ru Добавить в закладки @@ -11249,7 +11351,7 @@ ru Перенести в папку - 18 + 17 ru Перенести в папку @@ -11274,7 +11376,7 @@ ru Обновить - 19 + 18 ru Обновить @@ -11300,7 +11402,7 @@ ru Рассмотрено - 20 + 19 ru Установить признак рассмотрено @@ -11327,7 +11429,7 @@ ru Снять признак рассмотрено - 21 + 20 ru Снять признак рассмотрено @@ -11354,7 +11456,7 @@ ru Установить предмет взаимодействия - 17 + 21 ru Установить предмет взаимодействия diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html index 3745a9456..297c52e1d 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ - +

            Взаимодействия

            Какие виды панелей навигации доступны списка взаимодействий?

            Как переключить вид панели навигации?

            diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 67aad3835..19bea0961 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1,13 +1,14 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); - Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтотОбъект, СтандартнаяОбработка, Отказ) Тогда Возврат; КонецЕсли; @@ -17,7 +18,7 @@ ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); + Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтотОбъект); ОпределитьДоступностьПолнотекстовыйПоиск(); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Закладки, "Владелец", Пользователи.ТекущийПользователь(),,, Истина); @@ -81,7 +82,7 @@ Настройки.Удалить("Ответственный"); КонецЕсли; - Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); + Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтотОбъект, Настройки); ПриИзмененииТипаСервер(Ложь); ОбновитьПанельНавигации(); @@ -174,8 +175,9 @@ КонтекстВыбора = Неопределено; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПанельНавигацииПриАктивизацииСтроки(Элемент) @@ -261,7 +263,7 @@ &НаКлиенте Процедура ПерсональныеНастройки(Команда) - ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой", , ЭтаФорма); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой", , ЭтотОбъект); КонецПроцедуры @@ -371,7 +373,7 @@ &НаКлиенте Процедура ТолькоПоАктивнымПредметамПриИзменении(Элемент) - ОбновитьПанельНавигации(); + ОбновитьПанельНавигации(, Ложь); КонецПроцедуры @@ -397,7 +399,7 @@ КонецЕсли; ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтруктураПараметры); - ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -453,7 +455,7 @@ Если СтрокаПоиска <> "" Тогда ПроверитьИндексППД(); - ЭтаФорма.ТекущийЭлемент = ?(НЕ РасширенныйПоиск, Элементы.СтрокаПоиска, ТекущийЭлементСписок()); + ЭтотОбъект.ТекущийЭлемент = ?(НЕ РасширенныйПоиск, Элементы.СтрокаПоиска, ТекущийЭлементСписок()); Иначе РасширенныйПоиск = Ложь; @@ -602,7 +604,6 @@ Возврат; КонецЕсли; - Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда ТекущийЭлементСписок = ТекущийЭлементСписок(); @@ -710,7 +711,7 @@ КонецЕсли; ПараметрыФормы = Новый Структура("Вложения", СписокИменФайлов); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -721,8 +722,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -867,7 +869,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора",Истина); - ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -884,7 +886,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора",Истина); - ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -944,7 +946,7 @@ ОткрытьФорму( "ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", ПараметрыФормы, - ЭтаФорма); + ЭтотОбъект); КонецПроцедуры @@ -1153,7 +1155,7 @@ ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись)); ПараметрыФормы.Вставить("РежимВыбора", Истина); - ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -1166,15 +1168,138 @@ КонецЕсли; ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда - СтандартнаяОбработка = Ложь; - ПоказатьЗначение(, ТекущиеДанные.Значение); + Если ТекущиеДанные <> Неопределено Тогда + + ПоказываемоеЗначение = Неопределено; + Если ТекущиеДанные.Свойство("Контакт") И ТипЗнч(ТекущиеДанные.Контакт) <> Тип("СправочникСсылка.СтроковыеКонтактыВзаимодействий") Тогда + ПоказываемоеЗначение = ТекущиеДанные.Контакт; + ИначеЕсли ТекущиеДанные.Свойство("Предмет") Тогда + ПоказываемоеЗначение = ТекущиеДанные.Предмет; + ИначеЕсли ТекущиеДанные.Свойство("Значение") И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда + ПоказываемоеЗначение = ТекущиеДанные.Значение; + КонецЕсли; + + Если ПоказываемоеЗначение <> Неопределено Тогда + ПоказатьЗначение(, ПоказываемоеЗначение); + КонецЕсли; + КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Свойства.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Свойства.НеРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Папки.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Папки.НеРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Категории.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Категории.НеРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + ОтборЭлемента.ПравоеЗначение = 0; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокИсходящие.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокВходящие.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Рассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтрокаПоиска.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтрокаПоиска"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РасширенныйПоиск"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаПоля); + +КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////// // Обработка изменения быстрых отборов @@ -1182,7 +1307,7 @@ &НаСервере Процедура ПриИзмененииСтатусаСервер(ОбновлятьПанельНавигации) - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма, "Статус"); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус"); Если ОбновлятьПанельНавигации Тогда ОбновитьПанельНавигации(); @@ -1193,7 +1318,7 @@ &НаСервере Процедура ПриИзмененииОтветственногоСервер(ОбновлятьПанельНавигации) - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,"Ответственный"); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный"); Если ОбновлятьПанельНавигации Тогда ОбновитьПанельНавигации(); @@ -1204,7 +1329,7 @@ &НаСервере Процедура ПриИзмененииТипаСервер(ОбновлятьПанельНавигации = Истина) - ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтаФорма, ТипВзаимодействия); + ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия); Если ОбновлятьПанельНавигации Тогда ОбновитьПанельНавигации(); КонецЕсли; @@ -1278,6 +1403,9 @@ ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов", ТекущиеДанные.Предмет, Неопределено), ИмяТекущейСтраницы); СохранитьТекущееАктивноеЗначениеВНастройках("Предметы", ТекущиеДанные.Предмет); + Иначе + ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов", + Неопределено, Неопределено), ИмяТекущейСтраницы); КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда ТекущиеДанные = Элементы.Папки.ТекущиеДанные; @@ -1288,14 +1416,11 @@ КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда ТекущиеДанные = Элементы.Закладки.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - Если НЕ ТекущиеДанные.ЭтоГруппа Тогда - ИзменитьОтборСписок("Закладки",Новый Структура("Значение", ТекущиеДанные.Ссылка), ИмяТекущейСтраницы); - Иначе - ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( - ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, - "Отбор панели навигации", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); - КонецЕсли; + Если ТекущиеДанные <> Неопределено И НЕ ТекущиеДанные.ЭтоГруппа Тогда + ИзменитьОтборСписок("Закладки",Новый Структура("Значение", ТекущиеДанные.Ссылка), ИмяТекущейСтраницы); + СохранитьТекущееАктивноеЗначениеВНастройках("Закладки", ТекущиеДанные.Ссылка); + Иначе + ГруппаОтбора = СоздатьГруппуОтбораПанелиНавигации(); КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда ТекущиеДанные = Элементы.Свойства.ТекущиеДанные; @@ -1342,7 +1467,7 @@ Возврат ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, - "Отбор панели навигации", + "ОтборПанелиНавигации", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); КонецФункции @@ -1746,7 +1871,7 @@ |ИЗ | (ВЫБРАТЬ | ДокументВзаимодействий.Ссылка КАК Ссылка, - | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, ""Не указан"") КАК Значение, + | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан) КАК Значение, | ВЫБОР | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено | ТОГДА 0 @@ -1765,7 +1890,7 @@ | | ВЫБРАТЬ | ДокументВзаимодействий.Ссылка, - | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, ""Не указан""), + | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан), | ВЫБОР | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено | ТОГДА 0 @@ -1784,7 +1909,7 @@ | | ВЫБРАТЬ | ДокументВзаимодействий.Ссылка, - | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, ""Не указан""), + | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан), | ВЫБОР | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено | ТОГДА 0 @@ -1803,7 +1928,7 @@ | | ВЫБРАТЬ | ДокументВзаимодействий.Ссылка, - | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, ""Не указан""), + | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан), | ВЫБОР | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено | ТОГДА 0 @@ -1822,7 +1947,7 @@ | | ВЫБРАТЬ | ДокументВзаимодействий.Ссылка, - | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, ""Не указан""), + | ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан), | ВЫБОР | КОГДА ПредметыПапкиВзаимодействий.Рассмотрено | ТОГДА 0 @@ -1862,7 +1987,7 @@ | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ КАК НеРассмотрено, - | ЕСТЬNULL(ДополнительныеСведения.Значение, ""Не указан"") КАК Значение + | ЕСТЬNULL(ДополнительныеСведения.Значение, &НеУказан) КАК Значение | ИЗ | ЖурналДокументов.Взаимодействия КАК ДокументВзаимодействий | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий @@ -1883,6 +2008,7 @@ КонецЕсли; + Запрос.УстановитьПараметр("НеУказан",НСтр("ru = 'Не указан'")); Запрос.УстановитьПараметр("Свойство",ТекущееСвойствоПанелиНавигации); Результат = Запрос.Выполнить(); @@ -2161,9 +2287,31 @@ Процедура ЗаполнитьПанельКонтактов() Если ТолькоЗначимыеКонтакты Тогда - - КонтактыПанельНавигации.ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ + + Запрос = Новый Запрос; + ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос); + СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - Найти(ТекстЗапросаПоОтбору,"ГДЕ") + 1); + МассивСтрокУсловия = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПоКоторойИщем, Символы.ПС,Истина); + ТекстУсловийПоЖурналуДокументов = ""; + ТекстУсловийПоРегистру = ""; + Инд = 1; + + Для Каждого СтрокаУсловия ИЗ МассивСтрокУсловия Цикл + СтрокаУсловия = СтрЗаменить(СтрокаУсловия,"&П","&Пар"); + Если Инд = 2 Тогда + СтрокаУсловия = " И " + СтрокаУсловия; + КонецЕсли; + Если Найти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда + ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС; + ИначеЕсли Найти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда + ТекстУсловийПоРегистру = ТекстУсловийПоРегистру + СтрокаУсловия + Символы.ПС; + КонецЕсли; + + Инд = Инд + 1; + КонецЦикла; + + ТекстЗапросаДинамическийСписок = + "ВЫБРАТЬ | СостоянияКонтактовВзаимодействий.Контакт, | СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено, | СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия, @@ -2171,33 +2319,36 @@ | ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта |ИЗ | РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - | {ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие} - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия - | ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка - | ПО СостоянияКонтактовВзаимодействий.Контакт = КонтактыВзаимодействий.Контакт - |{ГДЕ - | Взаимодействия.Ответственный, - | Взаимодействия.Тип, - | Взаимодействия.Важность, - | Взаимодействия.СтатусИсходящегоПисьма, - | Взаимодействия.УчетнаяЗапись, - | Взаимодействия.Автор, - | Взаимодействия.Входящий, - | ПредметыПапкиВзаимодействий.Рассмотрено, - | ПредметыПапкиВзаимодействий.РассмотретьПосле}"; + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | %ТекстУсловияЖурналДокументов% + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + | ПО + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие + | %ТекстУсловияРегистрПапки%)"; - ОтборПриемник = КонтактыПанельНавигации.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; - ОтборИсточник = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияЖурналДокументов%", ТекстУсловийПоЖурналуДокументов); + ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "%ТекстУсловияРегистрПапки%", ТекстУсловийПоРегистру); - ОтборПриемник.Элементы.Очистить(); + КонтактыПанельНавигации.ТекстЗапроса = ТекстЗапросаДинамическийСписок; - СкопироватьОтбор(ОтборПриемник, - ОтборИсточник, - Ложь, - Истина, - Истина); + Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл + Если Лев(ПараметрЗапроса.Ключ, 1) = "П" Тогда + ИмяПараметра = "Пар" + Прав(ПараметрЗапроса.Ключ, СтрДлина(ПараметрЗапроса.Ключ)-1); + Иначе + ИмяПараметра = ПараметрЗапроса.Ключ; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(КонтактыПанельНавигации, ИмяПараметра, ПараметрЗапроса.Значение); + КонецЦикла; Иначе @@ -2217,11 +2368,12 @@ | ИЗ | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия - | ПО - | КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка + | ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий | ПО - | КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие)"; + | КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт + | И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие)"; КонецЕсли @@ -2233,19 +2385,19 @@ Папки.ПолучитьЭлементы().Очистить(); Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ РАЗРЕШЕННЫЕ + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПапкиЭлектронныхПисем.Владелец КАК УчетнаяЗапись, | ПапкиЭлектронныхПисем.Ссылка КАК Значение, | ЕСТЬNULL(НеРассмотреноПапки.КоличествоНеРассмотрено, 0) КАК НеРассмотрено, | ПапкиЭлектронныхПисем.ПредопределеннаяПапка, | ВЫБОР - | КОГДА НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ТекущийПользователь ИЛИ &РольПолныеПравДоступна + | КОГДА НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ТекущийПользователь + | ИЛИ &РольПолныеПравДоступна | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ЕстьПравоНаИзменение, | ВЫБОР - | КОГДА (НЕ ПапкиЭлектронныхПисем.ПредопределеннаяПапка) + | КОГДА НЕ ПапкиЭлектронныхПисем.ПредопределеннаяПапка | ТОГДА 7 | ИНАЧЕ ВЫБОР | КОГДА ПапкиЭлектронныхПисем.Наименование = &Входящие @@ -2268,6 +2420,8 @@ | ПО (НеРассмотреноПапки.Папка = ПапкиЭлектронныхПисем.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ПО ПапкиЭлектронныхПисем.Владелец = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты + |ГДЕ + | НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) | |УПОРЯДОЧИТЬ ПО | ПапкиЭлектронныхПисем.Код @@ -2400,7 +2554,7 @@ КонецФункции &НаСервере -Процедура ОбновитьПанельНавигации(ЗначениеТекущейСтроки = Неопределено) +Процедура ОбновитьПанельНавигации(ЗначениеТекущейСтроки = Неопределено, УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации = Истина) ТекущаяСтраницаПанелиНавигации = Элементы.СтраницыПанелиНавигации.ТекущаяСтраница; @@ -2416,12 +2570,16 @@ ЗаполнитьТаблицуКатегорий(); КонецЕсли; - ПослеЗаполненияПанелиНавигации(); + ПослеЗаполненияПанелиНавигации(УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации); КонецПроцедуры &НаСервере -Процедура ПослеЗаполненияПанелиНавигации() +Процедура ПослеЗаполненияПанелиНавигации(УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации = Истина) + + Если НЕ УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации Тогда + Возврат; + КонецЕсли; Настройки = ПолучитьСохраненныеНастройкиДереваПанелиНавигации(Элементы.СтраницыПанелиНавигации.ТекущаяСтраница.Имя, ТекущееСвойствоПанелиНавигации,НастройкиДеревьевПанелиНавигации); @@ -2433,7 +2591,8 @@ ЗначениеНастроек = Настройки.ЗначениеНастроек; Если НЕ (Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет - ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт) Тогда + ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт + ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки) Тогда СпозиционироватьсяНаСтрокеСогласноСохраненномуЗначению(ЗначениеНастроек.ТекущееЗначение, Настройки.ИмяДерева); КонецЕсли; @@ -2491,6 +2650,11 @@ ИзменитьОтборСписок("Категории",Новый Структура("Значение", ТекущиеДанные.Значение), ИмяТекущейСтраницы); КонецЕсли; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда + + Элементы.Закладки.ТекущаяСтрока = ЗначениеНастроек.ТекущееЗначение; + ИзменитьОтборСписок("Закладки", Новый Структура("Значение", ЗначениеНастроек.ТекущееЗначение), ИмяТекущейСтраницы); + КонецЕсли; НеОтрабатыватьАктивизациюПанелиНавигации = Истина; @@ -2500,7 +2664,7 @@ &НаСервере Процедура ОбновитьНаСервере() - ОбновитьПанельНавигации(); + ОбновитьПанельНавигации( ,Ложь); КонецПроцедуры @@ -2619,6 +2783,9 @@ ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаСвойства" Тогда ИмяДерева = "Свойства"; ИмяНастройки = "Свойства_" + Строка(ТекущееСвойствоПанелиНавигации); + ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаЗакладки" Тогда + ИмяДерева = "Закладки"; + ИмяНастройки = "Закладки"; Иначе Возврат Неопределено; КонецЕсли; @@ -2708,7 +2875,7 @@ Если ЗначениеНастроек.РазвернутыеУзлы.Количество() Тогда ОпределитьИдентификаторыРазвернутыхУзлов(ЗначениеНастроек.РазвернутыеУзлы, - СоответсвиеИдентификаторовРазвернутыхУзлов, ЭтаФорма[Настройки.ИмяДерева].ПолучитьЭлементы()); + СоответсвиеИдентификаторовРазвернутыхУзлов, ЭтотОбъект[Настройки.ИмяДерева].ПолучитьЭлементы()); КонецЕсли; Для каждого ЭлементСоответствия Из СоответсвиеИдентификаторовРазвернутыхУзлов Цикл @@ -2746,7 +2913,7 @@ ЗначениеТекущейСтроки = Неопределено; Если Элементы[ИмяЭлемента].ТекущаяСтрока <> Неопределено Тогда - НайденнаяСтрока = ЭтаФорма[ИмяЭлемента].НайтиПоИдентификатору(Элементы[ИмяЭлемента].ТекущаяСтрока); + НайденнаяСтрока = ЭтотОбъект[ИмяЭлемента].НайтиПоИдентификатору(Элементы[ИмяЭлемента].ТекущаяСтрока); Если НайденнаяСтрока <> Неопределено Тогда ЗначениеТекущейСтроки = НайденнаяСтрока.Значение; КонецЕсли; @@ -2763,10 +2930,10 @@ Если ЗначениеТекущейСтроки <> Неопределено Тогда Если ИмяЭлемента <> "Категории" Тогда - ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыДерево(ЭтаФорма[ИмяЭлемента], + ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыДерево(ЭтотОбъект[ИмяЭлемента], ЗначениеТекущейСтроки,"Значение",Истина); Иначе - ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыКоллекция(ЭтаФорма[ИмяЭлемента], + ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыКоллекция(ЭтотОбъект[ИмяЭлемента], ЗначениеТекущейСтроки,"Значение"); КонецЕсли; Если ИдентификаторНайденнойСтроки > 0 Тогда @@ -2910,7 +3077,7 @@ ГруппаОтбораПоПанелиНавигации = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению( ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, - "Отбор панели навигации"); + "ОтборПанелиНавигации"); Если ГруппаОтбораПоПанелиНавигации = Неопределено Тогда Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'"); Возврат Результат; @@ -3058,14 +3225,21 @@ Если ДанныеДляОбработки <> Неопределено Тогда - МассивВзаимодействий = Новый Массив; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | Взаимодействия.Ссылка + |ИЗ + | ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ПО Взаимодействия.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие + |ГДЕ + | ПредметыПапкиВзаимодействий.Предмет <> &Предмет + | И Взаимодействия.Ссылка В (&МассивВзаимодействий)"; - Для Каждого Взаимодействие Из ДанныеДляОбработки Цикл - Если ЗначениеЗаполнено(Взаимодействие) - И Взаимодействие.Предмет <> Предмет Тогда - МассивВзаимодействий.Добавить(Взаимодействие); - КонецЕсли; - КонецЦикла; + Запрос.УстановитьПараметр("МассивВзаимодействий",ДанныеДляОбработки ); + Запрос.УстановитьПараметр("Предмет", Предмет); + + МассивВзаимодействий = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Иначе @@ -3080,25 +3254,21 @@ КонецПроцедуры -// Устанавливает реквизит "отработать после" в выбранных взаимодействиях - серверная часть -//Параметры: -// Взаимодействия - список выбранных взаимодействий -// Предмет - устанавливаемая дата отработки &НаСервере -Процедура ОтложитьРассмотрение(ДатаОтработки, Знач ДанныеДляОбработки) +Процедура ОтложитьРассмотрение(ДатаРассмотрения, Знач ДанныеДляОбработки) Если ДанныеДляОбработки <> Неопределено Тогда - МассивВзаимодействий = ДанныеДляОбработки; + МассивВзаимодействий = Взаимодействия.МассивВзаимодействийДляИзмененияДатыРассмотрения(ДанныеДляОбработки, ДатаРассмотрения); Иначе - МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(ДатаОтработки, "РассмотретьПосле"); + МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(Истина, "Рассмотрено"); КонецЕсли; Для Каждого Взаимодействие Из МассивВзаимодействий Цикл - Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаОтработки, Ложь); + Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаРассмотрения, Ложь); ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты); КонецЦикла; @@ -3111,7 +3281,16 @@ &НаКлиенте Процедура СоздатьНовоеВзаимодействие(ТипОбъекта) - ВзаимодействияКлиент.СоздатьНовоеВзаимодействие(ТипОбъекта); + ПараметрыСоздания = Новый Структура; + + Если ИмяТекущейПанелиНавигации = "СтраницаКонтакт" Тогда + ТекущиеДанные = Элементы.КонтактыПанелиНавигации.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ПараметрыСоздания.Вставить("ЗначенияЗаполнения",Новый Структура("Контакт", ТекущиеДанные.Контакт)); + КонецЕсли; + КонецЕсли; + + ВзаимодействияКлиент.СоздатьНовоеВзаимодействие(ТипОбъекта,ПараметрыСоздания, ЭтотОбъект); КонецПроцедуры @@ -3210,7 +3389,6 @@ Если Не ИндексППДАктуален И ИнформационнаяБазаФайловая Тогда - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросООбновленииПолнотекстовогоПоискаПослеЗавершения", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, НСтр("ru='Индекс полнотекстового поиска неактуален. Обновить индекс?'"), РежимДиалогаВопрос.ДаНет); @@ -3457,9 +3635,9 @@ Функция ТекущийЭлементСписокПанелиНавигации() Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда - Возврат Элементы.Контакты; + Возврат Элементы.КонтактыПанелиНавигации; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда - Возврат Элементы.Предметы; + Возврат Элементы.ПредметыПанельНавигации; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда Возврат Элементы.Папки; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда @@ -3507,7 +3685,7 @@ Если НеВключатьОтборПанелиНавигации И ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") И - ЭлементОтбораИсточник.Представление = "Отбор панели навигации" Тогда + ЭлементОтбораИсточник.Представление = "ОтборПанелиНавигации" Тогда Продолжить; @@ -3586,5 +3764,4 @@ КонецПроцедуры - - +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/ConditionalAppearance.dcssca b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/ConditionalAppearance.dcssca deleted file mode 100644 index 2ff597f62..000000000 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/ConditionalAppearance.dcssca +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Список - - - - - Список.Рассмотрено - Equal - false - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - - - - ДеревоВзаимодействий - - - - - ДеревоВзаимодействий.Рассмотрено - Equal - false - - - ИспользоватьПризнакРассмотрено - Equal - true - - - - - Шрифт - - - - - diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 305131673..000a2f079 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -518,6 +518,40 @@ Normal + + Ссылка + 216 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 217 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокКоманднаяПанель 3 @@ -1289,10 +1323,10 @@ СписокСтрокаПоиска - 219 + 224 СписокСтрокаПоискаРасширеннаяПодсказка - 221 + 226 Label true true @@ -1302,7 +1336,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 220 + 225 true Список @@ -1312,10 +1346,10 @@ СписокСостояниеПросмотра - 222 + 227 СписокСостояниеПросмотраРасширеннаяПодсказка - 224 + 229 Label true true @@ -1325,7 +1359,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 223 + 228 true ViewStatusAddition @@ -1336,10 +1370,10 @@ СписокУправлениеПоиском - 225 + 230 СписокУправлениеПоискомРасширеннаяПодсказка - 227 + 232 Label true true @@ -1349,7 +1383,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 226 + 231 true SearchControlAddition @@ -1874,6 +1908,32 @@ UserCmds Auto + + ДеревоВзаимодействийСоздатьСообщениеSMS + 219 + true + true + + true + + + ДеревоВзаимодействийСоздатьСообщениеSMSРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + Form.Command.СоздатьСообщениеSMS + Normal + Auto + true + true + UserCmds + Auto + СписокСоздатьТелефонныйЗвонокДерево 123 @@ -2343,10 +2403,10 @@ ДеревоВзаимодействийСтрокаПоиска - 239 + 245 ДеревоВзаимодействийСтрокаПоискаРасширеннаяПодсказка - 241 + 247 Label true true @@ -2356,7 +2416,7 @@ ДеревоВзаимодействийСтрокаПоискаКонтекстноеМеню - 240 + 246 true ДеревоВзаимодействий @@ -2366,10 +2426,10 @@ ДеревоВзаимодействийСостояниеПросмотра - 242 + 248 ДеревоВзаимодействийСостояниеПросмотраРасширеннаяПодсказка - 244 + 250 Label true true @@ -2379,7 +2439,7 @@ ДеревоВзаимодействийСостояниеПросмотраКонтекстноеМеню - 243 + 249 true ViewStatusAddition @@ -2390,10 +2450,10 @@ ДеревоВзаимодействийУправлениеПоиском - 245 + 251 ДеревоВзаимодействийУправлениеПоискомРасширеннаяПодсказка - 247 + 253 Label true true @@ -2403,7 +2463,7 @@ ДеревоВзаимодействийУправлениеПоискомКонтекстноеМеню - 246 + 252 true SearchControlAddition @@ -3099,7 +3159,7 @@ ru Рассмотрено - 3 + 1 ru Установить признак рассмотрено @@ -3126,7 +3186,7 @@ ru Ответственный - 4 + 2 ru Установить ответственного @@ -3151,7 +3211,7 @@ ru Предмет - 5 + 3 ru Установить предмет взаимодействия @@ -3176,7 +3236,7 @@ ru Отложить рассмотрение - 1 + 4 ru Отложить рассмотрение @@ -3202,7 +3262,7 @@ ru Встречу - 7 + 5 ru Создать встречу @@ -3228,7 +3288,7 @@ ru Запланированное взаимодействие - 8 + 6 ru Создать запланированное взаимодействие @@ -3254,7 +3314,7 @@ ru Телефонный звонок - 9 + 7 ru Создать телефонный звонок @@ -3280,7 +3340,7 @@ ru Электронное письмо - 10 + 8 ru Создать электронное письмо @@ -3305,7 +3365,7 @@ ru В виде дерева / списка - 6 + 9 ru Переключить режим просмотра @@ -3330,7 +3390,7 @@ ru Обновить - 11 + 10 ru Обновить данные @@ -3353,7 +3413,7 @@ ru Установить интервал - 12 + 11 ru Установить интервал @@ -3378,7 +3438,7 @@ ru Снять признак рассмотрено - 2 + 12 ru Не рассмотрено diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html index 0e35b262a..7a0772abb 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html @@ -1,4 +1,4 @@ - +

            Форма списка параметрическая

            Какие взаимодействия отображаются в данной форме?

            Какие режимы просмотра доступны и как изменить текущий режим просмотра?

            diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index 67ad9c4f8..5432f269e 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1,17 +1,18 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); + Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтотОбъект); Элементы.СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДерево.Видимость = ТолькоПочта; Элементы.ГруппаСоздатьДерево.Видимость = НЕ ТолькоПочта; Если ТолькоПочта Тогда @@ -76,7 +77,7 @@ Настройки.Удалить("ВВидеДерева"); КонецЕсли; - Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); + Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтотОбъект, Настройки); УправлениеСтраницамиСервер(); @@ -148,15 +149,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтветственныйПриИзменении(Элемент) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя,ОтборПоПредмету); Иначе @@ -171,7 +173,7 @@ Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя,ОтборПоПредмету); Иначе @@ -257,17 +259,17 @@ ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда ОткрытьФорму("Документ.Встреча.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда ОткрытьФорму("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда ОткрытьФорму("Документ.ТелефонныйЗвонок.ФормаОбъекта", - Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтаФорма); + Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтотОбъект); КонецЕсли; КонецЕсли; @@ -279,7 +281,7 @@ Процедура ТипВзаимодействияПриИзменении(Элемент) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтаФорма, ТипВзаимодействия); + ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия); Иначе ЗаполнитьДеревоВзаимодействийКлиент(); КонецЕсли; @@ -293,8 +295,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте //установить флаг "Рассмотрено" в выбранных взаимодействиях - клиентская часть @@ -338,7 +341,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -361,7 +364,7 @@ Диалог = Новый ДиалогРедактированияСтандартногоПериода(); Диалог.Период = Интервал; - ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВыборИнтервалаЗакрытие", этаФорма); + ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВыборИнтервалаЗакрытие", ЭтотОбъект); Диалог.Показать(ОбработчикОповещенияЗакрытия); КонецПроцедуры @@ -413,7 +416,8 @@ ВзаимодействияКлиент.СоздатьНовоеВзаимодействие( ТипОбъекта, - Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); + Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт)), + ЭтотОбъект); КонецПроцедуры @@ -438,8 +442,54 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Рассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоВзаимодействий.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоВзаимодействий.Рассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + +КонецПроцедуры &НаСервере //установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть @@ -532,7 +582,6 @@ Процедура УстановитьОтветственногоУВзаимодействия(Взаимодействие, Ответственный) Объект = Взаимодействие.ПолучитьОбъект(); - Объект.РассмотретьПосле = '0001.01.01'; Объект.Ответственный = Ответственный; Объект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); Объект.Записать(); @@ -576,7 +625,6 @@ КонецЦикла; - Если МассивВзаимодействий.Количество() > 0 Тогда ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет, Истина); ВыполненаЗамена = Истина; @@ -588,8 +636,7 @@ КонецПроцедуры &НаСервере -//устанавливает реквизит "отработать после" в выбранных взаимодействиях - серверная часть -Процедура ОтложитьРассмотрение(ДатаОтработки, ВыполненаЗамена = Ложь) +Процедура ОтложитьРассмотрение(ДатаРассмотрения, ВыполненаЗамена = Ложь) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда @@ -600,12 +647,18 @@ Для Каждого Взаимодействие Из ВыделенныеСтроки Цикл Если ЗначениеЗаполнено(Взаимодействие) И ТипЗнч(Взаимодействие) <> ТипГруппировка Тогда - Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаОтработки, Ложь); - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты); - ВыполненаЗамена = Истина; + МассивВзаимодействий.Добавить(Взаимодействие); КонецЕсли; КонецЦикла; + МассивВзаимодействий = Взаимодействия.МассивВзаимодействийДляИзмененияДатыРассмотрения(МассивВзаимодействий, ДатаРассмотрения); + + Для Каждого Взаимодействие Из МассивВзаимодействий Цикл + Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаРассмотрения, Ложь); + ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты); + ВыполненаЗамена = Истина; + КонецЦикла; + Иначе ВыделенныеСтроки = Элементы.ДеревоВзаимодействий.ВыделенныеСтроки; @@ -614,8 +667,8 @@ Для каждого Взаимодействие Из ВыделенныеСтроки Цикл ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие); - Если ЭлементДерева <> Неопределено Тогда - Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаОтработки, Ложь); + Если ЭлементДерева <> Неопределено И НЕ ЭлементДерева.Рассмотрено Тогда + Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,,, ДатаРассмотрения, Ложь); ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(ЭлементДерева.Ссылка, Реквизиты); ВыполненаЗамена = Истина; КонецЕсли; @@ -680,9 +733,9 @@ Элементы.Список.Период = Интервал; Команды.ПереключитьРежимПросмотра.Подсказка = НСтр("ru = 'Установить режим просмотра в виде дерева'"); Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок; - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,"Статус", ОтборПоПредмету); - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,"Ответственный", ОтборПоПредмету); - ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтаФорма, ТипВзаимодействия); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Статус", ОтборПоПредмету); + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный", ОтборПоПредмету); + ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия); КонецЕсли; КонецПроцедуры @@ -1113,3 +1166,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs index 88bc17231..e33f746e9 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs +++ b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs @@ -201,7 +201,6 @@ - d4p1:CatalogRef.ФизическиеЛица d4p1:CatalogRef.Пользователи false diff --git a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo index c051314ef..448f1682f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo @@ -462,6 +462,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS Auto diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html index e6755cec2..b55a8b4cd 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 aeedd8a0c..9219acc8a 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -36,7 +35,6 @@ АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); Если (НЕ Объект.Проведен) И ЗначениеЗаполнено(Объект.РедактируемыйРаздел) Тогда - Если ТипЗнч(Объект.РедактируемыйРаздел) = Тип("СправочникСсылка.ВопросыШаблонаАнкеты") Тогда @@ -98,8 +96,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РеспондентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -140,7 +139,7 @@ Результат = ""; ДополнительныеПараметры = Новый Структура("Элемент", Элемент); - ОбработчикОповещения = Новый ОписаниеОповещения("РедактированиеМногострочногоТекстаПриОкончании", ЭтаФорма, ДополнительныеПараметры); + ОбработчикОповещения = Новый ОписаниеОповещения("РедактированиеМногострочногоТекстаПриОкончании", ЭтотОбъект, ДополнительныеПараметры); ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста(ОбработчикОповещения, Элемент.ТекстРедактирования); @@ -162,12 +161,13 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтаФорма, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ФормаЗаполненияЗаписать(Команда) @@ -198,7 +198,6 @@ |Дальнейшее заполнение анкеты будет невозможно |Продолжить?'") ,РежимДиалогаВопрос.ДаНет); - КонецПроцедуры @@ -231,8 +230,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Установка значений реквизитов формы @@ -1357,3 +1357,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl index 872ea3767..8bbde30a4 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,3 +20,5 @@ Отказ = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/Анкета/ManagerModule.bsl b/SSL/src/Documents/Анкета/ManagerModule.bsl new file mode 100644 index 000000000..58f309e28 --- /dev/null +++ b/SSL/src/Documents/Анкета/ManagerModule.bsl @@ -0,0 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Респондент"); + Результат.Добавить("ДатаРедактирования"); + Результат.Добавить("Комментарий"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Анкета/Анкета.mdo b/SSL/src/Documents/Анкета/Анкета.mdo index 6d4651949..c9fd257a5 100644 --- a/SSL/src/Documents/Анкета/Анкета.mdo +++ b/SSL/src/Documents/Анкета/Анкета.mdo @@ -103,7 +103,10 @@ Респондент - CatalogRef.ФизическиеЛица + String + + 10 + ru @@ -307,9 +310,7 @@ String - - 150 - + ru diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index ba948a40c..5d5dc083e 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -264,12 +264,17 @@ true true true + true + false + false true + false + false ru ДФ=ЧЧ:мм - true + true true true Normal @@ -403,12 +408,17 @@ true true true + true + false + false true + false + false ru ДФ=ЧЧ:мм - true + true true true Normal @@ -1749,7 +1759,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - LockOwner + DontBlock true true true @@ -2099,6 +2109,10 @@ Document.ТелефонныйЗвонок.StandardCommand.CreateBasedOn + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html index 6f1bb506b..2c1a3af14 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 a893b8e32..12fea7d23 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,7 +18,7 @@ Элементы.СоздатьКонтакт.Видимость = СписокИнтерактивноСоздаваемыхКонтактов.Количество() > 0; //подготовить оповещения взаимодействий - Взаимодействия.ПодготовитьОповещения(ЭтаФорма, Параметры); + Взаимодействия.ПодготовитьОповещения(ЭтотОбъект, Параметры); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, , "СтраницаДополнительныеРеквизиты"); @@ -27,7 +26,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); КонецЕсли; ПриСозданииИПриЧтенииНаСервере(); @@ -66,8 +65,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -79,21 +78,21 @@ УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "Встреча"); + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи, "Встреча"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -114,8 +113,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -182,13 +182,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Участники +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники &НаКлиенте Процедура УчастникиПриИзменении(Элемент) - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); ИзменилисьКонтакты = Истина; КонецПроцедуры @@ -235,12 +236,13 @@ КонецЕсли; ПроверитьДоступностьСозданияКонтакта(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьКонтактВыполнить() @@ -264,8 +266,9 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() @@ -293,10 +296,12 @@ Продолжительность = Объект.ДатаОкончания - Объект.ДатаНачала; Если Не Объект.Ссылка.Пустая() Тогда - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); + Иначе + ИзменилисьКонтакты = Истина; КонецЕсли; - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); @@ -313,3 +318,4 @@ // Конец СтандартныеПодсистемы.Свойства +#КонецОбласти diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index e628a4557..0acf8a258 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -10,11 +8,34 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("ДатаНачала"); + Результат.Добавить("ДатаОкончания"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Комментарий"); + Результат.Добавить("Участники.Контакт"); + Результат.Добавить("Участники.ПредставлениеКонтакта"); + Результат.Добавить("Участники.КакСвязаться"); + Возврат Результат; + +КонецФункции + +#КонецОбласти #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -25,3 +46,5 @@ "Встреча"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index 81336e5ea..e58399608 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -11,7 +9,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -68,11 +65,12 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти +#Область СлужебныеПроцедурыИФункции +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Встреча/Встреча.mdo b/SSL/src/Documents/Встреча/Встреча.mdo index 0aa23978d..4705011ab 100644 --- a/SSL/src/Documents/Встреча/Встреча.mdo +++ b/SSL/src/Documents/Встреча/Встреча.mdo @@ -66,33 +66,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча -1 -1 Document.Встреча.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.Встреча.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index c34ad3fd3..d3e62a5fe 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -1386,7 +1386,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - LockOwner + DontBlock true true true @@ -1641,6 +1641,10 @@ Document.ЭлектронноеПисьмоИсходящее.StandardCommand.CreateBasedOn + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html index 42d7e0a56..d95e7601c 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html @@ -1,4 +1,4 @@ - +

            Запланированное взаимодействие

            Документ предназначен для планирования взаимодействия с одним или несколькими контактами. Документ вводится в том случае, если необходимо запланировать взаимодействие, однако как именно будет производиться взаимодействие (телефонный звонок, встреча, электронное письмо, сообщение SMS) еще не известно.

            Какие реквизиты можно указать в документе?

            diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index cfb61d1b2..817ade511 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -18,7 +18,7 @@ Элементы.СоздатьКонтакт.Видимость = СписокИнтерактивноСоздаваемыхКонтактов.Количество() > 0; //подготовить оповещения взаимодействий - Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); + Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, , "СтраницаДополнительныеРеквизиты"); @@ -26,7 +26,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); КонецЕсли; ПриСозданииИПриЧтенииНаСервере(); @@ -62,8 +62,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -75,21 +75,21 @@ УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "ЗапланированноеВзаимодействие"); + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи, "ЗапланированноеВзаимодействие"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -110,8 +110,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -128,8 +129,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Участники +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники &НаКлиенте Процедура УчастникиПриАктивизацииСтроки(Элемент) @@ -172,20 +174,21 @@ ТекущиеДанные.КакСвязаться); КонецЕсли; ПроверитьДоступностьСозданияКонтакта(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); КонецПроцедуры &НаКлиенте Процедура УчастникиПриИзменении(Элемент) - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); ИзменилисьКонтакты = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьКонтактВыполнить() @@ -209,17 +212,20 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПриСозданииИПриЧтенииНаСервере() Если Не Объект.Ссылка.Пустая() Тогда - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); + Иначе + ИзменилисьКонтакты = Истина; КонецЕсли; - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); @@ -245,3 +251,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html index a896fe633..5ca9a34e2 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html @@ -1,4 +1,4 @@ - +

            Запланированное взаимодействие

            Документ предназначен для планирования взаимодействия с одним или несколькими контактами. Документ вводится в том случае, если необходимо запланировать взаимодействие, однако как именно будет производиться взаимодействие (телефонный звонок, встреча, электронное письмо, сообщение SMS) еще не известно.

             

            \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index 7f8909e0c..d85a27b29 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -9,11 +8,32 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Комментарий"); + Результат.Добавить("Участники.Контакт"); + Результат.Добавить("Участники.ПредставлениеКонтакта"); + Результат.Добавить("Участники.КакСвязаться"); + Возврат Результат; + +КонецФункции + +#КонецОбласти #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -24,3 +44,5 @@ "ЗапланированноеВзаимодействие"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index 62a9dcfee..8f44fb80f 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -47,10 +45,12 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo index 06a1af798..c8c59af3c 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo @@ -66,33 +66,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие -1 -1 Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index c1b74364b..d700d6245 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,8 +71,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТипРеспондентовПриИзменении(Элемент) @@ -95,12 +96,13 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтаФорма, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Респонденты +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыРеспонденты &НаКлиенте Процедура РеспондентыРеспондентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -123,8 +125,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы //Открывает форму подбора респондентов &НаКлиенте @@ -138,8 +141,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обрабатывает изменение типа респондента &НаКлиенте @@ -174,4 +178,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form index 75388fe7d..ca065dc02 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form @@ -432,7 +432,7 @@ Left
            - Form.Item.Респонденты.StandardCommand.List + 0 Normal Auto true @@ -460,7 +460,7 @@ Left
            - Form.Item.Респонденты.StandardCommand.HierarchicalList + 0 Normal Auto true @@ -488,7 +488,7 @@ Left - Form.Item.Респонденты.StandardCommand.Tree + 0 Normal Auto true @@ -985,7 +985,6 @@ Респонденты.Ref - Catalog.ФизическиеЛица true true true diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl index 5872016bc..0f79caa38 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl @@ -9,8 +9,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -52,5 +51,4 @@ КонецПроцедуры - - \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl new file mode 100644 index 000000000..494ca1216 --- /dev/null +++ b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl @@ -0,0 +1,26 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ДатаНачала"); + Результат.Добавить("ДатаОкончания"); + Результат.Добавить("ВозможностьПредварительногоСохранения"); + Результат.Добавить("ПоказыватьВАрхивеАнкет"); + Результат.Добавить("Комментарий"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo b/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo index 550045d43..700b72f5b 100644 --- a/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo +++ b/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo @@ -102,7 +102,10 @@ Тип респондентов - CatalogRef.ФизическиеЛица + String + + 10 + ru @@ -327,7 +330,6 @@ Респондент - CatalogRef.ФизическиеЛица CatalogRef.Пользователи diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca deleted file mode 100644 index ec102ad19..000000000 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - Тема - - - - - ТемаРедактировалась - 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 index 393a2836b..6e63c1c61 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -504,10 +504,6 @@ false false false - false - false - false - false false false false @@ -2225,10 +2221,6 @@ - - Предмет - - @@ -2249,6 +2241,22 @@ Document.СообщениеSMS.StandardCommand.CreateBasedOn + + Document.ТелефонныйЗвонок.StandardCommand.CreateBasedOn + + + + Document.ЭлектронноеПисьмоИсходящее.StandardCommand.CreateBasedOn + + + + Document.ЗапланированноеВзаимодействие.StandardCommand.CreateBasedOn + + + + Document.Встреча.StandardCommand.CreateBasedOn + + diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html index 7b7bf7d1b..58fd951e7 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html @@ -1,4 +1,4 @@ - +

            Сообщение SMS

            Документ предназначен для отправки сообщения SMS одному или нескольким адресатам.

            Какие реквизиты можно указать в документе?

            diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index aca12b807..1cb74c9e8 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -1,9 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда @@ -12,16 +13,16 @@ Если Объект.Ссылка.Пустая() Тогда Объект.Состояние = Перечисления.СостоянияДокументаСообщениеSMS.Черновик; + Рассмотрено = Истина; ПриСозданииЧтенииНаСервере(); + Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет); + ИзменилисьКонтакты = Истина; КонецЕсли; Если НЕ ИнформационнаяБазаФайловая Тогда Элементы.АдресатыПроверитьСтатусыДоставки.Видимость = Ложь; КонецЕсли; - Если Объект.Ссылка.Пустая() Тогда - Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет); - КонецЕсли; Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); //Определим типы контактов, которые можно создать @@ -29,7 +30,7 @@ Элементы.СоздатьКонтакт.Видимость = СписокИнтерактивноСоздаваемыхКонтактов.Количество() > 0; //подготовить оповещения взаимодействий - Взаимодействия.ПодготовитьОповещения(ЭтаФорма, Параметры); + Взаимодействия.ПодготовитьОповещения(ЭтотОбъект, Параметры); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, , "СтраницаДополнительныеРеквизиты"); @@ -40,7 +41,7 @@ &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); КонецПроцедуры @@ -54,7 +55,7 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); @@ -82,8 +83,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "СообщениеSMS"); ПроверитьДоступностьСозданияКонтакта() КонецПроцедуры @@ -95,14 +96,14 @@ УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "СообщениеSMS"); + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи, "СообщениеSMS"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -118,8 +119,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -133,7 +135,7 @@ Процедура НаКонтролеПриИзменении() Рассмотрено = НЕ НаКонтроле; - УправлениеДоступностью(ЭтаФорма); + УправлениеДоступностью(ЭтотОбъект); Модифицированность = Истина; КонецПроцедуры @@ -151,7 +153,7 @@ &НаКлиенте Процедура КомментарииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтаФорма, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); КонецПроцедуры @@ -164,13 +166,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Адресаты +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыАдресаты &НаКлиенте Процедура АдресатыПриИзменении(Элемент) - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "СообщениеSMS"); ИзменилисьКонтакты = Истина; КонецПроцедуры @@ -210,7 +213,7 @@ Процедура КонтактПриИзменении(Элемент) ПроверитьДоступностьСозданияКонтакта(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "СообщениеSMS"); КонецПроцедуры @@ -228,8 +231,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьКонтактВыполнить() @@ -272,8 +276,16 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Подсистема Свойства @@ -302,14 +314,14 @@ ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); ОбработатьПереданныеПараметры(Параметры); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "СообщениеSMS"); Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( Объект.ОтправлятьВТранслите, Объект.ТекстСообщения); Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); НаКонтроле = НЕ Рассмотрено; - УправлениеДоступностью(ЭтаФорма); + УправлениеДоступностью(ЭтотОбъект); КонецПроцедуры @@ -354,6 +366,16 @@ Возврат; КонецЕсли; + Если СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Адресат.КакСвязаться, ";", Истина).Количество() > 1 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Должен быть указан только один номер телефона'"), + , + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Адресаты", Адресат.НомерСтроки, "КакСвязаться"), + , + Отказ); + Возврат; + КонецЕсли; + СтруктураПолей = ВзаимодействияКлиентСервер.СтруктураПолейПоПредставлениюТелефона(Адресат.КакСвязаться); Если Не ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(СтруктураПолей) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -395,19 +417,19 @@ СообщениеОтправлено И Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Доставляется"); - КонецПроцедуры &НаСервере Процедура ПроверитьСтатусыДоставкиСервер() + УстановитьПривилегированныйРежим(Истина); Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); Возврат; КонецЕсли; Взаимодействия.ПроверитьСтатусыДоставкиSMS(Объект, Модифицированность); - УправлениеДоступностью(ЭтаФорма); + УправлениеДоступностью(ЭтотОбъект); КонецПроцедуры @@ -464,3 +486,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Documents/СообщениеSMS/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Help/ru.html index cc307435d..e07f67001 100644 --- a/SSL/src/Documents/СообщениеSMS/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Help/ru.html @@ -1,4 +1,4 @@ - +

            Сообщение SMS

            Документ предназначен для отправки сообщения SMS одному или нескольким адресатам.

             

            \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index db231ed48..92792cd0b 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Получает массив структур, адресатов документа Сообщение SMS // @@ -17,10 +16,32 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Комментарий"); + Результат.Добавить("Адресаты.Контакт"); + Результат.Добавить("Адресаты.ПредставлениеКонтакта"); + Результат.Добавить("Адресаты.КакСвязаться"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -31,3 +52,5 @@ "СообщениеSMS"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl index c5afc8ea2..5f2f997ad 100644 --- a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Процедура формирует строки списка участников // @@ -56,4 +55,6 @@ +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo index e56109557..e6dade158 100644 --- a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo +++ b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo @@ -68,29 +68,29 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref -1 -1 Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index e1ab2ee1f..d430269a4 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -495,7 +495,7 @@ true Label - 32 + 31 true true false @@ -538,7 +538,7 @@ Left true - 9 + 10 true true false @@ -1114,7 +1114,7 @@ 94 <key>ru</key> - <value>Создан</value> + <value>Дата звонка</value> true true @@ -1140,22 +1140,26 @@ 95 true - LabelField - true + InputField Left Enter true Left true - - 13 + + 14 true true false + true ru ДЛФ=DT + true + true + true + Normal
            @@ -1281,7 +1285,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - LockOwner + DontBlock true true true @@ -1543,6 +1547,10 @@ Document.Встреча.StandardCommand.CreateBasedOn + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html index 3ab0ee228..f0deb3e0e 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 3a15fd090..a6d3c5028 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,7 +23,7 @@ Элементы.СоздатьКонтакт.Видимость = СписокИнтерактивноСоздаваемыхКонтактов.Количество() > 0; // подготовить оповещения взаимодействий - Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); + Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, , "СтраницаДополнительныеРеквизиты"); @@ -35,12 +35,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма); + МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); КонецЕсли; ПриСозданииИПриЧтенииНаСервере(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ТелефонныйЗвонок"); КонецПроцедуры @@ -71,21 +71,21 @@ УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "ТелефонныйЗвонок"); + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи, "ТелефонныйЗвонок"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -99,8 +99,8 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма,ИмяСобытия, Параметр, Источник); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект,ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ТелефонныйЗвонок"); ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -121,8 +121,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -131,7 +132,7 @@ ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("ТолькоEmail", Ложь); - ПараметрыОткрытия.Вставить("ТолькоТелефон", Ложь); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Истина); ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Истина); ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Ложь); @@ -153,7 +154,7 @@ ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Объект.АбонентКонтакт, Объект.АбонентПредставление, Объект.АбонентКакСвязаться); ПроверитьДоступностьСозданияКонтакта(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ТелефонныйЗвонок"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтотОбъект,"ТелефонныйЗвонок"); ИзменилисьКонтакты = Истина; КонецПроцедуры @@ -173,8 +174,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СоздатьКонтактВыполнить() @@ -190,7 +192,7 @@ ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Предмет", Объект.Предмет); - ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтаФорма, , Окно); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтотОбъект, , Окно); КонецПроцедуры @@ -205,8 +207,9 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьНаОснованииУчастника(ДанныеУчастника) @@ -224,7 +227,6 @@ Объект.АбонентКакСвязаться = ДанныеУчастника.КакСвязаться; - КонецЕсли; Объект.АбонентПредставление = ДанныеУчастника.Представление; @@ -235,7 +237,7 @@ Процедура ПриСозданииИПриЧтенииНаСервере() Если Не Объект.Ссылка.Пустая() Тогда - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); Иначе ИзменилисьКонтакты = Истина; КонецЕсли; @@ -263,3 +265,5 @@ (Не ПустаяСтрока(Объект.АбонентПредставление)); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index cdba1fe81..d27e3603f 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -1,7 +1,6 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -27,6 +26,28 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Входящий"); + Результат.Добавить("Комментарий"); + Результат.Добавить("АбонентКонтакт"); + Результат.Добавить("АбонентПредставление"); + Результат.Добавить("АбонентКакСвязаться"); + Возврат Результат; + +КонецФункции + #КонецЕсли //////////////////////////////////////////////////////////////////////////////// @@ -41,3 +62,5 @@ "ТелефонныйЗвонок"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 9ed626763..441af8e04 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -25,8 +24,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#КонецОбласти + +#Область ОбработчикиСобытий Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) @@ -59,10 +59,12 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 9553632f7..4abacdd6b 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -64,33 +64,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок -1 -1 Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl index 1e1fa233c..1706d08f0 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl @@ -1,8 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca deleted file mode 100644 index e75a4ebaa..000000000 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - ТекстКб - - - - - Вложения.Размер - GreaterOrEqual - 0 - - - - - Текст - (kb) - - - - diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 71c8834e8..76b9d5c37 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -840,7 +840,7 @@ false None - ВложенияПодписанЭЦП + ВложенияПодписанЭП 224 true true @@ -848,10 +848,10 @@ true
            - Вложения.ПодписанЭЦП + Вложения.ПодписанЭП - ВложенияПодписанЭЦПExtendedTooltip + ВложенияПодписанЭПРасширеннаяПодсказка 271 Label true @@ -861,7 +861,7 @@ - ВложенияПодписанЭЦПКонтекстноеМеню + ВложенияПодписанЭПКонтекстноеМеню 225 true @@ -2233,10 +2233,10 @@ - ПодписанЭЦП + ПодписанЭП <key>ru</key> - <value>Подписан ЭЦП</value> + <value>Подписан ЭП</value> 6 @@ -2469,7 +2469,7 @@ ru Параметры письма - 4 + 3 ru Показать дополнительную информацию по письму @@ -2492,7 +2492,7 @@ ru Связанные взаимодействия - 5 + 4 ru Связанные взаимодействия @@ -2518,7 +2518,7 @@ ru Изменить кодировку - 6 + 5 ru Изменить кодировку @@ -2540,7 +2540,7 @@ ru Уточнить контакты - 3 + 6 ru Уточнить контакты @@ -2712,6 +2712,10 @@ true + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + @@ -2723,10 +2727,6 @@ OnReadAtServer ПриЧтенииНаСервере - - BeforeWrite - ПередЗаписью - BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html index 61b323e2e..8c964018a 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 ddc6f870a..ca24fe673 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,7 +14,7 @@ Возврат; КонецЕсли; - Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект); Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПризнакРассмотрено") Тогда Элементы.ДекорацияВажность.Ширина = 10; КонецЕсли; @@ -39,7 +38,7 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); Вложения.Очистить(); ТаблицаВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина); @@ -91,7 +90,7 @@ ОбработатьНеобходимостьУведомленияОПрочтении(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоВходящее"); Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); // СтандартныеПодсистемы.Свойства @@ -109,7 +108,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник); КонецПроцедуры @@ -133,7 +132,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); Если Рассмотрено И ТребуетсяУстановкаФлагаОтправкиУведомления Тогда УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); @@ -148,24 +147,7 @@ &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - - Если Рассмотрено И ТребуетсяЗапросУведомленияОПрочтении Тогда - - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиОтправкиУведомленияОПрочтенииПослеЗавершения", ЭтотОбъект); - ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, - НСтр("ru='Отправитель запросил уведомление о прочтении. Отправить?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Да, - НСтр("ru='Запрос уведомления'")); - - КонецЕсли; + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); КонецПроцедуры @@ -185,8 +167,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -202,6 +185,17 @@ Процедура РассмотреноПриИзменении(Элемент) Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; + Если Рассмотрено И ТребуетсяЗапросУведомленияОПрочтении Тогда + + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиОтправкиУведомленияОПрочтенииПослеЗавершения", ЭтотОбъект); + ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, + НСтр("ru='Отправитель запросил уведомление о прочтении. Отправить?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Да, + НСтр("ru='Запрос уведомления'")); + + КонецЕсли; КонецПроцедуры @@ -231,7 +225,7 @@ ПараметрыФормы.Вставить("Письмо", Объект.Ссылка); // Откроем форму для редактирования списка адресатов - ОткрытьФорму("ОбщаяФорма.УточнениеКонтактов", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("ОбщаяФорма.УточнениеКонтактов", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -275,7 +269,7 @@ ПолучателиОтветаПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоВходящее"); КонецПроцедуры @@ -298,8 +292,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВложения &НаКлиенте Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -323,8 +318,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОткрытьВложениеВыполнить() @@ -378,7 +374,7 @@ ПараметрыФормы.Вставить("ВнутреннийНомер", Объект.Номер); ПараметрыФормы.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -388,7 +384,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбъектОтбора", Объект.Предмет); - ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -433,8 +429,9 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОткрытьВложение() @@ -557,6 +554,7 @@ ИначеЕсли РезультатВопроса = КодВозвратаДиалога.Нет Тогда УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Ложь); КонецЕсли; + ТребуетсяЗапросУведомленияОПрочтении = Ложь; КонецПроцедуры @@ -569,7 +567,6 @@ КонецПроцедуры - // СтандартныеПодсистемы.Свойства &НаСервере @@ -581,3 +578,4 @@ // Конец СтандартныеПодсистемы.Свойства +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index e70abf8ca..92e6c426e 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -82,10 +80,38 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Важность"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Комментарий"); + Результат.Добавить("ОтправительКонтакт"); + Результат.Добавить("ОтправительПредставление"); + Результат.Добавить("ПолучателиПисьма.Представление"); + Результат.Добавить("ПолучателиПисьма.Контакт"); + Результат.Добавить("ПолучателиКопий.Представление"); + Результат.Добавить("ПолучателиКопий.Контакт"); + Результат.Добавить("ПолучателиОтвета.Представление"); + Результат.Добавить("ПолучателиОтвета.Контакт"); + Результат.Добавить("АдресаУведомленияОПрочтении.Представление"); + Результат.Добавить("АдресаУведомленияОПрочтении.Контакт"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -96,3 +122,5 @@ "ЭлектронноеПисьмоВходящее"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index c1ab3dd69..fe45c4b8d 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -1,6 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -33,10 +32,10 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo index 2f823f193..3fb22faa4 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo @@ -70,33 +70,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее -1 -1 Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca deleted file mode 100644 index 6a8d8e23e..000000000 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/ConditionalAppearance.dcssca +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - ТекстКб - - - - - Вложения.Размер - GreaterOrEqual - 0 - - - - - Текст - (Kb) - - - - - - - Тема - - - - - Объект.СтатусПисьма - NotEqual - Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено - - - - - ТолькоПросмотр - false - - - - - - - ВложенияКонтекстноеМенюСвойстваВложения - - - - - Объект.СтатусПисьма - Equal - Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик - - - - - false - Доступность - false - - - ТолькоПросмотр - true - - - - diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 79ab47a72..36af4f276 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -1077,7 +1077,7 @@ false None - ВложенияПодписанЭЦП + ВложенияПодписанЭП 281 true true @@ -1085,10 +1085,10 @@ true - Вложения.ПодписанЭЦП + Вложения.ПодписанЭП - ВложенияПодписанЭЦПExtendedTooltip + ВложенияПодписанЭПРасширеннаяПодсказка 337 Label true @@ -1098,7 +1098,7 @@
            - ВложенияПодписанЭЦПКонтекстноеМеню + ВложенияПодписанЭПКонтекстноеМеню 282 true @@ -2965,10 +2965,10 @@
            - ПодписанЭЦП + ПодписанЭП <key>ru</key> - <value>Подписан ЭЦП</value> + <value>Подписан ЭП</value> 9 @@ -3490,7 +3490,7 @@ ru Добавить вложение - 4 + 3 ru Добавить вложение @@ -3516,7 +3516,7 @@ ru Удалить вложение - 5 + 4 ru Удалить вложение @@ -3542,7 +3542,7 @@ ru Параметры письма - 6 + 5 ru Показать дополнительную информацию по письму @@ -3565,7 +3565,7 @@ ru HTML - 10 + 6 ru HTML @@ -3589,7 +3589,7 @@ ru Обычный текст - 11 + 7 ru Обычный текст @@ -3613,7 +3613,7 @@ ru Отображать текст письма основания - 12 + 8 ru Отображать текст письма основания @@ -3640,7 +3640,7 @@ ru Уточнить контакты - 7 + 9 ru Уточнить контакты @@ -3662,7 +3662,7 @@ ru Свойства вложения - 8 + 10 ru Свойства вложения @@ -3687,7 +3687,7 @@ ru Вставить внешнюю ссылку на объект информационной базы - 3 + 11 ru Вставить внешнюю ссылку на объект информационной базы @@ -3778,6 +3778,10 @@ 0 + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html index 483750a0e..ef7c611bc 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 567205381..61e79647e 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -1,22 +1,26 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Объект.Ссылка.Пустая() Тогда + Рассмотрено = Истина; ПриСозданииИПриЧтенииНаСервере(); Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет); + ИзменилисьКонтакты = Истина; КонецЕсли; Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); //подготовить оповещения взаимодействий - Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); + Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, Объект, "СтраницаДополнительныеРеквизиты"); @@ -40,7 +44,7 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиент.ОтработатьОповещение(ЭтотОбъект, ИмяСобытия, Параметр, Источник); Если ИмяСобытия = "Запись_ПрисоединенныйФайл" Тогда Если ТипЗнч(Источник) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы") Тогда @@ -119,7 +123,7 @@ КонецЕсли; // Установим признак модифицированности - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее"); ИзменилисьКонтакты = Истина; Модифицированность = Истина; @@ -130,7 +134,7 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); ПриСозданииИПриЧтенииНаСервере(); // СтандартныеПодсистемы.Свойства @@ -253,14 +257,14 @@ УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства - Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект, ИзменилисьКонтакты); + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтотОбъект, ТекущийОбъект, ИзменилисьКонтакты); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтаФорма); + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, ЭтотОбъект); НайденнаяПапка = Неопределено; @@ -364,7 +368,7 @@ Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ЗаполнитьВложения(); - Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект); УстановитьЗаголовокКнопкиПоУмолчанию(); Если Объект.СтатусПисьма <> ТекущийСтатусПисьма Тогда @@ -382,7 +386,7 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи, "ЭлектронноеПисьмоИсходящее"); @@ -400,8 +404,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -415,6 +420,7 @@ Процедура ПредставлениеОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Если Объект.УчетнаяЗапись <> ВыбранноеЗначение Тогда + ИзменитьПодпись(Объект.УчетнаяЗапись, ВыбранноеЗначение); Объект.УчетнаяЗапись = ВыбранноеЗначение; ЭлементСписка = Элемент.СписокВыбора.НайтиПоЗначению(ВыбранноеЗначение); Если ЭлементСписка <> Неопределено Тогда @@ -526,7 +532,7 @@ Если Результат.Количество() = 0 Тогда Возврат; Иначе - ПоместитьНайденногоАдресатаВСписок(ИмяСвязаннойТаблицы, Результат[0], Инд); + ПоместитьНайденногоАдресатаВСписок(ИмяСвязаннойТаблицы, Результат[0], Инд, Истина); КонецЕсли; Иначе @@ -539,7 +545,7 @@ Объект[ИмяЭлемента] = ""; Объект[ИмяСвязаннойТаблицы].Очистить(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее"); КонецЕсли; @@ -598,7 +604,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПоместитьНайденногоАдресатаВСписок(ИмяСпискаАдресатов, ДанныеАдресата, ИндексВСпискеПолучателей) +Процедура ПоместитьНайденногоАдресатаВСписок(ИмяСпискаАдресатов, ДанныеАдресата, ИндексВСпискеПолучателей, ИскатьКонтакт = Ложь) Модифицированность = Истина; @@ -608,7 +614,11 @@ СтрокаАдресата = Объект[ИмяСпискаАдресатов].Добавить(); КонецЕсли; - ЗаполнитьЗначенияСвойств(СтрокаАдресата,ДанныеАдресата); + ЗаполнитьЗначенияСвойств(СтрокаАдресата, ДанныеАдресата); + + Если ИскатьКонтакт И Не ЗначениеЗаполнено(СтрокаАдресата.Контакт) Тогда + СтрокаАдресата.Контакт = ?(ПустаяСтрока(СтрокаАдресата.Адрес), "", ПолучитьКонтактПоАдресу(СтрокаАдресата.Адрес)); + КонецЕсли; СписокАдресатов = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект[ИмяСпискаАдресатов],Ложь); Если ИмяСпискаАдресатов = "ПолучателиПисьма" Тогда @@ -619,7 +629,7 @@ Объект.СписокПолучателейСкрытыхКопий= СписокАдресатов; КонецЕсли; - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее"); КонецПроцедуры @@ -637,8 +647,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВложения &НаКлиенте Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -707,8 +718,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОтправитьПереслатьВыполнить(Команда) @@ -807,14 +819,14 @@ СтруктураПараметры.Вставить("ВключатьТелоИсходногоПисьма", Объект.ВключатьТелоИсходногоПисьма); СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", СтруктураПараметры, ЭтаФорма); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", СтруктураПараметры, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы(Команда) - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект",,ЭтаФорма); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект",,ЭтотОбъект); КонецПроцедуры @@ -829,8 +841,44 @@ // Конец СтандартныеПодсистемы.Свойства -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Тема.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатусПисьма"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияКонтекстноеМенюСвойстваВложения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатусПисьма"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + +КонецПроцедуры &НаКлиенте Процедура НаКонтролеПриИзменении() @@ -964,7 +1012,6 @@ КонецПроцедуры - ///////////////////////////////////////////////////////////////////////////////// // Работа с вложениями @@ -1021,7 +1068,7 @@ Адрес = ""; ВыбранныйФайл = ""; - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ПомещениеФайлаПриОкончании", ЭтаФорма); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ПомещениеФайлаПриОкончании", ЭтотОбъект); НачатьПомещениеФайла(ОбработчикОповещенияОЗакрытии, Адрес, ВыбранныйФайл, Истина, УникальныйИдентификатор); #КонецЕсли @@ -1120,6 +1167,7 @@ Если Объект.Ссылка.Пустая() И Параметры <> Неопределено Тогда Если Параметры.Свойство("Основание") И ТипЗнч(Параметры.Основание) = Тип("Структура") И + Параметры.Основание.Свойство("Команда") И Параметры.Основание.Команда = "Переслать" Тогда табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Параметры.Основание.Основание, Истина); @@ -1205,7 +1253,7 @@ Если ТекущиеДанные.Ссылка = Неопределено Тогда ДополнительныеПараметры = Новый Структура("ТекущийИндексВКоллекции", ТекущийИндексВКоллекции); - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОЗаписиФайлаПослеЗакрытия", ЭтаФорма, ДополнительныеПараметры); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОЗаписиФайлаПослеЗакрытия", ЭтотОбъект, ДополнительныеПараметры); ТекстВопроса = НСтр("ru = 'Свойства файла доступны только после его записи. Записать?'"); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе @@ -1432,18 +1480,7 @@ ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений); ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - ЭлементыПодписи = ПараметрыРаботыПользователяПользователя.Подпись.ПолучитьЭлементы(); - - Для Каждого ЭлементПодписи Из ЭлементыПодписи Цикл - Если ТипЗнч(ЭлементПодписи) = Тип("ТекстФорматированногоДокумента") Тогда - ДобавленныйЭлемент = ТекстПисьмаФорматированныйДокумент.Добавить(ЭлементПодписи.Текст, ТипЗнч(ЭлементПодписи)); - ЗаполнитьЗначенияСвойств(ДобавленныйЭлемент, ЭлементПодписи,"ЦветТекста, ЦветФона, Шрифт"); - ИначеЕсли ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда - ТекстПисьмаФорматированныйДокумент.Добавить(ЭлементПодписи.Картинка, ТипЗнч(ЭлементПодписи)); - Иначе - ТекстПисьмаФорматированныйДокумент.Добавить(Неопределено, ТипЗнч(ЭлементПодписи)); - КонецЕсли; - КонецЦикла; + ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыРаботыПользователяПользователя.Подпись); КонецЕсли; @@ -1475,26 +1512,36 @@ Если Параметры.Свойство("Вложения") И Параметры.Вложения <> Неопределено Тогда - Для каждого Вложение Из Параметры.Вложения Цикл - - НоваяСтрока = Вложения.Добавить(); - Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда - НоваяСтрока.Расположение = 4; - Вложение.Значение = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор); - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(Вложение.Представление); - Иначе - НоваяСтрока.Расположение = 2; - ИмяФайла = ""; - Расширение = ""; - ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла); - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - КонецЕсли; - - НоваяСтрока.ИмяФайлаНаКомпьютере = Вложение.Значение; - НоваяСтрока.ИмяФайла = Вложение.Представление; - НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - - КонецЦикла; + Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(Параметры.Вложения) = Тип("Массив") Тогда + Для Каждого Вложение Из Параметры.Вложения Цикл + ОписаниеВложения = Вложения.Добавить(); + Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Тогда + Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор); + ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("ДвоичныеДанные") Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Вложение.Значение, УникальныйИдентификатор); + Иначе + ОписаниеВложения.Расположение = 2; + ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.Значение; + КонецЕсли; + ОписаниеВложения.ИмяФайла = Вложение.Представление; + Иначе // ТипЗнч(Параметры.Вложения) = "массив структур" + Если Не ПустаяСтрока(Вложение.АдресВоВременномХранилище) Тогда + ОписаниеВложения.Расположение = 4; + ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище( + ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), УникальныйИдентификатор); + Иначе + ОписаниеВложения.Расположение = 2; + ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.ПутьКФайлу; + КонецЕсли; + КонецЕсли; + ОписаниеВложения.ИмяФайла = Вложение.Представление; + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ОписаниеВложения.ИмяФайла); + ОписаниеВложения.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + КонецЦикла; + КонецЕсли; КонецЕсли; @@ -1507,7 +1554,9 @@ Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками; ИначеЕсли ТипЗнч(Параметры.Тело) = Тип("Строка") И Не ПустаяСтрока(Параметры.Тело) Тогда Объект.Текст = Параметры.Тело; - Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; + ТекстПисьмаФорматированныйДокумент.Добавить(Объект.Текст); + СтруктураВложений = Новый Структура; + ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(Объект.ТекстHTML, СтруктураВложений); КонецЕсли; Если Параметры.Свойство("Кому") И Параметры.Кому <> Неопределено Тогда @@ -1530,10 +1579,19 @@ ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда Для Каждого ЭлементМассива Из Параметры.Кому Цикл - НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = ЭлементМассива.Адрес; - НоваяСтрока.Представление = ЭлементМассива.Представление; - НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; + + МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементМассива.Адрес, ";"); + + Для Каждого Адрес Из МассивАдресов Цикл + Если ПустаяСтрока(Адрес) Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = СокрЛП(Адрес); + НоваяСтрока.Представление = ЭлементМассива.Представление; + НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; + КонецЦикла; + КонецЦикла; Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); @@ -1631,7 +1689,7 @@ ТекстВопроса = НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе. |Продолжить?'"); - ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВопросОНеСохраненииОтправленногоПисьма", ЭтаФорма); + ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВопросОНеСохраненииОтправленногоПисьма", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияЗакрытия,ТекстВопроса, СписокКнопок,, КодВозвратаДиалога.Да, НСтр("ru = 'Отправка письма'")); Иначе @@ -1678,7 +1736,7 @@ Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст") И ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда - ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтаФорма); + ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект); Иначе @@ -1696,7 +1754,7 @@ &НаСервере Процедура ПриСозданииИПриЧтенииНаСервере() - Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтотОбъект); УстановитьЗаголовокКнопкиПоУмолчанию(); ОбработатьПереданныеПараметры(Параметры); ЗаполнитьВложения(Параметры); @@ -1710,14 +1768,14 @@ ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма(); ОтобразитьПисьмоОснование(); - НаКонтроле = НЕ Рассмотрено; - Если Не Объект.Ссылка.Пустая() Тогда - Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтаФорма); + Взаимодействия.УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра(ЭтотОбъект); ТекущийСтатусПисьма = Объект.СтатусПисьма; КонецЕсли; - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + НаКонтроле = НЕ Рассмотрено; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоИсходящее"); Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда Элементы.СписокПолучателейКопий.КнопкаВыбора = Ложь; @@ -1759,9 +1817,12 @@ Иначе УсловиеПолейВводаПоСтроке = ""; - СписокПолей = Взаимодействия.ПолучитьСвойствоМетаданныхПоТипу(ЭлементМассиваОписания.Тип, "ВводПоСтроке"); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ЭлементМассиваОписания.Тип); + СписокПолей = МетаданныеОбъекта.ВводПоСтроке; Для Каждого Поле Из СписокПолей Цикл - УсловиеПолейВводаПоСтроке = УсловиеПолейВводаПоСтроке + " ИЛИ Таблица." + Поле.Имя + " ПОДОБНО &ВведеннаяСтрока"; + Если МетаданныеОбъекта.СтандартныеРеквизиты[Поле.Имя].Тип.Типы()[0] = Тип("Строка") Тогда + УсловиеПолейВводаПоСтроке = УсловиеПолейВводаПоСтроке + " ИЛИ Таблица." + Поле.Имя + " ПОДОБНО &ВведеннаяСтрока"; + КонецЕсли; КонецЦикла; ТекстЗапроса = ТекстЗапроса + " @@ -1928,7 +1989,7 @@ Модифицированность = Истина; - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЭлектронноеПисьмоИсходящее"); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтотОбъект,"ЭлектронноеПисьмоИсходящее"); КонецПроцедуры @@ -1958,7 +2019,7 @@ // Откроем форму для редактирования списка адресатов ИмяОбщейФормы = ?(ДляПодбора, "ОбщаяФорма.АдреснаяКнига", "ОбщаяФорма.УточнениеКонтактов"); - ОткрытьФорму(ИмяОбщейФормы, ПараметрыОткрытия, ЭтаФорма); + ОткрытьФорму(ИмяОбщейФормы, ПараметрыОткрытия, ЭтотОбъект); КонецПроцедуры @@ -2174,6 +2235,179 @@ КонецПроцедуры +&НаСервере +Процедура ИзменитьПодпись(ПредыдущаяУчетнаяЗапись, НоваяУчетнаяЗапись); + + ПараметрыПредыдущаяУЗ = + Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма( + ПредыдущаяУчетнаяЗапись, + ФорматСообщения, + ?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь)); + + ПараметрыНоваяУЗ = + Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма( + НоваяУчетнаяЗапись, + ФорматСообщения, + ?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь)); + + Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда + Если ПустаяСтрока(ТекстПисьма) Тогда + ТекстПисьма = ПараметрыНоваяУЗ.Подпись; + Иначе + Если СтрЧислоВхождений(ТекстПисьма, ПараметрыПредыдущаяУЗ.Подпись) > 0 Тогда + ТекстПисьма = СтрЗаменить(ТекстПисьма, ПараметрыПредыдущаяУЗ.Подпись, ПараметрыНоваяУЗ.Подпись); + Иначе + ТекстПисьма = ТекстПисьма + ПараметрыНоваяУЗ.Подпись; + КонецЕсли; + КонецЕсли; + Иначе + + + ТекстПисьмо = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); + Если ПустаяСтрока(ТекстПисьмо) Тогда + + ТекстПисьмаФорматированныйДокумент = ПараметрыНоваяУЗ.Подпись; + + Иначе + + ТекстПредыдущаяУЗ = ПараметрыПредыдущаяУЗ.Подпись.ПолучитьТекст(); + + Если СтрЧислоВхождений(ТекстПисьмо, ТекстПредыдущаяУЗ) > 0 Тогда + + КоличествоЭлементовСтараяПодпись = ПараметрыПредыдущаяУЗ.Подпись.Элементы.Количество(); + КоличествоЭлементовПисьмо = ТекстПисьмаФорматированныйДокумент.Элементы.Количество(); + + УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент,ПараметрыПредыдущаяУЗ.Подпись); + + КонецЕсли; + + ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаФорматированныйДокумент, ПараметрыНоваяУЗ.Подпись); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент, СтараяПодпись); + + ТекстПисьмаБезПараграфов = Новый ФорматированныйДокумент; + ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаБезПараграфов, ТекстПисьмаФорматированныйДокумент); + СтараяПодписьБезПараграфов = Новый ФорматированныйДокумент; + ДобавитьФорматированныйДокументКФорматированномуДокументу(СтараяПодписьБезПараграфов, СтараяПодпись); + + ПервыйЗначимыйЭлементПодпись = Неопределено; + ИндексПервогоЗначимогоЭлемента = -1; + ПоследнийЗначимыйЭлементПодпись = Неопределено; + ИндексПоследнегоЗначимогоЭлемента = -1; + КоличествоЭлементовПодпись = СтараяПодписьБезПараграфов.Элементы[0].Элементы.Количество(); + КоличествоЭлементовТекст = ТекстПисьмаБезПараграфов.Элементы[0].Элементы.Количество(); + + Для Инд = 0 По КоличествоЭлементовПодпись - 1 Цикл + + ЭлементПодписи = СтараяПодписьБезПараграфов.Элементы[0].Элементы[Инд]; + Если ТипЗнч(ЭлементПодписи) = Тип("ТекстФорматированногоДокумента") + Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда + + ПервыйЗначимыйЭлементПодпись = ЭлементПодписи; + ИндексПервогоЗначимогоЭлемента = Инд; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Для Инд = 0 По КоличествоЭлементовПодпись - 1 Цикл + + ЭлементПодписи = СтараяПодписьБезПараграфов.Элементы[0].Элементы[КоличествоЭлементовПодпись - 1 - Инд]; + Если ТипЗнч(ЭлементПодписи) = Тип("ТекстФорматированногоДокумента") + Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда + + ПоследнийЗначимыйЭлементПодпись = ЭлементПодписи; + ИндексПоследнегоЗначимогоЭлемента = КоличествоЭлементовПодпись - 1 - Инд; + Прервать; + + КонецЕсли; + + КонецЦикла; + + ИндексПервогоЭлементаТекст = -1; + ИндексПоследнегоЭлементаТекст = -1; + + Для Инд = 0 По КоличествоЭлементовТекст - 1 Цикл; + + ЭлементТекста = ТекстПисьмаБезПараграфов.Элементы[0].Элементы[КоличествоЭлементовТекст - 1 - Инд]; + Если ИндексПервогоЭлементаТекст = - 1 Тогда + Если ТипЗнч(ЭлементТекста) = ТипЗнч(ПервыйЗначимыйЭлементПодпись) Тогда + + Если ТипЗнч(ЭлементТекста) = Тип("ТекстФорматированногоДокумента") + И ЭлементТекста.Текст = ПервыйЗначимыйЭлементПодпись.Текст Тогда + ИндексПервогоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; + КонецЕсли; + Если ТипЗнч(ЭлементТекста) = Тип("КартинкаФорматированногоДокумента") + И ЭлементТекста.Картинка = ПервыйЗначимыйЭлементПодпись.Картинка Тогда + ИндексПервогоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ИндексПоследнегоЭлементаТекст = - 1 Тогда + Если ТипЗнч(ЭлементТекста) = ТипЗнч(ПоследнийЗначимыйЭлементПодпись) Тогда + + Если ТипЗнч(ЭлементТекста) = Тип("ТекстФорматированногоДокумента") + И ЭлементТекста.Текст = ПоследнийЗначимыйЭлементПодпись.Текст Тогда + ИндексПоследнегоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; + КонецЕсли; + Если ТипЗнч(ЭлементТекста) = Тип("КартинкаФорматированногоДокумента") + И ЭлементТекста.Картинка = ПоследнийЗначимыйЭлементПодпись.Картинка Тогда + ИндексПоследнегоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ИндексПервогоЭлементаТекст <> -1 И ИндексПоследнегоЭлементаТекст <> -1 Тогда + + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если ИндексПервогоЭлементаТекст <> - 1 И ИндексПоследнегоЭлементаТекст <> -1 Тогда + + Для Инд = 0 По ИндексПоследнегоЭлементаТекст - ИндексПервогоЭлементаТекст Цикл + ТекстПисьмаБезПараграфов.Элементы[0].Элементы.Удалить(ИндексПоследнегоЭлементаТекст - Инд); + КонецЦикла; + + ТекстПисьмаФорматированныйДокумент = ТекстПисьмаБезПараграфов; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьФорматированныйДокументКФорматированномуДокументу(ПриемникДокумент, ДобавляемыйДокумент) + + Для Инд = 0 По ДобавляемыйДокумент.Элементы.Количество() -1 Цикл + ДобавляемыйЭлемент = ДобавляемыйДокумент.Элементы[Инд]; + Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ПараграфФорматированногоДокумента") Тогда + НовыйЭлемент = ПриемникДокумент.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); + ДобавитьФорматированныйДокументКФорматированномуДокументу(ПриемникДокумент, ДобавляемыйЭлемент); + Иначе + Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ТекстФорматированногоДокумента") Тогда + НовыйЭлемент = ПриемникДокумент.Добавить(ДобавляемыйЭлемент.Текст, Тип("ТекстФорматированногоДокумента")); + ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель"); + ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("КартинкаФорматированногоДокумента") Тогда + НовыйЭлемент = ПриемникДокумент.Добавить(ДобавляемыйЭлемент.Картинка, Тип("КартинкаФорматированногоДокумента")); + ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель"); + ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда + НовыйЭлемент = ПриемникДокумент.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); + КонецЕсли; + КонецЕсли + КонецЦикла; + +КонецПроцедуры // СтандартныеПодсистемы.Свойства @@ -2186,3 +2420,4 @@ // Конец СтандартныеПодсистемы.Свойства +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl index c670ece38..53b33b990 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +19,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении(Элемент) @@ -37,8 +37,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Вставить(Команда) @@ -47,8 +48,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СформироватьАдресСсылки() @@ -57,3 +59,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index bc3ec54f8..5ac142a2f 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -1,7 +1,6 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -57,6 +56,31 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Важность"); + Результат.Добавить("Ответственный"); + Результат.Добавить("ВзаимодействиеОснование"); + Результат.Добавить("Комментарий"); + Результат.Добавить("ПолучателиПисьма.Представление"); + Результат.Добавить("ПолучателиПисьма.Контакт"); + Результат.Добавить("ПолучателиКопий.Представление"); + Результат.Добавить("ПолучателиКопий.Контакт"); + Результат.Добавить("ПолучателиОтвета.Представление"); + Результат.Добавить("ПолучателиОтвета.Контакт"); + Результат.Добавить("ПолучателиСкрытыхКопий.Представление"); + Результат.Добавить("ПолучателиСкрытыхКопий.Контакт"); + Возврат Результат; + +КонецФункции + #КонецЕсли //////////////////////////////////////////////////////////////////////////////// @@ -71,3 +95,5 @@ "ЭлектронноеПисьмоИсходящее"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index ed1881d4f..da69ccd93 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - +#Область ПрограммныйИнтерфейс //Вызывается при заполнении документа на основании Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -139,8 +137,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции @@ -321,4 +320,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index 4f567ba14..454c84015 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -66,33 +66,33 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее -1 -1 Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты - -1 - -1 - -1 + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение -1 -1 Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - -1 - -1 + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее -1 -1 InformationRegister.ДополнительныеСведения - -1 - -1 - -1 + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение -1 -1 diff --git a/SSL/src/Enums/ОперацииСНаборамиРазрешений/ОперацииСНаборамиРазрешений.mdo b/SSL/src/Enums/ОперацииСНаборамиРазрешений/ОперацииСНаборамиРазрешений.mdo new file mode 100644 index 000000000..7b8fdea8a --- /dev/null +++ b/SSL/src/Enums/ОперацииСНаборамиРазрешений/ОперацииСНаборамиРазрешений.mdo @@ -0,0 +1,66 @@ + + + + + + + + ОперацииСНаборамиРазрешений + + ru + Операции с наборами разрешений + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Создание + + ru + Создание + + + + Назначение + + ru + Назначение + + + + Обновление + + ru + Обновление + + + + Удаление + + ru + Удаление + + + + УдалениеНазначения + + ru + Удаление назначения + + + diff --git a/SSL/src/Enums/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.mdo b/SSL/src/Enums/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.mdo deleted file mode 100644 index 70281a405..000000000 --- a/SSL/src/Enums/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса/ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.mdo +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса - - ru - Причины отключения дополнительных отчетов и обработок в модели сервиса - - - Use - Order - - Use - - - - - Use - Ref - - Use - - - - true - BothWays - - БлокировкаАдминистраторомСервиса - - ru - Блокировка администратором сервиса - - - - БлокировкаВладельцем - - ru - Блокировка владельцем - - - - ОбновлениеВерсииКонфигурации - - ru - Обновление версии конфигурации - - - diff --git a/SSL/src/Enums/ПолФизическогоЛица/ПолФизическогоЛица.mdo b/SSL/src/Enums/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.mdo similarity index 51% rename from SSL/src/Enums/ПолФизическогоЛица/ПолФизическогоЛица.mdo rename to SSL/src/Enums/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.mdo index 0ec02bbf8..5b260f41e 100644 --- a/SSL/src/Enums/ПолФизическогоЛица/ПолФизическогоЛица.mdo +++ b/SSL/src/Enums/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок/РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.mdo @@ -1,14 +1,14 @@ - + - - - + + + - ПолФизическогоЛица + РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок ru - Пол физического лица + Режимы совместимости разрешений дополнительных отчетов и обработок Use @@ -28,18 +28,18 @@ true BothWays - - Мужской + + Версия_2_1_3 ru - Мужской + Версия 2.1.3 - - Женский + + Версия_2_2_2 ru - Женский + Версия 2.2.2 diff --git a/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo b/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo index ac0c99d58..5a49962f6 100644 --- a/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo +++ b/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo @@ -76,4 +76,11 @@ Задание не активно + + ОбработкаОшибкиПриАварийномЗавершении + + ru + Обработка ошибки при аварийном завершении + + diff --git a/SSL/src/Enums/СостоянияЗапросовНаИспользованиеВнешнихРесурсов/СостоянияЗапросовНаИспользованиеВнешнихРесурсов.mdo b/SSL/src/Enums/СостоянияЗапросовНаИспользованиеВнешнихРесурсов/СостоянияЗапросовНаИспользованиеВнешнихРесурсов.mdo new file mode 100644 index 000000000..f4d86345a --- /dev/null +++ b/SSL/src/Enums/СостоянияЗапросовНаИспользованиеВнешнихРесурсов/СостоянияЗапросовНаИспользованиеВнешнихРесурсов.mdo @@ -0,0 +1,52 @@ + + + + + + + + СостоянияЗапросовНаИспользованиеВнешнихРесурсов + + ru + Состояния запросов на использование внешних ресурсов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Новый + + ru + Новый + + + + Применен + + ru + Применен + + + + Проверен + + ru + Проверен + + + diff --git a/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов.mdo b/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов.mdo deleted file mode 100644 index 54994762a..000000000 --- a/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов/ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов - - ru - Дополнительные отчеты и обработки контроль правомерности изменения реквизитов - - - CatalogObject.ДополнительныеОтчетыИОбработки - - BeforeWrite - CommonModule.ДополнительныеОтчетыИОбработки.ПередЗаписьюДополнительнойОбработки - diff --git a/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольУдаления/ДополнительныеОтчетыИОбработкиКонтрольУдаления.mdo b/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольУдаления/ДополнительныеОтчетыИОбработкиКонтрольУдаления.mdo deleted file mode 100644 index dfdd0521e..000000000 --- a/SSL/src/EventSubscriptions/ДополнительныеОтчетыИОбработкиКонтрольУдаления/ДополнительныеОтчетыИОбработкиКонтрольУдаления.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиКонтрольУдаления - - ru - Дополнительные отчеты и обработки контроль удаления - - - CatalogObject.ДополнительныеОтчетыИОбработки - - BeforeDelete - CommonModule.ДополнительныеОтчетыИОбработки.ПередУдалениемДополнительнойОбработки - diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index 8fd97e616..16dc834e1 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -9,25 +9,34 @@ InformationRegisterRecordSet.ДанныеПроизводственногоКалендаря InformationRegisterRecordSet.ПодпискиПолучателей InformationRegisterRecordSet.УдалитьОбластиДанных + InformationRegisterRecordSet.РазрешенныеПриложенияОперационнойСистемы InformationRegisterRecordSet.УдалитьБлокировкиСеансовОбластиДанных + InformationRegisterRecordSet.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов InformationRegisterRecordSet.ПравилаДляОбменаДанными InformationRegisterRecordSet.УдалитьСтраныМира InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.СообщенияОбменаДанными InformationRegisterRecordSet.АдресныйКлассификатор + InformationRegisterRecordSet.РазрешенныеИнтернетРесурсы InformationRegisterRecordSet.УдалитьОбластиКРезервномуКопированию InformationRegisterRecordSet.РейтингАктивностиОбластейДанных InformationRegisterRecordSet.ЗависимостиПравДоступа InformationRegisterRecordSet.НастройкиОтправителя InformationRegisterRecordSet.ОбластиТребующиеОбработкиПоставляемыхДанных + InformationRegisterRecordSet.РежимыПодключенияВнешнихМодулей InformationRegisterRecordSet.НастройкиТранспортаОбменаОбластейДанных + InformationRegisterRecordSet.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов InformationRegisterRecordSet.АдресныеСокращения InformationRegisterRecordSet.УдалитьОчередьЗаданий InformationRegisterRecordSet.УдалитьЗамерыВремени InformationRegisterRecordSet.ВерсииОбъектовАдресногоКлассификатора + InformationRegisterRecordSet.РазрешенныеКаталогиФайловойСистемы InformationRegisterRecordSet.ПраваРолей InformationRegisterRecordSet.УдалитьВерсииПодсистем InformationRegisterRecordSet.УдалитьОчередьИзвлеченияТекста + InformationRegisterRecordSet.РазрешенияПереходаВПривилегированныйРежим + InformationRegisterRecordSet.РазрешенныеВнешниеКомпоненты + InformationRegisterRecordSet.РазрешенныеCOMКлассы InformationRegisterRecordSet.ПоставляемыеДанныеТребующиеОбработки OnWrite diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index be0367251..a18ef0f27 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -8,7 +8,6 @@ CatalogObject.ШаблоныЗаданийОчереди ConstantValueManager.МаксимальныйРазмерФайла - ConstantValueManager.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса ConstantValueManager.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы CatalogObject.КлассификаторБанковРФ ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервиса @@ -18,14 +17,12 @@ ConstantValueManager.СообщениеБлокировкиПриОбновленииКонфигурации ConstantValueManager.СписокЗапрещенныхРасширений ConstantValueManager.ПараметрыДополнительныхРеквизитовИСведений - ConstantValueManager.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса ConstantValueManager.ИспользоватьСинхронизациюДанных ConstantValueManager.ПарольСлужебногоПользователяМенеджераСервиса ConstantValueManager.РазделыОписанияИзмененийСистемы CatalogObject.СообщенияСистемы ConstantValueManager.РазмерБлокаПередачиФайла ConstantValueManager.КаталогСообщенийОбменаДаннымиДляLinux - ConstantValueManager.ПарольПользователяАгентаСервиса ConstantValueManager.ПараметрыСлужебныхСобытий ConstantValueManager.ПараметрыОграниченияДоступа ConstantValueManager.ИспользоватьПолнотекстовыйПоиск @@ -35,14 +32,11 @@ ConstantValueManager.ДетализироватьОбновлениеИБВЖурналеРегистрации ConstantValueManager.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC ConstantValueManager.ИмяСлужебногоПользователяМенеджераСервиса - ConstantValueManager.АдресАгентаСервиса ConstantValueManager.ВнутреннийАдресМенеджераСервиса - CatalogObject.ПоставляемыеДополнительныеОтчетыИОбработки ConstantValueManager.ИзвлекатьТекстыФайловНаСервере - ConstantValueManager.ИмяПользователяАгентаСервиса + ConstantValueManager.ПрофильБезопасностиИнформационнойБазы ConstantValueManager.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском CatalogObject.СценарииОбменовДанными - ConstantValueManager.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса ConstantValueManager.КаталогОбменаФайламиВМоделиСервиса ConstantValueManager.ХранитьФайлыВТомахНаДиске CatalogObject.ОчередьЗаданий @@ -52,16 +46,15 @@ ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете ConstantValueManager.ПараметрыАдминистрированияИБ ConstantValueManager.ИспользоватьАвтономнуюРаботуВМоделиСервиса + ConstantValueManager.ИспользуютсяПрофилиБезопасности ConstantValueManager.ЭтоАвтономноеРабочееМесто ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки - ConstantValueManager.НастройкаАвтономногоРабочегоМестаЗавершена ChartOfCharacteristicTypesObject.РазделыДатЗапретаИзменения ConstantValueManager.ВерсияКлассификатораБанковРФ ConstantValueManager.ПоддержкаРезервногоКопирования - CatalogObject.КлючевыеОперации + ConstantValueManager.ГлавныйУзел ConstantValueManager.ОценкаПроизводительностиПериодЗаписи ConstantValueManager.СписокРасширенийФайловOpenDocument - ConstantValueManager.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса ConstantValueManager.ИспользоватьРазделениеПоОбластямДанных ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой ConstantValueManager.ПараметрыБазовойФункциональности @@ -76,8 +69,10 @@ CatalogObject.ТомаХраненияФайлов CatalogObject.ИдентификаторыОбъектовМетаданных ConstantValueManager.РежимИспользованияИнформационнойБазы + ConstantValueManager.КоличествоЭлементовВТранзакцииЗагрузкиДанных ConstantValueManager.ВыполнятьЗамерыПроизводительности ConstantValueManager.ЗагрузитьСообщениеОбменаДанными + ConstantValueManager.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности ExchangePlanObject.ОбменСообщениями ConstantValueManager.МаксимальноеКоличествоИсполняющихФоновыхЗаданий ConstantValueManager.НастройкаПроксиСервера diff --git a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo index bc9b404fe..95a86fc7f 100644 --- a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo @@ -6,7 +6,6 @@ Обновить представление внешнего пользователя - CatalogObject.ФизическиеЛица CatalogObject.ВнешниеПользователи OnWrite diff --git a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo index c7d7d0346..aab6757fa 100644 --- a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия.mdo @@ -14,5 +14,5 @@ CatalogManager.ТелефонныйЗвонокПрисоединенныеФайлы FormGetProcessing - CommonModule.ПрисоединенныеФайлы.ПереопределитьПолучаемуюФормуПрисоединенногоФайла + CommonModule.ПрисоединенныеФайлыКлиентСервер.ПереопределитьПолучаемуюФормуПрисоединенногоФайла diff --git a/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo b/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo index 26fb60cec..d3d6083b3 100644 --- a/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo +++ b/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo @@ -6,7 +6,6 @@ Проверить изменения дат в предмете - CatalogObject.ФизическиеЛица CatalogObject.Заметки TaskObject.ЗадачаИсполнителя diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl index 7560b40de..ec7510e65 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -50,8 +49,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СделатьЭтуКонечнуюТочкуВедомой(Команда) @@ -62,4 +62,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 804aef53e..fbc116f14 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает имя файла настроек по умолчанию; // В этот файл будут выгружены настройки обмена для приемника; @@ -115,8 +114,8 @@ // Определяет использование механизма регистрации объектов // // Возвращаемое значение: -// Тип: Булево. Истина – механизм регистрации объектов необходимо использовать для текущего плана обмена; -// Ложь – механизм регистрации объектов использовать не требуется. +// Истина - механизм регистрации объектов необходимо использовать для текущего плана обмена. +// Ложь - механизм регистрации объектов использовать не требуется. // Функция ИспользоватьМеханизмРегистрацииОбъектов() Экспорт @@ -198,8 +197,8 @@ // Определяет режим удаления объектов при загрузке данных. // // Возвращающее значение: -// Булево. Истина – при получении информации удаления объект будет физически удален из ИБ; -// Ложь – объект будет помечен на удаление. +// Булево. Истина - при получении информации удаления объект будет физически удален из ИБ; +// Ложь - объект будет помечен на удаление. // Функция РазрешитьУдалениеОбъектов() Экспорт @@ -290,7 +289,7 @@ // Процедура предназначена для получения дополнительных данных, используемых при настройке обмена в базе-корреспонденте. // // Параметры: -// ДополнительныеДанные – Структура. Дополнительные данные, которые будут использованы +// ДополнительныеДанные - Структура. Дополнительные данные, которые будут использованы // в базе-корреспонденте при настройке обмена. // В качестве значений структуры применимы только значения, поддерживающие XDTO-сериализацию. // @@ -309,7 +308,7 @@ // если настройка обмена не поддерживается с корреспондентом указанной версии, то вызвать исключение. // // Параметры: -// ВерсияКорреспондента (только чтение) – Строка – версия конфигурации корреспондента, например, "2.1.5.1". +// ВерсияКорреспондента (только чтение) - Строка - версия конфигурации корреспондента, например, "2.1.5.1". // Процедура ПриПодключенииККорреспонденту(ВерсияКорреспондента) Экспорт @@ -321,10 +320,10 @@ // В обработчике можно изменить отправляемые данные или вовсе отказаться от отправки данных узла. // // Параметры: -// Отправитель – ПланОбменаОбъект – узел плана обмена, от имени которого выполняется отправка данных. -// Игнорировать – Булево – признак отказа от выгрузки данных узла. +// Отправитель - ПланОбменаОбъект - узел плана обмена, от имени которого выполняется отправка данных. +// Игнорировать - Булево - признак отказа от выгрузки данных узла. // Если в обработчике установить значение этого параметра в Истина, -// то отправка данных узла выполнена не будет. Значение по умолчанию – Ложь. +// то отправка данных узла выполнена не будет. Значение по умолчанию - Ложь. // Процедура ПриОтправкеДанныхОтправителя(Отправитель, Игнорировать) Экспорт @@ -336,10 +335,10 @@ // В обработчике можно изменить полученные данные или вовсе отказаться от получения данных узла. // // Параметры: -// Отправитель – ПланОбменаОбъект – узел плана обмена, от имени которого выполняется получение данных. -// Игнорировать – Булево – признак отказа от получения данных узла. +// Отправитель - ПланОбменаОбъект - узел плана обмена, от имени которого выполняется получение данных. +// Игнорировать - Булево - признак отказа от получения данных узла. // Если в обработчике установить значение этого параметра в Истина, -// то получение данных узла выполнена не будет. Значение по умолчанию – Ложь. +// то получение данных узла выполнена не будет. Значение по умолчанию - Ложь. // Процедура ПриПолученииДанныхОтправителя(Отправитель, Игнорировать) Экспорт @@ -356,8 +355,6 @@ Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт - - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -369,10 +366,11 @@ Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; - Результат.Добавить("Ведущая"); - Результат.Добавить("Заблокирована"); + Результат.Добавить("*"); Возврат Результат; КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo b/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo index ff736c3e0..89cff46ff 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo @@ -16,4 +16,5 @@ Catalog.ШаблоныАнкет Catalog.ВопросыШаблонаАнкеты Report.АналитическийОтчетПоАнкетированию + DataProcessor.СписокРеспондента diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеОтчетыИОбработки/ИспользоватьДополнительныеОтчетыИОбработки.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеОтчетыИОбработки/ИспользоватьДополнительныеОтчетыИОбработки.mdo index 56d191bc5..05009ace1 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеОтчетыИОбработки/ИспользоватьДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеОтчетыИОбработки/ИспользоватьДополнительныеОтчетыИОбработки.mdo @@ -10,5 +10,5 @@ Catalog.ДополнительныеОтчетыИОбработки InformationRegister.НазначениеДополнительныхОбработок InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам - Catalog.ПоставляемыеДополнительныеОтчетыИОбработки + Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок diff --git a/SSL/src/FunctionalOptions/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo b/SSL/src/FunctionalOptions/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo new file mode 100644 index 000000000..83ab96327 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользуютсяПрофилиБезопасности/ИспользуютсяПрофилиБезопасности.mdo @@ -0,0 +1,22 @@ + + + ИспользуютсяПрофилиБезопасности + + ru + Используются профили безопасности + + Constant.ИспользуютсяПрофилиБезопасности + true + InformationRegister.РежимыПодключенияВнешнихМодулей + DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + InformationRegister.РазрешенныеКаталогиФайловойСистемы + InformationRegister.РазрешенныеCOMКлассы + InformationRegister.РазрешенныеВнешниеКомпоненты + InformationRegister.РазрешенныеПриложенияОперационнойСистемы + InformationRegister.РазрешенныеИнтернетРесурсы + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + Enum.ОперацииСНаборамиРазрешений + InformationRegister.РазрешенияПереходаВПривилегированныйРежим + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов + Enum.СостоянияЗапросовНаИспользованиеВнешнихРесурсов + diff --git a/SSL/src/FunctionalOptions/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo deleted file mode 100644 index 8045a1932..000000000 --- a/SSL/src/FunctionalOptions/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса/НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - - ru - Независимое использование дополнительных отчетов и обработок в модели сервиса - - Constant.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - true - diff --git a/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo b/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo index 31253dd40..ae333943a 100644 --- a/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo +++ b/SSL/src/FunctionalOptions/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo @@ -20,5 +20,5 @@ Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа - ChartOfCharacteristicTypes.УдалитьВидыДоступа + CommonCommand.НастроитьПрава diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html index 270fa20a9..668b8abd6 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html @@ -1,2 +1,2 @@ - +

            Для загрузки адресного классификатора с сайта "1С" необходимо ввести данные регистрации на сайте поддержки пользователей 1С:Предприятия: код пользователя и пароль.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl index 6e16697d0..818e714da 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // &НаСервере @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // &НаКлиенте @@ -23,8 +24,9 @@ ЗапуститьПриложение("http://users.v8.1c.ru/"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // // Кнопка "Продолжить", выполнение выбора. @@ -44,9 +46,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // &НаСервереБезКонтекста @@ -54,4 +56,4 @@ АдресныйКлассификатор.СохранитьПараметрыАутентификации(Код, Пароль); КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html index 65ad34433..4106d5002 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html @@ -1,2 +1,2 @@ - +

            На форме выводится сводная информация об имеющихся в системе адресных сведениях, а также доступны основные операции по управлению ими: загрузка, очистка и проверка обновлений через Интернет.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl index 17baee513..1ca5b6eb0 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,8 +26,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьАдресныйКлассификатор(Команда) @@ -41,11 +42,14 @@ &НаКлиенте Процедура ПроверитьОбновлениеАдресногоКлассификатора(Команда) - АдресныйКлассификаторКлиент.ОпределитьНеобходимостьОбновленияАдресныхОбъектов(); + + АдресныйКлассификаторКлиент.ОпределитьНеобходимостьОбновленияАдресныхОбъектов(ЭтотОбъект); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Функция ЗагруженныеРегионы() @@ -62,3 +66,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index 47ee5f8ec..f57c9886f 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -380,7 +380,6 @@ true LabelField - true Left Enter true @@ -388,6 +387,7 @@ true true + 1 true ru @@ -1361,6 +1361,7 @@ ru Страницы формы
            + true СтраницыФормыExtendedTooltip 75 @@ -1626,6 +1627,7 @@ ПриЗакрытии 52 + 14 LockOwner true true @@ -1832,23 +1834,6 @@ true - - ОшибкаЗагрузкиДляОС - - <key>ru</key> - <value>Ошибка загрузки для ОС</value> - - 2 - - Boolean - - - true - - - true - - ВыбраноРегионовДляЗагрузки @@ -1887,6 +1872,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЭтоLinuxКлиент</name> + <title> + <key>ru</key> + <value>Это linux клиент</value> + + 2 + + Boolean + + + true + + + true + + КомандаДалее diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index a5b53ee1a..a0ff02e0e 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.16470"></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.16476"></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 891bc198b..db75d328b 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,8 +8,6 @@ Возврат; КонецЕсли; - ОшибкаЗагрузкиДляОС = Ложь; - АдресныеОбъектыПереданные = ?(Параметры.Свойство("АдресныеОбъекты"), Параметры.АдресныеОбъекты, Неопределено); ЗаполнитьТаблицуАдресныхОбъектов(АдресныеОбъектыПереданные); @@ -24,7 +22,13 @@ ИсточникДанныхДляЗагрузки = 1; КонецЕсли; - ОшибкаЗагрузкиДляОС = ПроверитьОшибкуЗагрузкиДляОС(); + ЭтоLinuxКлиент = ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); + Если ЭтоLinuxКлиент Тогда + // Запрещаем загрузку с ИТС, так как там поставляются *.exe - самораспаковывающийся RAR, + // Запускать распаковку можно только на клиенте. + СписокВыбора = Элементы.СпособЗагрузки.СписокВыбора; + СписокВыбора.Удалить(СписокВыбора.НайтиПоЗначению(2)); + КонецЕсли; КонецПроцедуры @@ -34,16 +38,10 @@ #Если ВебКлиент Тогда Отказ = Истина; ПоказатьПредупреждение(, НСтр("ru = 'Загрузка адресного классификатора не доступна в веб-клиенте.'")); -#Иначе - Если ОшибкаЗагрузкиДляОС Тогда - Отказ = Истина; - ПоказатьПредупреждение(, НСтр("ru = 'Загрузка адресного классификатора не доступна на сервере под управлением Linux/x86-64.'")); - КонецЕсли; + Возврат; #КонецЕсли - - Если Не Отказ Тогда - УстановитьИзмененияВИнтерфейсе(); - КонецЕсли; + + УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры &НаКлиенте @@ -53,8 +51,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // Обработчик события НачалоВыбора поля ввода формы ПутьКФайламДанныхНаДиске. // Вызывает диалог выбора директории, после выбора проверяет, существуют @@ -150,29 +149,21 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыбратьВсе() - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл - ЭлементАдресныйОбъект.Пометка = Истина; - КонецЦикла; - - УстановитьИзмененияВИнтерфейсе(); + УстановитьПометкиСпискаРегионов(Истина); КонецПроцедуры &НаКлиенте Процедура СнятьОтметкуСоВсех() - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл - ЭлементАдресныйОбъект.Пометка = Ложь; - КонецЦикла; - - ОтметитьОбязательные(ЭтотОбъект); - УстановитьИзмененияВИнтерфейсе(); + УстановитьПометкиСпискаРегионов(Ложь); КонецПроцедуры @@ -194,7 +185,7 @@ Оповещение = Новый ОписаниеОповещения("ЗагрузитьФайлыКЛАДРСайтПодтверждениеАутентификации", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("ОбъектыЗагрузки", ОбъектыЗагрузки); - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АвторизацияНаПользовательскомСайте",,ЭтаФорма,,,, + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АвторизацияНаПользовательскомСайте", , ЭтотОбъект, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс ); Возврат; @@ -243,7 +234,7 @@ Оповещение = Новый ОписаниеОповещения("ЗагрузитьФайлыКЛАДРСайтПодтверждениеАутентификации", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("ОбъектыЗагрузки", ОбъектыЗагрузки); - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АвторизацияНаПользовательскомСайте",,ЭтаФорма,,,, + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АвторизацияНаПользовательскомСайте", , ЭтотОбъект, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс ); @@ -303,14 +294,31 @@ УстановитьСтатусЗагрузки(НСтр("ru = 'Передача файлов адресных сведений на сервер приложения.'")); ПереданныеФайлы = Новый Массив; - Попытка - Если Не ПоместитьФайлы( , ПереданныеФайлы, Путь + "*.*", Ложь, ЭтотОбъект.УникальныйИдентификатор) Тогда - ПереданныеФайлы = ""; - КонецЕсли; - Исключение - // Получаем строковое описание ошибки - ПереданныеФайлы = ЗаписьИнформацииОбОшибке( ИнформацияОбОшибке() ); - КонецПопытки; + + ФайлыДляПередачи = Новый Массив; + Для Каждого Файл Из НайтиФайлы(Путь, ?(ЭтоLinuxКлиент, "*.[Dd][Bb][Ff]", "*.dbf")) Цикл + ФайлыДляПередачи.Добавить( Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя) ); + КонецЦикла; + Если ФайлыДляПередачи.Количество() = 0 Тогда + Для Каждого Файл Из НайтиФайлы(Путь, ?(ЭтоLinuxКлиент, "*.[Zz][Ii][Pp]", "*.zip")) Цикл + ФайлыДляПередачи.Добавить( Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя) ); + КонецЦикла; + КонецЕсли; + + Если ФайлыДляПередачи.Количество() = 0 Тогда + ПереданныеФайлы = НСтр("ru = 'Не найдено файлов для передачи на сервер.'"); + Иначе + Попытка + Если Не ПоместитьФайлы(ФайлыДляПередачи , ПереданныеФайлы, , Ложь, ЭтотОбъект.УникальныйИдентификатор) Тогда + ПереданныеФайлы = ""; + КонецЕсли; + Исключение + // Получаем строковое описание ошибки + ИнформацияОшибки = ИнформацияОбОшибке(); + ЗаписьИнформацииОбОшибке( ПодробноеПредставлениеОшибки(ИнформацияОшибки) ); + ПереданныеФайлы = КраткоеПредставлениеОшибки(ИнформацияОшибки) + КонецПопытки; + КонецЕсли; Если ТипЗнч(ПереданныеФайлы)<>Тип("Массив") Тогда Текст = Новый ФорматированнаяСтрока( @@ -340,6 +348,8 @@ АдресХранилища = Результат.АдресХранилища; ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПараметрыОбработчикаОжидания.МаксимальныйИнтервал = 5; + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); КонецЕсли; @@ -354,12 +364,11 @@ КонецФункции &НаСервере -Функция ЗаписьИнформацииОбОшибке(Знач Информация) +Процедура ЗаписьИнформацииОбОшибке(Знач ПодробноеПредставление) ЗаписьЖурналаРегистрации(АдресныйКлассификатор.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , ПодробноеПредставлениеОшибки(Информация)); - - Возврат КраткоеПредставлениеОшибки(Информация); -КонецФункции + УровеньЖурналаРегистрации.Ошибка, , ПодробноеПредставление + ); +КонецПроцедуры &НаКлиенте Процедура ЗагрузитьФайлыКЛАДРДискИТС(Знач ОбъектыЗагрузки) @@ -372,6 +381,7 @@ КаталогИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + АдресныйКлассификаторКлиент.ПутьККаталогуСДаннымиКЛАДРНаДискеИТС(ДискИТС); + Для Каждого Файл Из НайтиФайлы(КаталогИТС, "*.exe", Ложь) Цикл Команда = """" + Файл.ПолноеИмя + """ -s -d """ + КаталогКлиента + """"; ЗапуститьПриложение(Команда, КаталогКлиента, Истина); @@ -383,7 +393,9 @@ &НаКлиенте Процедура ЗагрузитьФайлыКЛАДРДиск(Знач ОбъектыЗагрузки) + ЗагрузитьФайлыКЛАДР(ПутьКФайламДанныхНаДиске, ОбъектыЗагрузки, 3) + КонецПроцедуры &НаКлиенте @@ -441,8 +453,30 @@ УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Устанавливаем пометку только видимым элементам +// +&НаКлиенте +Процедура УстановитьПометкиСпискаРегионов(Знач Пометка) + + Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл + ИдентификаторСтроки = ЭлементАдресныйОбъект.ПолучитьИдентификатор(); + Если Элементы.ТаблицаАдресныхОбъектов.ДанныеСтроки(ИдентификаторСтроки) <> Неопределено Тогда + // Строка видимая + ЭлементАдресныйОбъект.Пометка = Пометка; + КонецЕсли; + КонецЦикла; + + Если Не Пометка Тогда + // Обязательные должны быть помечены всегда + ОтметитьОбязательные(ЭтотОбъект); + КонецЕсли; + + УстановитьИзмененияВИнтерфейсе(); +КонецПроцедуры &НаКлиенте Процедура ПерейтиНаСтраницуВыбораИсточника() @@ -450,18 +484,6 @@ УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры -&НаСервере -Функция ПроверитьОшибкуЗагрузкиДляОС() - - ИнформацияОСервере = Новый СистемнаяИнформация; - Если ИнформацияОСервере.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - &НаКлиенте Процедура УстановитьДоступностьКнопокПриЗагрузке(Флаг = Истина) @@ -705,6 +727,8 @@ Возврат КоличествоОтмеченныхАдресныхОбъектов; + Возврат НСтр("ru = '<не выбрано>'"); + КонецФункции // В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя @@ -715,7 +739,7 @@ ИсточникДанныхДляЗагрузкиВыбран = ИсточникДанныхДляЗагрузкиВыбран(); ВыбраноРегионовДляЗагрузки = КоличествоОтмеченныхАдресныхОбъектов(); - Элементы.Далее.Заголовок = НСтр("ru = 'Далее >'"); + ЗаголовокДалее = НСтр("ru = 'Далее >'"); Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборАдресныхОбъектов Тогда Элементы.Назад.Видимость = Ложь; @@ -742,16 +766,17 @@ Элементы.Назад.Доступность = Истина; Элементы.Далее.Доступность = Истина; - Элементы.Далее.Заголовок = НСтр("ru = 'Загрузить'"); + ЗаголовокДалее = НСтр("ru = 'Загрузить'"); ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаУспех Тогда Элементы.Назад.Видимость = Ложь; Элементы.Далее.Видимость = Истина; Элементы.Далее.Доступность = Истина; Элементы.Отмена.Видимость = Ложь; - Элементы.Далее.Заголовок = НСтр("ru = 'Закрыть'"); + ЗаголовокДалее = НСтр("ru = 'Закрыть'"); КонецЕсли; + Элементы.Далее.Заголовок = ЗаголовокДалее; КонецПроцедуры &НаКлиенте @@ -815,3 +840,5 @@ Возврат Новый Структура("КодПользователя, Пароль", КодПользователя, Пароль); КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form index b58e8639b..75e6bad92 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -37,6 +37,10 @@ <dataPath xsi:type="form:DataPath"> <segments>АдресныеОбъекты.Пометка</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПометкаПриИзменении</name> + </handlers> <extendedTooltip> <name>ПометкаExtendedTooltip</name> <id>25</id> @@ -249,10 +253,10 @@ </handlers> <searchStringAddition> <name>АдресныеОбъектыСтрокаПоиска</name> - <id>27</id> + <id>35</id> <extendedTooltip> <name>АдресныеОбъектыСтрокаПоискаРасширеннаяПодсказка</name> - <id>29</id> + <id>37</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -262,7 +266,7 @@ </extendedTooltip> <contextMenu> <name>АдресныеОбъектыСтрокаПоискаКонтекстноеМеню</name> - <id>28</id> + <id>36</id> <autoFill>true</autoFill> </contextMenu> <source>АдресныеОбъекты</source> @@ -272,10 +276,10 @@ </searchStringAddition> <viewStatusAddition> <name>АдресныеОбъектыСостояниеПросмотра</name> - <id>30</id> + <id>38</id> <extendedTooltip> <name>АдресныеОбъектыСостояниеПросмотраРасширеннаяПодсказка</name> - <id>32</id> + <id>40</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -285,7 +289,7 @@ </extendedTooltip> <contextMenu> <name>АдресныеОбъектыСостояниеПросмотраКонтекстноеМеню</name> - <id>31</id> + <id>39</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -296,10 +300,10 @@ </viewStatusAddition> <searchControlAddition> <name>АдресныеОбъектыУправлениеПоиском</name> - <id>33</id> + <id>41</id> <extendedTooltip> <name>АдресныеОбъектыУправлениеПоискомРасширеннаяПодсказка</name> - <id>35</id> + <id>43</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -309,7 +313,7 @@ </extendedTooltip> <contextMenu> <name>АдресныеОбъектыУправлениеПоискомКонтекстноеМеню</name> - <id>34</id> + <id>42</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -359,6 +363,54 @@ <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> + <items xsi:type="form:FormField"> + <name>КоличествоВыбраных</name> + <id>32</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>КоличествоВыбранных</segments> + </dataPath> + <extendedTooltip> + <name>КоличествоВыбраныхРасширеннаяПодсказка</name> + <id>34</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КоличествоВыбраныхКонтекстноеМеню</name> + <id>33</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <horizontalAlign>Left</horizontalAlign> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <format> + <key>ru</key> + <value>ЧН=-</value> + </format> + <font xsi:type="core:FontRef"> + <font>System.DefaultGUIFont</font> + <bold>true</bold> + <italic>false</italic> + <underline>false</underline> + <strikeout>false</strikeout> + </font> + </extInfo> + </items> <commandBarLocation>Bottom</commandBarLocation> <showCommandBar>true</showCommandBar> <autoCommandBar> @@ -447,6 +499,10 @@ </items> <horizontalAlign>Right</horizontalAlign> </autoCommandBar> + <handlers> + <event>OnOpen</event> + <name>ПриОткрытии</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -514,6 +570,26 @@ </edit> </columns> </attributes> + <attributes> + <name>КоличествоВыбранных</name> + <title> + <key>ru</key> + <value>Выбрано регионов для очистки</value> + + 2 + + Number + + 3 + + + + true + + + true + + ВыделитьВсе diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html index 4a58a06fb..3c4c87697 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.16470"></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.16476"></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 e4d0f7e86..897739386 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы // Обработчик события "при создании на сервере" формы // Заполняет таблицу по макету @@ -15,32 +15,47 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КоличествоВыбранных = КоличествоВыбранныхРегионов(); + +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы // Обработчик события "выбор" элемента формы АдресныеОбъекты // Инвертирует флаг выбора адресного объекта // &НаКлиенте Процедура АдресныеОбъектыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Элемент.ТекущиеДанные.Пометка = НЕ Элемент.ТекущиеДанные.Пометка; + + Элемент.ТекущиеДанные.Пометка = Не Элемент.ТекущиеДанные.Пометка; + КоличествоВыбранных = КоличествоВыбранныхРегионов(); + КонецПроцедуры +&НаКлиенте +Процедура ПометкаПриИзменении(Элемент) + + КоличествоВыбранных = КоличествоВыбранныхРегионов(); + +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы // Обработчик события нажатия на кнопку командной панели // элемента управления АдресныеОбъекты. // Устанавливает флаг выбора всем адресным объектам в списке // &НаКлиенте -Процедура ВыделитьВсеВыполнить() +Процедура ВыделитьВсеВыполнить(Команда) - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъекты Цикл - ЭлементАдресныйОбъект.Пометка = Истина; - КонецЦикла; + УстановитьПометкиСпискаРегионов(Истина); КонецПроцедуры @@ -49,11 +64,9 @@ // Снимает флаг выбора у всех адресных объектов в списке // &НаКлиенте -Процедура ОтменитьВыделитьВсеВыполнить() +Процедура ОтменитьВыделитьВсеВыполнить(Команда) - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъекты Цикл - ЭлементАдресныйОбъект.Пометка = Ложь; - КонецЦикла; + УстановитьПометкиСпискаРегионов(Ложь); КонецПроцедуры @@ -62,7 +75,7 @@ // очистки адресных сведений. // &НаКлиенте -Процедура ОчиститьВыполнить() +Процедура ОчиститьВыполнить(Команда) ОчиститьСообщения(); @@ -106,8 +119,33 @@ Закрыть(Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Устанавливаем пометку только видимым элементам +// +&НаКлиенте +Процедура УстановитьПометкиСпискаРегионов(Знач Пометка) + + Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъекты Цикл + ИдентификаторСтроки = ЭлементАдресныйОбъект.ПолучитьИдентификатор(); + Если Элементы.АдресныеОбъекты.ДанныеСтроки(ИдентификаторСтроки) <> Неопределено Тогда + // Строка видимая + ЭлементАдресныйОбъект.Пометка = Пометка; + КонецЕсли; + КонецЦикла; + + КоличествоВыбранных = КоличествоВыбранныхРегионов(); +КонецПроцедуры + +&НаКлиенте +Функция КоличествоВыбранныхРегионов(); + + Возврат АдресныеОбъекты.НайтиСтроки( Новый Структура("Пометка", Истина) ).Количество(); + +КонецФункции + // Заполняет переданную таблицу значений по значениям таблицы адресных объектов. // Выбирается код, наименование и сокращение типа объекта. @@ -164,3 +202,5 @@ АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form index 3e4f6ca27..5e9591d45 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form @@ -18,11 +18,15 @@ <excludedCommands>Create</excludedCommands> <excludedCommands>Delete</excludedCommands> <items xsi:type="form:FormGroup"> - <name>Группа</name> + <name>ГруппаАдрес</name> <id>21</id> <items xsi:type="form:FormField"> <name>Актуальность</name> <id>38</id> + <title> + <key>ru</key> + <value>Актуальность</value> + true true @@ -69,6 +73,10 @@ Наименование 17 + + <key>ru</key> + <value>Название</value> + true true @@ -115,7 +123,7 @@ 19 <key>ru</key> - <value>Сокр.</value> + <value>Сокращение</value> true true @@ -164,8 +172,13 @@ true + + ru + Адрес + + true - ГруппаExtendedTooltip + ГруппаАдресРасширеннаяПодсказка 56 Label true @@ -181,6 +194,47 @@ true + + Дополнительно + 68 + + <key>ru</key> + <value>Индекс, альтернативные названия</value> + + true + true + + true + + + Список.Дополнительно + + + ДополнительноРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ДополнительноКонтекстноеМеню + 69 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + СписокКоманднаяПанель 16 @@ -272,12 +326,8 @@ <key>ru</key> - <value>Список группа найти</value> + <value>Поиск в списке</value> - - ru - Список группа найти - СписокГруппаНайтиExtendedTooltip 46 @@ -317,6 +367,33 @@ Auto InAdditionalSubmenu
            + + СписокВыводитьАльтернативныеНазвания + 71 + true + true + + true + + + СписокВыводитьАльтернативныеНазванияРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Command.ВыводитьАльтернативныеНазвания + Normal + Auto + true + true + UserCmds + true + Auto + СписокГруппаНастройки 30 @@ -379,12 +456,8 @@ <key>ru</key> - <value>Список группа настройки</value> + <value>Настройки списка</value> - - ru - Список группа настройки - СписокГруппаНастройкиExtendedTooltip 50 @@ -461,10 +534,10 @@ СписокСтрокаПоиска - 60 + 73 СписокСтрокаПоискаРасширеннаяПодсказка - 62 + 75 Label true true @@ -474,7 +547,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 61 + 74 true Список @@ -484,10 +557,10 @@ СписокСостояниеПросмотра - 63 + 76 СписокСостояниеПросмотраРасширеннаяПодсказка - 65 + 78 Label true true @@ -497,7 +570,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 64 + 77 true ViewStatusAddition @@ -508,10 +581,10 @@ СписокУправлениеПоиском - 66 + 79 СписокУправлениеПоискомРасширеннаяПодсказка - 68 + 81 Label true true @@ -521,7 +594,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 67 + 80 true SearchControlAddition @@ -688,6 +761,7 @@ true true false + false Auto true true @@ -725,7 +799,6 @@ Abort Cancel Close - CustomizeForm Ignore No OK @@ -734,6 +807,8 @@ SaveValues Yes LockOwner + Use + UseList true true Vertical @@ -755,6 +830,9 @@ true + + Список.Дополнительно + Список.ИндексКартинкиАктуальности @@ -784,7 +862,26 @@ РегистрСведенийАдресныйКлассификатор.ПризнакАктуальности, ВЫБОР - КОГДА РегистрСведенийАдресныйКлассификатор.ПризнакАктуальности>0 + КОГДА РегистрСведенийАдресныйКлассификатор.Индекс ПОДОБНО "%[^ ]%" + // Индекс заполнен + ТОГДА РегистрСведенийАдресныйКлассификатор.Индекс + ИНАЧЕ "" + КОНЕЦ + + + ВЫБОР + КОГДА РегистрСведенийАдресныйКлассификатор.АльтернативныеНазвания ПОДОБНО "%[^ ]%" ТОГДА + // Есть дополнительное наименование + ВЫБОР + КОГДА РегистрСведенийАдресныйКлассификатор.Индекс ПОДОБНО "%[^ ]%" ТОГДА ", " + ИНАЧЕ "" + КОНЕЦ + + РегистрСведенийАдресныйКлассификатор.АльтернативныеНазвания + ИНАЧЕ + "" + КОНЕЦ КАК Дополнительно, + + ВЫБОР + КОГДА РегистрСведенийАдресныйКлассификатор.ПризнакАктуальности > 0 ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ИндексКартинкиАктуальности @@ -794,7 +891,6 @@ true true true - true true @@ -852,6 +948,23 @@ true + + ВыводитьАльтернативныеНазвания + + <key>ru</key> + <value>Выводить альтернативные названия</value> + + 4 + + Boolean + + + true + + + true + + СкрыватьНеактуальныеАдреса @@ -874,6 +987,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыводитьАльтернативныеНазвания</name> + <title> + <key>ru</key> + <value>Альтернативные названия</value> + + 2 + + ru + Выводить альтернативные названия + + + true + + + + ВыводитьАльтернативныеНазвания + + + Auto + Auto + Регион diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl index 5eabacb1d..7c3704f62 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl @@ -1,15 +1,14 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - УстановитьЗаголовокФормы(Параметры.Уровень); - // Анализируем доп. параметры Если ЗначениеЗаполнено(Параметры.КодКлассификатораНаселенногоПункта) Тогда СтруктураПараметров = Новый Структура; @@ -17,11 +16,13 @@ ЗаполнитьЗначенияСвойств(Параметры, СтруктураПараметров, , "Улица"); КонецЕсли; - Если ПустаяСтрока(Параметры.Регион) и Параметры.Уровень > 1 Тогда + Если ПустаяСтрока(Параметры.Регион) И Параметры.Уровень > 1 Тогда Параметры.Уровень = 0; КонецЕсли; Уровень = Параметры.Уровень; + УстановитьЗаголовокФормы(Параметры.Уровень); + // Переданный параметр скрытия адресов перевешивает настройки, эта же переменная отвечает за режим работы ИспользоватьСохраненныеНастройки = ТипЗнч(Параметры.СкрыватьНеактуальныеАдреса)<>Тип("Булево"); @@ -34,10 +35,14 @@ // Команда переключения Элементы.СкрыватьНеактуальныеАдреса.Видимость = ИспользоватьСохраненныеНастройки; + Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; // Колонка неактуальной картинки Элементы.Актуальность.Видимость = Не ИспользоватьСохраненныеНастройки; + // Колонки альтернативных названий + УстановитьВидимостьАльтернативныхНазваний(Элементы, ВыводитьАльтернативныеНазвания); + // Установим отбор по входным параметрам Для Каждого КлючЗначение Из ПолучитьОграниченияПоУровню(Параметры.Уровень) Цикл ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, КлючЗначение.Ключ, КлючЗначение.Значение); @@ -47,20 +52,54 @@ // Установим текущую строку Поля = ПолучитьПоляПоУровню(Параметры.Уровень + 1); СтруктураОтбора = АдресныйКлассификатор.ВернутьСтруктуруАдресногоКлассификатораПоАдреснымЭлементам( - Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица); - Если СтруктураОтбора.ТипАдресногоЭлемента = Параметры.Уровень Тогда - Параметры.ТекущаяСтрока = РегистрыСведений.АдресныйКлассификатор.СоздатьКлючЗаписи(СтруктураОтбора); + Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица + ); + + // Уточним по коду + КодТекущейСтроки = Неопределено; + Если Уровень = 1 И Параметры.Свойство("РегионКодКлассификатора") Тогда + КодТекущейСтроки = Параметры.РегионКодКлассификатора; + + ИначеЕсли Уровень = 2 И Параметры.Свойство("РайонКодКлассификатора") Тогда + КодТекущейСтроки = Параметры.РайонКодКлассификатора; + + ИначеЕсли Уровень = 3 И Параметры.Свойство("ГородКодКлассификатора") Тогда + КодТекущейСтроки = Параметры.ГородКодКлассификатора; + + ИначеЕсли Уровень = 4 И Параметры.Свойство("НаселенныйПунктКодКлассификатора") Тогда + КодТекущейСтроки = Параметры.НаселенныйПунктКодКлассификатора; + + ИначеЕсли Уровень = 5 И Параметры.Свойство("УлицаКодКлассификатора") Тогда + КодТекущейСтроки = Параметры.УлицаКодКлассификатора; + КонецЕсли; + Если СтруктураОтбора.ТипАдресногоЭлемента = Параметры.Уровень Тогда + Если КодТекущейСтроки = Неопределено Тогда + Параметры.ТекущаяСтрока = РегистрыСведений.АдресныйКлассификатор.СоздатьКлючЗаписи(СтруктураОтбора) + Иначе + Параметры.ТекущаяСтрока = КлючЗаписиПоКодуКлассификатора(КодТекущейСтроки); + КонецЕсли; + КонецЕсли; + + // Для автосохранения настроек + СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; + + Если Уровень = 0 Тогда + // Родитель - уровень выбора неопределен, выбирать нечего + Отказ = Истина; + Возврат; + КонецЕсли; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -78,6 +117,10 @@ КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиКомандФормы + &НаКлиенте Процедура СкрыватьНеактуальныеАдреса(Команда) Если ИспользоватьСохраненныеНастройки Тогда @@ -85,14 +128,32 @@ Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, - "ПризнакАктуальности", 0, ВидСравненияКомпоновкиДанных.Равно, "Признак актуальности", СкрыватьНеактуальныеАдреса); + "ПризнакАктуальности", 0, ВидСравненияКомпоновкиДанных.Равно, НСтр("ru = 'Признак актуальности'"), СкрыватьНеактуальныеАдреса); ЭтотОбъект.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ВыводитьАльтернативныеНазвания(Команда) + + ВыводитьАльтернативныеНазвания = Не ВыводитьАльтернативныеНазвания; + УстановитьВидимостьАльтернативныхНазваний(Элементы, ВыводитьАльтернативныеНазвания); + +КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьВидимостьАльтернативныхНазваний(Знач ЭлементыФормы, ВыводитьАльтернативныеНазвания) + + ЭлементыФормы.СписокВыводитьАльтернативныеНазвания.Пометка = ВыводитьАльтернативныеНазвания; + ЭлементыФормы.Дополнительно.Видимость = ВыводитьАльтернативныеНазвания; + + // Видимость шапки в зависимости от состава колонок + ЭлементыФормы.Список.Шапка = ЭлементыФормы.Дополнительно.Видимость И ЭлементыФормы.ГруппаАдрес.Видимость; +КонецПроцедуры &НаКлиенте Процедура ОсуществитьВыбор() @@ -159,32 +220,41 @@ КонецФункции &НаСервере -Функция ПолучитьОграниченияПоУровню(Уровень) +Функция ПолучитьОграниченияПоУровню(УровеньОбъекта, Знач КодКлассификатораНаселенногоПункта = Неопределено) - Если ЗначениеЗаполнено(Параметры.КодКлассификатораНаселенногоПункта) Тогда - Ограничения = Новый Структура("ТипАдресногоЭлемента", 5); - - // Дом, Признак актуальности, Улица - ПолныйКод = Цел(Параметры.КодКлассификатораНаселенногоПункта/(10000 * 100 * 10000)); - - // Населенный пункт - Ограничения.Вставить("КодНаселенногоПунктаВКоде", ПолныйКод % 1000); - ПолныйКод = Цел(ПолныйКод/1000); - - // Город - Ограничения.Вставить("КодГородаВКоде", ПолныйКод % 1000); - ПолныйКод = Цел(ПолныйКод/1000); - - // Район - Ограничения.Вставить("КодРайонаВКоде", ПолныйКод % 1000); - ПолныйКод = Цел(ПолныйКод/1000); - - // Регион - Ограничения.Вставить("КодАдресногоОбъектаВКоде", ПолныйКод); + Если КодКлассификатораНаселенногоПункта = Неопределено Тогда + КодКлассификатораНаселенногоПункта = Параметры.КодКлассификатораНаселенногоПункта; + КонецЕсли; + + Если ЗначениеЗаполнено(КодКлассификатораНаселенногоПункта) Тогда + // Выбор улицы + Ограничения = ИзмеренияНаселенногоПункта(КодКлассификатораНаселенногоПункта); + Ограничения.Вставить("ТипАдресногоЭлемента", 5); Иначе - Поля = ПолучитьПоляПоУровню(Уровень); + // Опираемся на глобально доступные параметры - наименования частей адреса и уровень + Поля = ПолучитьПоляПоУровню(УровеньОбъекта); Ограничения = АдресныйКлассификатор.ВернутьСтруктуруОграниченийПоРодителю( - Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица, 0, Уровень); + Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица, 0, УровеньОбъекта + ); + + // Уточняем коды по параметрам + ТекущийКод = Неопределено; + Если Ограничения.Свойство("КодАдресногоОбъектаВКоде") И Параметры.Свойство("РегионКодКлассификатора", ТекущийКод) И ЗначениеЗаполнено(ТекущийКод) Тогда + Ограничения.КодАдресногоОбъектаВКоде = ИзмеренияНаселенногоПункта(ТекущийКод).КодАдресногоОбъектаВКоде; + КонецЕсли; + ТекущийКод = Неопределено; + Если Ограничения.Свойство("КодРайонаВКоде") И Параметры.Свойство("РайонКодКлассификатора", ТекущийКод) И ЗначениеЗаполнено(ТекущийКод) Тогда + Ограничения.КодРайонаВКоде = ИзмеренияНаселенногоПункта(ТекущийКод).КодРайонаВКоде; + КонецЕсли; + ТекущийКод = Неопределено; + Если Ограничения.Свойство("КодГородаВКоде") И Параметры.Свойство("ГородКодКлассификатора", ТекущийКод) И ЗначениеЗаполнено(ТекущийКод) Тогда + Ограничения.КодГородаВКоде = ИзмеренияНаселенногоПункта(ТекущийКод).КодГородаВКоде; + КонецЕсли; + ТекущийКод = Неопределено; + Если Ограничения.Свойство("КодНаселенногоПунктаВКоде") И Параметры.Свойство("НаселенныйПунктКодКлассификатора", ТекущийКод) И ТекущийКод <> Неопределено Тогда + Ограничения.КодНаселенногоПунктаВКоде = ИзмеренияНаселенногоПункта(ТекущийКод).КодНаселенногоПунктаВКоде; + КонецЕсли; + КонецЕсли; Если СкрыватьНеактуальныеАдреса Тогда @@ -192,6 +262,32 @@ КонецЕсли; Возврат Ограничения; + +КонецФункции + +&НаСервереБезКонтекста +Функция ИзмеренияНаселенногоПункта(Знач КодОбъекта) + Результат = Новый Структура; + + // Дом, Признак актуальности, Улица - пропускаем + ПолныйКод = Цел(КодОбъекта/(10000 * 100 * 10000)); + + // Населенный пункт + Результат.Вставить("КодНаселенногоПунктаВКоде", ПолныйКод % 1000); + ПолныйКод = Цел(ПолныйКод/1000); + + // Город + Результат.Вставить("КодГородаВКоде", ПолныйКод % 1000); + ПолныйКод = Цел(ПолныйКод/1000); + + // Район + Результат.Вставить("КодРайонаВКоде", ПолныйКод % 1000); + ПолныйКод = Цел(ПолныйКод/1000); + + // Регион + Результат.Вставить("КодАдресногоОбъектаВКоде", ПолныйКод); + + Возврат Результат; КонецФункции &НаСервере @@ -227,7 +323,7 @@ Результат.Вставить("ПолноеНаименование", Результат.Представление); // Структура адреса - СтруктураАдреса = АдресныйКлассификатор.ПолучитьСтруктуруАдреса(Результат.Код); + СтруктураАдреса = АдресныйКлассификатор.СтруктураАдреса(Результат.Код); Если ИспользоватьСохраненныеНастройки Тогда СтруктураАдреса.Вставить("СкрыватьНеактуальныеАдреса", @@ -287,8 +383,8 @@ КонецЕсли; // Исправляем индекс - НовыйИндекс = АдресныйКлассификатор.ПолучитьИндекс(Регион, - Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + НовыйИндекс = АдресныйКлассификатор.ИндексАдреса(Регион, + Район, Город, НаселенныйПункт, Улица, Дом, Корпус); Если Не ПустаяСтрока(НовыйИндекс) Тогда Индекс = НовыйИндекс; @@ -311,6 +407,7 @@ СтруктураПроверки.Вставить("СтруктураАдреса", СтруктураАдреса); Возврат СтруктураПроверки; + КонецФункции &НаСервереБезКонтекста @@ -323,7 +420,7 @@ // Разбиваем регион на наименование и сокращение АдресноеСокращение = ""; - НаименованиеРегиона = АдресныйКлассификатор.ПолучитьИмяИАдресноеСокращение(Регион, АдресноеСокращение); + НаименованиеРегиона = АдресныйКлассификатор.ИмяИАдресноеСокращение(Регион, АдресноеСокращение); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 @@ -358,3 +455,51 @@ КонецЕсли; КонецФункции + +&НаСервереБезКонтекста +Функция КлючЗаписиПоКодуКлассификатора(Знач Код) + + СтрокаИзмерений = "ТипАдресногоЭлемента, КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, Код"; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | " + СтрокаИзмерений + " + |ИЗ + | РегистрСведений.АдресныйКлассификатор + |ГДЕ + | Код = &Код + |"); + + Запрос.УстановитьПараметр("Код", Код); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗначенияИзмерений = Новый Структура(СтрокаИзмерений); + ЗаполнитьЗначенияСвойств(ЗначенияИзмерений, Выборка); + Возврат РегистрыСведений.АдресныйКлассификатор.СоздатьКлючЗаписи(ЗначенияИзмерений); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + ЭлементыУсловногоОформления = Список.УсловноеОформление.Элементы; + + ЭлементыУсловногоОформления.Очистить(); + + Элемент = ЭлементыУсловногоОформления.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Дополнительно"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дополнительно"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(128,128,128)); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html index fcdb769a6..e97ff8357 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html @@ -1,2 +1,2 @@ - +

            В адресном классификаторе хранятся адресные сведения, необходимые для работы в программе. Для всех регионов РФ имеется возможность загрузки адресных сведений с сайта поддержки пользователей системы "1С:Предприятие" фирмы "1С", с диска информационно-технологического сопровождения (1С:ИТС), а также из файлов, распространяемых ГНИВЦ ФНС РФ.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Templates/КлассификаторАдресныхОбъектовРоссии/Template.txt b/SSL/src/InformationRegisters/АдресныйКлассификатор/Templates/КлассификаторАдресныхОбъектовРоссии/Template.txt index b9a4326e2..cdda26c5b 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Templates/КлассификаторАдресныхОбъектовРоссии/Template.txt +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Templates/КлассификаторАдресныхОбъектовРоссии/Template.txt @@ -82,5 +82,7 @@ + +
            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 9f8290e5f..017aec797 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -74,7 +74,6 @@
            - Use Use Index @@ -97,7 +96,6 @@
            - Use Use @@ -123,7 +121,6 @@
            - Use Use @@ -148,7 +145,6 @@
            - Use Use @@ -174,7 +170,6 @@
            - Use Use Index diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index 185eaca8e..7636605aa 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -820,6 +820,24 @@ true + + ТекстСообщенияОбОшибке + + <key>ru</key> + <value>Текст сообщения об ошибке</value> + + 3 + + String + + + + true + + + true + + СформироватьОтчетПоИзменениям diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index 318bc4fa3..f326611ad 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокВерсийПриАктивизацииСтроки(Элемент) @@ -42,8 +43,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВерсий +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВерсий &НаКлиенте Процедура СписокВерсийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -52,8 +54,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОткрытьВерсиюОбъекта(Команда) @@ -65,21 +68,7 @@ &НаКлиенте Процедура ПерейтиНаВерсию(Команда) - Если Элементы.СписокВерсий.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ПерейтиНаВерсиюСервер(Ссылка, Элементы.СписокВерсий.ТекущиеДанные.НомерВерсии) Тогда - ОповеститьОбИзменении(Ссылка); - Если ВладелецФормы <> Неопределено Тогда - Попытка - ВладелецФормы.Прочитать(); - Исключение - // ничего не делаем, если у формы нет метода Прочитать() - КонецПопытки; - КонецЕсли; - ПоказатьПредупреждение(, НСтр("ru = 'Переход к старой версий выполнен успешно.'")); - КонецЕсли; + ВыполнитьПереходНаВыбраннуюВерсию(); КонецПроцедуры @@ -98,8 +87,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Функция СформироватьТаблицуВерсий(Ссылка) @@ -124,8 +114,54 @@ КонецФункции +&НаКлиенте +Процедура ВыполнитьПереходНаВыбраннуюВерсию(ОтменятьПроведение = Ложь) + + Если Элементы.СписокВерсий.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ПерейтиНаВерсиюСервер(Ссылка, Элементы.СписокВерсий.ТекущиеДанные.НомерВерсии, ОтменятьПроведение); + + Если Результат = "ОшибкаВосстановления" Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); + ИначеЕсли Результат = "ОшибкаПроведения" Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Переход на версию не был выполнен по причине: + |%1 + |Перейти на выбранную версию с отменой проведения?'"), + ТекстСообщенияОбОшибке); + + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьПереходНаВыбраннуюВерсиюВопросЗадан", ЭтотОбъект); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Перейти", НСтр("ru = 'Перейти'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); + Иначе //Результат = "ВосстановлениеВыполнено" + ОповеститьОбИзменении(Ссылка); + Если ВладелецФормы <> Неопределено Тогда + Попытка + ВладелецФормы.Прочитать(); + Исключение + // ничего не делаем, если у формы нет метода Прочитать() + КонецПопытки; + КонецЕсли; + ПоказатьПредупреждение(, НСтр("ru = 'Переход к старой версий выполнен успешно.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПереходНаВыбраннуюВерсиюВопросЗадан(РезультатВопроса, ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> "Перейти" Тогда + Возврат; + КонецЕсли; + + ВыполнитьПереходНаВыбраннуюВерсию(Истина); +КонецПроцедуры + &НаСервере -Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии) +Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ОтменаПроведения = Ложь) Информация = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Информация.ВерсияОбъекта); @@ -134,8 +170,7 @@ Объект = ВерсионированиеОбъектов.ВосстановитьОбъектПоXML(АдресВоВременномХранилище, ТекстСообщенияОбОшибке); Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); - Возврат Ложь; + Возврат "ОшибкаВосстановления"; КонецЕсли; Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", @@ -143,11 +178,34 @@ НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), Строка(НомерВерсии), Формат(Информация.ДатаВерсии, "ДЛФ=DT")) ); + + РежимЗаписи = РежимЗаписиДокумента.Запись; + Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) Тогда + Если Объект.Проведен И Не ОтменаПроведения Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + Иначе + РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; + КонецЕсли; + + Попытка + Объект.Записать(РежимЗаписи); + Исключение + ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат "ОшибкаПроведения" + КонецПопытки; + Иначе + Попытка + Объект.Записать(); + Исключение + ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат "ОшибкаВосстановления" + КонецПопытки; + КонецЕсли; + - Объект.Записать(); ЗначениеВРеквизитФормы(СформироватьТаблицуВерсий(Ссылка), "СписокВерсий"); - Возврат Истина; + Возврат "ВосстановлениеВыполнено"; КонецФункции @@ -197,3 +255,4 @@ Элементы.СписокВерсийПерейтиНаВерсию.Доступность = Элементы.ПерейтиНаВерсию.Доступность; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index c1a47eb49..38dd0f52d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -48,7 +48,6 @@ Иначе // используется переданная версия объекта - СериализованныйXML = ПолучитьИзВременногоХранилища(Параметры.АдресСериализованногоОбъекта); Если Параметры.ПоВерсии Тогда // используется отчет по одной версии @@ -59,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Основная функция модуля, отвечающая за формирование отчета. // В зависимости от числа версий в массиве вызывает либо функциональность @@ -1462,9 +1462,11 @@ ТипЗначения = ""; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда Если (УровеньЧтения = 2) Тогда // значение реквизита - - НовоеЗР.ЗначениеРеквизита = ?(ЗначениеЗаполнено(НовоеЗР.Тип), XMLЗначение(НовоеЗР.Тип, ЧтениеXML.Значение), ЧтениеXML.Значение); - + Попытка + НовоеЗР.ЗначениеРеквизита = ?(ЗначениеЗаполнено(НовоеЗР.Тип), XMLЗначение(НовоеЗР.Тип, ЧтениеXML.Значение), ЧтениеXML.Значение); + Исключение + НовоеЗР.ЗначениеРеквизита = ЧтениеXML.Значение; + КонецПопытки; ИначеЕсли (УровеньЧтения = 4) Тогда // значение реквизита ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1); @@ -1477,11 +1479,10 @@ И ОписаниеРТЧ.Тип.Типы().Количество() = 1 Тогда ТипЗначенияПоляТЧ = ОписаниеРТЧ.Тип.Типы()[0]; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЕсли; ПоследняяСтрока[ИмяПоляТЧ] = ?(ЗначениеЗаполнено(ТипЗначенияПоляТЧ), XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение), ЧтениеXML.Значение); - КонецЕсли; КонецЕсли; КонецЦикла; @@ -2137,3 +2138,4 @@ Возврат Ложь; КонецФункции +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl index 40f5a981c..f93ea32ff 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,7 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Отказ = Истина; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl index 404bb983e..2d6cd1fea 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,13 +1,14 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УдалитьЗаписи(Команда) @@ -20,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура УдалитьЗаписиЗавершение(РезультатВопроса, СписокЗаписей) Экспорт @@ -50,3 +52,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index f76a71326..13a22927d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура УдалитьИнформациюОбАвтореВерсии(Знач АвторВерсии) Экспорт @@ -43,4 +42,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo index 811534d38..d5d4bb6ae 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo @@ -64,7 +64,7 @@ </type> <toolTip> <key>ru</key> - <value>Версия этой конфигурации или родительской конфигурации на поддержке (служебный реквизит)</value> + <value>Версия основной конфигурации или библиотеки (служебный реквизит)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -83,6 +83,29 @@ <type> <types>ValueStorage</types> </type> + <toolTip> + <key>ru</key> + <value>Служебный реквизит</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="0c732569-a50f-4be3-a214-0843c6a3da47"> + <name>ЭтоОсновнаяКонфигурация</name> + <synonym> + <key>ru</key> + <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"/> <fullTextSearch>Use</fullTextSearch> @@ -103,7 +126,7 @@ </type> <toolTip> <key>ru</key> - <value>Имя этой конфигурации или родительской конфигурации на поддержке (служебный реквизит)</value> + <value>Имя конфигурации или библиотеки (служебный реквизит)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 00b034fbf..266dc08c4 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -21,3 +22,5 @@ ТолькоПросмотр = Ложь; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index cbec373e0..000000000 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,128 +0,0 @@ -<?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:decimal">0</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Стандартные значения доступа</v8:content> - </v8:item> - </dcscor:value> - </dcscor:item> - </appearance> - </item> - <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:decimal">1</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Обычные/внешние пользователи</v8:content> - </v8:item> - </dcscor:value> - </dcscor:item> - </appearance> - </item> - <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:decimal">2</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Обычные/внешние группы пользователей</v8:content> - </v8:item> - </dcscor:value> - </dcscor:item> - </appearance> - </item> - <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:decimal">3</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Группы исполнителей</v8:content> - </v8:item> - </dcscor:value> - </dcscor:item> - </appearance> - </item> - <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:decimal">4</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Текст</dcscor:parameter> - <dcscor:value xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Объекты авторизации</v8:content> - </v8:item> - </dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl index 5c28e71a7..5d70d539f 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -12,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +42,34 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ГруппаДанных.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ГруппаДанных"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Стандартные значения доступа'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Обычные/внешние пользователи'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Обычные/внешние группы пользователей'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Группы исполнителей'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Объекты авторизации'")); + +КонецПроцедуры &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -52,3 +81,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index a3d48a76d..a39f7aa88 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обновляет группировки пользователей для проверки разрешенных значений // по видам доступа Пользователи и ВнешниеПользователи. @@ -143,8 +142,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при изменении значений доступа. // @@ -1041,4 +1041,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ГруппыЗначенийДоступа.mdo b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ГруппыЗначенийДоступа.mdo index be6822b6b..0b715f121 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ГруппыЗначенийДоступа.mdo +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ГруппыЗначенийДоступа.mdo @@ -88,7 +88,7 @@ <toolTip> <key>ru</key> <value>Элемент справочника или другого объекта метаданных, который используется -в качестве группы значений доступа (Справочник ГруппыДоступаНоменклатуры).</value> +в качестве группы значений доступа (Справочник Группы доступа номенклатуры).</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl index 182bf9e36..924eb5550 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -28,8 +28,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоказыватьЗавершенныеПриИзменении(Элемент) @@ -38,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -61,8 +63,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПометкаУдаления(Команда) @@ -79,8 +82,9 @@ Новый Структура("БизнесПроцесс", Элементы.Список.ТекущиеДанные.БизнесПроцесс)); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) @@ -95,3 +99,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl index 98f783e1a..9df477dfb 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -8,8 +8,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -31,8 +32,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПометкаУдаления(Команда) @@ -50,3 +52,5 @@ Новый Структура("БизнесПроцесс", Элементы.Список.ТекущиеДанные.БизнесПроцесс)); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html index 978b615b9..2736ce548 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.16470"></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.16476"></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/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/ConditionalAppearance.dcssca deleted file mode 100644 index f52c9ff9a..000000000 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/ConditionalAppearance.dcssca +++ /dev/null @@ -1,108 +0,0 @@ -<?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="FilterItemGroup"> - <groupType>OrGroup</groupType> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ПользователиДатЗапрета.ПолноеПредставление</left> - <comparisonType>NotFilled</comparisonType> - </item> - <item xsi:type="FilterItemGroup"> - <groupType>AndGroup</groupType> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ПользователиДатЗапрета.Пользователь</left> - <comparisonType>NotInList</comparisonType> - <right xsi:type="dcscor:DesignTimeValue">Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей</right> - <right xsi:type="dcscor:DesignTimeValue">Перечисление.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз</right> - </item> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ПользователиДатЗапрета.БезДатыЗапрета</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </item> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ОтметкаНезаполненного</dcscor:parameter> - <dcscor:value xsi:type="xs:boolean">true</dcscor:value> - </dcscor:item> - </appearance> - </item> - <item> - <selection> - <item> - <field>ДатыЗапретаПолноеПредставление</field> - </item> - </selection> - <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ДатыЗапрета.ПолноеПредставление</left> - <comparisonType>NotFilled</comparisonType> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ОтметкаНезаполненного</dcscor:parameter> - <dcscor:value xsi:type="xs:boolean">true</dcscor:value> - </dcscor:item> - </appearance> - </item> - <item> - <selection> - <item> - <field>ДатыЗапретаДатаЗапрета</field> - </item> - </selection> - <filter> - <item xsi:type="FilterItemGroup"> - <groupType>OrGroup</groupType> - <item xsi:type="FilterItemGroup"> - <groupType>AndGroup</groupType> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ТекущийПользователь</left> - <comparisonType>NotInList</comparisonType> - <right xsi:type="dcscor:DesignTimeValue">Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей</right> - <right xsi:type="dcscor:DesignTimeValue">Перечисление.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз</right> - </item> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ДатыЗапрета.ЭтоРаздел</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ДатыЗапрета.БезДатыЗапрета</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </item> - <item xsi:type="FilterItemGroup"> - <groupType>AndGroup</groupType> - <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"> - <left xsi:type="dcscor:Field">ДатыЗапрета.БезДатыЗапрета</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </item> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ОтметкаНезаполненного</dcscor:parameter> - <dcscor:value xsi:type="xs:boolean">true</dcscor:value> - </dcscor:item> - </appearance> - </item> -</ConditionalAppearance> diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index a55d1fcb1..accd69e91 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -4020,7 +4020,7 @@ <key>ru</key> <value>Подобрать</value> - 5 + 2 ru Подобрать объекты раздела @@ -4042,7 +4042,7 @@ ru Обновить - 4 + 3 ru Обновить @@ -4068,7 +4068,7 @@ ru Подобрать - 6 + 4 ru Подобрать пользователей @@ -4090,7 +4090,7 @@ ru Даты запрета по разделам и объектам для пользователей - 2 + 5 ru Даты запрета изменения данных @@ -4117,7 +4117,7 @@ ru Разделы - 3 + 6 ru Разделы diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index bd4e2424f..082310110 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -1,11 +1,12 @@ &НаКлиенте Перем ПользователиПродолжитьДобавление; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -177,8 +178,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура УстановкаДатыЗапретаОчистка(Элемент, СтандартнаяОбработка) @@ -279,7 +281,6 @@ ПрочитатьДанныеПользователя(ЭтотОбъект, ВыбранноеЗначение, Данные); КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -329,9 +330,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Пользователи +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользователи &НаКлиенте Процедура ПользователиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -651,8 +652,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДатыЗапрета +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДатыЗапрета &НаКлиенте Процедура ДатыЗапретаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -1122,8 +1124,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПересчитатьДаты(Команда) @@ -1227,8 +1230,106 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиПолноеПредставление.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиДатЗапрета.ПолноеПредставление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиДатЗапрета.Пользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз); + ОтборЭлемента.ПравоеЗначение = СписокЗначений; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиДатЗапрета.БезДатыЗапрета"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатыЗапретаПолноеПредставление.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ПолноеПредставление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатыЗапретаДатаЗапрета.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТекущийПользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз); + ОтборЭлемента.ПравоеЗначение = СписокЗначений; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.БезДатыЗапрета"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.БезДатыЗапрета"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); + +КонецПроцедуры &НаКлиенте Процедура УстановкаДатыЗапретаОбработкаВыбораПродолжение(Ответ, ВыбранноеЗначение) Экспорт @@ -1265,7 +1366,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПользователиПередНачаломДобавленияЗавершение(Результат, Неопределен) Экспорт @@ -1304,7 +1404,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПользователиПередУдалениемПродолжение(Неопределен, ДополнительныеПараметры) Экспорт +Процедура ПользователиПередУдалениемПродолжение(Неопределен, ДополнительныеПараметры) ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные; @@ -1359,7 +1459,6 @@ КонецПроцедуры - &НаКлиенте Процедура ДатыЗапретаПередУдалениемРазделаПродолжение(Ответ, ДополнительныеПараметры) Экспорт @@ -1441,7 +1540,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПересчитатьДатыЗавершение(Ответ, Неопределен) Экспорт @@ -1470,7 +1568,6 @@ КонецПроцедуры - &НаСервере Функция ПересчитатьДатыНаСервере() @@ -1761,7 +1858,6 @@ &НаКлиентеНаСервереБезКонтекста Процедура ПрочитатьДанныеПользователя(Контекст, ТекущийСпособУказания = Неопределено, Данные = Неопределено) - Если Контекст.УстановкаДатыЗапрета = "НетЗапрета" Тогда РазблокироватьВсеЗаписи(Контекст); @@ -2161,7 +2257,6 @@ КонецФункции - &НаСервере Процедура ЗаблокироватьНаборЗаписейПользователя(Пользователь, ТекущаяСтрока = Неопределено) @@ -2262,7 +2357,6 @@ КонецФункции - &НаСервереБезКонтекста Процедура РазблокироватьВсеЗаписиНаСервере(ЗначенияКлючейЗаблокированныхЗаписей, ИдентификаторФормы) @@ -2409,7 +2503,6 @@ Контекст.УстановленныеБлокировки.Очистить(); КонецЕсли; - ЗначенияКлючаЗаписи = Новый Структура; ЗначенияКлючаЗаписи.Вставить("Раздел", Раздел); ЗначенияКлючаЗаписи.Вставить("Объект", Объект); @@ -2619,7 +2712,6 @@ КонецПроцедуры - &НаСервереБезКонтекста Процедура ЗаписатьДатуЗапретаСОписанием(Знач Раздел, Знач Объект, Знач Пользователь, Знач ДатаЗапрета, Знач ВнутреннееОписаниеДатыЗапрета, Знач Комментарий) @@ -2668,7 +2760,6 @@ КонецПроцедуры - &НаКлиенте Процедура ОбновитьНаличиеДатЗапретаТекущегоПользователя() @@ -2709,7 +2800,6 @@ КонецПроцедуры - &НаКлиенте Процедура ОбработчикОжиданияВыбратьПользователей() @@ -2798,7 +2888,6 @@ КонецПроцедуры - &НаСервереБезКонтекста Функция СформироватьДанныеВыбораПользователя(Знач Текст, Знач ВключаяГруппы = Истина, @@ -2811,7 +2900,6 @@ ВключаяВнешнихПользователей, БезПользователей); - КонецФункции &НаКлиенте @@ -4426,3 +4514,5 @@ Возврат НСтр("ru ='Выделенные строки не заполнены.'"); КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index 74f73bf3d..22d67d18c 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -44,8 +43,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Одинаковые обработчики событий форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета @@ -87,8 +87,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -102,8 +103,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура ОбщаяДатаЗапретаСОписаниемПриИзмененииДополнительно(Знач Контекст) @@ -263,3 +265,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 347f6b134..7e3d03c44 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -99,8 +98,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -109,8 +109,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ДатыЗапретаИзмененияДанных(Команда) @@ -127,3 +128,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index d8a66168d..cbb7273a8 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/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl deleted file mode 100644 index f12b3c4d5..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl +++ /dev/null @@ -1,7 +0,0 @@ -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Физлицо", ПараметрКоманды)); - ОткрытьФорму("РегистрСведений.ДокументыФизическихЛиц.Форма.ДокументыФизическогоЛица", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); - -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Attributes/Список/ExtInfo/ListSettings.dcss deleted file mode 100644 index 1f70b9a4a..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,21 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - - Period - Desc - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - Normal - 911b6018-f537-43e8-a417-da56b22f9aec - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Form.form b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Form.form deleted file mode 100644 index c4b188562..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Form.form +++ /dev/null @@ -1,390 +0,0 @@ - - - - Список - 1 - true - true - - true - - - Список - - true - false - None - - Представление - 6 - true - true - - true - - - Список.Представление - - - ПредставлениеExtendedTooltip - 16 - Label - true - true - - Left - - - - ПредставлениеКонтекстноеМеню - 7 - true - - LabelField - Enter - true - Left - true - - true - true - - - - Период - 10 - true - true - - true - - - Список.Period - - - ПериодExtendedTooltip - 17 - Label - true - true - - Left - - - - ПериодКонтекстноеМеню - 11 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - СписокКоманднаяПанель - 3 - Left - true - - - СписокСтрокаПоиска - 21 - - СписокСтрокаПоискаРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 22 - true - - Список - - true - - - - СписокСостояниеПросмотра - 24 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 25 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 27 - - СписокУправлениеПоискомРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 28 - true - - SearchControlAddition - Список - - true - - - - СписокExtendedTooltip - 15 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - true - - true - true - true - true - true - MultiRow -
            true
            - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - - Список.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - -
            - - ГруппаУдостоверениеЛичности - 14 - - НетУдостоверения - 12 - - <key>ru</key> - <value>Нет удостоверения</value> - - true - - true - - - НетУдостоверенияExtendedTooltip - 19 - Label - true - true - - Left - - - - НетУдостоверенияКонтекстноеМеню - 13 - true - - 2 - true - 1 - true - - - CommonPicture.Предупреждение32 - - Proportionally - - - - УдостоверениеЛичности - 8 - true - - true - - - УдостоверениеЛичности - - None - - УдостоверениеЛичностиExtendedTooltip - 20 - Label - true - true - - Left - - - - УдостоверениеЛичностиКонтекстноеМеню - 9 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - <key>ru</key> - <value>Удостоверение личности</value> - - - ru - Удостоверение личности - - - ГруппаУдостоверениеЛичностиExtendedTooltip - 18 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ФормаКоманднаяПанель - -1 - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Список - 1 - - DynamicList - - - true - - - true - -
            true
            - - InformationRegister.ДокументыФизическихЛиц - true - true - true - true - -
            - - УдостоверениеЛичности - - <key>ru</key> - <value>Удостоверение личности</value> - - 2 - - String - - - - true - - - true - - - - - - - -
            diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl deleted file mode 100644 index b42d6ff0e..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl +++ /dev/null @@ -1,42 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если Параметры.Отбор.Свойство("Физлицо") Тогда - Физлицо = Параметры.Отбор.Физлицо; - - УдостоверениеЛичности = РегистрыСведений.ДокументыФизическихЛиц.ДокументУдостоверяющийЛичностьФизлица(Физлицо); - - ЕстьУдостоверение = Не ПустаяСтрока(УдостоверениеЛичности); - - Элементы.УдостоверениеЛичности.Высота = ?(ЕстьУдостоверение, 2, 0); - УдостоверениеЛичности = ?(ЕстьУдостоверение, "Удостоверение личности: ", "") + УдостоверениеЛичности; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Физлицо", Физлицо); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ДокументыФизическихЛиц.Представление - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - |ГДЕ - | ДокументыФизическихЛиц.Физлицо = &Физлицо"; - ЕстьДокументы = Не Запрос.Выполнить().Пустой(); - - Если Не ЕстьУдостоверение И ЕстьДокументы Тогда - Элементы.НетУдостоверения.Видимость = Истина; - ТекстСообщения = НСтр("ru = 'Для физлица %1 не задан документ, удостоверяющий личность.'"); - УдостоверениеЛичности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Физлицо); - КонецЕсли; - - Элементы.УдостоверениеЛичности.Видимость = Не ПустаяСтрока(УдостоверениеЛичности); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Form.form deleted file mode 100644 index 5cced43fa..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Form.form +++ /dev/null @@ -1,517 +0,0 @@ - - - - Физлицо - 18 - true - true - - true - - - Запись.Физлицо - - - ФизлицоExtendedTooltip - 27 - Label - true - true - - Left - - - - ФизлицоКонтекстноеМеню - 19 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ВидДокумента - 5 - true - true - - true - - - Запись.ВидДокумента - - true - - OnChange - ВидДокументаПриИзменении - - - ВидДокументаExtendedTooltip - 28 - Label - true - true - - Left - - - - ВидДокументаКонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - Normal - - - - ГруппаСерияИНомер - 17 - - Серия - 7 - true - true - - true - - - Запись.Серия - - - СерияExtendedTooltip - 30 - Label - true - true - - Left - - - - СерияКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - Номер - 9 - true - true - - true - - - Запись.Номер - - - НомерExtendedTooltip - 31 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 10 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Серия и номер</value> - - - ru - Серия и номер - - false - - ГруппаСерияИНомерExtendedTooltip - 29 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаДатаВыдачиИСрокДействия - 20 - - ДатаВыдачи - 21 - true - true - - true - - - Запись.ДатаВыдачи - - - ДатаВыдачиExtendedTooltip - 33 - Label - true - true - - Left - - - - ДатаВыдачиКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СрокДействия - 23 - true - true - - true - - - Запись.СрокДействия - - - СрокДействияExtendedTooltip - 34 - Label - true - true - - Left - - - - СрокДействияКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дата выдачи и срок действия</value> - - - ru - Дата выдачи и срок действия - - - ГруппаДатаВыдачиИСрокДействияExtendedTooltip - 32 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - КемВыдан - 11 - true - true - - true - - - Запись.КемВыдан - - - КемВыданExtendedTooltip - 35 - Label - true - true - - Left - - - - КемВыданКонтекстноеМеню - 12 - true - - InputField - Enter - true - Left - true - - 35 - true - true - true - true - true - Normal - - - - КодПодразделения - 13 - true - true - - true - - - Запись.КодПодразделения - - - КодПодразделенияExtendedTooltip - 36 - Label - true - true - - Left - - - - КодПодразделенияКонтекстноеМеню - 14 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - Normal - - - - ЯвляетсяДокументомУдостоверяющимЛичность - 25 - true - true - - true - - - Запись.ЯвляетсяДокументомУдостоверяющимЛичность - - Right - - ЯвляетсяДокументомУдостоверяющимЛичностьExtendedTooltip - 37 - Label - true - true - - Left - - - - ЯвляетсяДокументомУдостоверяющимЛичностьКонтекстноеМеню - 26 - true - - CheckBoxField - Enter - true - Left - true - - - - Период - 1 - true - true - - true - - - Запись.Period - - - ПериодExtendedTooltip - 38 - Label - true - true - - Left - - - - ПериодКонтекстноеМеню - 2 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - Top - true - - ФормаКоманднаяПанель - -1 - Left - true - - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Запись - 1 - - InformationRegisterRecordManager.ДокументыФизическихЛиц - - - true - - - true - -
            true
            - true -
            - - - - - -
            diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl deleted file mode 100644 index 12dc37c8c..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl +++ /dev/null @@ -1,22 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура ВидДокументаПриИзменении(Элемент) - - Если ЯвляетсяУдостоверениемЛичности(Запись.Физлицо, Запись.ВидДокумента, Запись.Период) Тогда - Запись.ЯвляетсяДокументомУдостоверяющимЛичность = Истина; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервереБезКонтекста -Функция ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата) - - Возврат РегистрыСведений.ДокументыФизическихЛиц.ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата); - -КонецФункции - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss deleted file mode 100644 index 1f70b9a4a..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,21 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - - Period - Desc - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - Normal - 911b6018-f537-43e8-a417-da56b22f9aec - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Module.bsl deleted file mode 100644 index 8b1378917..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаСписка/Module.bsl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html deleted file mode 100644 index 94911e528..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html +++ /dev/null @@ -1,6 +0,0 @@ - -

            Для физического лица может потребоваться хранить информацию о его удостоверении личности.

            -

            При заполнении информации необходимо указать вид документа, удостоверяющего личность, его серию и номер, информацию о том, кем выдан документ и дату выдачи.

            -

            См. также:

            - \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl deleted file mode 100644 index 9f4169f8f..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl +++ /dev/null @@ -1,102 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Функция возвращает действующий на указанную дату документ, удостоверяющий личность -// -// Параметры -// Физлицо - физическое лицо, для которого необходимо получить документ -// Дата - дата, на которую необходимо получить документ -// -// Возвращаемое значение -// Представление - строка - представление документа, удостоверяющего личность -// -Функция ДокументУдостоверяющийЛичностьФизлица(Физлицо, Дата = Неопределено) Экспорт - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Физлицо", Физлицо); - Запрос.УстановитьПараметр("ДатаСреза", Дата); - - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ДокументыФизическихЛиц.Представление - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | МАКСИМУМ(ДокументыФизическихЛиц.Период) КАК Период, - | ДокументыФизическихЛиц.Физлицо КАК Физлицо - | ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - | ГДЕ - | ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность - | И ДокументыФизическихЛиц.Физлицо = &Физлицо - | " + ?(Дата <> Неопределено, "И ДокументыФизическихЛиц.Период <= &ДатаСреза", "") + " - | - | СГРУППИРОВАТЬ ПО - | ДокументыФизическихЛиц.Физлицо) КАК ДокументыСрез - | ПО ДокументыФизическихЛиц.Период = ДокументыСрез.Период - | И ДокументыФизическихЛиц.Физлицо = ДокументыСрез.Физлицо - | И (ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность)"; - Выборка = Запрос.Выполнить().Выбрать(); - - УдостоверениеЛичности = Новый Структура("Представление, ЕстьУдостоверение"); - - Если Выборка.Следующий() Тогда - Возврат Выборка.Представление; - КонецЕсли; - - Возврат ""; - -КонецФункции - -// Функция проверяет, является-ли указанный вид документа документом, удостоверяющим личность для этого физлица -// -// Параметры -// Физлицо - физическое лицо, для которого необходимо получить документ -// ВидДокумента - вид документа, удостоверяющего личность -// Дата - дата, на которую необходимо получить документ -// -// Возвращаемое значение -// Является - булево - является ли указанный вид документа документом, удостоверяющим личность -// -Функция ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата) Экспорт - - Если Физлицо.Пустая() Или ВидДокумента.Пустая() Или Не ЗначениеЗаполнено(Дата) Тогда - Возврат Ложь; - КонецЕсли; - - Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда - Возврат Истина; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Физлицо", Физлицо); - Запрос.УстановитьПараметр("ВидДокумента", ВидДокумента); - Запрос.УстановитьПараметр("ДатаСреза", Дата); - - Запрос.Текст = - "ВЫБРАТЬ - | ДокументыФизическихЛиц.ВидДокумента - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | МАКСИМУМ(ДокументыФизическихЛиц.Период) КАК Период, - | ДокументыФизическихЛиц.Физлицо КАК Физлицо - | ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - | ГДЕ - | ДокументыФизическихЛиц.Физлицо = &Физлицо - | И ДокументыФизическихЛиц.Период < &ДатаСреза - | И ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность - | - | СГРУППИРОВАТЬ ПО - | ДокументыФизическихЛиц.Физлицо) КАК ДокументыСрез - | ПО ДокументыФизическихЛиц.Физлицо = ДокументыСрез.Физлицо - | И ДокументыФизическихЛиц.Период = ДокументыСрез.Период - | И (ДокументыФизическихЛиц.ВидДокумента = &ВидДокумента)"; - Возврат Не Запрос.Выполнить().Пустой(); - -КонецФункции - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl deleted file mode 100644 index f0026a351..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl +++ /dev/null @@ -1,119 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ - -Процедура ПередЗаписью(Отказ, Замещение) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ТекстСерия = НСтр("ru = ', серия: %1'"); - ТекстНомер = НСтр("ru = ', № %1'"); - ТекстДатаВыдачи = НСтр("ru = ', выдан: %1 года'"); - ТекстСрокДействия = НСтр("ru = ', действует до: %1 года'"); - ТекстКодПодразделения = НСтр("ru = ', № подр. %1'"); - - Для Каждого Запись Из ЭтотОбъект Цикл - Если Запись.ВидДокумента.Пустая() Тогда - Запись.Представление = ""; - - Иначе - Запись.Представление = "" - + Запись.ВидДокумента - + ?(ЗначениеЗаполнено(Запись.Серия), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСерия, Запись.Серия), "") - + ?(ЗначениеЗаполнено(Запись.Номер), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНомер, Запись.Номер), "") - + ?(ЗначениеЗаполнено(Запись.ДатаВыдачи), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстДатаВыдачи, Формат(Запись.ДатаВыдачи,"ДФ='дд ММММ гггг'")), "") - + ?(ЗначениеЗаполнено(Запись.СрокДействия), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСрокДействия, Формат(Запись.СрокДействия,"ДФ='дд ММММ гггг'")), "") - + ?(ЗначениеЗаполнено(Запись.КемВыдан), ", " + Запись.КемВыдан, "") - + ?(ЗначениеЗаполнено(Запись.КодПодразделения) И Запись.ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстКодПодразделения, Запись.КодПодразделения), ""); - - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ, Замещение) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицаДокументов", Выгрузить(, "Физлицо, Период, ЯвляетсяДокументомУдостоверяющимЛичность")); - - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицаДокументов.Физлицо КАК Физлицо, - | ТаблицаДокументов.Период КАК Период - |ПОМЕСТИТЬ ВТ_Документы - |ИЗ - | &ТаблицаДокументов КАК ТаблицаДокументов - |ГДЕ - | ТаблицаДокументов.ЯвляетсяДокументомУдостоверяющимЛичность - | - |ИНДЕКСИРОВАТЬ ПО - | Физлицо, - | Период - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДокументыФизическихЛиц.Физлицо КАК Физлицо, - | ДокументыФизическихЛиц.Период КАК Период, - | КОЛИЧЕСТВО(ДокументыФизическихЛиц.Физлицо) КАК КоличествоДокументов - |ИЗ - | РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Документы КАК ДокументыСрез - | ПО ДокументыФизическихЛиц.Период = ДокументыСрез.Период - | И ДокументыФизическихЛиц.Физлицо = ДокументыСрез.Физлицо - | И (ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность) - | - |СГРУППИРОВАТЬ ПО - | ДокументыФизическихЛиц.Физлицо, - | ДокументыФизическихЛиц.Период - | - |ИМЕЮЩИЕ - | КОЛИЧЕСТВО(ДокументыФизическихЛиц.Физлицо) > 1"; - Выборка = Запрос.Выполнить().Выбрать(); - - ТекстСообщения = НСтр("ru = 'На %1 у физлица %2 уже введен документ, удостоверяющий личность.'"); - - Пока Выборка.Следующий() Цикл - Отказ = Истина; - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(Выборка.Период, "ДЛФ=D"), Выборка.Физлицо)); - КонецЦикла; - -КонецПроцедуры - -Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - - Для Каждого Запись Из ЭтотОбъект Цикл - СтруктураЗаписи = Новый Структура("Период, Физлицо, ВидДокумента"); - ЗаполнитьЗначенияСвойств(СтруктураЗаписи, Запись); - - КлючЗаписи = РегистрыСведений.ДокументыФизическихЛиц.СоздатьКлючЗаписи(СтруктураЗаписи); - - Если Не ПустаяСтрока(Запись.Серия) Тогда - ТекстОшибки = ""; - Отказ = Не ФизическиеЛицаКлиентСервер.СерияДокументаУказанаПравильно(Запись.ВидДокумента, Запись.Серия, ТекстОшибки) Или Отказ; - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючЗаписи, "Запись.Серия"); - КонецЕсли; - КонецЕсли; - - Если Не ПустаяСтрока(Запись.Номер) Тогда - ТекстОшибки = ""; - Отказ = Не ФизическиеЛицаКлиентСервер.НомерДокументаУказанПравильно(Запись.ВидДокумента, Запись.Номер, ТекстОшибки) Или Отказ; - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючЗаписи, "Запись.Номер"); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo deleted file mode 100644 index cdf114f1a..000000000 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - - - - - - - ДокументыФизическихЛиц - - ru - Документы физических лиц - - InformationRegister.ДокументыФизическихЛиц.Form.ФормаЗаписи - InformationRegister.ДокументыФизическихЛиц.Form.ФормаСписка - - Use - Active - - Use - - - - - Use - LineNumber - - Use - - - - - Use - Recorder - - Use - - - - - Use - Period - - ru - Запись действует с - - - ru - Дата, с которой действует запись об этом документе. - - - 0001-01-01T00:00:00 - - ShowError - Use - - - - Day - true - true - - - ru - - - Managed - - ru - Документ - - - ru - Документы - - - Серия - - ru - Серия - - - String - - 14 - - - - ru - Серия документа - - - - Use - Use - - - - Номер - - ru - Номер - - - String - - 14 - - - - ru - Номер документа - - - - Use - Use - - - - ДатаВыдачи - - ru - Дата выдачи - - - Date - - Date - - - - ru - Дата выдачи документа - - - - Use - Use - - - - СрокДействия - - ru - Срок действия - - - Date - - Date - - - - ru - Срок действия документа - - - - Use - Use - - - - КемВыдан - - ru - Кем выдан - - - String - - 200 - - - - ru - Кем выдан документ - - - - Use - Use - - - - КодПодразделения - - ru - Код подразделения - - - String - - 15 - - - - ru - Код подразделения документа - - - - Use - Use - - - - ЯвляетсяДокументомУдостоверяющимЛичность - - ru - Является документом, удостоверяющим личность - - - Boolean - - - ru - Признак того, что документ является удостоверением личности - - - - Use - Use - - - - Представление - - ru - Документ - - - String - - 500 - - - - ru - Представление документа - - true - - - Use - Use - - - - УдалитьВидДокумента - - ru - (не используется) Вид документа - - - CatalogRef.ВидыДокументовФизическихЛиц - - - ru - Вид документа удостоверяющего личность - - - - Use - Use - - Catalog.ВидыДокументовФизическихЛиц.EmptyRef - - - - Физлицо - - ru - Физ. лицо - - - CatalogRef.ФизическиеЛица - - - ru - Физическое лицо - - - - ShowError - true - Use - Use - true - - Catalog.ФизическиеЛица.EmptyRef - - true - true - - - ВидДокумента - - ru - Вид документа - - - CatalogRef.ВидыДокументовФизическихЛиц - - - ru - Вид документа физического лица - - - - ShowError - true - Use - Use - true - - true - - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - - - ФормаЗаписи - - ru - Форма записи - - PersonalComputer - MobileDevice - - - ДокументыФизическогоЛица - - ru - Документы физического лица - - PersonalComputer - MobileDevice - - - ДокументыФизическогоЛица - - ru - Документы - - FormNavigationPanelGoTo - - CatalogRef.ФизическиеЛица - - Auto - - diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html index 606d420b1..323de0a34 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html @@ -1,3 +1,3 @@ - +

            Для некоторых объектов конфигурации можно указать дополнительные сведения, состав и тип которых настраивается администратором.

            См. также: Дополнительные свойства, Наборы свойств.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl index 39a8c40f1..c0fe8c74d 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -24,3 +25,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl index 633bbfb5e..43a930bf5 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -52,3 +54,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl index 42753e59d..9c657d380 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет данные регистра, если прикладной разработчик // изменил зависимости в переопределяемом модуле. @@ -122,4 +121,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html new file mode 100644 index 000000000..25694db89 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html @@ -0,0 +1,18 @@ + +

            Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы программы.

            +

            Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

            +

            В списке выводятся:

            +
            • Ключевая операция - полное наименование ключевой операции; +
            • Дата начала замера - дата и время начала замера; +
            • Номер сеанса; +
            • Время выполнения в секундах; +
            • Дата записи - дата и время записи; +
            • Дата окончания - дата и время окончания замера; +
            • Пользователь - полное имя пользователя; +
            • Локальная дата записи.

            Нажмите Все действия - Изменить форму, для того чтобы добавить дополнительные поля, например:

            +
            • Имя - имя ключевой операции в программе; +
            • Приоритет - выводится из списка ключевых операций; +
            • Минимально допустимый уровень - выводится из списка ключевых операций;  +
            • Целевое время - выводится из списка ключевых операций.

            Данные о замерах программа заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

            +

            См. также:

            +

            Работа с формами.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index 104d0e97b..bfba3a476 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -49,6 +49,11 @@ + + + ru + + Managed ВремяВыполнения diff --git a/SSL/src/InformationRegisters/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.mdo b/SSL/src/InformationRegisters/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.mdo new file mode 100644 index 000000000..79859dbfc --- /dev/null +++ b/SSL/src/InformationRegisters/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов/ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.mdo @@ -0,0 +1,147 @@ + + + + + + + + + + + + ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов + + ru + Запросы администрирования разрешений использования внешних ресурсов + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Операция + + ru + Операция + + + EnumRef.ОперацииСНаборамиРазрешений + + + + Use + Use + + + + МоментВремени + + ru + Момент времени + + + Date + + + + + Use + Use + + + + Состояние + + ru + Состояние + + + EnumRef.СостоянияЗапросовНаИспользованиеВнешнихРесурсов + + + + Use + Use + + + + Имя + + ru + Имя + + + String + + + + + Use + Use + + + + Идентификатор + + ru + Идентификатор + + + UUID + + + + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.mdo b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.mdo new file mode 100644 index 000000000..4c60f9295 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.mdo @@ -0,0 +1,197 @@ + + + + + + + + + + + + ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + + ru + Запросы разрешений на использование внешних ресурсов + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + РежимЗамещения + + ru + Режим замещения + + + Boolean + + + + Use + Use + + + + ДобавляемыеРазрешения + + ru + Добавляемые разрешения + + + String + + + + + Use + Use + + + + УдаляемыеРазрешения + + ru + Удаляемые разрешения + + + String + + + + + Use + Use + + + + МоментВремени + + ru + Момент времени + + + Date + + + + + Index + Use + Use + + + + Состояние + + ru + Состояние + + + EnumRef.СостоянияЗапросовНаИспользованиеВнешнихРесурсов + + + + Use + Use + + + + Идентификатор + + ru + Идентификатор + + + UUID + + + + Use + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 7386a1668..266dc08c4 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -22,3 +23,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl index f8f7c60b1..6824e48f1 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -52,3 +54,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 62ffc9659..35d941a44 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -1,11 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при изменении // - разрешенных значений групп доступа, -// - разрешенных значений профилей групп доступа. +// - разрешенных значений профилей групп доступа, +// - использования видов доступа. // // Параметры: // ГруппыДоступа - СправочникСсылка.ГруппыДоступа. @@ -27,9 +27,19 @@ Попытка Блокировка.Заблокировать(); - ОбновитьРазрешенныеЗначения(ГруппыДоступа, ЕстьИзменения); + ИспользуемыеВидыДоступа = Новый ТаблицаЗначений; + ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + СвойстваВидовДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(); - ОбновитьРазрешенныеЗначенияПоУмолчанию(ГруппыДоступа, ЕстьИзменения); + Для каждого СвойстваВидаДоступа Из СвойстваВидовДоступа Цикл + Если УправлениеДоступомСлужебный.ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) Тогда + ИспользуемыеВидыДоступа.Добавить().ВидДоступа = СвойстваВидаДоступа.Ссылка; + КонецЕсли; + КонецЦикла; + + ОбновитьРазрешенныеЗначения(ИспользуемыеВидыДоступа, ГруппыДоступа, ЕстьИзменения); + + ОбновитьРазрешенныеЗначенияПоУмолчанию(ИспользуемыеВидыДоступа, ГруппыДоступа, ЕстьИзменения); ЗафиксироватьТранзакцию(); Исключение @@ -39,16 +49,29 @@ КонецПроцедуры -Процедура ОбновитьРазрешенныеЗначения(ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) +Процедура ОбновитьРазрешенныеЗначения(ИспользуемыеВидыДоступа, ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИспользуемыеВидыДоступа", ИспользуемыеВидыДоступа); + Запрос.УстановитьПараметр("ТипыГруппИЗначенийВидовДоступа", УправлениеДоступомСлужебныйПовтИсп.ТипыГруппИЗначенийВидовДоступа()); ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ + | ИспользуемыеВидыДоступа.ВидДоступа + |ПОМЕСТИТЬ ИспользуемыеВидыДоступа + |ИЗ + | &ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | + |ИНДЕКСИРОВАТЬ ПО + | ИспользуемыеВидыДоступа.ВидДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ТипыГруппИЗначенийВидовДоступа.ВидДоступа, | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений |ПОМЕСТИТЬ ТипыГруппИЗначенийВидовДоступа @@ -119,6 +142,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыГруппИЗначенийВидовДоступа КАК ТипыГруппИЗначенийВидовДоступа | ПО НастройкиЗначений.ВидДоступа = ТипыГруппИЗначенийВидовДоступа.ВидДоступа | И (ТИПЗНАЧЕНИЯ(НастройкиЗначений.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений)) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ПО НастройкиЗначений.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа | |СГРУППИРОВАТЬ ПО | НастройкиЗначений.ГруппаДоступа, @@ -163,28 +188,25 @@ КонецПроцедуры -Процедура ОбновитьРазрешенныеЗначенияПоУмолчанию(ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) +Процедура ОбновитьРазрешенныеЗначенияПоУмолчанию(ИспользуемыеВидыДоступа, ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТипыЗначенийВидовДоступа", - УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступа()); + Запрос.УстановитьПараметр("ИспользуемыеВидыДоступа", ИспользуемыеВидыДоступа); Запрос.УстановитьПараметр("ТипыГруппИЗначенийВидовДоступа", УправлениеДоступомСлужебныйПовтИсп.ТипыГруппИЗначенийВидовДоступа()); ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ - | ТипыЗначенийВидовДоступа.ВидДоступа, - | ТипыЗначенийВидовДоступа.ТипЗначений - |ПОМЕСТИТЬ ТипыЗначенийВидовДоступа + | ИспользуемыеВидыДоступа.ВидДоступа + |ПОМЕСТИТЬ ИспользуемыеВидыДоступа |ИЗ - | &ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа + | &ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | |ИНДЕКСИРОВАТЬ ПО - | ТипыЗначенийВидовДоступа.ТипЗначений, - | ТипыЗначенийВидовДоступа.ВидДоступа + | ИспользуемыеВидыДоступа.ВидДоступа |; | |//////////////////////////////////////////////////////////////////////////////// @@ -229,6 +251,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля | ПО ГруппыДоступа.Профиль = ВидыДоступаПрофиля.Ссылка | И (ВидыДоступаПрофиля.Предустановленный) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ПО (ВидыДоступаПрофиля.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа) | |ОБЪЕДИНИТЬ ВСЕ | @@ -244,6 +268,8 @@ | ПО (ЗаданныеВидыДоступа.Ссылка = ГруппыДоступа.Профиль) | И (ЗаданныеВидыДоступа.ВидДоступа = ВидыДоступа.ВидДоступа) | И (НЕ ЗаданныеВидыДоступа.Предустановленный) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ПО (ВидыДоступа.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -256,39 +282,56 @@ | ТипыГруппИЗначенийВидовДоступа КАК ТипыГруппИЗначенийВидовДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК НастройкиЗначений | ПО (ТИПЗНАЧЕНИЯ(ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений) = ТИПЗНАЧЕНИЯ(НастройкиЗначений.ЗначениеДоступа)) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ПО ТипыГруппИЗначенийВидовДоступа.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ГруппыДоступа.Ссылка КАК ГруппаДоступа, - | ТипыЗначенийВидовДоступа.ТипЗначений КАК ТипЗначенийДоступа, + | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений КАК ТипЗначенийДоступа, | МАКСИМУМ(ЕСТЬNULL(НастройкиВидовДоступа.ВсеРазрешены, ИСТИНА)) КАК ВсеРазрешены, - | ВЫБОР - | КОГДА МАКСИМУМ(ЕСТЬNULL(НастройкиВидовДоступа.ВсеРазрешены, ИСТИНА)) = ИСТИНА - | И МАКСИМУМ(ЕСТЬNULL(НаличиеНастроекЗначений.СНастройкой, ЛОЖЬ)) = ЛОЖЬ - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК БезНастройки - |ПОМЕСТИТЬ НовыеДанные + | МАКСИМУМ(ЕСТЬNULL(НаличиеНастроекЗначений.СНастройкой, ЛОЖЬ)) КАК СНастройкой + |ПОМЕСТИТЬ ЗаготовкаДляНовыхДанных |ИЗ | ГруппыДоступа КАК ГруппыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыГруппИЗначенийВидовДоступа КАК ТипыГруппИЗначенийВидовДоступа | ПО (ИСТИНА) | ЛЕВОЕ СОЕДИНЕНИЕ НастройкиВидовДоступа КАК НастройкиВидовДоступа | ПО (НастройкиВидовДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка) - | И (НастройкиВидовДоступа.ВидДоступа = ТипыЗначенийВидовДоступа.ВидДоступа) + | И (НастройкиВидовДоступа.ВидДоступа = ТипыГруппИЗначенийВидовДоступа.ВидДоступа) | ЛЕВОЕ СОЕДИНЕНИЕ НаличиеНастроекЗначений КАК НаличиеНастроекЗначений | ПО (НаличиеНастроекЗначений.ГруппаДоступа = НастройкиВидовДоступа.ГруппаДоступа) | И (НаличиеНастроекЗначений.ВидДоступа = НастройкиВидовДоступа.ВидДоступа) | |СГРУППИРОВАТЬ ПО | ГруппыДоступа.Ссылка, - | ТипыЗначенийВидовДоступа.ТипЗначений + | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений | |ИНДЕКСИРОВАТЬ ПО | ГруппыДоступа.Ссылка, - | ТипыЗначенийВидовДоступа.ТипЗначений, - | ВсеРазрешены, + | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЗаготовкаДляНовыхДанных.ГруппаДоступа, + | ЗаготовкаДляНовыхДанных.ТипЗначенийДоступа, + | ЗаготовкаДляНовыхДанных.ВсеРазрешены, + | ВЫБОР + | КОГДА ЗаготовкаДляНовыхДанных.ВсеРазрешены = ИСТИНА + | И ЗаготовкаДляНовыхДанных.СНастройкой = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БезНастройки + |ПОМЕСТИТЬ НовыеДанные + |ИЗ + | ЗаготовкаДляНовыхДанных КАК ЗаготовкаДляНовыхДанных + | + |ИНДЕКСИРОВАТЬ ПО + | ЗаготовкаДляНовыхДанных.ГруппаДоступа, + | ЗаготовкаДляНовыхДанных.ТипЗначенийДоступа, + | ЗаготовкаДляНовыхДанных.ВсеРазрешены, | БезНастройки |; | @@ -326,4 +369,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl index 7386a1668..266dc08c4 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -22,3 +23,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index 3accdd770..000000000 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - ТипЗначенийДоступа - - - - - Список.ТипЗначенийДоступа - Equal - Справочник.ФизическиеЛица.ПустаяСсылка - - - - - Текст - - - ru - Физическое лицо - - - - - - diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl index 47575b60d..e661d3357 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -41,8 +42,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -86,3 +88,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index 3bdd1dfbd..c30014ab9 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения) Экспорт @@ -157,4 +156,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html index 34173be13..639c6df4c 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 ef25c8904..a3b5da9fa 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,16 +26,18 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПолеОсновнойОбъектАдресацииПриИзменении(Элемент) ОбновитьДанныеЭлементов(); КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -50,8 +51,9 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВсеНазначенияВыполнить(Команда) @@ -95,8 +97,9 @@ ОткрытьФорму("Справочник.РолиИсполнителей.ФормаСписка",,ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеЭлементов() @@ -138,3 +141,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html index bdba6669a..b1c1412c8 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 797134935..66cc070e6 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -40,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) @@ -79,8 +79,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Подобрать(Команда) @@ -98,3 +99,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html index bdba6669a..b1c1412c8 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 a58c52ebc..1daf6a05d 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,3 +23,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl index 5cea76ce5..dc8de1e96 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,8 +22,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РольИсполнителяПриИзменении(Элемент) @@ -34,8 +35,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьСостояниеЭлементов() @@ -72,3 +74,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl index da258a039..35fc23021 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -7,3 +7,5 @@ Элементы.Список.Обновить(); КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index c3ee15673..177bec8cf 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/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 2049221a4..5c42469ae 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -1,12 +1,10 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - // СтандартныеПодсистемы.УправлениеДоступом Перем ИзмененныеГруппыИсполнителей; // Группы исполнителей, состав которых был изменен. // Конец СтандартныеПодсистемы.УправлениеДоступом -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -45,8 +43,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ЗаполнитьИзмененныеГруппыИсполнителейЗадач() @@ -125,4 +124,6 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.mdo b/SSL/src/InformationRegisters/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.mdo deleted file mode 100644 index f832c448b..000000000 --- a/SSL/src/InformationRegisters/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте/ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте.mdo +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте - - ru - Использование дополнительных отчетов и обработок сервиса в автономном рабочем месте - - InDialog - - Use - Active - - Use - - - - - Use - LineNumber - - Use - - - - - Use - Recorder - - Use - - - - - Use - Period - - ShowError - Use - - - - Managed - - Поставляемый - - ru - Поставляемый - - - Boolean - - - ru - Поставляемый - - - - Use - Use - - - - ДополнительныйОтчетИлиОбработка - - ru - Дополнительный отчет или обработка - - - CatalogRef.ДополнительныеОтчетыИОбработки - - - ru - Дополнительный отчет или обработка - - - - Use - Use - true - - true - true - - diff --git a/SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.mdo b/SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.mdo deleted file mode 100644 index c47b99c41..000000000 --- a/SSL/src/InformationRegisters/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных/ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.mdo +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных - - ru - Использование поставляемых дополнительных отчетов и обработок в областях данных - - InDialog - - Use - Active - - Use - - - - - Use - LineNumber - - Use - - - - - Use - Recorder - - Use - - - - - Use - Period - - ShowError - Use - - - - Managed - - ИспользуемаяОбработка - - ru - Используемая обработка - - - CatalogRef.ДополнительныеОтчетыИОбработки - - - ru - Используемая обработка - - - - Use - Use - - Index - - - ПоставляемаяОбработка - - ru - Поставляемая обработка - - - CatalogRef.ПоставляемыеДополнительныеОтчетыИОбработки - - - ru - Поставляемая обработка - - - - Use - Use - true - - true - true - - diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html index ffe0ae770..7cae9b628 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html @@ -1,2 +1,2 @@ - +

            Система позволяет хранить графики работы, которые используются на предприятии.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl index 09f3d1390..821816712 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl @@ -1,8 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет либо одну, либо все записи из регистра // @@ -41,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления @@ -265,6 +265,7 @@ КонецЦикла; Параметры.ОбработкаЗавершена = (ВыборкаВзаимодействие.Количество() = 0); - + +#КонецОбласти КонецПроцедуры #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl index 7a299e859..fdcc2d14c 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -78,4 +77,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl index d2bd164cc..6a7932744 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -38,21 +38,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВалютаПриИзменении(Элемент) Запись.Валюта = ВалютаСписок; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ЗаполнитьВалюту() - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -79,3 +80,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html new file mode 100644 index 000000000..12c4b26ab --- /dev/null +++ b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html @@ -0,0 +1,23 @@ + +

            Предназначен для хранения и просмотра курсов валют.

            +

            Курсы валют можно загружать с сайта РБК, автоматически (с помощью регламентного задания) или вручную (см. загрузка курсов валют).

            +

            Если нет возможности загружать курсы с сайта РБК, их можно ввести вручную.

            +

            В списке выводится:

            +
            • Дата курса; +
            • Валюта - символьный код валюты, принятый международным стандартом; +
            • Курс; +
            • Кратность.

            Ввод курса валюты вручную

            +
            • +
              Нажмите Создать, 
              +
            • +
              выберите из списка Валюту (соответствует списку Валюты).
              +
            • +
              введите Дату курса или выберите с помощью календаря, 
              +
            • +
              введите Курс,
              +
            • +
              введите Кратность - по умолчанию равна 1. Если курс валюты по отношению к рублю очень низкий (точность составляет меньше четырех знаков дробной части), то необходимо указать количество котировочных единиц. Например, курс вьетнамского донга 16,1574 рубля за 10000 вьетнамских донгов. В этом случае в поле Кратность необходимо указать значение 10000, а в поле курс - 16,1574.

            См. также:

            + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index 556dbb66f..3fc239018 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий // При записи контролируются курсы подчиненных валют // @@ -25,8 +24,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Находит все зависимые валюты и изменяет их курс // @@ -74,4 +74,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo b/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo index 604591f73..a2db7563b 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo +++ b/SSL/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo @@ -63,6 +63,11 @@ Day true + + + ru + + Managed ru diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 00b034fbf..266dc08c4 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -21,3 +22,5 @@ ТолькоПросмотр = Ложь; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index 3fb76fa10..000000000 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - Уточнение - - - - - Список.ЭтоПроверкаПраваТаблицы - Equal - true - - - Список.Уточнение - Equal - Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка - - - - - Текст - - - ru - Проверка права Чтение - - - - - - - - - Уточнение - - - - - Список.ЭтоПроверкаПраваТаблицы - Equal - true - - - Список.Уточнение - NotEqual - Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка - - - - - Текст - - - ru - Проверка права Изменение - - - - - - diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl index 00b034fbf..a76a8a5ac 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -12,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -21,3 +24,36 @@ ТолькоПросмотр = Ложь; КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Уточнение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоПроверкаПраваТаблицы"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Уточнение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Проверка права Чтение'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Проверка права Изменение'")); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl index 61e5ea168..67287fb50 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет кэш-реквизиты регистра по результату изменения состава // типов значений и групп значений доступа. @@ -23,8 +22,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при полном обновлении вспомогательных данных. // @@ -59,4 +59,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl index d8e1aa907..aca6cf8c4 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,3 +13,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl index 304920963..f73e4293e 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Собирает данные справочника по ссылкам объектов метаданных и обновляет по ним данные регистра. // @@ -186,5 +185,7 @@ Запрос.Текст = ТекстЗапроса; Возврат Запрос; + +#КонецОбласти КонецФункции #КонецЕсли diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl index acc7e9524..9387053af 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) @@ -34,8 +35,9 @@ ПрекратитьНапоминание(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Изменить(Команда) @@ -52,8 +54,9 @@ ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОтключитьНапоминание(ПараметрыНапоминания) @@ -90,3 +93,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 47998d37c..7a5baac4f 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -134,8 +134,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СпособУстановкиВремениНапоминанияПриИзменении(Элемент) @@ -196,8 +197,9 @@ Объект.ВремяСобытия = НачалоМинуты(Объект.ВремяСобытия); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Прекратить(Команда) @@ -211,9 +213,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПрекратитьНапоминание(РезультатВопроса, ДополнительныеПараметры) Экспорт @@ -500,4 +502,6 @@ &НаКлиенте Процедура ОбновитьРасчетноеВремяНапоминания() Элементы.РасчетноеВремяНапоминания.Заголовок = РасчетноеВремяСтрокой(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index c2697ed36..038482653 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -35,16 +35,18 @@ НапоминанияПользователяКлиент.СброситьТаймерПроверкиТекущихОповещений(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СрокПовторногоОповещенияПриИзменении(Элемент) СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Напоминания +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНапоминания &НаКлиенте Процедура НапоминанияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -66,8 +68,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Изменить(Команда) @@ -104,8 +107,9 @@ ОбновитьТаблицуНапоминаний(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПодключитьНапоминание(ПараметрыНапоминания) @@ -273,3 +277,4 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl index 1385cdef9..4f16c690a 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -52,3 +54,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 5d8748ecd..837d8fa65 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обновляет иерархию владельцев настроек прав объектов. // Например, иерархию элементов справочника ПапкиФайлов. @@ -54,8 +53,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Обновляет родителей владельца настроек прав объектов. // Например, справочник ПапкиФайлов. @@ -358,4 +358,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index 82accbd63..445aacab4 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий // Применяет настройки панели отчетов для текущего пользователя // @@ -56,4 +55,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl index 78e15dc0e..37cc72eb6 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВариантВерсионированияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -38,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоОбъектовМетаданных +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных &НаКлиенте Процедура ДеревоОбъектовМетаданныхПередНачаломИзменения(Элемент, Отказ) @@ -54,8 +56,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура УстановитьВариантВерсионированияНеВерсионировать(Команда) @@ -97,8 +100,9 @@ ЗаполнитьТипыОбъектовВДеревеЗначений(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗаполнитьСписокВыбора(Элемент) @@ -135,7 +139,6 @@ УзелСправочники = НеОпределено; УзелДокументы = НеОпределено; - Для Каждого Тип Из МассивТипов Цикл Если ВсеСправочники.СодержитТип(Тип) Тогда Если УзелСправочники = НеОпределено Тогда @@ -242,4 +245,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html index 1d8a0091a..96237f919 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/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl index 75dd00782..c70b0e49f 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ + +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -11,3 +11,5 @@ ОткрытьФорму("РегистрСведений.НастройкиОтправителя.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl index e87389057..23044b77f 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,3 +15,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl index e401b8313..97c5d1426 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,3 +13,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl index 78fe46ffc..98620e65c 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl @@ -1,13 +1,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Определяет конечные точки, для которых в текущей информационной системе // назначен заданный канал сообщений. // // Параметры: -// КаналСообщений – Строка. Идентификатор адресного канала сообщений. +// КаналСообщений - Строка. Идентификатор адресного канала сообщений. // // Возвращаемое значение: // Тип: Массив. Массив элементов конечных точек. @@ -30,4 +29,6 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl index 0e1713b38..55697502b 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -23,3 +24,5 @@ ТолькоПросмотр = Ложь; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/ConditionalAppearance.dcssca deleted file mode 100644 index f73de06ed..000000000 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - Таблица - - - - - Список.Таблица - Equal - Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка - - - - - Текст - - - ru - Для всех таблиц, кроме указанных - - - - - - diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl index 82acab497..0358270b2 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -13,8 +15,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -40,8 +43,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Таблица.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Таблица"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Для всех таблиц, кроме указанных'")); + +КонецПроцедуры &НаСервере Процедура ОбновитьВспомогательныеДанныеРегистраНаСервере(ЕстьИзменения) @@ -53,3 +78,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 77e4902f8..93a5c9929 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обновляет возможные права для настройки прав объектов и сохраняет состав последних изменений. // @@ -122,8 +121,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Возвращает настройки прав объекта // @@ -1045,4 +1045,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl index 0f2e04847..5c5ef1878 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -61,8 +61,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗабылиПароль(Команда) @@ -78,8 +79,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПроверитьПодключениеКСервису(Отказ) @@ -153,3 +155,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form index 69d335475..564752bde 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -1,47 +1,257 @@ - - - Пояснение - 7 - - <key>ru</key> - <value>Не удалось обновить информационную базу. -Техническую информацию см. в журнале регистрации:</value> - - true - true - - true - - - ПояснениеРасширеннаяПодсказка - 9 - Label - true - true - - Left + + + ПанельОсновная + 26 + + Начало + 28 + + ИнформационнаяНадписьИмяУзла + 44 + + <key>ru</key> + <value>Не удалось установить обновление программы, полученное из "%1".</value> + + true + true + + true + + + ИнформационнаяНадписьИмяУзлаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ИнформационнаяНадписьИмяУзлаКонтекстноеМеню + 45 + true + + true + Label + true + true + + Left + + + + ИнформационнаяНадпись + 32 + + <key>ru</key> + <value>Техническую информацию см. в <link ЖурналРегистрации>Журнале регистрации</>. + +Нажмите <b>Синхронизировать и продолжить,</> чтобы получить +обновление программы еще раз (рекомендуется). +<link ПараметрыПодключения>Изменить п</><link ПараметрыПодключения>араметры подключения для синхронизации данных</> +</value> + + true + true + + true + + + ИнформационнаяНадписьРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ИнформационнаяНадписьКонтекстноеМеню + 33 + true + + true + Label + true + true + + + URLProcessing + ИнформационнаяНадписьОбработкаНавигационнойСсылки + + Left + + + + ИнформационнаяНадписьНеСинхронизировать + 41 + + <key>ru</key> + <value>Нажмите <b>П</><b>родолжить,</> чтобы повторить попытку обновления программы.</value> + + true + true + + true + + + ИнформационнаяНадписьНеСинхронизироватьРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ИнформационнаяНадписьНеСинхронизироватьКонтекстноеМеню + 42 + true + + true + Label + true + true + + + URLProcessing + ИнформационнаяНадписьОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + ru + Начало + + + НачалоРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Page + + Vertical + auto - - - ПояснениеКонтекстноеМеню - 8 - true - - Label - true - true - - Left - - - - ЖурналРегистрации - 12 - - <key>ru</key> - <value>Журнал регистрации</value> - + + + ДлительнаяОперация + 30 + + КартинкаДлительнаяОперация + 35 + true + true + + true + + + КартинкаДлительнаяОперацияРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + КартинкаДлительнаяОперацияКонтекстноеМеню + 36 + true + + 7 + true + 3 + true + + + CommonPicture.СинхронизацияДанныхДлительнаяОперация48 + + + + + НадписьДлительнаяОперация + 38 + + <key>ru</key> + <value>Выполняется синхронизация данных. +Это может занять несколько минут. +Пожалуйста, подождите...</value> + + true + true + + true + + + НадписьДлительнаяОперацияРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + НадписьДлительнаяОперацияКонтекстноеМеню + 39 + true + + Label + true + 3 + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + ru + Длительная операция + + + ДлительнаяОперацияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Page + + auto + + true true @@ -49,11 +259,11 @@ ru - Просмотр ошибок (в том числе ошибок загрузки сообщения обмена данными) + Панель основная - ЖурналРегистрацииРасширеннаяПодсказка - 14 + ПанельОсновнаяРасширеннаяПодсказка + 27 Label true true @@ -61,140 +271,9 @@ Left - - ЖурналРегистрацииКонтекстноеМеню - 13 - true - - Label - true - 2 - true - - - Click - ЖурналРегистрацииНажатие - - true - Left - Top - - - - Пояснение1 - 18 - - <key>ru</key> - <value>1. Рекомендуется получить новое сообщение обмена из главного узла. -Для этого нажмите "Синхронизировать и продолжить". -При необходимости укажите параметры подключения для синхронизации данных:</value> - - true - true - - true - - - Пояснение1РасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - Пояснение1КонтекстноеМеню - 19 - true - - Label - true - true - - Left - - - - ПараметрыПодключенияПриСинхронизацииДанных - 15 - - <key>ru</key> - <value>Параметры подключения при синхронизации данных</value> - - true - true - - true - - - ru - Настройка параметров подключения в случае, если они не заполнены или содержат ошибку. - - - ПараметрыПодключенияПриСинхронизацииДанныхРасширеннаяПодсказка - 17 - 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РасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - Пояснение2КонтекстноеМеню - 22 - true - - Label - true - true - - Left + Pages + + Auto @@ -228,95 +307,204 @@ Auto + + КоманднаяПанель + 24 + + ГруппаКнопокОсновная + 51 + + ФормаСинхронизироватьИПродолжить + 1 + true + true + + true + + + ФормаСинхронизироватьИПродолжитьРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.СинхронизироватьИПродолжить + Auto + true + true + true + UserCmds + Auto + + + ФормаНеСинхронизироватьИПродолжить + 3 + + <key>ru</key> + <value>Продолжить</value> + + true + true + + true + + + ФормаНеСинхронизироватьИПродолжитьРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.НеСинхронизироватьИПродолжить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗавершитьРаботу + 5 + true + true + + true + + + ФормаЗавершитьРаботуРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Form.Command.ЗавершитьРаботу + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Группа кнопок основная + + + ГруппаКнопокОсновнаяРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + + + ГруппаКнопокДлительнаяОперация + 53 + + ЗавершитьРаботу + 55 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ЗавершитьРаботуРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.ЗавершитьРаботу + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаКнопокДлительнаяОперацияРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + CommandBar + + Right + + ФормаКоманднаяПанель -1 - - ФормаСинхронизироватьИПродолжить - 1 - true - true - - true - - - ФормаСинхронизироватьИПродолжитьРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - Form.Command.СинхронизироватьИПродолжить - Auto - true - true - true - UserCmds - Auto - - - ФормаНеСинхронизироватьИПродолжить - 3 - true - true - - true - - - ФормаНеСинхронизироватьИПродолжитьРасширеннаяПодсказка - 4 - Label - true - true - - Left - - - Form.Command.НеСинхронизироватьИПродолжить - Normal - Auto - true - true - UserCmds - Auto - - - ФормаЗавершитьРаботу - 5 - true - true - - true - - - ФормаЗавершитьРаботуРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - Form.Command.ЗавершитьРаботу - Normal - Auto - true - true - UserCmds - Auto - Left OnCreateAtServer ПриСозданииНаСервере - 66 - LockOwner + 56 + LockWholeInterface true true true @@ -327,13 +515,152 @@ auto true - ГлавныйУзел + ДлительнаяОперация <key>ru</key> - <value>Главный узел</value> + <value>Длительная операция</value> + + 2 + + Boolean + + + 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> + + 6 + + String + + + + true + + + true + + + + СтатусОбновления + + <key>ru</key> + <value>Статус обновления</value> + + 10 + + String + + + + true + + + true + + + + УзелИнформационнойБазы + + <key>ru</key> + <value>Узел информационной базы</value> + + 9 + + ExchangePlanRef + + + true + + + true + + + + ЕстьОшибки + + <key>ru</key> + <value>Есть ошибки</value> 1 - + + Boolean + + + true + + + true + + + + ДатаНачалаОперации + + <key>ru</key> + <value>Дата начала операции</value> + + 5 + + Date + + + + true + + + true + + + + ДлительнаяОперацияРазрешена + 7 + + Boolean + true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 9b485fb47..5221d72a6 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -1,44 +1,87 @@ +#Область ОбработчикиСобытийФормы + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Предварительное обновление кэша служебных событий. - Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(); + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; - ГлавныйУзел = ПланыОбмена.ГлавныйУзел(); + // Предварительное обновление (или подтверждение обновления) кэша служебных событий. + Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(); + // Требуется обновление параметров работы клиента. + ОбновитьПовторноИспользуемыеЗначения(); + + УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); + ДлительнаяОперацияРазрешена = ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); + + Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ИнформационнаяНадписьИмяУзла.Заголовок, УзелИнформационнойБазы.Наименование); УстановитьДоступность(); КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + &НаКлиенте -Процедура ПараметрыПодключенияПриСинхронизацииДанныхНажатие(Элемент) +Процедура ИнформационнаяНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - Отбор = Новый Структура("Узел", ГлавныйУзел); - ЗначенияЗаполнения = Новый Структура("Узел", ГлавныйУзел); + СтандартнаяОбработка = Ложь; - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору( - Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", Неопределено); + Если НавигационнаяСсылка = "ПараметрыПодключения" Тогда + + Отбор = Новый Структура("Узел", УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Узел", УзелИнформационнойБазы); + + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбмена", Неопределено); + + ИначеЕсли НавигационнаяСсылка = "ЖурналРегистрации" Тогда + + ПараметрыФормы = Новый Структура; + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы,,,,,, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ЖурналРегистрацииНажатие(Элемент) - - ПараметрыФормы = Новый Структура; - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); - -КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СинхронизироватьИПродолжить(Команда) - ТекстПредупреждения = СинхронизироватьИПродолжитьНаСервере(); + ТекстПредупреждения = ""; + ЕстьОшибки = Ложь; + ДлительнаяОперация = Ложь; - Если ПустаяСтрока(ТекстПредупреждения) Тогда - Закрыть("Продолжить"); - Иначе - ПоказатьПредупреждение(, ТекстПредупреждения); + ПроверитьНеобходимостьОбновления(); + + Если СтатусОбновления = "ОбновлениеНеТребуется" Тогда + + СинхронизироватьИПродолжитьБезОбновленияИБ(); + + ИначеЕсли СтатусОбновления = "ОбновлениеИнформационнойБазы" Тогда + + СинхронизироватьИПродолжитьСОбновлениемИБ(); + + ИначеЕсли СтатусОбновления = "ОбновлениеКонфигурации" Тогда + + ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые ещё не применены. + |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + + КонецЕсли; + + Если Не ДлительнаяОперация Тогда + + СинхронизироватьИПродолжитьЗавершение(); + КонецЕсли; КонецПроцедуры @@ -59,6 +102,244 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Сценарий без обновления информационной базы + +&НаКлиенте +Процедура СинхронизироватьИПродолжитьБезОбновленияИБ() + + ЗагрузитьСообщениеОбменаДаннымиБезОбновления(); + + Если ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + Иначе + + СинхронизироватьИПродолжитьБезОбновленияИБЗавершение(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СинхронизироватьИПродолжитьБезОбновленияИБЗавершение() + + // Режим повтора требует включения в следующих случаях. + // Случай 1. Получены метаданные с новой версией конфигурации, т.е. будет выполнено обновление ИБ. + // - если Отказ = Истина, тогда недопустимо продолжение, т.к. могут быть созданы дубли генерируемых данных, + // - если Отказ = Ложь, тогда возможна ошибка при обновлении ИБ, возможно требующая повторной загрузки сообщения. + // Случай 2. Получены метаданные с той же версией конфигурации, т.е. не будет выполнено обновление ИБ. + // - если Отказ = Истина, тогда возможна ошибка при продолжении запуска, например, из-за того, что + // не были загружены предопределенные элементы, + // - если Отказ = Ложь, тогда продолжение возможно, т.к. выгрузку можно сделать позднее (если же + // выгрузка не выполняется успешно, тогда позднее можно получить и новое сообщение для загрузки). + + УстановитьПривилегированныйРежим(Истина); + + Если Не ЕстьОшибки Тогда + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + + // Если сообщение загружено успешно, тогда повторная загрузка более не требуется. + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); + КонецЕсли; + Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Ложь); + + Попытка + ОбменДаннымиСервер.ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); + Исключение + // Если выгрузка не удалась все равно можно продолжить запуск и + // сделать выгрузку в режиме 1С:Предприятия. + КонецПопытки; + + ИначеЕсли КонфигурацияИзменена() Тогда + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + КонецЕсли; + ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. + |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + Иначе + + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + ТекстПредупреждения = НСтр("ru = 'Получение данных из главного узла завершилось с ошибками. + |Подробности см. в журнале регистрации.'"); + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьСообщениеОбменаДаннымиБезОбновления() + + Попытка + ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЕстьОшибки = Истина; + КонецПопытки; + + УстановитьОтображениеЭлементовФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() + + Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + Если УзелИнформационнойБазы <> Неопределено Тогда + + УстановитьПривилегированныйРежим(Истина); + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Истина); + УстановитьПривилегированныйРежим(Ложь); + + // Обновление правил регистрации объектов выполняем до загрузки данных + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта, + ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена); // только загрузка + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сценарий с обновлением информационной базы + +&НаКлиенте +Процедура СинхронизироватьИПродолжитьСОбновлениемИБ() + + ЗагрузитьСообщениеОбменаДаннымиСОбновлением(); + + Если ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + Иначе + + СинхронизироватьИПродолжитьСОбновлениемИБЗавершение(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СинхронизироватьИПродолжитьСОбновлениемИБЗавершение() + + УстановитьПривилегированныйРежим(Истина); + + Если Не ЕстьОшибки Тогда + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + КонецЕсли; + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском", Истина); + + ИначеЕсли КонфигурацияИзменена() Тогда + + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + КонецЕсли; + ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. + |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + + Иначе + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); + + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ТекстПредупреждения = НСтр("ru = 'Получение данных из главного узла завершилось с ошибками. + |Подробности см. в журнале регистрации.'"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьСообщениеОбменаДаннымиСОбновлением() + + Попытка + ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЕстьОшибки = Истина; + КонецПопытки; + + УстановитьОтображениеЭлементовФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ() + + Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат; + КонецЕсли; + + Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском") Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Истина); + УстановитьПривилегированныйРежим(Ложь); + + ПроверитьИспользованиеСинхронизацииДанных(); + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // Загрузка только параметров работы программы + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, Истина, + Ложь, ВидТранспорта, ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена,, Истина); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сценарий без синхронизации + &НаСервере Процедура НеСинхронизироватьИПродолжитьНаСервере() @@ -76,121 +357,47 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Служебные процедуры и функции + &НаСервере -Функция СинхронизироватьИПродолжитьНаСервере() +Процедура ПроверитьНеобходимостьОбновления() УстановитьПривилегированныйРежим(Истина); Если КонфигурацияИзменена() Тогда - Возврат - НСтр("ru = 'Из главного узла получены изменения, которые ещё не применены. - |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + СтатусОбновления = "ОбновлениеКонфигурации"; + ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + СтатусОбновления = "ОбновлениеИнформационнойБазы"; + Иначе + СтатусОбновления = "ОбновлениеНеТребуется"; КонецЕсли; - Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - ТекстПредупреждения = СинхронизироватьИПродолжитьСОбновлениемИБ(); - Иначе - ТекстПредупреждения = СинхронизироватьИПродолжитьБезОбновленияИБ(); - КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СинхронизироватьИПродолжитьЗавершение() УстановитьДоступность(); - Возврат ТекстПредупреждения; - -КонецФункции - -&НаСервере -Функция СинхронизироватьИПродолжитьСОбновлениемИБ() - - Попытка - Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); - Исключение - // Если ИдентификаторыОбъектовМетаданных не используются, - // тогда предварительная синхронизация не требуется. - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); - КонецЕсли; - Возврат ""; - КонецПопытки; - - ТекстПредупреждения = ""; - Отказ = Ложь; - Попытка - ОбменДаннымиСервер.ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(Отказ); - Исключение - Отказ = Истина; - КонецПопытки; - - Если НЕ Отказ Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском", Истина); - УстановитьПривилегированныйРежим(Ложь); - - ИначеЕсли КонфигурацияИзменена() Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); - КонецЕсли; - ТекстПредупреждения = - НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. - |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + Если ПустаяСтрока(ТекстПредупреждения) Тогда + Закрыть("Продолжить"); Иначе - ТекстПредупреждения = - НСтр("ru = 'Получение данных из главного узла завершилось с ошибками. - |Подробности см. в журнале регистрации.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; - Возврат ТекстПредупреждения; - -КонецФункции +КонецПроцедуры -&НаСервере -Функция СинхронизироватьИПродолжитьБезОбновленияИБ() +// Устанавливает признак повторения загрузки при ошибке загрузки или обновления. +// Очищает хранилище сообщения обмена, полученного из главного узла РИБ. +// +Процедура ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() - ТекстПредупреждения = ""; - Отказ = Ложь; - Попытка - ОбменДаннымиСервер.ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); - Исключение - Отказ = Истина; - КонецПопытки; + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); - Если НЕ Отказ Тогда - // Если сообщение загружено успешно, тогда повторная загрузка более не требуется. - УстановитьПривилегированныйРежим(Истина); - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина Тогда - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); - КонецЕсли; - Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Ложь); - УстановитьПривилегированныйРежим(Ложь); - - Попытка - ОбменДаннымиСервер.ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); - Исключение - // Если выгрузка не удалась все равно можно продолжить запуск и - // сделать выгрузку в режиме 1С:Предприятия. - КонецПопытки; - - ИначеЕсли КонфигурацияИзменена() Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда - Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); - КонецЕсли; - ТекстПредупреждения = - НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. - |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); - Иначе - ТекстПредупреждения = - НСтр("ru = 'Получение данных из главного узла завершилось с ошибками. - |Подробности см. в журнале регистрации.'"); - КонецЕсли; + Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Истина); - Возврат ТекстПредупреждения; - -КонецФункции +КонецПроцедуры &НаСервере Процедура УстановитьДоступность() @@ -199,10 +406,160 @@ И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Ложь; - Элементы.Пояснение2.Доступность = Ложь; + Элементы.ИнформационнаяНадписьНеСинхронизировать.Доступность = Ложь; Иначе Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Истина; - Элементы.Пояснение2.Доступность = Истина; + Элементы.ИнформационнаяНадписьНеСинхронизировать.Доступность = Истина; + КонецЕсли; + + УстановитьОтображениеЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжиданияДлительнойОперации() + + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( + ИдентификаторОперации, + УзелИнформационнойБазы, + , + ТекстПредупреждения); + + Если СостояниеОперации = "Active" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + Иначе + + Если СостояниеОперации <> "Completed" Тогда + + ЕстьОшибки = Истина; + + КонецЕсли; + + ДлительнаяОперация = Ложь; + + ОбработатьОкончаниеДлительнойОперации(); + + Если СтатусОбновления = "ОбновлениеНеТребуется" Тогда + + СинхронизироватьИПродолжитьБезОбновленияИБЗавершение(); + + ИначеЕсли СтатусОбновления = "ОбновлениеИнформационнойБазы" Тогда + + СинхронизироватьИПродолжитьСОбновлениемИБЗавершение(); + + КонецЕсли; + + СинхронизироватьИПродолжитьЗавершение(); + КонецЕсли; КонецПроцедуры + +&НаСервере +Процедура ПроверитьИспользованиеСинхронизацииДанных() + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); + ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; + ИспользоватьСинхронизациюДанных.Значение = Истина; + ИспользоватьСинхронизациюДанных.Записать(); + + Иначе + + Если ОбменДаннымиСервер.ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда + + ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); + ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; + ИспользоватьСинхронизациюДанных.Значение = Истина; + ИспользоватьСинхронизациюДанных.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтображениеЭлементовФормы() + + Элементы.ПанельОсновная.ТекущаяСтраница = ?(ДлительнаяОперация, Элементы.ДлительнаяОперация, Элементы.Начало); + Элементы.ГруппаКнопокДлительнаяОперация.Видимость = ДлительнаяОперация; + Элементы.ГруппаКнопокОсновная.Видимость = Не ДлительнаяОперация; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОкончаниеДлительнойОперации() + + Если Не ЕстьОшибки Тогда + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + УзелИнформационнойБазы, + ИдентификаторФайла, + ДатаНачалаОперации); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Знач УзелИнформационнойБазы, + Знач ИдентификаторФайла, + Знач ДатаНачалаОперации + ) + + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + Попытка + ФайлСообщенияОбмена = ОбменДаннымиСервер.ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + Исключение + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ДатаНачалаОперации, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЕстьОшибки = Истина; + Возврат; + КонецПопытки; + + СообщениеОбмена = Новый ДвоичныеДанные(ФайлСообщенияОбмена); + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить( + Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9))); + + Попытка + УдалитьФайлы(ФайлСообщенияОбмена); + Исключение + КонецПопытки; + + Попытка + + ТолькоПараметры = (СтатусОбновления = "ОбновлениеИнформационнойБазы"); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, + Истина, Ложь, ВидТранспорта,,,,,, ТолькоПараметры); + + Исключение + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЕстьОшибки = Истина; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index 9e3cf95bb..e8252296e 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -527,61 +527,6 @@ UserCmds Auto - - ГруппаComcntrФайловыйРежим - 182 - - ИсправитьОшибкиУстановкиВнешнегоСоединения - 98 - true - true - - true - - - ИсправитьОшибкиУстановкиВнешнегоСоединенияExtendedTooltip - 137 - Label - true - true - - Left - - - UsualButton - Form.Command.ИсправитьОшибкиУстановкиВнешнегоСоединения - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаComcntrФайловыйРежимРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - true true @@ -2066,129 +2011,88 @@ Auto - - ДополнительныеНастройки - 36 - - КоличествоЭлементовВТранзакцииЗагрузкиДанных - 70 - true - true - - true - - - Запись.КоличествоЭлементовВТранзакцииЗагрузкиДанных - - - КоличествоЭлементовВТранзакцииЗагрузкиДанныхExtendedTooltip - 180 - Label - true - true - - Left - - - - КоличествоЭлементовВТранзакцииЗагрузкиДанныхКонтекстноеМеню - 71 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - КоличествоЭлементовВТранзакцииВыгрузкиДанных - 68 - true - true - - true - - - Запись.КоличествоЭлементовВТранзакцииВыгрузкиДанных - - - КоличествоЭлементовВТранзакцииВыгрузкиДанныхExtendedTooltip - 181 - Label - true - true - - Left - - - - КоличествоЭлементовВТранзакцииВыгрузкиДанныхКонтекстноеМеню - 69 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные настройки</value> - - - ru - Дополнительные настройки - - - ДополнительныеНастройкиExtendedTooltip - 179 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - StrongSeparation - true - true - auto - Auto - Auto - - ФормаКоманднаяПанель -1 + + ФормаЗаписатьИЗакрыть + 184 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 186 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 188 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -2202,6 +2106,7 @@ Copy Delete + WriteAndClose 85 LockOwner true @@ -2357,32 +2262,6 @@ Auto Auto - - ИсправитьОшибкиУстановкиВнешнегоСоединения - - <key>ru</key> - <value>Исправить ошибки установки внешнего соединения</value> - - 5 - - ru - Исправить ошибки установки внешнего соединения - - - true - - - StdPicture.CheckSyntax - - - - ИсправитьОшибкиУстановкиВнешнегоСоединения - - - TextPicture - Auto - Auto - ПараметрыДоступаВИнтернет @@ -2405,9 +2284,44 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ЗаписатьИЗакрыть</name> + <title> + <key>ru</key> + <value>Записать и закрыть</value> + + 8 + + ru + Записать и закрыть + + + true + + + StdPicture.WriteAndClose + + + + ЗаписатьИЗакрыть + + + Text + Auto + Auto + - + + + AfterWrite + ПослеЗаписи + + + BeforeWrite + ПередЗаписью + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl index ad0bd18b9..abd141e6c 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ВнешниеРесурсыРазрешены; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,10 +27,7 @@ КонецЕсли; СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису - = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() - ; - - Элементы.ИсправитьОшибкиУстановкиВнешнегоСоединения.Видимость = Ложь; + = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда Элементы.ПараметрыДоступаВИнтернет.Видимость = Истина; @@ -47,14 +46,36 @@ АутентификацияОперационнойСистемыПриИзменении(); -#Если ВебКлиент Тогда - Элементы.ГруппаComcntrФайловыйРежим.Видимость = Ложь; -#КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если ВнешниеРесурсыРазрешены <> Истина Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ПараметрыЗаписи); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Истина, Истина, Истина, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + + Отказ = Истина; + + КонецЕсли; + ВнешниеРесурсыРазрешены = Ложь; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -98,62 +119,43 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти -&НаКлиенте -Процедура ИсправитьОшибкиУстановкиВнешнегоСоединения(Команда) - - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); - -КонецПроцедуры +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПроверитьПодключениеCOM(Команда) - Отказ = Ложь; - - ОчиститьСообщения(); - - ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ); - - ОповеститьПользователяОРезультатахПодключения(Отказ); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры &НаКлиенте Процедура ПроверитьПодключениеWS(Команда) - Отказ = Ложь; - - ОчиститьСообщения(); - - ВыполнитьПроверкуУстановкиПодключенияWS(Отказ); - - ОповеститьПользователяОРезультатахПодключения(Отказ); - -КонецПроцедуры - -&НаКлиенте -Процедура ОповеститьПользователяОРезультатахПодключения(Знач ОшибкаПодключения) - - ТекстПредупреждения = ?(ОшибкаПодключения, НСтр("ru = 'Не удалось установить подключение.'"), - НСтр("ru = 'Подключение успешно установлено.'")); - ПоказатьПредупреждение(, ТекстПредупреждения); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись,,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры &НаКлиенте Процедура ПроверитьПодключениеFILE(Команда) - ПроверитьПодключение("FILE"); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFILEЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры &НаКлиенте Процедура ПроверитьПодключениеFTP(Команда) - ПроверитьПодключение("FTP"); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFTPЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись,,,, Истина); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); КонецПроцедуры @@ -171,8 +173,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ЗаписатьИЗакрыть"); + Записать(ПараметрыЗаписи); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроверитьПодключение(ВидТранспортаСтрокой) @@ -197,15 +209,7 @@ &НаСервере Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ) - ОшибкаПодключенияКомпоненты = Ложь; - - ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, Запись, ОшибкаПодключенияКомпоненты); - - Если ОшибкаПодключенияКомпоненты И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - Элементы.ИсправитьОшибкиУстановкиВнешнегоСоединения.Видимость = Истина; - - КонецЕсли; + ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, Запись); КонецПроцедуры @@ -260,6 +264,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОповеститьПользователяОРезультатахПодключения(Знач ОшибкаПодключения) + + ТекстПредупреждения = ?(ОшибкаПодключения, НСтр("ru = 'Не удалось установить подключение.'"), + НСтр("ru = 'Подключение успешно установлено.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + +КонецПроцедуры + &НаКлиенте Процедура ВариантРаботыИнформационнойБазыПриИзменении() @@ -276,3 +289,88 @@ Элементы.COMПарольПользователя.Доступность = Не Запись.COMАутентификацияОперационнойСистемы; КонецПроцедуры + +&НаКлиенте +Процедура РазрешитьВнешнийРесурсЗавершение(Результат, ПараметрыЗаписи) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ВнешниеРесурсыРазрешены = Истина; + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Запись, ЗапрашиватьCOM = Ложь, + ЗапрашиватьFILE = Ложь, ЗапрашиватьWS = Ложь, ЗапрашиватьFTP = Ложь) + + ЗапросыРазрешений = Новый Массив; + РегистрыСведений.НастройкиТранспортаОбмена.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, + Запись, ЗапрашиватьCOM, ЗапрашиватьFILE, ЗапрашиватьWS, ЗапрашиватьFTP); + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеFILEЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПроверитьПодключение("FILE"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеFTPЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПроверитьПодключение("FTP"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеWSЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + Отказ = Ложь; + + ОчиститьСообщения(); + + ВыполнитьПроверкуУстановкиПодключенияWS(Отказ); + + ОповеститьПользователяОРезультатахПодключения(Отказ); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеCOMЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + Отказ = Ложь; + + ОчиститьСообщения(); + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + + КонецЕсли; + + ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ); + + ОповеститьПользователяОРезультатахПодключения(Отказ); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html index 5fe1c2a06..01f97cc6d 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html @@ -1,5 +1,29 @@ - -

              Форма позволяет указать настройки различных транспортов сообщений обмена, определенных в конфигурации, а также проверить правильность задания этих настроек.
              Если создается новая запись из формы списка регистра сведений, то доступно поле "Узел информационной базы".
              В поле "Узел информационной базы" указывается узел плана обмена, для которого выполняется настройка параметров транспорта.
              На закладках формы задаются настройки отдельных видов транспортов.

              -

              Общими для всех являются следующие настройки:

              -
              • "Вид транспорта сообщений обмена по умолчанию" – поле для задания вида транспорта, который будет использоваться по умолчанию при выполнении автоматического и интерактивного обмена данными. -
              • "Пароль архива сообщения обмена" – поле для задания пароля для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в базе источнике и пароль распаковки в базе приемнике должны быть одинаковыми для пары обменивающихся конфигураций.
              \ No newline at end of file + +

              Позволяет указать параметры подключения к другой программе для синхронизации данных, а также проверить правильность задания этих параметров.
              На закладках задаются параметры различных видов подключения.

              +

              Параметры подключения также указываются во время настройки синхронизации данных в Помощнике создания синхронизации данных. Эти настройки выводятся по умолчанию. Их можно изменить.

              +

              Перейти к настройке Параметров подключения можно по соответствующей команде из настройки синхронизации данных.

              +

              Общими для всех являются следующие параметры:

              +
              • Подключение по умолчанию - выберите подключение, которое будет использоваться по умолчанию при выполнении автоматической и интерактивной синхронизации данных. +
              • Проверить подключение - нажмите, для того чтобы программа произвела проверку указанных настроек и попыталась подключиться к другой программе. +
              • Сжимать отправляемые данные в архив - включите флажок, для того чтобы ограничить размер отправляемого сообщения. Флажок не предусмотрен для настройки прямого подключения к информационной базе. +
                • Пароль архива сообщения обмена - введите пароль для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в программе-источнике и пароль распаковки в программе-приемнике должны быть одинаковыми для пары обменивающихся программ.

              Прямое подключение:

              +
              • С помощью переключателя выберите вариант информационной базы: +
                • Файловая база корреспондент  +
                  •  Выберите Каталог информационной базы.
                • Клиент серверная база-корреспондент +
                  • Введите Имя сервера; +
                  • Введите Имя информационной базы на сервере.
              • При необходимости включите флажок Аутентификация операционной системы (по умолчанию выключен). В этом случае не нужно заполнять следующие поля. +
              • Введите Имя пользователя; +
              • Введите Пароль пользователя.

              Интернет

              +
              • Введите Адрес программы в интернете. +
              • Введите имя Пользователя и Пароль. +
              • При необходимости включите флажок Запомнить пароль. +
              • Нажмите гиперссылку Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.

              Сетевой каталог

              +

              В поле Каталог  Выберите путь к локальному или сетевому каталогу.

              +

              FTP-ресурс

              +
              • Введите Путь к каталогу и Порт компьютера для передачи данных. +
              • Введите имя Пользователя (логин) и Пароль. +
              • Укажите Максимальный размер файла, для того чтобы ограничить объем пересылаемого сообщения. +
              • При необходимости включите флажок Пассивное соединение. +
              • Нажмите гиперссылку Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.

              Почтовые сообщения

              +

              В поле Учетная запись электронной почты выберите из списка нужную учетную запись или введите новую.

              +

              Укажите Допустимый размер вложения письма, для того чтобы ограничить объем пересылаемого сообщения.

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl index 4b9bc2ffa..77d1357db 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -23,6 +22,88 @@ КонецПроцедуры +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + НастройкиТранспорта = СохраненныеНастройкиТранспорта(); + + Пока НастройкиТранспорта.Следующий() Цикл + + ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, НастройкиТранспорта); + + КонецЦикла; + +КонецПроцедуры + +Функция СохраненныеНастройкиТранспорта() + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | НастройкиТранспортаОбмена.Узел, + | НастройкиТранспортаОбмена.FTPСоединениеПуть, + | НастройкиТранспортаОбмена.FILEКаталогОбменаИнформацией, + | НастройкиТранспортаОбмена.WSURLВебСервиса, + | НастройкиТранспортаОбмена.COMКаталогИнформационнойБазы, + | НастройкиТранспортаОбмена.COMИмяИнформационнойБазыНаСервере1СПредприятия, + | НастройкиТранспортаОбмена.FTPСоединениеПуть КАК FTPСоединениеПуть, + | НастройкиТранспортаОбмена.FTPСоединениеПорт КАК FTPСоединениеПорт, + | НастройкиТранспортаОбмена.WSURLВебСервиса КАК WSURLВебСервиса, + | НастройкиТранспортаОбмена.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией + |ИЗ + | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена"; + + РезультатЗапроса = Запрос.Выполнить(); + Возврат РезультатЗапроса.Выбрать(); + +КонецФункции + +Процедура ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись, ЗапрашиватьCOM = Истина, + ЗапрашиватьFILE = Истина, ЗапрашиватьWS = Истина, ЗапрашиватьFTP = Истина) Экспорт + + Разрешения = Новый Массив; + + Если ЗапрашиватьFTP И Не ПустаяСтрока(Запись.FTPСоединениеПуть) Тогда + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Запись.FTPСоединениеПуть); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, Запись.FTPСоединениеПорт)); + + КонецЕсли; + + Если ЗапрашиватьFILE И Не ПустаяСтрока(Запись.FILEКаталогОбменаИнформацией) Тогда + + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + Запись.FILEКаталогОбменаИнформацией, Истина, Истина)); + + КонецЕсли; + + Если ЗапрашиватьWS И Не ПустаяСтрока(Запись.WSURLВебСервиса) Тогда + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Запись.WSURLВебСервиса); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, СтруктураАдреса.Порт)); + + КонецЕсли; + + Если ЗапрашиватьCOM И (Не ПустаяСтрока(Запись.COMКаталогИнформационнойБазы) + Или Не ПустаяСтрока(Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия)) Тогда + + ИмяCOMСоединителя = ОбщегоНазначения.ИмяCOMСоединителя(); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса( + ИмяCOMСоединителя, ОбщегоНазначения.ИдентификаторCOMСоединителя(ИмяCOMСоединителя))); + + КонецЕсли; + + //Разрешения для обмена через почту запрашиваются в подсистеме Работе с почтовыми сообщениями + + Если Разрешения.Количество() > 0 Тогда + + ЗапросыРазрешений.Добавить( + РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Запись.Узел)); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Функции получения значений настроек для узла плана обмена @@ -198,64 +279,6 @@ Возврат Не Запрос.Выполнить().Пустой(); КонецФункции -Функция КоличествоЭлементовВТранзакцииЗагрузкиДанных(Узел) Экспорт - - // возвращаемое значение функции - Результат = 0; - - ТекстЗапроса = " - |ВЫБРАТЬ - | НастройкиТранспортаОбмена.КоличествоЭлементовВТранзакцииЗагрузкиДанных КАК КоличествоЭлементовВТранзакции - |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена - |ГДЕ - | НастройкиТранспортаОбмена.Узел = &Узел - |"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", Узел); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - - Результат = Выборка.КоличествоЭлементовВТранзакции; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция КоличествоЭлементовВТранзакцииВыгрузкиДанных(Узел) Экспорт - - // возвращаемое значение функции - Результат = 0; - - ТекстЗапроса = " - |ВЫБРАТЬ - | НастройкиТранспортаОбмена.КоличествоЭлементовВТранзакцииВыгрузкиДанных КАК КоличествоЭлементовВТранзакции - |ИЗ - | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена - |ГДЕ - | НастройкиТранспортаОбмена.Узел = &Узел - |"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", Узел); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - - Результат = Выборка.КоличествоЭлементовВТранзакции; - - КонецЕсли; - - Возврат Результат; -КонецФункции - Функция НастроенныеВидыТранспорта(УзелИнформационнойБазы) Экспорт Результат = Новый Массив; @@ -316,8 +339,6 @@ // общие настройки для всех видов транспорта СтруктураНастроек.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию"); СтруктураНастроек.Вставить("ПарольАрхиваСообщенияОбмена"); - СтруктураНастроек.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных"); - СтруктураНастроек.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных"); Если ВидТранспортаОбмена = Неопределено Тогда @@ -339,6 +360,7 @@ Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); + ОбменДаннымиСервер.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); Возврат Результат; КонецФункции @@ -439,4 +461,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl index 85147c2b5..c5b1c211c 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -52,8 +51,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура СокрЛПЗначениеПоля(Запись, Знач Поле) @@ -61,5 +61,6 @@ КонецПроцедуры -#КонецЕсли +#КонецОбласти +#КонецЕсли diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form index 49890f986..6fc15f479 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form @@ -41,7 +41,6 @@ true false true - false true true true @@ -781,126 +780,6 @@ Auto - - ДополнительныеНастройки - 36 - - КоличествоЭлементовВТранзакцииЗагрузкиДанных - 70 - true - true - - true - - - Запись.КоличествоЭлементовВТранзакцииЗагрузкиДанных - - - КоличествоЭлементовВТранзакцииЗагрузкиДанныхExtendedTooltip - 126 - Label - true - true - - Left - - - - КоличествоЭлементовВТранзакцииЗагрузкиДанныхКонтекстноеМеню - 71 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - КоличествоЭлементовВТранзакцииВыгрузкиДанных - 68 - true - true - - true - - - Запись.КоличествоЭлементовВТранзакцииВыгрузкиДанных - - - КоличествоЭлементовВТранзакцииВыгрузкиДанныхExtendedTooltip - 127 - Label - true - true - - Left - - - - КоличествоЭлементовВТранзакцииВыгрузкиДанныхКонтекстноеМеню - 69 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные настройки</value> - - - ru - Дополнительные настройки - - - ДополнительныеНастройкиExtendedTooltip - 125 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - StrongSeparation - true - true - auto - Auto - Auto - - ФормаКоманднаяПанель -1 diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl index 3885bd254..56290f384 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,8 +26,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -43,8 +44,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПроверитьПодключениеFILE(Команда) @@ -60,8 +62,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроверитьПодключение(ВидТранспортаСтрокой) @@ -100,3 +103,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl index e168e0c80..b9280aeee 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl @@ -25,8 +25,6 @@ | НастройкиТранспортаОбменаОбластейДанных.FTPСоединениеПорт, | НастройкиТранспортаОбменаОбластейДанных.FTPСоединениеПуть, | НастройкиТранспортаОбменаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию, - | НастройкиТранспортаОбменаОбластейДанных.КоличествоЭлементовВТранзакцииВыгрузкиДанных, - | НастройкиТранспортаОбменаОбластейДанных.КоличествоЭлементовВТранзакцииЗагрузкиДанных, | НастройкиТранспортаОбменаОбластейДанных.ПарольАрхиваСообщенияОбмена |ИЗ | РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспортаОбменаОбластейДанных @@ -58,7 +56,10 @@ Результат.Вставить("FTPПуть", ""); КонецЕсли; + ОбменДаннымиСервер.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); + Возврат Результат; + КонецФункции #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/НастройкиТранспортаОбменаОбластейДанных.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/НастройкиТранспортаОбменаОбластейДанных.mdo index c7b7e8966..e49768003 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/НастройкиТранспортаОбменаОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/НастройкиТранспортаОбменаОбластейДанных.mdo @@ -255,52 +255,6 @@ Use - - КоличествоЭлементовВТранзакцииВыгрузкиДанных - - ru - Количество элементов в транзакции выгрузки данных - - - Number - - 10 - true - - - - ru - Количество элементов на одну транзакцию выгрузки данных. 0 – данные будут выгружены в одной транзакции. - - - - Use - Use - - - - КоличествоЭлементовВТранзакцииЗагрузкиДанных - - ru - Количество элементов в транзакции загрузки данных - - - Number - - 10 - true - - - - ru - Количество элементов на одну транзакцию загрузки данных. 0 – данные будут загружены в одной транзакции. - - - - Use - Use - - ПарольАрхиваСообщенияОбмена diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/Forms/ФормаЗаписи/Module.bsl index 46bef24e7..1aff1b21a 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/Forms/ФормаЗаписи/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОткрытьОбщиеНастройкиТранспорта(Команда) @@ -11,3 +10,5 @@ ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбменаОбластейДанных", ЭтотОбъект); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl index 4c1afea28..5efd907e0 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Функция АбсолютныйКаталогОбменаИнформацией(Знач Корреспондент) Экспорт @@ -92,8 +91,6 @@ | НастройкиТранспортаОбменаОбластейДанных.FTPСоединениеПорт, | | НастройкиТранспортаОбменаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию, - | НастройкиТранспортаОбменаОбластейДанных.КоличествоЭлементовВТранзакцииВыгрузкиДанных, - | НастройкиТранспортаОбменаОбластейДанных.КоличествоЭлементовВТранзакцииЗагрузкиДанных, | НастройкиТранспортаОбменаОбластейДанных.ПарольАрхиваСообщенияОбмена, | | НастройкиТранспортаОбмена.WSURLВебСервиса, @@ -144,6 +141,8 @@ Результат.Вставить("FTPПуть", ""); КонецЕсли; + ОбменДаннымиСервер.ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат); + Возврат Результат; КонецФункции @@ -194,4 +193,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html index 0d20aece5..d7a9e6554 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 c47323276..4041a98bc 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -17,7 +16,7 @@ ИспользоватьВоВстроенномПочтовомКлиенте = 1; КонецЕсли; - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); КонецПроцедуры @@ -89,20 +88,21 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВключатьПодписьДляНовыйСообщенийПриИзменении(Элемент) - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВключатьПодписьПриОтветеПересылкеПриИзменении(Элемент) - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); КонецПроцедуры @@ -133,12 +133,12 @@ НовоеСообщениеФорматированныйДокумент.Добавить(Запись.ПодписьДляНовыхСообщенийПростойТекст); КонецЕсли; - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); Иначе ДополнительныеПараметры = Новый Структура("КонтекстВызова", "ДляНовыхСообщений"); - ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтаФорма, ДополнительныеПараметры); + ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; @@ -171,12 +171,12 @@ ПриОтветеПересылкеФорматированныйДокумент.Добавить(Запись.ПодписьПриОтветеПересылкеПростойТекст); КонецЕсли; - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); Иначе ДополнительныеПараметры = Новый Структура("КонтекстВызова", "ПриОтветеПересылке"); - ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтаФорма, ДополнительныеПараметры); + ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; @@ -192,7 +192,7 @@ Запись.ОтветственныйЗаОбработкуПисем =ПользовательУчетнойЗаписи; КонецЕсли; - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); КонецПроцедуры @@ -200,12 +200,13 @@ Процедура ИспользоватьВоВстроенномПочтовомКлиентеПриИзменении(Элемент) Запись.НеИспользоватьВоВстроенномПочтовомКлиенте = ?(ИспользоватьВоВстроенномПочтовомКлиенте = 1, Ложь, Истина); - ОбновитьСостояниеЭлементовФормы(ЭтаФорма); + ОбновитьСостояниеЭлементовФормы(ЭтотОбъект); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСостояниеЭлементовФормы(Форма) @@ -283,4 +284,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Commands/НомераОтсканированныхФайлов/CommandModule.bsl b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Commands/НомераОтсканированныхФайлов/CommandModule.bsl deleted file mode 100644 index 77f030ff1..000000000 --- a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Commands/НомераОтсканированныхФайлов/CommandModule.bsl +++ /dev/null @@ -1,6 +0,0 @@ - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("", ); - ОткрытьФорму("РегистрСведений.НомераОтсканированныхФайлов.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html new file mode 100644 index 000000000..01c538eaf --- /dev/null +++ b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html @@ -0,0 +1,11 @@ + +

              Предназначен для просмотра нумерации отсканированных документов и их владельцев.

              +

              Список можно просмотреть по команде Настройка сканирования - Открыть номера отсканированных файлов на закладке Настройки работы с файлами в персональных настройках программы.

              +

              Программа автоматически присваивает номер отсканированным файлам. В списке можно отследить движение файлов, увидеть, какие файлы были удалены.

              +

              В списке выводится:

              +
              • Владелец - объект программы. Если номер был использован в нескольких объектах программы, то это можно увидеть в списке; +
              • Номер - номер отсканированного файла.

              Обнуление номеров отсканированных файлов

              +
              • Во время работы со сканированием может потребоваться сбросить (начать с нуля) нумерацию отсканированных файлов у какого-то владельца файлов (папки файлов или элемента списка), например, если несколько изображений было отсканировано в тестовых целях, и после тестирования необходимо сканировать уже в рабочих целях - с правильными номерами. +
              • Для этого надо найти нужного владельца файлов и поставить значение номера в 0.

              См. также:

              + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo index 284ecbc36..317a69b55 100644 --- a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo +++ b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo @@ -48,6 +48,11 @@ + + + ru + + Managed Номер @@ -95,13 +100,4 @@ true true - - НомераОтсканированныхФайлов - - ru - Номера отсканированных файлов - - NavigationPanelSeeAlso - Auto - diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index a9881742b..fb2dffcdc 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -6,8 +6,7 @@ // Добавлять записи в этот регистр наборами записей запрещено, // т.к. при этом будут утеряны настройки, не попавшие в набор записей. -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура УстановитьПризнакНачальнойВыгрузкиДанных(Знач УзелИнформационнойБазы) Экспорт @@ -350,4 +349,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl index 912ae7884..97533e979 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,3 +12,5 @@ "Получатель", ОбменСообщениямиВнутренний.ЭтотУзел() ); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl index e87389057..23044b77f 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,3 +15,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl index 12344557d..1a8bfd178 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl @@ -1,17 +1,15 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Определяет конечные точки (подписчиков) для широковещательного канала // типа "Публикация/Подписка". // // Параметры: -// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. +// КаналСообщений - Строка - Идентификатор широковещательного канала сообщений. // // Возвращаемое значение: -// Тип: Массив. Массив элементов конечных точек. -// Массив содержит элементы типа ПланОбменаСсылка.ОбменСообщениями. +// Массив - Массив элементов конечных точек, содержит элементы типа ПланОбменаСсылка.ОбменСообщениями. // Функция ПодписчикиКаналаСообщений(Знач КаналСообщений) Экспорт @@ -30,4 +28,6 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl index eaa3d032f..9057d14a1 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -28,4 +27,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html index e0efd9ffc..e1703c348 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html @@ -1,10 +1,14 @@ - -

              Для открытия макета используйте:

              -
              • клавишу Enter  -
              • двойной щелчок левой кнопкой мыши -
              • команду "Открыть"

               

              -

              Варианты открытия макета:

              -

              -
    • Синхронизация данных
    • - -
      Только для просмотраМакет не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр"
      Для редактированияМакет будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений

       

      \ No newline at end of file + +

      Предназначена для выбора режима открытия макета.

      +

      Для открытия макета в списке Макеты печатных форм можно:

      +
      • нажать клавишу Enter - необходимо выбрать режим открытия макета; +
      • использовать двойной щелчок левой кнопкой мыши - необходимо выбрать режим открытия макета; +
      • нажать  Открыть; +
      • нажать  Изменить.

      Варианты открытия макета:

      +

      С помощью переключателя выберите режим открытия макета по двойному щелчку мыши (клавише Enter):

      +
      • Только для просмотра - макет не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр". +
      • Для просмотра и редактирования - макет будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений.

      Прекращение вывода сообщения

      +
      • Для того чтобы больше не выводить это сообщение, включите флажок Больше не спрашивать. +
      • Поменять эту настройку затем можно с помощью команды Все действия - Задать действие при выборе макета печатной формы в списке макетов печатных форм или из персональных настроек, вкладка Печать, кнопка Задать действие при выборе макета печатной формы.

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl index 96a2a7e3e..050914c6b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -34,8 +34,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -51,8 +52,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Процедура СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр) @@ -68,3 +70,5 @@ РежимОткрытияМакетаПросмотр); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Help/ru.html new file mode 100644 index 000000000..524554ec2 --- /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 68b323941..85e0d0986 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,8 +26,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ИзменитьРабочийКаталогПечати(Команда) @@ -40,3 +41,5 @@ Процедура ПовторитьПечать(Команда) Закрыть(КаталогДляСохраненияДанныхПечати); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/ConditionalAppearance.dcssca deleted file mode 100644 index f58a101a0..000000000 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/ConditionalAppearance.dcssca +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - СписокМакетов - - - - - СписокМакетов.Редактируется - Equal - true - - - - - ЦветТекста - style:ФайлЗанятыйТекущимПользователем - - - false - Шрифт - - - - - diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index ebf01ecab..337716ea3 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -1061,7 +1061,7 @@ ru Использовать измененный макет - 8 + 1 ru Использовать измененный макет @@ -1086,7 +1086,7 @@ ru Использовать стандартный макет - 9 + 2 ru Использовать стандартный макет @@ -1111,7 +1111,7 @@ ru Задать действие при выборе макета печатной формы... - 2 + 3 ru Задать действие при выборе макета печатной формы @@ -1133,7 +1133,7 @@ ru Изменить - 5 + 4 ru Изменить макет @@ -1159,7 +1159,7 @@ ru Открыть - 10 + 5 ru Открыть макет @@ -1185,7 +1185,7 @@ ru Удалить измененный макет - 11 + 6 ru Удалить измененный макет diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html index 0311007cb..f38a4f7d4 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html @@ -1,4 +1,38 @@ - -

      В списке перечислены макеты (бланки) всех печатных форм, имеющихся в программе. Макеты сгруппированы по объектам программы, к которым они относятся (эти объекты указаны в колонке Владелец макета).

      -

      Макеты печатных форм могут быть отредактированы, при этом имеется возможность последующего переключения между отредактированным вариантом макета и стандартным. Переключение осуществляется, соответственно, кнопками Использовать измененный макет и Использовать стандартный макет.

      -

      Предупреждение: некоторые изменения макета могут привести к тому, что печатная форма перестанет выводиться. Как правило, такую неполадку вызывает удаление, переименование областей и параметров макета. Если печатная форма после изменения макета перестала формироваться, можно попытаться исправить макет, откатив ошибочные правки. Если исправить макет не удается, необходимо удалить измененный макет, нажав на соответствующую кнопку командной панели. Вместо такого макета будет вновь использоваться стандартный.

      \ No newline at end of file + +

      Предназначен для управления макетами печати. В списке перечислены макеты (бланки) всех печатных форм, имеющихся в программе.

      +

      Открыть список можно с помощью команды Макеты печатных форм раздела Администрирование - Печатные формы, отчеты и обработки.

      +

      В списке выводится:

      +
      •  - проставляется значок, если в макет внесены изменения; +
      • Макет печатной формы - полное наименование печатной формы, указывается также и программа, в которой сделан макет. Значок рядом с наименованием указывает, в какой программе сделан макет. +
      • Владелец макета - объект программы, к которому относится печатная форма. Макеты сгруппированы по объектам программы.

      Отборы

      +
      • +
        Если макетов много, то можно воспользоваться предусмотренными в программе средствами для отбора нужных макетов.
        +
      • +
        Найти необходимый макет можно по наименованию или части наименования. Для этого напишите поисковое выражение в поле слева.
        +
      • +
        Макеты можно отобрать по определенному признаку с помощью поля Показывать:
        +
        • Все макеты, +
        • Стандартные макеты (без изменений), +
        • Используемые макеты с внесенными изменениями, +
        • Неиспользуемые макеты с внесенными изменениями, +
        • Все макеты с внесенными изменениями.

      Просмотр макета

      +

      Просмотреть макет можно, нажав  Открыть. Также можно это сделать с помощью двойного щелчка мыши, затем при необходимости выбрать режим открытия макета. При открытии макет в формате MXL блокируется от изменений.

      +

      Редактирование макета

      +
      • Печатные формы формируются на основе макетов, поставляемых в составе программы. В то же время, поставляемые макеты могут быть отредактированы. +
      • Для перехода к редактированию макета нажмите  Изменить. Также можно это сделать с помощью двойного щелчка мыши, затем при необходимости выбрать режим открытия макета. +
      • Макеты в виде табличного документа редактируются в самой программе, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные программы. +
      • Перед началом редактирования программа напоминает об этом в сообщении, в котором размещена гиперссылка для перехода на страницы соответствующих программ для их установки. Нажмите кнопку Продолжить.  +
      • Для работы в веб-клиенте могут потребоваться дополнительные настройки. +
      • Если соответствующая офисная программа имеется на компьютере, макет будет открыт для редактирования. +
      • После внесения изменений сохраните макет, закройте офисную программу. Для окончания редактирования и сохранения макета в программе нажмите кнопку Завершить изменение. +
      • После сохранения у измененного макета в списке устанавливается значок , т.е. по умолчанию отредактированный макет теперь будет использоваться при печати.

      Переключение между стандартными и пользовательскими макетами

      +

      Макеты печатных форм могут быть отредактированы, при этом имеется возможность последующего переключения между отредактированным вариантом макета и стандартным.

      +
      • Переключение осуществляется, соответственно, кнопками +
        •  Использовать измененный макет (пользовательский); +
        •  Использовать стандартный макет. При этом значок  становится неактивным, показывая, что имеется и пользовательский макет.

      Предупреждение

      +
      • Некоторые изменения макета могут привести к тому, что печатная форма перестанет выводиться. Как правило, такую неполадку вызывает удаление, переименование областей и параметров макета. +
      • Если печатная форма после изменения макета перестала формироваться, можно попытаться исправить макет, откатив ошибочные правки.  +
      • Если исправить макет не удается, необходимо  Удалить измененный макет. Вместо такого макета будет вновь использоваться стандартный.

      Действие при выборе печатной формы

      +

      Для того чтобы указать, какое действие должно выполняться при двойном щелчке мыши по макету, нажмите Все действия - Задать действие при выборе макета печатной формы. Укажите, как открыть макет. При необходимости нажмите соответствующий флажок, для того чтобы программа больше не выводила этот вопрос.

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index 0c351b0e6..f0a04085b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -1,12 +1,11 @@ &НаКлиенте Перем КонтекстВыбора; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -77,8 +76,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ МакетыПечатныхФорм +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыМакетыПечатныхФорм &НаКлиенте Процедура МакетыПечатныхФормВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -90,8 +90,9 @@ УстановитьДоступностьКнопокКоманднойПанели(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ИзменитьМакет(Команда) @@ -121,8 +122,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Начальное заполнение @@ -503,3 +505,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Help/ru.html new file mode 100644 index 000000000..e28a8d219 --- /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 b1ef382f5..e9739169e 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПутьККаталогуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -33,8 +34,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОК(Команда) @@ -43,3 +45,5 @@ ОповеститьОВыборе(КаталогДляСохраненияДанныхПечати); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html index 279b9e472..55b41c85e 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html @@ -1,12 +1,15 @@ - -

      -

      Редактирование файла макета

      +

      +

      Макеты в виде табличного документа редактируются в самой программе, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные программы.

      Как правило, никаких специальных действий для запуска нужной программы выполнять не требуется, достаточно кликнуть по файлу макета, и нужная программа запустится автоматически (при условии, что она установлена).

      +

      Для редактирования макета в веб-клиенте могут потребоваться дополнительные настройки.

      +

      Если программа уже установлена, нажмите Продолжить.

      Программа, с помощью которой можно отредактировать макет, определяется типом (форматом) макета:

      -
      Тип макета

      Программа

      .mxl 1С:Предприятие - Работа с файлами
      .doc Microsoft Word
      .odtOpenOffice Writer
      \ No newline at end of file +
      OpenOffice Writer

       

      +

       

      +

       

      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 7769dabc5..8600c4556 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,7 +8,6 @@ Возврат; КонецЕсли; - ИмяОбъектаМетаданныхМакета = Параметры.ИмяОбъектаМетаданныхМакета; ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); @@ -76,16 +74,18 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СсылкаНаСтраницуПрограммыНажатие(Элемент) ПерейтиПоНавигационнойСсылке(АдресПрограммыДляОткрытияМакета); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Изменить(Команда) @@ -140,15 +140,14 @@ КонецПроцедуры - - &НаКлиенте Процедура Отмена(Команда) Закрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьНазваниеПрограммыДляОткрытияМакета() @@ -230,34 +229,33 @@ &НаКлиенте Процедура ОткрытьМакетТонкийКлиент() - #Если Не ВебКлиент Тогда - - Макет = ПолучитьМакет(ИмяОбъектаМетаданныхМакета); - ВременнаяПапка = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременнаяПапка); - ПутьКФайлуМакета = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременнаяПапка) + ИмяФайлаМакета; - - Если ТипМакета = "MXL" Тогда - Если Параметры.ТолькоОткрытие Тогда - Макет.ТолькоПросмотр = Истина; - Макет.Показать(ПредставлениеМакета,,Истина); - Иначе - Макет.Записать(ПутьКФайлуМакета); - Макет.Показать(ПредставлениеМакета, ПутьКФайлуМакета, Истина); - - ИзменяемыйМакет = Макет; - КонецЕсли; +#Если Не ВебКлиент Тогда + Макет = МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета); + ВременнаяПапка = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ВременнаяПапка); + ПутьКФайлуМакета = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременнаяПапка) + ИмяФайлаМакета; + + Если ТипМакета = "MXL" Тогда + Если Параметры.ТолькоОткрытие Тогда + Макет.ТолькоПросмотр = Истина; + Макет.Показать(ПредставлениеМакета,,Истина); Иначе Макет.Записать(ПутьКФайлуМакета); - Если Параметры.ТолькоОткрытие Тогда - ФайлМакета = Новый Файл(ПутьКФайлуМакета); - ФайлМакета.УстановитьТолькоЧтение(Истина); - КонецЕсли; - ЗапуститьПриложение(ПутьКФайлуМакета); + Макет.Показать(ПредставлениеМакета, ПутьКФайлуМакета, Истина); + + ИзменяемыйМакет = Макет; КонецЕсли; - - ПерейтиНаСтраницуЗавершенияИзменения(); - #КонецЕсли + Иначе + Макет.Записать(ПутьКФайлуМакета); + Если Параметры.ТолькоОткрытие Тогда + ФайлМакета = Новый Файл(ПутьКФайлуМакета); + ФайлМакета.УстановитьТолькоЧтение(Истина); + КонецЕсли; + ЗапуститьПриложение(ПутьКФайлуМакета); + КонецЕсли; + + ПерейтиНаСтраницуЗавершенияИзменения(); +#КонецЕсли КонецПроцедуры @@ -278,7 +276,7 @@ &НаСервере Функция ДвоичныеДанныеМакета() - ДанныеМакета = УправлениеПечатью.ПолучитьМакет(ИмяОбъектаМетаданныхМакета); + ДанныеМакета = УправлениеПечатью.МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета); Если ТипЗнч(ДанныеМакета) = Тип("ТабличныйДокумент") Тогда ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ДанныеМакета.Записать(ИмяВременногоФайла); @@ -317,6 +315,8 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ПолучитьМакет(ИмяОбъектаМетаданныхМакета) - Возврат УправлениеПечатью.ПолучитьМакет(ИмяОбъектаМетаданныхМакета); +Функция МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета) + Возврат УправлениеПечатью.МакетПечатнойФормы(ИмяОбъектаМетаданныхМакета); КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html new file mode 100644 index 000000000..e0cf8e95b --- /dev/null +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html @@ -0,0 +1,29 @@ + +

      Многие документы, справочники и другие объекты программы имеют свои печатные формы. Печатные формы могут формироваться в виде табличных документов или офисных документов в форматах Microsoft Word, OpenOffice.org Writer, Adobe PDF, HTML, Microsoft Excel, а также в формате табличного документа 1С:Предприятие (.mxl). При этом не требуется, чтобы сами эти программы были установлены на компьютере.

      +

      В то же время, для формирования печатных форм, которые сразу выводятся в форматах Microsoft Word и OpenOffice.org Writer, необходимо, чтобы на компьютере были установлены соответствующие офисные программы.

      +

      Особенности формирования печатных форм в веб-клиенте

      +

      При работе в Интернете для формирования печатных форм в веб-клиенте необходимы дополнительные настройки браузера. Необходимо отменить блокирование всплывающих окон для веб-сайта программы.

      +
      • При работе в браузере Internet Explorer выберите команду Сервис - блокирование всплывающих окон - Параметры блокирования всплывающих окон. +
      • Введите адрес веб-сайта программы в поле Адрес веб-узла, получающего разрешение, нажмите кнопку Добавить, название сайта появится в поле Веб-узлы, имеющие разрешение. Далее нажмите Закрыть. Для получения более подробной информации см. документацию к веб-браузеру.

      Также при работе в Internet Explorer, если включена фильтрация активного содержимого, то нужно нажать на значок Состояние фильтрации активного содержимого и отключить фильтрацию Axtivex только для этого сайта.

      +

      Печать в формате PDF

      +

      При печати в веб-клиенте печатные формы выводятся в формате PDF (по умолчанию), который можно сразу отправить на принтер или сохранить в файл на компьютер. Поэтому необходимо, чтобы на компьютере была установлена программа просмотра документов PDF, например, Adobe Reader. 

      +

      Если не установлена программа просмотра документов PDF или не проведены настройки, указанные выше, при попытке печати в веб-клиенте в формате PDF будет выведено информационное сообщение. Если на компьютере имеется программа Adobe Reader, но не выполнены настройки веб-браузера, в нижнем окне Открыть или сохранить выберите Открыть, затем нажмите Печать или ОК. После распечатки закройте окно печати, нажмите на кнопку Закрыть для возврата в программу.

      +

      Печать в формате HTML

      +
      • Если программа Adobe Reader на компьютере не установлена, и нет возможности ее установить, или этот способ печати не устраивает по каким-либо причинам, можно выбрать способ печати HTML. +
      • Для этого нажмите кнопку Главное меню, выберите команду Сервис - Параметры, включите Способ печати в виде HTML, нажмите OK.

      Печатные формы в виде документов Microsoft Word или OpenOffice.org Writer

      +

      Для печати необходимо, чтобы на компьютере были установлены офисные программы Microsoft Word (не ниже 2003) и OpenOffice.org Writer (версия не ниже 3.2). Кроме того, при работе через Интернет необходим веб-браузер Internet Explorer версии 6.0 и выше, для которого следует предварительно выполнить дополнительную настройку.

      +

      Для настройки Internet Explorer выберите команду Сервис - Свойства обозревателя. На вкладке Безопасность нажмите кнопку Другой и настройте уровень безопасности для работы веб-клиента:

      +
      • отключите блокирование всплывающих окон; +
      • разрешите сценарии; +
      • разрешите использовать элементы Axtivex. +
      • На вкладке Конфиденциальность выберите уровень безопасности не выше среднего.

      Подробнее о настройках браузера см. Руководство пользователя, глава 13 "Работа с веб-клиентом" и Руководство администратора, глава 8 "Настройка веб-браузеров для работы в веб-клиенте".

      +

      При первой попытке печати без установки расширения работы с файлами выводится предложение установить его. Нажмите Установить, затем Продолжить для начала установки.

      +
      • Для начала установки расширения работы с файлами нажмите Продолжить. +
      • В зависимости от настроек системы безопасности компьютера может потребоваться подтвердить установку программы на компьютер. Проверьте издателя программы (1С) и нажмите Установить для подтверждения. +
      • После успешного окончания установки нажмите ОК. В следующий раз это сообщение выводиться уже не будет.

      При первой попытке печати документа программа предлагает создать рабочий каталог для хранения временных файлов печати. Выберите папку, нажмите ОК. Это сообщение программа также выводит однократно. Также для изменения рабочего каталога печати можно воспользоваться командой в персональных настройках программы (вкладка Печать). На вкладке Печать нажмите Настройка рабочего каталога печати, выберите папку на компьютере.

      +

      Затем программа предлагает получить файл макета, необходимый для формирования печатной формы. Нажмите ОК для продолжения. Через некоторое время сформированная печатная форма будет открыта в программе Microsoft Word.

      +

      Если какие-либо настройки были пропущены или сделаны неправильно, после выполнения команды Печать выводится сообщение об ошибке. В этом случае необходимо еще раз проверить настройки.

      +

      Редактирование макетов печатных форм в веб-клиенте

      +

      Для изменения и просмотра макетов в виде табличных документов, если на компьютере не установлена программа 1С:Предприятие, программой предлагается установить дополнительную программу 1С:Предприятие 8.2 - Работа с файлами. Ее можно скачать, пройдя по гиперссылке Перейти на страницу программы "1С:Предприятие - Работа с файлами" для установки, или с сайта фирмы "1С": http://v8.1c.ru/metod/fileworkshopdownload.htm.

      +

      Для просмотра макета в веб-клиенте подтвердите загрузку файла на компьютер с помощью кнопки Продолжить. При открытии макета печатной формы в виде табличного документа браузером выводится предложение открыть или сохранить файл макета на компьютер. Выберите папку для сохранения макета. Затем можно открыть программу 1С:Предприятия 8.2 - Работа с файлами для изменения макета.

      +

      Сохраните изменения, закройте файл макета, затем переключитесь обратно в программу, нажмите кнопку Завершить изменение. Для помещения измененного макета в программу укажите путь к файлу макета с помощью кнопки Обзор, нажмите ОК. Аналогично проходит работа с макетами печатных форм в форматах Microsoft Word и OpenOffice.org Writer.

      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo index f7dfffcff..994777c38 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo @@ -50,6 +50,11 @@ + + + ru + + Managed ru @@ -162,6 +167,11 @@ ru Диалог повтора печати
      + + + ru + + PersonalComputer MobileDevice
      @@ -185,6 +195,11 @@ ru Настройка каталога файлов печати + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl index 7afba34be..28ea3dbee 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Записывает настройки быстрого доступа к обработкам "по пользователям". // @@ -19,5 +18,6 @@ НаборЗаписей.Записать(Истина); КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl index 0eefe522a..55697502b 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -24,3 +25,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl index 205f221c8..f9b697378 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +20,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -47,8 +48,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -60,3 +62,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 16a380149..834fa5cb8 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет данные регистра при изменении конфигурации. // @@ -446,4 +445,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form index a4e819914..6892d4ce4 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -46,7 +46,6 @@ true true true - false true true true @@ -176,6 +175,10 @@ Запись.ИмяМакетаПравил None + + OnChange + ИмяМакетаПравилПриИзменении + ИмяМакетаПравилExtendedTooltip 59 @@ -201,7 +204,6 @@ true true false - true true true true @@ -367,8 +369,6 @@ true true true - false - false true true true @@ -1129,25 +1129,17 @@ ФормаКоманднаяПанель -1 - - ГруппаКнопок - 24 + + ФормаЗаписатьИЗакрыть + 82 true true true - - <key>ru</key> - <value>Группа кнопок</value> - - - ru - Группа кнопок - - ГруппаКнопокExtendedTooltip - 51 + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 83 Label true true @@ -1155,7 +1147,39 @@ Left - + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 84 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto ФормаПеречитать @@ -1184,6 +1208,32 @@ Auto InAdditionalSubmenu + + ФормаУдалить + 86 + true + true + + true + + + ФормаУдалитьРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -1192,6 +1242,7 @@ ПриСозданииНаСервере Copy + WriteAndClose LockOwner true true @@ -1329,11 +1380,41 @@ Auto Auto
      + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 3 + + ru + Записать и закрыть + + + true + + + StdPicture.WriteAndClose + + + + ЗаписатьИЗакрыть + + + Text + Auto + Auto + + + AfterWrite + ПослеЗаписи + BeforeWrite ПередЗаписью diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html index b78a763c9..ef4fc7402 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html @@ -1,13 +1,57 @@ - -

      Для стандартного обмена между типовыми конфигурациями используются Типовые правила из конфигурации. Однако в ряде случаев необходимо использовать Правила из файла (например, если обмен ведется между базами с нетиповыми конфигурациями) или Режим отладки (например, если во время обмена данными произошла ошибка).

      -

      Для замены типовых правил конвертации объектов правилами из внешнего файла необходимо:

      -
      • Установить значение переключателя в положение Правила из файла или Режим отладки и по кнопке Загрузить правила выбрать файл правил на компьютере или в сетевой папке. -
      • Обратить внимание, что загружены корректные правила, подходящие для используемых версий конфигурации-источника и конфигурации-приемника. -
      • Нажать на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

      -

      Если выбран Режим отладки, то становятся доступными следующие настройки:

      -
      • Подключить внешнюю обработку для отладки выгрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков выгрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере. -
      • Подключить внешнюю обработку для отладки загрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков загрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере. -
      • Режим протоколирования обмена данными – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации. -
      • Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение обмена данными не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

      Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных обменов данными (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено два обмена "Обмен с филиалом в Краснодаре" и "Обмен с представительством в Киеве"). Поэтому если в системе настроено несколько однотипных обменов, то замену правил достаточно выполнить однократно (выбрав любой из настроенных обменов данными).

      -

      См. также

      -
        \ No newline at end of file + +

        Предназначена для контроля и замены правил конвертации данных. Правила конвертации данных используются при синхронизации данных двух программ. 

        +

        Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

        +

        Правила конвертации объектов можно открыть из настройки синхронизации данных по команде Все действия - Загрузить правила конвертации объектов.

        +

        Источник правил

        +

        Для стандартной синхронизации данных между типовыми конфигурациями используются Типовые правила из конфигурации (имя макета правил конвертации, из которого были получены типовые правила, указывается).  Однако в ряде случаев необходимо использовать Правила из файла (например, если синхронизация ведется между базами с нетиповыми конфигурациями) или Режим отладки (например, если во время синхронизации данных произошла ошибка).

        +

        С помощью переключателя Источник правил можно установить, откуда брать правила регистрации объектов:

        +
        • +
          Типовые правила из конфигурации (выбраны по умолчанию).
          +
        • +
          Правила из файла. Использование правил, загруженных из файла, может привести к ошибкам при переходе на новую версию программы.
          +
        • +
          Режим отладки. Если выбран Режим отладки, то становятся доступными следующие настройки:
          +
          • +
            Подключить внешнюю обработку для отладки выгрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков выгрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере.
            +
          • +
            Подключить внешнюю обработку для отладки загрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков загрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере.
            +
          • +
            Режим протоколирования синхронизации данных – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации.
            +
          • +
            Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение синхронизации данных не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

        Ниже выводится наименование правил, которые в данный момент используются.

        +

        Информация о правилах

        +

        Для контроля выводится информация о правилах:

        +
        • +
          Предупреждение о возможности возникновения ошибок при использовании правил из внешнего файла;
          +
        • +
          Правила конвертации этой программы от - указывается дата и время создания правил;
          +
        • +
          Конфигурация источник - указывается версия правил конвертации объектов;
          +
        • +
          Конфигурация приемник - указывается версия правил конвертации объектов;
          +
        • +
          Правила конвертации корреспондента от - указывается дата и время создания правил;
          +
        • Конфигурация источник - указывается версия правил конвертации объектов; +
        • Конфигурация приемник - указывается версия правил конвертации объектов.

        Дополнительно

        +
        • Включите флажок Использовать фильтр выборочной регистрации объектов.

        Загрузка правил

        +
        • +
          Установите переключатель Источник правил в нужное положение.
          +
        • +
          +
          Нажмите Загрузить правила.
          +
        • +
          +
          При необходимости укажите путь к файлу с правилами.

        Выгрузка правил

        +

        При необходимости правила регистрации можно выгрузить в файл.

        +
        • +
          Для этого нажмите Выгрузить правила.
          +
        • +
          Выберите способ выгрузки:
          +
          • +
            Обычным файлом;
            +
          • +
            В архиве .zip.
        • +
          Выберите путь к файлу на компьютере или на сетевом диске, наименование проставляется программой по умолчанию. Нажмите Сохранить.

        Замена типовых правил конвертации объектов правилами из внешнего файла

        +
        • Установить значение переключателя Источник правил в положение Правила из файла или Режим отладки и по кнопке Загрузить правила выбрать файл правил на компьютере или в сетевой папке. +
        • Обратить внимание, что загружены корректные правила, подходящие для используемых версий программы-источника и программы-приемника.  Для этого выводится Информация о правилах, где указано, от какой даты эти правила.  +
        • Нажать на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

        Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено две синхронизации данных "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в программе настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

        \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl index 3389bf022..c823e7eaf 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -1,5 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ВнешниеРесурсыРазрешены; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,15 +27,98 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если ИсточникПравил <> 0 И ПустаяСтрока(Запись.ИмяФайлаПравил) Тогда - ПоказатьПредупреждение(,Нстр("ru = 'Укажите файл правил обмена.'")); + Если Не ПроверитьЗаполнениеНаКлиенте() Тогда Отказ = Истина; + Возврат; КонецЕсли; - + + Если ВнешниеРесурсыРазрешены <> Истина Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ПараметрыЗаписи); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + + Отказ = Истина; + + КонецЕсли; + ВнешниеРесурсыРазрешены = Ложь; + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +&НаКлиенте +Функция ПроверитьЗаполнениеНаКлиенте() + + ЕстьНезаполненныеПоля = Ложь; + + Если ИсточникПравил <> 0 И ПустаяСтрока(Запись.ИмяФайлаПравил) Тогда + + СтрокаСообщения = Нстр("ru = 'Не задан файл правил обмена.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, ЕстьНезаполненныеПоля); + + КонецЕсли; + + Если Запись.РежимОтладки Тогда + + Если Запись.РежимОтладкиВыгрузки Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки); + ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; + + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + + СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки",, ЕстьНезаполненныеПоля); + + КонецЕсли; + + КонецЕсли; + + Если Запись.РежимОтладкиЗагрузки Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки); + ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; + + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + + СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки",, ЕстьНезаполненныеПоля); + + КонецЕсли; + + КонецЕсли; + + Если Запись.РежимПротоколированияОбменаДанными Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПротоколаОбмена); + ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; + + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + + СтрокаСообщения = НСтр("ru = 'Не задано имя файла протокола обмена.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаПротоколаОбмена",, ЕстьНезаполненныеПоля); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат Не ЕстьНезаполненныеПоля; + +КонецФункции + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИмяПланаОбменаПриИзменении(Элемент) @@ -116,8 +201,14 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ИмяМакетаПравилПриИзменении(Элемент) + Запись.ИмяМакетаПравилКорреспондента = Запись.ИмяМакетаПравил + "Корреспондента"; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьПравила(Команда) @@ -132,109 +223,29 @@ ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПравил); ПараметрыДиалога = Новый Структура; - ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите из какого файла загрузить правила'")); - ПараметрыДиалога.Вставить("Фильтр", - НСтр("ru = 'Файлы правил (*.xml)'") + "|*.xml|" - + НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip" - ); - + ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите архив с правилами обмена'")); + ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"); ПараметрыДиалога.Вставить("ПолноеИмяФайла", ЧастиИмени.ПолноеИмя); - ПараметрыДиалога.Вставить("ИндексФильтра", ?( НРег(ЧастиИмени.Расширение) = ".zip", 1, 0) ); Оповещение = Новый ОписаниеОповещения("ЗагрузитьПравилаЗавершение", ЭтотОбъект); ОбменДаннымиКлиент.ВыбратьИПередатьФайлНаСервер(Оповещение, ПараметрыДиалога, УникальныйИдентификатор); КонецПроцедуры -&НаКлиенте -Процедура ЗагрузитьПравилаЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт - - АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; - ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; - - Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(АдресПомещенногоФайла) Тогда - ТекстОшибки = НСтр("ru = 'Ошибка передачи файла настроек синхронизации данных на сервер'"); - КонецЕсли; - - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); - Возврат; - КонецЕсли; - - // Успешно передали файл, загружаем на сервере - ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(РезультатПомещенияФайлов.Имя); - - ВыполнитьЗагрузкуПравил(АдресПомещенногоФайла, ЧастиИмени.Имя, НРег(ЧастиИмени.Расширение) = ".zip"); -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьЗагрузкуПравил(Знач АдресПомещенногоФайла, Знач ИмяФайла, Знач ЭтоАрхив) - Отказ = Ложь; - - Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); - ЗагрузитьПравилаНаСервере(Отказ, АдресПомещенногоФайла, ИмяФайла, ЭтоАрхив); - Состояние(); - - Если Не Отказ Тогда - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Правила успешно загружены в информационную базу.'")); - Возврат; - КонецЕсли; - - ТекстОшибки = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. - |Перейти в журнал регистрации?'"); - - Оповещение = Новый ОписаниеОповещения("ПоказатьЖурналРегистрацииПриОшибке", ЭтотОбъект); - ПоказатьВопрос(Оповещение, ТекстОшибки, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); -КонецПроцедуры - -&НаКлиенте -Процедура ПоказатьЖурналРегистрацииПриОшибке(Ответ, ДополнительныеПараметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - - Отбор = Новый Структура; - Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными); - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ВыгрузитьПравила(Команда) - ВариантыВыгрузки = Новый СписокЗначений; - ВариантыВыгрузки.Добавить(Ложь, НСтр("ru = 'Обычным файлом'") ); - ВариантыВыгрузки.Добавить(Истина, НСтр("ru = 'В архиве zip'") ); - - Оповещение = Новый ОписаниеОповещения("ВыгрузитьПравилаЗавершение", ЭтотОбъект); - ПоказатьВыборИзМеню(Оповещение, ВариантыВыгрузки); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыгрузитьПравилаЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - КонецЕсли; - ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПравил); - - Если ВыбранныйЭлемент.Значение Тогда - // Выгружаем как архив - АдресХранения = ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ЧастиИмени.ИмяБезРасширения); - ФильтрИмени = НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"; - Иначе - АдресХранения = ПолучитьНавигационнуюСсылкуНаСервере(); - ФильтрИмени = НСтр("ru = 'Файлы правил (*.xml)'") + "|*.xml"; - КонецЕсли; + + // Выгружаем как архив + АдресХранения = ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(); Если ПустаяСтрока(АдресХранения) Тогда Возврат; КонецЕсли; Если ПустаяСтрока(ЧастиИмени.ИмяБезРасширения) Тогда - ПолноеИмяФайла = НСтр("ru = 'Правила для обмена данными'"); + ПолноеИмяФайла = НСтр("ru = 'Правила конвертации'"); Иначе ПолноеИмяФайла = ЧастиИмени.ИмяБезРасширения; КонецЕсли; @@ -243,15 +254,26 @@ ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Сохранение); ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите в какой файл выгрузить правила'") ); ПараметрыДиалога.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); - ПараметрыДиалога.Вставить("Фильтр", ФильтрИмени); + ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"); ПолучаемыйФайл = Новый Структура("Имя, Хранение", ПолноеИмяФайла, АдресХранения); ОбменДаннымиКлиент.ВыбратьИСохранитьФайлНаКлиенте(ПолучаемыйФайл, ПараметрыДиалога); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ЗаписатьИЗакрыть"); + Записать(ПараметрыЗаписи); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьСписокВыбораПлановОбмена() @@ -293,6 +315,61 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗагрузитьПравилаЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт + + АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; + ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; + + Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(АдресПомещенногоФайла) Тогда + ТекстОшибки = НСтр("ru = 'Ошибка передачи файла настроек синхронизации данных на сервер'"); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + Возврат; + КонецЕсли; + + // Успешно передали файл, загружаем на сервере + ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(РезультатПомещенияФайлов.Имя); + + ВыполнитьЗагрузкуПравил(АдресПомещенногоФайла, ЧастиИмени.Имя, НРег(ЧастиИмени.Расширение) = ".zip"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузкуПравил(Знач АдресПомещенногоФайла, Знач ИмяФайла, Знач ЭтоАрхив) + Отказ = Ложь; + + Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); + ЗагрузитьПравилаНаСервере(Отказ, АдресПомещенногоФайла, ИмяФайла, ЭтоАрхив); + Состояние(); + + Если Не Отказ Тогда + ПоказатьОповещениеПользователя(,, НСтр("ru = 'Правила успешно загружены в информационную базу.'")); + Возврат; + КонецЕсли; + + ТекстОшибки = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. + |Перейти в журнал регистрации?'"); + + Оповещение = Новый ОписаниеОповещения("ПоказатьЖурналРегистрацииПриОшибке", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстОшибки, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьЖурналРегистрацииПриОшибке(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура УстановитьВидимость() @@ -320,7 +397,7 @@ Объект = РеквизитФормыВЗначение("Запись"); - РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, Объект, АдресВременногоХранилища, ИмяФайлаПравил, , ЭтоАрхив); + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, Объект, АдресВременногоХранилища, ИмяФайлаПравил, ЭтоАрхив); Если Не Отказ Тогда @@ -340,39 +417,26 @@ КонецПроцедуры &НаСервере -Функция ПолучитьНавигационнуюСсылкуНаСервере() - - Отбор = Новый Структура; - Отбор.Вставить("ИмяПланаОбмена", Запись.ИмяПланаОбмена); - Отбор.Вставить("ВидПравил", Запись.ВидПравил); - - КлючЗаписи = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьКлючЗаписи(Отбор); - - Возврат ПолучитьНавигационнуюСсылку(КлючЗаписи, "ПравилаXML"); - -КонецФункции - -&НаСервере -Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ИмяФайла) +Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере() // Создаем временный каталог на сервере и формируем пути к файлам и папкам - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ВременныйФайл = Новый Файл(ИмяВременногоФайла); - ИмяВременнойПапки = СтрЗаменить(ВременныйФайл.ПолноеИмя, ВременныйФайл.Расширение, ""); + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); СоздатьКаталог(ИмяВременнойПапки); - ПутьКФайлу = ИмяВременнойПапки + "\" + ИмяФайла; + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "ExchangeRules"; + ПутьКФайлуКорреспондента = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "CorrespondentExchangeRules"; Запрос = Новый Запрос; - Запрос.Текст = + Запрос.Текст = "ВЫБРАТЬ - | ПравилаДляОбменаДанными.ПравилаXML + | ПравилаДляОбменаДанными.ПравилаXML, + | ПравилаДляОбменаДанными.ПравилаXMLКорреспондента |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными |ГДЕ | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена | И ПравилаДляОбменаДанными.ВидПравил = &ВидПравил"; Запрос.УстановитьПараметр("ИмяПланаОбмена", Запись.ИмяПланаОбмена); - Запрос.УстановитьПараметр("ВидПравил", Запись.ВидПравил); + Запрос.УстановитьПараметр("ВидПравил", Запись.ВидПравил); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда @@ -388,7 +452,12 @@ // Получаем, сохраняем и архивируем файл правил во временном каталоге ДвоичныеДанныеПравил = Выборка.ПравилаXML.Получить(); ДвоичныеДанныеПравил.Записать(ПутьКФайлу + ".xml"); - ОбменДаннымиСервер.ЗапаковатьВZipФайл(ПутьКФайлу + ".zip", ПутьКФайлу + ".xml"); + + ДвоичныеДанныеПравилКорреспондента = Выборка.ПравилаXMLКорреспондента.Получить(); + ДвоичныеДанныеПравилКорреспондента.Записать(ПутьКФайлуКорреспондента + ".xml"); + + МаскаУпаковкиФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + "*.xml"; + ОбменДаннымиСервер.ЗапаковатьВZipФайл(ПутьКФайлу + ".zip", МаскаУпаковкиФайлов); // Помещаем архив правил в хранилище ДвоичныеДанныеАрхиваПравил = Новый ДвоичныеДанные(ПутьКФайлу + ".zip"); @@ -431,3 +500,24 @@ КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура РазрешитьВнешнийРесурсЗавершение(Результат, ПараметрыЗаписи) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ВнешниеРесурсыРазрешены = Истина; + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Запись) + + ЗапросыРазрешений = Новый Массив; + РегистрыСведений.ПравилаДляОбменаДанными.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись); + Возврат ЗапросыРазрешений; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index 81c183acf..e8435be99 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -46,7 +46,6 @@ true true true - false true true true @@ -192,7 +191,6 @@ true true false - true true true true @@ -358,8 +356,6 @@ true true true - false - false true true true @@ -595,16 +591,68 @@ ФормаКоманднаяПанель -1 - ФормаПеречитать - 31 + ФормаЗаписатьИЗакрыть + 50 true true true - ФормаПеречитатьExtendedTooltip - 32 + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 52 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 54 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 55 Label true true @@ -621,25 +669,17 @@ Auto InAdditionalSubmenu - - ГруппаКнопок - 24 + + ФормаУдалить + 56 true true true - - <key>ru</key> - <value>Группа кнопок</value> - - - ru - Группа кнопок - - ГруппаКнопокExtendedTooltip - 33 + ФормаУдалитьРасширеннаяПодсказка + 57 Label true true @@ -647,7 +687,13 @@ Left
        - + Form.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto
        Left true @@ -657,6 +703,7 @@ ПриСозданииНаСервере Copy + WriteAndClose LockOwner true true @@ -794,9 +841,44 @@ Auto Auto + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 3 + + ru + Записать и закрыть + + + true + + + StdPicture.WriteAndClose + + + + ЗаписатьИЗакрыть + + + Text + Auto + Auto + - + + + AfterWrite + ПослеЗаписи + + + BeforeWrite + ПередЗаписью + + diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index 441fb2c2e..f07097adb 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html @@ -1,13 +1,46 @@ - -

        Для замены типовых правил конвертации объектов и правил регистрации объектов правилами из внешнего файла необходимо:

        + +

        Предназначена для контроля и замены правил регистрации данных. Правила регистрации данных предусмотрены для всех видов синхронизации данных. 

        +

        Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

        +

        Правила регистрации объектов можно открыть из настройки синхронизации данных по команде Все действия - Загрузить правила регистрации объектов.

        +

        Источник правил

        +

        С помощью переключателя Источник правил можно установить, откуда брать правила регистрации объектов:

        +
        • +
          Типовые правила из конфигурации (выбраны по умолчанию).
          +
        • +
          Правила из файла (только для целей отладки).

        Ниже выводится наименование правил, которые в данный момент используются.

        +

        Информация о правилах

        +

        Для контроля выводится информация о правилах:

        +
        • +
          Полное наименование правил;
          +
        • +
          Дата создания - указывается дата и время создания правил;
          +
        • +
          План обмена - указывается вид синхронизации данных;
          +
        • +
          Конфигурация - указывается полная версия программы.

        Загрузка правил

        +
        • +
          Установите переключатель Источник правил в нужное положение.
          +
        • +
          +
          Нажмите Загрузить правила.
          +
        • +
          +
          При необходимости укажите путь к файлу с правилами.

        Выгрузка правил

        +

        При необходимости правила регистрации можно выгрузить в файл.

        +
        • +
          Для этого нажмите Выгрузить правила,
          +
        • +
          Выберите способ выгрузки:
          +
          • +
            Обычным файлом;
            +
          • +
            В архиве .zip.
        • +
          Выберите путь к файлу на компьютере или на сетевом диске, наименование проставляется программой по умолчанию. Нажмите Сохранить.

        Замена типовых правил регистрации объектов правилами из внешнего файла

        • Установить значение переключателя в положение Правила из файла и по кнопке Загрузить правила выбрать файл правил на компьютере или в сетевой папке.
        • -
          Обратить внимание, что загружены корректные правила, подходящие для используемых версий конфигурации-источника и конфигурации-приемника.
          +
          Обратить внимание, что загружены корректные правила, подходящие для используемых версий конфигурации-источника и конфигурации-приемника. В поле Информация о правилах выводится дата создания правил и другая необходимая информация.
        • Нажать на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.
        -

        Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных обменов данными (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено два обмена "Обмен с филиалом в Краснодаре" и "Обмен с представительством в Киеве"). Поэтому если в системе настроено несколько однотипных обменов, то замену правил достаточно выполнить однократно (выбрав любой из настроенных обменов данными).

        -

        См. также

        - \ No newline at end of file +

        Примечание: правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено два обмена "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в программе настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

        \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index bbf82d3b7..60effe155 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -1,5 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаКлиенте +Перем ВнешниеРесурсыРазрешены; + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +23,34 @@ УстановитьВидимость(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если ВнешниеРесурсыРазрешены <> Истина Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ПараметрыЗаписи); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + + Отказ = Истина; + + КонецЕсли; + ВнешниеРесурсыРазрешены = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИмяПланаОбменаПриИзменении(Элемент) @@ -42,8 +70,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьПравила(Команда) @@ -71,47 +100,6 @@ ОбменДаннымиКлиент.ВыбратьИПередатьФайлНаСервер(Оповещение, ПараметрыДиалога, УникальныйИдентификатор); КонецПроцедуры -&НаКлиенте -Процедура ЗагрузитьПравилаЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт - - АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; - ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; - - Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(АдресПомещенногоФайла) Тогда - ТекстОшибки = НСтр("ru = 'Ошибка передачи файла настроек синхронизации данных на сервер'"); - КонецЕсли; - - Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); - Возврат; - КонецЕсли; - - // Успешно передали файл, загружаем на сервере - ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(РезультатПомещенияФайлов.Имя); - - ВыполнитьЗагрузкуПравил(АдресПомещенногоФайла, ЧастиИмени.Имя, НРег(ЧастиИмени.Расширение) = ".zip"); -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьЗагрузкуПравил(Знач АдресПомещенногоФайла, Знач ИмяФайла, Знач ЭтоАрхив) - Отказ = Ложь; - - Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); - ЗагрузитьПравилаНаСервере(Отказ, АдресПомещенногоФайла, ИмяФайла, ЭтоАрхив); - Состояние(); - - Если Не Отказ Тогда - ПоказатьОповещениеПользователя(,, НСтр("ru = 'Правила успешно загружены в информационную базу.'")); - Возврат; - КонецЕсли; - - ТекстОшибки = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. - |Перейти в журнал регистрации?'"); - - Оповещение = Новый ОписаниеОповещения("ПоказатьЖурналРегистрацииПриОшибке", ЭтотОбъект); - ПоказатьВопрос(Оповещение, ТекстОшибки, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); -КонецПроцедуры - &НаКлиенте Процедура ВыгрузитьПравила(Команда) @@ -125,43 +113,18 @@ КонецПроцедуры &НаКлиенте -Процедура ВыгрузитьПравилаЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - КонецЕсли; +Процедура ЗаписатьИЗакрыть(Команда) - ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПравил); + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ЗаписатьИЗакрыть"); + Записать(ПараметрыЗаписи); - Если ВыбранныйЭлемент.Значение Тогда - // Выгружаем как архив - АдресХранения = ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ЧастиИмени.ИмяБезРасширения); - ФильтрИмени = НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"; - Иначе - АдресХранения = ПолучитьНавигационнуюСсылкуНаСервере(); - ФильтрИмени = НСтр("ru = 'Файлы правил (*.xml)'") + "|*.xml"; - КонецЕсли; - - Если ПустаяСтрока(АдресХранения) Тогда - Возврат; - КонецЕсли; - - Если ПустаяСтрока(ЧастиИмени.ИмяБезРасширения) Тогда - ПолноеИмяФайла = НСтр("ru = 'Правила для обмена данными'"); - Иначе - ПолноеИмяФайла = ЧастиИмени.ИмяБезРасширения; - КонецЕсли; - - ПараметрыДиалога = Новый Структура; - ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Сохранение); - ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите в какой файл выгрузить правила'") ); - ПараметрыДиалога.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); - ПараметрыДиалога.Вставить("Фильтр", ФильтрИмени); - - ПолучаемыйФайл = Новый Структура("Имя, Хранение", ПолноеИмяФайла, АдресХранения); - - ОбменДаннымиКлиент.ВыбратьИСохранитьФайлНаКлиенте(ПолучаемыйФайл, ПараметрыДиалога); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаКлиенте Процедура ПоказатьЖурналРегистрацииПриОшибке(Ответ, ДополнительныеПараметры) Экспорт @@ -175,9 +138,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - &НаСервере Процедура ОбновитьСписокВыбораПлановОбмена() @@ -239,7 +199,7 @@ Объект = РеквизитФормыВЗначение("Запись"); - РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, Объект, АдресВременногоХранилища, ИмяФайлаПравил, , ЭтоАрхив); + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, Объект, АдресВременногоХранилища, ИмяФайлаПравил, ЭтоАрхив); Если Не Отказ Тогда @@ -276,11 +236,9 @@ Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ИмяФайла) // Создаем временный каталог на сервере и формируем пути к файлам и папкам - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ВременныйФайл = Новый Файл(ИмяВременногоФайла); - ИмяВременнойПапки = СтрЗаменить(ВременныйФайл.ПолноеИмя, ВременныйФайл.Расширение, ""); + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); СоздатьКаталог(ИмяВременнойПапки); - ПутьКФайлу = ИмяВременнойПапки + "\" + ИмяФайла; + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла; Запрос = Новый Запрос; Запрос.Текст = @@ -345,3 +303,103 @@ ИсточникПравил = ?(Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации, 0, 1); КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузкуПравил(Знач АдресПомещенногоФайла, Знач ИмяФайла, Знач ЭтоАрхив) + Отказ = Ложь; + + Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); + ЗагрузитьПравилаНаСервере(Отказ, АдресПомещенногоФайла, ИмяФайла, ЭтоАрхив); + Состояние(); + + Если Не Отказ Тогда + ПоказатьОповещениеПользователя(,, НСтр("ru = 'Правила успешно загружены в информационную базу.'")); + Возврат; + КонецЕсли; + + ТекстОшибки = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. + |Перейти в журнал регистрации?'"); + + Оповещение = Новый ОписаниеОповещения("ПоказатьЖурналРегистрацииПриОшибке", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстОшибки, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьПравилаЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПравил); + + Если ВыбранныйЭлемент.Значение Тогда + // Выгружаем как архив + АдресХранения = ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ЧастиИмени.ИмяБезРасширения); + ФильтрИмени = НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"; + Иначе + АдресХранения = ПолучитьНавигационнуюСсылкуНаСервере(); + ФильтрИмени = НСтр("ru = 'Файлы правил (*.xml)'") + "|*.xml"; + КонецЕсли; + + Если ПустаяСтрока(АдресХранения) Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(ЧастиИмени.ИмяБезРасширения) Тогда + ПолноеИмяФайла = НСтр("ru = 'Правила для обмена данными'"); + Иначе + ПолноеИмяФайла = ЧастиИмени.ИмяБезРасширения; + КонецЕсли; + + ПараметрыДиалога = Новый Структура; + ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Сохранение); + ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите в какой файл выгрузить правила'") ); + ПараметрыДиалога.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); + ПараметрыДиалога.Вставить("Фильтр", ФильтрИмени); + + ПолучаемыйФайл = Новый Структура("Имя, Хранение", ПолноеИмяФайла, АдресХранения); + + ОбменДаннымиКлиент.ВыбратьИСохранитьФайлНаКлиенте(ПолучаемыйФайл, ПараметрыДиалога); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьПравилаЗавершение(Знач РезультатПомещенияФайлов, Знач ДополнительныеПараметры) Экспорт + + АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; + ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; + + Если ПустаяСтрока(ТекстОшибки) И ПустаяСтрока(АдресПомещенногоФайла) Тогда + ТекстОшибки = НСтр("ru = 'Ошибка передачи файла настроек синхронизации данных на сервер'"); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + Возврат; + КонецЕсли; + + // Успешно передали файл, загружаем на сервере + ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(РезультатПомещенияФайлов.Имя); + + ВыполнитьЗагрузкуПравил(АдресПомещенногоФайла, ЧастиИмени.Имя, НРег(ЧастиИмени.Расширение) = ".zip"); +КонецПроцедуры + +&НаКлиенте +Процедура РазрешитьВнешнийРесурсЗавершение(Результат, ПараметрыЗаписи) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ВнешниеРесурсыРазрешены = Истина; + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Запись) + + ЗапросыРазрешений = Новый Массив; + РегистрыСведений.ПравилаДляОбменаДанными.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись); + Возврат ЗапросыРазрешений; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl index d5f8d839e..c1260ebec 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl @@ -1,17 +1,19 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьВсеТиповыеПравила(Команда) ОбновитьВсеТиповыеПравилаНаСервере(); + Элементы.Список.Обновить(); ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление правил успешно завершено.'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьВсеТиповыеПравилаНаСервере() @@ -21,3 +23,5 @@ ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html new file mode 100644 index 000000000..95dae2770 --- /dev/null +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html @@ -0,0 +1,59 @@ + +

        Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Если эти правила устарели, то выполнение синхронизации данных приведет к очень серьезным ошибкам, порче информации. Поэтому при настройке новой синхронизации данных, а также при выходе очередного обновления любой из программ, участвующих в синхронизации данных, необходимо контролировать актуальность используемых типовых правил обмена.

        +

        Типовые правила обмена состоят из правил конвертации объектов и правил регистрации объектов. Правила конвертации данных используются при синхронизации данных двух программ. Правила регистрации предусмотрены для всех видов синхронизации данных. Комплект актуальных правил обмена публикуется на сайте технической поддержки http://users.v8.1c.ru. Исправительные версии правил обмена также публикуются на данном сайте.

        +

        Контроль актуальности правил синхронизации

        +

        При проверке актуальности правил необходимо обратить внимание на следующие контролируемые параметры:

        +
        • +
          Номера релизов программы-источника и программы-приемника, для которых предназначены правила;
          +
        • +
          дата создания правил.

        Контроль производится по следующим правилам:

        +
        • +
          определяется значение контролируемых параметров, которые загружены в программу-источник;
          +
        • +
          определяется значение контролируемых параметров, которые загружены в программу-приемник;
          +
        • +
          Определяется значение контролируемых параметров, которые включены в поставку программы-источника;
          +
        • +
          определяется значение контролируемых параметров, которые включены в поставку программы-приемника.

        После анализа всех этих правил выбираются те правила, дата создания которых является наиболее актуальной. При анализе правил необходимо обратить внимание на номера релизов конфигураций. Номера релизов конфигураций, указанные в правилах, должны обязательно соответствовать тем релизам конфигураций, между которыми настраивается синхронизация данных.

        +

        Контроль правил, загруженных в программы

        +
        • +
          Создайте новую синхронизацию данных, но не выполняйте ее.
          +
        • +
          Откройте созданную настройку синхронизации данных.
          +
        • +
          В меню Все действия настройки синхронизации данных выполните команду Загрузить правила конвертации объектов.
          +
        • +
          Проконтролируйте информацию о правилах конвертации данных.
          +
        • +
          Затем выполните команду Все действия - Загрузить правила регистрации объектов.
          +
        • +
          Проконтролируйте информацию о правилах регистрации объектов.

        Аналогичным образом можно произвести анализ контролируемых параметров, которые загружены в программу и для уже существующей настройки синхронизации данных. Например, для проверки правил регистрации объектов в существующей настройке синхронизации данных в подчиненном узле необходимо использовать команду Загрузить правила регистрации объектов.

        +

        Для проверки правил синхронизации данных двух программ данные действия следует производить последовательно для программы-источника и для программы-приемника.

        +

        Контроль правил, входящих в поставку программ

        +
        • +
          В окне Правила конвертации данных (Правила регистрации данных) с помощью переключателя Источник правил включите Режим отладки (Правила из файла). Выполните команду Загрузить правила.
          +
        • +
          Выберите файл правил конвертации из комплекта поставки программы.
          +
        • +
          Путь к файлу зависит от комплекта поставки программы. Обычно он находится в папке Обмены данными.
          +
        • +
          Проконтролируйте информацию о правилах.

        Данные действия также следует производить последовательно для обеих программ, которые участвуют в синхронизации данных.

        +

        Контроль правил из внешнего файла

        +

        Необходимо посмотреть информацию об этих правилах, затем сохранить копию используемых правил в файл с помощью кнопки Выгрузить правила.

        +
        • +
          Установить переключатель Источник правил в положение Типовые правила из конфигурации.
          +
        • +
          Нажать на кнопку Загрузить правила.
          +
        • +
          Посмотреть представленную информацию о правилах.

        Принятие решений по результатам проверки 

        +

        В результате проверки правил выбирается более новая версия и принимается одно из решений:

        +
        • +
          Продолжить использование текущих правил.
          +
          • +
            Дополнительных действий не требуется.
        • +
          Использовать свежие правила из комплекта правил в одной из программ.
          +
          • +
            Порядок загрузки описан в файле, который обычно называется Инструкция по подключению правил обмена.txt, найти его можно также в каталоге Обмены данными.
        • +
          Использовать вместо правил из внешнего источника типовые, встроенные в конфигурацию правила конвертации и правила регистрации объектов.
          +
          • +
            Для этого необходимо выбрать команду Все действия - Открыть правила конвертации объектов (Правила регистрации объектов). Далее необходимо установить переключатель Источник правил в положение Типовые правила из конфигурации и нажать на кнопку Загрузить правила.
        \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 0bf1656e0..2011ea38e 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Загружает правила в регистр // @@ -13,7 +12,7 @@ // ДвоичныеДанные - ДвоичныеДанные - данные, в которые сохраняется XML-файл (в том числе и распакованный из ZIP-архива) // ЭтоАрхив - Булево - Признак того, что правила загружаются из ZIP-архива, а не из XML-файла // -Процедура ЗагрузитьПравила(Отказ, Запись, АдресВременногоХранилища = "", ИмяФайлаПравил = "", ДвоичныеДанные = Неопределено, ЭтоАрхив = Ложь) Экспорт +Процедура ЗагрузитьПравила(Отказ, Запись, АдресВременногоХранилища = "", ИмяФайлаПравил = "", ЭтоАрхив = Ложь) Экспорт // проверка заполнения обязательныех полей записи ВыполнитьПроверкуЗаполненияПолей(Отказ, Запись); @@ -22,19 +21,26 @@ Возврат; КонецЕсли; - Если ДвоичныеДанные = Неопределено Тогда + ЭтоПравилаКонвертации = (Запись.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); + + // Получаем двоичные данные правил из файла или макета конфигурации + Если Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации Тогда - // получаем двоичные данные правил из файла или макета конфигурации - Если Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации Тогда + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзМакетаКонфигурации(Отказ, Запись.ИмяПланаОбмена, Запись.ИмяМакетаПравил); + + Если ЭтоПравилаКонвертации Тогда - ДвоичныеДанные = ПолучитьДвоичныеДанныеИзМакетаКонфигурации(Отказ, Запись.ИмяПланаОбмена, Запись.ИмяМакетаПравил); - - Иначе - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); + Если ПустаяСтрока(Запись.ИмяМакетаПравилКорреспондента) Тогда + Запись.ИмяМакетаПравилКорреспондента = Запись.ИмяМакетаПравил + "Корреспондента"; + КонецЕсли; + ДвоичныеДанныеКорреспондента = ПолучитьДвоичныеДанныеИзМакетаКонфигурации(Отказ, Запись.ИмяПланаОбмена, Запись.ИмяМакетаПравилКорреспондента); КонецЕсли; + Иначе + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); + КонецЕсли; // Если это архив, тогда разархивируем его и заново заложим в двоичные данные для дальнейшей работы. @@ -43,31 +49,72 @@ // Получаем файл архива из двоичных данных ИмяВременногоАрхива = ПолучитьИмяВременногоФайла("zip"); ДвоичныеДанные.Записать(ИмяВременногоАрхива); - ВременныйФайлАрхива = Новый Файл(ИмяВременногоАрхива); // Распаковываем архив - ИмяВременнойПапки = СтрЗаменить(ВременныйФайлАрхива.ПолноеИмя, ВременныйФайлАрхива.Расширение, ""); + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоАрхива, ИмяВременнойПапки) Тогда СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, "*.*", Истина); - // Закладываем полученный файл правил обратно в двоичные данные - Если СписокРаспакованныхФайлов.Количество() = 1 Тогда - ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя); - - // В архиве оказалось несколько файлов, хотя должен быть один - отказываеся от загрузки - ИначеЕсли СписокРаспакованныхФайлов.Количество() > 1 Тогда - НСтрока = НСтр("ru = 'При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами.'"); - ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); - // В архиве не было ни одного файла - отказываемся от загрузки - ИначеЕсли СписокРаспакованныхФайлов.Количество() = 0 Тогда + Если СписокРаспакованныхФайлов.Количество() = 0 Тогда НСтрока = НСтр("ru = 'При распаковке архива не найден файл с правилами.'"); ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); КонецЕсли; - // Если не удалось распаковать файл - отказываемся от загрузки - Иначе + Если ЭтоПравилаКонвертации Тогда + + // Закладываем полученный файл правил обратно в двоичные данные + Если СписокРаспакованныхФайлов.Количество() = 2 Тогда + + Если СписокРаспакованныхФайлов[0].Имя = "ExchangeRules.xml" + И СписокРаспакованныхФайлов[1].Имя ="CorrespondentExchangeRules.xml" Тогда + + ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя); + ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[1].ПолноеИмя); + + ИначеЕсли СписокРаспакованныхФайлов[1].Имя = "ExchangeRules.xml" + И СписокРаспакованныхФайлов[0].Имя ="CorrespondentExchangeRules.xml" Тогда + + ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[1].ПолноеИмя); + ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя); + + Иначе + + НСтрока = НСтр("ru = 'Имена файлов в архиве не соответствуют ожидаемым. Ожидаются файлы: + |ExchangeRules.xml - правила конвертации для текущей программы; + |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента.'"); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); + + КонецЕсли; + + // Старый формат + ИначеЕсли СписокРаспакованныхФайлов.Количество() = 1 Тогда + НСтрока = НСтр("ru = 'В архиве найден один файл правил конвертации. Ожидаемое количество файлов в архиве - два. Ожидаются файлы: + |ExchangeRules.xml - правила конвертации для текущей программы; + |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента.'"); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); + // В архиве оказалось несколько файлов, хотя должен быть один - отказываеся от загрузки + ИначеЕсли СписокРаспакованныхФайлов.Количество() > 1 Тогда + НСтрока = НСтр("ru = 'При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами.'"); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); + КонецЕсли; + + Иначе + + // Закладываем полученный файл правил обратно в двоичные данные + Если СписокРаспакованныхФайлов.Количество() = 1 Тогда + ДвоичныеДанные = Новый ДвоичныеДанные(СписокРаспакованныхФайлов[0].ПолноеИмя); + + // В архиве оказалось несколько файлов, хотя должен быть один - отказываеся от загрузки + ИначеЕсли СписокРаспакованныхФайлов.Количество() > 1 Тогда + НСтрока = НСтр("ru = 'При распаковке архива найдено несколько файлов. Должен быть только один файл с правилами.'"); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); + КонецЕсли; + + КонецЕсли; + + Иначе // Если не удалось распаковать файл - отказываемся от загрузки НСтрока = НСтр("ru = 'Не удалось распаковать архив с правилами.'"); ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); КонецЕсли; @@ -75,7 +122,7 @@ // Удаляем временный архив и временную папку, в которую был распакован архив УдалитьВременныйФайл(ИмяВременнойПапки); УдалитьВременныйФайл(ИмяВременногоАрхива); - + КонецЕсли; Если Отказ Тогда @@ -88,7 +135,7 @@ // получаем файл правил для зачитки ДвоичныеДанные.Записать(ИмяВременногоФайла); - Если Запись.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда + Если ЭтоПравилаКонвертации Тогда // зачитываем правила конвертации КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); @@ -103,12 +150,39 @@ // методы обработки ПравилаЗачитанные = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайла); - ИнформацияОПравилах = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(); + РежимСовместимости = Ложь; + ИнформацияОПравилах = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(Ложь, РежимСовместимости); Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда Отказ = Истина; КонецЕсли; + // получаем имя временного файла в локальной ФС на сервере + ИмяВременногоФайлаКорреспондента = ПолучитьИмяВременногоФайла("xml"); + // получаем файл правил для зачитки + ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); + + // зачитываем правила конвертации + КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + + // свойства обработки + КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; + КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = Запись.ИмяПланаОбмена; + КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + + // методы обработки + ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайлаКорреспондента); + + РежимСовместимостиКорреспондента = Ложь; + ИнформацияОПравилахКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах( + Истина, РежимСовместимостиКорреспондента); + + Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда + Отказ = Истина; + КонецЕсли; + + ИнформацияОПравилах = ИнформацияОПравилах + Символы.ПС + Символы.ПС + ИнформацияОПравилахКорреспондента; + Иначе // ПравилаРегистрацииОбъектов // зачитываем правила регистрации @@ -138,12 +212,21 @@ Запись.ПравилаXML = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных()); Запись.ПравилаЗачитанные = Новый ХранилищеЗначения(ПравилаЗачитанные); + Если ЭтоПравилаКонвертации Тогда + + Запись.ПравилаXMLКорреспондента = Новый ХранилищеЗначения(ДвоичныеДанныеКорреспондента, Новый СжатиеДанных()); + Запись.ПравилаЗачитанныеКорреспондента = Новый ХранилищеЗначения(ПравилаЗачитанныеКорреспондента); + Если РежимСовместимости <> РежимСовместимостиКорреспондента Тогда + ВызватьИсключение Нстр("ru = 'Резличаются режимы совместимости правил обмена текущей конфигурации и конфигурации-корреспондента.'"); + Иначе + Запись.РежимСовместимости = РежимСовместимости; + КонецЕсли; + + КонецЕсли; + Запись.ИнформацияОПравилах = ИнформацияОПравилах; - Запись.ИмяФайлаПравил = ИмяФайлаПравил; - Запись.ПравилаЗагружены = Истина; - Запись.ИмяПланаОбменаИзПравил = Запись.ИмяПланаОбмена; КонецЕсли; @@ -159,14 +242,14 @@ // ПравилаЗачитанные - ХранилищеЗначения - зачитанные правила конвертации объектов // Неопределено - Если правила конвертации не были загружены в базу для плана обмена // -Функция ПолучитьЗачитанныеПравилаКонвертацииОбъектов(Знач ИмяПланаОбмена) Экспорт +Функция ПолучитьЗачитанныеПравилаКонвертацииОбъектов(Знач ИмяПланаОбмена, ПолучатьПравилаКорреспондента = Ложь) Экспорт // возвращаемое значение функции ПравилаЗачитанные = Неопределено; ТекстЗапроса = " |ВЫБРАТЬ - | ПравилаДляОбменаДанными.ПравилаЗачитанные КАК ПравилаЗачитанные + | ПравилаДляОбменаДанными.%1 КАК ПравилаЗачитанные |ИЗ | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными |ГДЕ @@ -175,6 +258,9 @@ | И ПравилаДляОбменаДанными.ПравилаЗагружены |"; + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, + ?(ПолучатьПравилаКорреспондента, "ПравилаЗачитанныеКорреспондента", "ПравилаЗачитанные")); + Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); @@ -367,10 +453,107 @@ КонецПроцедуры +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + ЗагруженныеПравила = ЗагруженныеПравила(); + + Пока ЗагруженныеПравила.Следующий() Цикл + + ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, ЗагруженныеПравила); + + КонецЦикла; + +КонецПроцедуры + +Функция ЗагруженныеПравила() + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ПравилаДляОбменаДанными.ИмяПланаОбмена, + | ПравилаДляОбменаДанными.ИсточникПравил, + | ПравилаДляОбменаДанными.ВидПравил, + | ПравилаДляОбменаДанными.РежимСовместимости, + | ПравилаДляОбменаДанными.РежимОтладки, + | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки, + | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными, + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ПравилаЗагружены = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить(); + Возврат РезультатЗапроса.Выбрать(); + +КонецФункции + +Процедура ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись) Экспорт + + Разрешения = Новый Массив; + + Если Запись.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда + + Если (Не Запись.РежимСовместимости Или ОбщегоНазначенияПовтИсп.РазделениеВключено()) И Не Запись.РежимОтладки Тогда + // Запрос на персональный профиль не требуется + Иначе + + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима()); + + Если Запись.РежимОтладки Тогда + + Если Запись.РежимОтладкиВыгрузки Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + СтруктураИмениФайла.Путь, Истина, Ложь)); + + КонецЕсли; + + Если Запись.РежимОтладкиЗагрузки Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + СтруктураИмениФайла.Путь, Истина, Ложь)); + + КонецЕсли; + + Если Запись.РежимПротоколированияОбменаДанными Тогда + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + СтруктураИмениФайла.Путь, Истина, Истина)); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Иначе // Правила регистрации + + Если Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл Тогда + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима()); + Иначе + // Правила будут выполняться под профилем конфигурации + КонецЕсли; + + КонецЕсли; + + ИдентификаторПланаОбмена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.ПланыОбмена[Запись.ИмяПланаОбмена]); + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗапросыРазрешений, + РаботаВБезопасномРежимеСлужебный.ЗапросыНаИспользованиеВнешнихРесурсовДляВнешнегоМодуля(ИдентификаторПланаОбмена, Разрешения)); + +КонецПроцедуры + +#КонецОбласти + #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -391,3 +574,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl index 87dbfac70..808f74d13 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -10,6 +8,13 @@ Если Запись.РежимОтладки Тогда + ИдентификаторПланаОбмена = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.ПланыОбмена[Запись.ИмяПланаОбмена]); + ИмяПрофиляБезопасности = РаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(ИдентификаторПланаОбмена); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(); Если Запись.РежимОтладкиВыгрузки Тогда @@ -36,8 +41,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура ПроверитьСуществованиеФайлаВнешнейОбработки(ИмяПроверяемогоФайла, ЭтоФайловаяБаза, Отказ) @@ -48,13 +54,7 @@ ФайлНаДиске = Новый Файл(ИмяПроверяемогоФайла); РасположениеКаталога = ? (ЭтоФайловаяБаза, НСтр("ru = 'на клиенте'"), НСтр("ru = 'на сервере'")); - Если Не ЗначениеЗаполнено(ИмяФайла) Тогда - - СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки, РасположениеКаталога); - Отказ = Истина; - - ИначеЕсли Не КаталогПроверки.Существует() Тогда + Если Не КаталогПроверки.Существует() Тогда СтрокаСообщения = НСтр("ru = 'Каталог ""%1"" не найден %2.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки, РасположениеКаталога); @@ -79,17 +79,11 @@ Процедура ПроверитьДоступностьФайлаПротоколаОбмена(ИмяФайлаПротоколаОбмена, Отказ) СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаПротоколаОбмена); - ИмяФайлаПротокола = СтруктураИмениФайла.ИмяБезРасширения; ИмяКаталогаПроверки = СтруктураИмениФайла.Путь; КаталогПроверки = Новый Файл(ИмяКаталогаПроверки); ИмяФайлаПроверки = "test.tmp"; - Если ПустаяСтрока(ИмяФайлаПротокола) Тогда - - СтрокаСообщения = НСтр("ru = 'Не задано имя файла протокола обмена.'"); - Отказ = Истина; - - ИначеЕсли Не КаталогПроверки.Существует() Тогда + Если Не КаталогПроверки.Существует() Тогда СтрокаСообщения = НСтр("ru = 'Каталог файла протокола обмена ""%1"" не найден.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); @@ -144,4 +138,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo index 295493fc2..5e1a8e68f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo @@ -49,69 +49,17 @@ + true + + + ru + + Managed ru Используется для хранения правил конвертации и регистрации данных. Правила хранятся в зачитанном и оригинальном виде. - - ПравилаЗачитанные - - ru - Правила зачитанные - - - ValueStorage - - - ru - Зачитанные из файла правила конвертации/регистрации - - - - Use - - - - ПравилаXML - - ru - Правила XML - - - ValueStorage - - - ru - Оригинальный XML-файл правил конвертации/регистрации - - - - Use - - - - ИмяФайлаПравил - - ru - Имя файла с правилами - - - String - - 255 - - - - ru - Имя файла правил для обмена из которого были загружены правила. Только имя файла, без относительного пути. - - - - Use - Use - - ИмяМакетаПравил @@ -134,41 +82,21 @@ Use - - ИсточникПравил + + ИмяМакетаПравилКорреспондента ru - Источник правил - - - EnumRef.ИсточникиПравилДляОбменаДанными - - - ru - Признак загрузки правил для обмена из файла или макета конфигурации - - - - ShowError - Use - Use - - Enum.ИсточникиПравилДляОбменаДанными.EnumValue.МакетКонфигурации - - - - ИнформацияОПравилах - - ru - Информация о правилах + Типовые правила из конфигурации String - + + 150 + ru - Строка информация о правилах конвертации/регистрации + Имя макета правил конвертации/регистрации из которого были загружены правила @@ -198,6 +126,28 @@ Use + + ИмяФайлаОбработкиДляОтладкиВыгрузки + + ru + Имя файла обработки для отладки выгрузки + + + String + + 255 + + + + ru + Полное имя файла внешней обработки для отладки выгрузки. + + + + Use + Use + + ИмяФайлаОбработкиДляОтладкиЗагрузки @@ -220,6 +170,240 @@ Use + + ИмяФайлаПравил + + ru + Имя файла с правилами + + + String + + 255 + + + + ru + Имя файла правил для обмена из которого были загружены правила. Только имя файла, без относительного пути. + + + + Use + Use + + + + ИмяФайлаПротоколаОбмена + + ru + Имя файла протокола обмена + + + String + + 255 + + + + ru + Полное имя файла протокола обмена. + + + + Use + Use + + + + ИнформацияОПравилах + + ru + Информация о правилах + + + String + + + + ru + Строка информация о правилах конвертации/регистрации + + + + Use + Use + + + + ИсточникПравил + + ru + Источник правил + + + EnumRef.ИсточникиПравилДляОбменаДанными + + + ru + Признак загрузки правил для обмена из файла или макета конфигурации + + + + ShowError + Use + Use + + Enum.ИсточникиПравилДляОбменаДанными.EnumValue.МакетКонфигурации + + + + НеОстанавливатьПоОшибке + + ru + Не останавливать по ошибке + + + Boolean + + + ru + Признак включения режима, при котором выполнение обмена данными не будет остановлено при возникновении ошибки. + + + + Use + Use + + + + ПравилаXML + + ru + Правила XML + + + ValueStorage + + + ru + Оригинальный XML-файл правил конвертации/регистрации + + + + Use + + + + ПравилаXMLКорреспондента + + ru + Правила XML корреспондента + + + ValueStorage + + + ru + Оригинальный XML-файл правил конвертации/регистрации + + + + Use + + + + ПравилаЗачитанные + + ru + Правила зачитанные + + + ValueStorage + + + ru + Зачитанные из файла правила конвертации/регистрации + + + + Use + + + + ПравилаЗачитанныеКорреспондента + + ru + Зачитанные правила корреспондента + + + ValueStorage + + + ru + Зачитанные из файла правила конвертации/регистрации + + + + Use + + + + РежимСовместимости + + ru + Режим совместимости + + + Boolean + + + ru + Если Истина, то код обработчиков будет выполняться из правил конвертации. Если Ложь, то из обработок. + + + + Use + Use + + + + РежимОтладки + + ru + Режим отладки + + + Boolean + + + ru + Признак включения возможностей режима отладки правил конвертации. + + + + Use + Use + + + + РежимОтладкиВыгрузки + + ru + Режим отладки выгрузки + + + Boolean + + + ru + Признак включения режима отладки выгрузки. + + + + Use + Use + + РежимОтладкиЗагрузки @@ -258,107 +442,6 @@ Use - - ИмяФайлаПротоколаОбмена - - ru - Имя файла протокола обмена - - - String - - 255 - - - - ru - Полное имя файла протокола обмена. - - - - Use - Use - - - - НеОстанавливатьПоОшибке - - ru - Не останавливать по ошибке - - - Boolean - - - ru - Признак включения режима, при котором выполнение обмена данными не будет остановлено при возникновении ошибки. - - - - Use - Use - - - - ИмяФайлаОбработкиДляОтладкиВыгрузки - - ru - Имя файла обработки для отладки выгрузки - - - String - - 255 - - - - ru - Полное имя файла внешней обработки для отладки выгрузки. - - - - Use - Use - - - - РежимОтладкиВыгрузки - - ru - Режим отладки выгрузки - - - Boolean - - - ru - Признак включения режима отладки выгрузки. - - - - Use - Use - - - - РежимОтладки - - ru - Режим отладки - - - Boolean - - - ru - Признак включения возможностей режима отладки правил конвертации. - - - - Use - Use - - ИспользоватьФильтрВыборочнойРегистрацииОбъектов diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 5f40e46b5..1b836c1a6 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -1,8 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления @@ -112,4 +111,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl index 2c29209b0..9cda6d794 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -31,29 +30,35 @@ НоваяЗапись = СтруктураЗаписи(); ДанныеДляРасчета = Новый Структура("НоваяЗапись, СтараяЗапись", НоваяЗапись, СтараяЗапись); - Если НоваяЗапись.Рассмотрено <> СтараяЗапись.Рассмотрено И (НЕ (НоваяЗапись.Рассмотрено И СтараяЗапись.Рассмотрено = Неопределено)) Тогда + Если НоваяЗапись.Рассмотрено <> СтараяЗапись.Рассмотрено Тогда Взаимодействия.РассчитатьРассмотреноПоПапкам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ДанныеДляРасчета, "Папка")); Взаимодействия.РассчитатьРассмотреноПоПредметам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ДанныеДляРасчета, "Предмет")); + + Возврат; КонецЕсли; - Если НоваяЗапись.Папка <> СтараяЗапись.Папка И (НЕ НоваяЗапись.Рассмотрено) Тогда + Если НоваяЗапись.Папка <> СтараяЗапись.Папка Тогда Взаимодействия.РассчитатьРассмотреноПоПапкам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ДанныеДляРасчета, "Папка")); + Возврат; + КонецЕсли; - Если НоваяЗапись.Предмет <> СтараяЗапись.Предмет И (НЕ НоваяЗапись.Рассмотрено) Тогда + Если НоваяЗапись.Предмет <> СтараяЗапись.Предмет Тогда Взаимодействия.РассчитатьРассмотреноПоПредметам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ДанныеДляРасчета, "Предмет")); + Возврат; КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция СтруктураЗаписи() @@ -90,5 +95,6 @@ КонецФункции -#КонецЕсли +#КонецОбласти +#КонецЕсли diff --git a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl index 58ed851fd..03fa65613 100644 --- a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -49,4 +48,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/ManagerModule.bsl new file mode 100644 index 000000000..0e016efcc --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/ManagerModule.bsl @@ -0,0 +1,129 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "ExternalModulePrivilegedModeAllowed"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Ключ = Новый Структура("ВнешнийМодуль,Владелец", ВнешнийМодуль, Владелец); + Если Таблица.НайтиСтроки(Ключ).Количество() = 0 Тогда + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + Профиль.ПолныйДоступКПривилегированномуРежиму = Истина; + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИСТИНА КАК РазрешенПереходВПривилегированныйРежим, + | РазрешенияПереходаВПривилегированныйРежим.Владелец КАК Владелец, + | РазрешенияПереходаВПривилегированныйРежим.ВнешнийМодуль КАК ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенияПереходаВПривилегированныйРежим КАК РазрешенияПереходаВПривилегированныйРежим"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенияПереходаВПривилегированныйРежим.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИСТИНА КАК РазрешенПереходВПривилегированныйРежим, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + |ГДЕ + | ВТ_После.ВнешнийМодуль ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИСТИНА КАК РазрешенПереходВПривилегированныйРежим, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + |ГДЕ + | ВТ_До.ВнешнийМодуль ЕСТЬ NULL"; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/РазрешенияПереходаВПривилегированныйРежим.mdo b/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/РазрешенияПереходаВПривилегированныйРежим.mdo new file mode 100644 index 000000000..cb0383775 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенияПереходаВПривилегированныйРежим/РазрешенияПереходаВПривилегированныйРежим.mdo @@ -0,0 +1,119 @@ + + + + + + + + + + + + РазрешенияПереходаВПривилегированныйРежим + + ru + Разрешения перехода в привилегированный режим + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + diff --git a/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/ManagerModule.bsl new file mode 100644 index 000000000..991b49ac1 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/ManagerModule.bsl @@ -0,0 +1,144 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "CreateComObject"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Ключ = Новый Структура("ВнешнийМодуль,Владелец,ProgId", ВнешнийМодуль, Владелец, XDTOПредставление.ProgId); + Если Таблица.НайтиСтроки(Ключ).Количество() = 0 Тогда + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + Строка.ProgId = XDTOПредставление.ProgId; + Строка.CLSID = XDTOПредставление.CLSID; + Строка.ИмяКомпьютера = XDTOПредставление.ComputerName; + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + COMКласс = АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса(); + COMКласс.Имя = Менеджер.ProgId; + COMКласс.CLSID = Менеджер.CLSID; + COMКласс.Компьютер = Менеджер.ИмяКомпьютера; + Профиль.COMКлассы.Добавить(COMКласс); + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазрешенныеCOMКлассы.ProgId, + | РазрешенныеCOMКлассы.CLSID, + | РазрешенныеCOMКлассы.ИмяКомпьютера, + | РазрешенныеCOMКлассы.Владелец КАК Владелец, + | РазрешенныеCOMКлассы.ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенныеCOMКлассы КАК РазрешенныеCOMКлассы"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенныеCOMКлассы.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_До.ProgId, + | ВТ_До.CLSID, + | ВТ_До.ИмяКомпьютера, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + | И ВТ_До.ProgId = ВТ_После.ProgId + |ГДЕ + | ВТ_После.ProgId ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_После.ProgId, + | ВТ_После.CLSID, + | ВТ_После.ИмяКомпьютера, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + | И ВТ_После.ProgId = ВТ_До.ProgId + |ГДЕ + | ВТ_До.ProgId ЕСТЬ NULL "; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/РазрешенныеCOMКлассы.mdo b/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/РазрешенныеCOMКлассы.mdo new file mode 100644 index 000000000..8d4bed7e0 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеCOMКлассы/РазрешенныеCOMКлассы.mdo @@ -0,0 +1,173 @@ + + + + + + + + + + + + РазрешенныеCOMКлассы + + ru + Разрешенные COMКлассы + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + CLSID + + ru + CLSID + + + String + + 36 + + + + + Use + + + + ИмяКомпьютера + + ru + Имя компьютера + + + String + + 1024 + + + + + Use + Use + + + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + + ProgId + + ru + Prog id + + + String + + 400 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/ManagerModule.bsl new file mode 100644 index 000000000..263d11db0 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/ManagerModule.bsl @@ -0,0 +1,233 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "AttachAddin"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Ключ = Новый Структура("ВнешнийМодуль,Владелец,ИмяМакета", ВнешнийМодуль, Владелец, XDTOПредставление.TemplateName); + Если Таблица.НайтиСтроки(Ключ).Количество() = 0 Тогда + + СтруктураИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(XDTOПредставление.TemplateName, "."); + + Если СтруктураИмени.Количество() = 2 Тогда + + // Это общий макет + Макет = ПолучитьОбщийМакет(СтруктураИмени[1]); + + ИначеЕсли СтруктураИмени.Количество() = 4 Тогда + + // Это макет объекта метаданных + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураИмени[0] + "." + СтруктураИмени[1]); + Макет = МенеджерОбъекта.ПолучитьМакет(СтруктураИмени[3]); + + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты: + |некорректное имя макета %1!'"), XDTOПредставление.TemplateName); + КонецЕсли; + + Если Макет = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты, + |поставляемой в макете %1: макет %1 не обнаружден в составе конфигурации!'"), XDTOПредставление.TemplateName); + КонецЕсли; + + Если Метаданные.НайтиПоПолномуИмени(XDTOПредставление.TemplateName).ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ДвоичныеДанные Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты: + |макет %1 не содержит двоичных данных!'"), XDTOПредставление.TemplateName); + КонецЕсли; + + ВременныйФайл = ПолучитьИмяВременногоФайла("zip"); + Макет.Записать(ВременныйФайл); + + Архиватор = Новый ЧтениеZipФайла(ВременныйФайл); + КаталогРаспаковки = ПолучитьИмяВременногоФайла() + "\"; + СоздатьКаталог(КаталогРаспаковки); + + ФайлМанифеста = ""; + Для Каждого ЭлементАрхива Из Архиватор.Элементы Цикл + Если ВРег(ЭлементАрхива.Имя) = "MANIFEST.XML" Тогда + ФайлМанифеста = КаталогРаспаковки + ЭлементАрхива.Имя; + Архиватор.Извлечь(ЭлементАрхива, КаталогРаспаковки); + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(ФайлМанифеста) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты, + |поставляемой в макете %1: в архиве не обнаружен файл MANIFEST.XML!'"), XDTOПредставление.TemplateName); + КонецЕсли; + + ПотокЧтения = Новый ЧтениеXML(); + ПотокЧтения.ОткрытьФайл(ФайлМанифеста); + ОписаниеКомплекта = ФабрикаXDTO.ПрочитатьXML(ПотокЧтения, ФабрикаXDTO.Тип("http://v8.1c.ru/8.2/addin/bundle", "bundle")); + Для Каждого ОписаниеКомпоненты Из ОписаниеКомплекта.component Цикл + + Если ОписаниеКомпоненты.type = "native" ИЛИ ОписаниеКомпоненты.type = "com" Тогда + + ФайлКомпоненты = КаталогРаспаковки + ОписаниеКомпоненты.path; + + Архиватор.Извлечь(Архиватор.Элементы.Найти(ОписаниеКомпоненты.path), КаталогРаспаковки); + + Хэширование = Новый ХешированиеДанных(ХешФункция.SHA1); + Хэширование.ДобавитьФайл(ФайлКомпоненты); + + ХэшСумма = Хэширование.ХешСумма; + ХэшСуммаПреобразованнаяКСтрокеBase64 = Base64Строка(ХэшСумма); + + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + Строка.ИмяМакета = XDTOПредставление.TemplateName; + Строка.ИмяФайла = ОписаниеКомпоненты.path; + Строка.ХэшСумма = ХэшСуммаПреобразованнаяКСтрокеBase64; + + КонецЕсли; + + КонецЦикла; + + ПотокЧтения.Закрыть(); + Архиватор.Закрыть(); + + Попытка + УдалитьФайлы(КаталогРаспаковки); + Исключение + // Обработка исключения не требуется + КонецПопытки; + + Попытка + УдалитьФайлы(ВременныйФайл); + Исключение + // Обработка исключения не требуется + КонецПопытки; + + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + ВнешнийКомпонент = АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты(); + ВнешнийКомпонент.Имя = Менеджер.ИмяМакета + "\" + Менеджер.ИмяФайла; + ВнешнийКомпонент.ХэшСумма = Менеджер.ХэшСумма; + Профиль.ВнешниеКомпоненты.Добавить(ВнешнийКомпонент); + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазрешенныеВнешниеКомпоненты.ИмяМакета, + | РазрешенныеВнешниеКомпоненты.ИмяФайла, + | РазрешенныеВнешниеКомпоненты.ХэшСумма, + | РазрешенныеВнешниеКомпоненты.Владелец КАК Владелец, + | РазрешенныеВнешниеКомпоненты.ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенныеВнешниеКомпоненты КАК РазрешенныеВнешниеКомпоненты"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенныеВнешниеКомпоненты.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_До.ИмяМакета, + | ВТ_До.ИмяФайла, + | ВТ_До.ХэшСумма, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + | И ВТ_До.ИмяМакета = ВТ_После.ИмяМакета + |ГДЕ + | ВТ_После.ИмяМакета ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_После.ИмяМакета, + | ВТ_После.ИмяФайла, + | ВТ_После.ХэшСумма, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + | И ВТ_После.ИмяМакета = ВТ_До.ИмяМакета + |ГДЕ + | ВТ_До.ИмяМакета ЕСТЬ NULL "; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/РазрешенныеВнешниеКомпоненты.mdo b/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/РазрешенныеВнешниеКомпоненты.mdo new file mode 100644 index 000000000..ea3ecb84e --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеВнешниеКомпоненты/РазрешенныеВнешниеКомпоненты.mdo @@ -0,0 +1,175 @@ + + + + + + + + + + + + РазрешенныеВнешниеКомпоненты + + ru + Разрешенные внешние компоненты + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ХэшСумма + + ru + Хэш сумма + + + String + + 1024 + + + + + Use + Use + + + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + + ИмяМакета + + ru + Имя макета + + + String + + 200 + + + + + Use + Use + + true + + + ИмяФайла + + ru + Имя файла + + + String + + 200 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/ManagerModule.bsl new file mode 100644 index 000000000..9a25f3349 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/ManagerModule.bsl @@ -0,0 +1,151 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "InternetResourceAccess"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Псевдоним = НРег(XDTOПредставление.Protocol) + ":\\" + НРег(XDTOПредставление.Host) + ":" + Формат(XDTOПредставление.Port, "ЧГ=0"); + + Ключ = Новый Структура("ВнешнийМодуль,Владелец,Псевдоним", ВнешнийМодуль, Владелец, Псевдоним); + Если Таблица.НайтиСтроки(Ключ).Количество() = 0 Тогда + + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + Строка.Псевдоним = Псевдоним; + Строка.Протокол = НРег(XDTOПредставление.Protocol); + Строка.Адрес = НРег(XDTOПредставление.Host); + Строка.Порт = НРег(XDTOПредставление.Port); + + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + ИнтернетРесурс = АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса(); + ИнтернетРесурс.Имя = Менеджер.Протокол + "://" + Менеджер.Адрес + ":" + Менеджер.Порт; + ИнтернетРесурс.Протокол = Менеджер.Протокол; + ИнтернетРесурс.Адрес = Менеджер.Адрес; + ИнтернетРесурс.Порт = Менеджер.Порт; + Профиль.ИнтернетРесурсы.Добавить(ИнтернетРесурс); + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазрешенныеИнтернетРесурсы.Псевдоним, + | РазрешенныеИнтернетРесурсы.Протокол, + | РазрешенныеИнтернетРесурсы.Адрес, + | РазрешенныеИнтернетРесурсы.Порт, + | РазрешенныеИнтернетРесурсы.Владелец КАК Владелец, + | РазрешенныеИнтернетРесурсы.ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенныеИнтернетРесурсы КАК РазрешенныеИнтернетРесурсы"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенныеИнтернетРесурсы.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_До.Псевдоним, + | ВТ_До.Протокол, + | ВТ_До.Адрес, + | ВТ_До.Порт, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + | И ВТ_До.Псевдоним = ВТ_После.Псевдоним + |ГДЕ + | ВТ_После.Псевдоним ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_После.Псевдоним, + | ВТ_После.Протокол, + | ВТ_После.Адрес, + | ВТ_После.Порт, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + | И ВТ_После.Псевдоним = ВТ_До.Псевдоним + |ГДЕ + | ВТ_До.Псевдоним ЕСТЬ NULL"; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/РазрешенныеИнтернетРесурсы.mdo b/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/РазрешенныеИнтернетРесурсы.mdo new file mode 100644 index 000000000..3bbd1b21b --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеИнтернетРесурсы/РазрешенныеИнтернетРесурсы.mdo @@ -0,0 +1,192 @@ + + + + + + + + + + + + РазрешенныеИнтернетРесурсы + + ru + Разрешенные интернет ресурсы + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Протокол + + ru + Протокол + + + String + + 10 + + + + + Use + Use + + + + Адрес + + ru + Адрес + + + String + + 400 + + + + + Use + Use + + + + Порт + + ru + Порт + + + Number + + 5 + + + + + Use + Use + + + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + + Псевдоним + + ru + Псевдоним + + + String + + 400 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/ManagerModule.bsl new file mode 100644 index 000000000..49f9547e2 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/ManagerModule.bsl @@ -0,0 +1,184 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "FileSystemAccess"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Ключ = Новый Структура("ВнешнийМодуль,Владелец,Адрес", ВнешнийМодуль, Владелец, XDTOПредставление.Path); + СтрокиПоКлючу = Таблица.НайтиСтроки(Ключ); + + Если СтрокиПоКлючу.Количество() = 0 Тогда + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + Строка.Адрес = XDTOПредставление.Path; + Строка.РазрешеноЧтениеДанных = XDTOПредставление.AllowedRead; + Строка.РазрешенаЗаписьДанных = XDTOПредставление.AllowedWrite; + ИначеЕсли СтрокиПоКлючу.Количество() = 1 Тогда + Строка = СтрокиПоКлючу[0]; + Если XDTOПредставление.AllowedRead И Не Строка.РазрешеноЧтениеДанных Тогда + Строка.РазрешеноЧтениеДанных = Истина; + КонецЕсли; + Если XDTOПредставление.AllowedWrite И Не Строка.РазрешенаЗаписьДанных Тогда + Строка.РазрешенаЗаписьДанных = Истина; + КонецЕсли; + Иначе + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + Если СтандартныеВиртуальныеКаталоги().Получить(Менеджер.Адрес) <> Неопределено Тогда + + ВиртуальныйКаталог = АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога(); + ВиртуальныйКаталог.ЛогическийURL = Менеджер.Адрес; + ВиртуальныйКаталог.ФизическийURL = СтандартныеВиртуальныеКаталоги().Получить(Менеджер.Адрес); + ВиртуальныйКаталог.ЧтениеДанных = Менеджер.РазрешеноЧтениеДанных; + ВиртуальныйКаталог.ЗаписьДанных = Менеджер.РазрешенаЗаписьДанных; + Профиль.ВиртуальныеКаталоги.Добавить(ВиртуальныйКаталог); + + Иначе + + ВиртуальныйКаталог = АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога(); + ВиртуальныйКаталог.ЛогическийURL = Менеджер.Адрес; + ВиртуальныйКаталог.ФизическийURL = Менеджер.Адрес; + ВиртуальныйКаталог.ЧтениеДанных = Менеджер.РазрешеноЧтениеДанных; + ВиртуальныйКаталог.ЗаписьДанных = Менеджер.РазрешенаЗаписьДанных; + Профиль.ВиртуальныеКаталоги.Добавить(ВиртуальныйКаталог); + + КонецЕсли; + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазрешенныеКаталогиФайловойСистемы.Адрес, + | РазрешенныеКаталогиФайловойСистемы.РазрешеноЧтениеДанных, + | РазрешенныеКаталогиФайловойСистемы.РазрешенаЗаписьДанных, + | РазрешенныеКаталогиФайловойСистемы.Владелец КАК Владелец, + | РазрешенныеКаталогиФайловойСистемы.ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенныеКаталогиФайловойСистемы КАК РазрешенныеКаталогиФайловойСистемы"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенныеКаталогиФайловойСистемы.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_До.Адрес, + | ВТ_До.РазрешеноЧтениеДанных, + | ВТ_До.РазрешенаЗаписьДанных, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + | И ВТ_До.Адрес = ВТ_После.Адрес + |ГДЕ + | ВТ_После.Адрес ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_После.Адрес, + | ВТ_После.РазрешеноЧтениеДанных, + | ВТ_После.РазрешенаЗаписьДанных, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + | И ВТ_После.Адрес = ВТ_До.Адрес + |ГДЕ + | ВТ_До.Адрес ЕСТЬ NULL "; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СтандартныеВиртуальныеКаталоги() + + Результат = Новый Соответствие(); + + Результат.Вставить("/temp", "%t/%i/%s/%p"); + Результат.Вставить("/bin", "%e"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/RecordSetModule.bsl b/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/RecordSetModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/РазрешенныеКаталогиФайловойСистемы.mdo b/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/РазрешенныеКаталогиФайловойСистемы.mdo new file mode 100644 index 000000000..4e0de3ddc --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеКаталогиФайловойСистемы/РазрешенныеКаталогиФайловойСистемы.mdo @@ -0,0 +1,168 @@ + + + + + + + + + + + + РазрешенныеКаталогиФайловойСистемы + + ru + Разрешенные каталоги файловой системы + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + РазрешеноЧтениеДанных + + ru + Разрешено чтение данных + + + Boolean + + + + Use + Use + + + + РазрешенаЗаписьДанных + + ru + Разрешена запись данных + + + Boolean + + + + Use + Use + + + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + + Адрес + + ru + Адрес + + + String + + 400 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/ManagerModule.bsl new file mode 100644 index 000000000..e491036b0 --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/ManagerModule.bsl @@ -0,0 +1,137 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает XDTO-тип, описывающий разрешения типа, соответствующего элементу кэша. +// +// Возвращаемое значение - ТипОбъектаXDTO. +// +Функция ТипXDTOПредставленияРазрешений() Экспорт + + Возврат ФабрикаXDTO.Тип(РаботаВБезопасномРежимеСлужебный.ПакетXDTOПредставленийРазрешений(), "RunApplication"); + +КонецФункции + +// Формирует набор записей текущего регистра кэша из XDTO-представлений разрешения. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, +// Владелец - ЛюбаяСсылка, +// XDTOПредставления - Массив(ОбъектXDTO). +// +// Возвращаемое значение - РегистрСведенийНаборЗаписей. +// +Функция НаборЗаписейИзXDTOПредставления(Знач XDTOПредставления, Знач ВнешнийМодуль, Знач Владелец, Знач ДляУдаления) Экспорт + + Набор = СоздатьНаборЗаписей(); + Набор.Отбор.ВнешнийМодуль.Установить(ВнешнийМодуль); + Набор.Отбор.Владелец.Установить(Владелец); + + Если ДляУдаления Тогда + + Возврат Набор; + + Иначе + + Таблица = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицаРазрешений(СоздатьНаборЗаписей().Метаданные(), Истина); + + Для Каждого XDTOПредставление Из XDTOПредставления Цикл + + Ключ = Новый Структура("ВнешнийМодуль,Владелец,ШаблонСтрокиЗапуска", ВнешнийМодуль, Владелец, XDTOПредставление.CommandMask); + Если Таблица.НайтиСтроки(Ключ).Количество() = 0 Тогда + + Строка = Таблица.Добавить(); + Строка.ВнешнийМодуль = ВнешнийМодуль; + Строка.Владелец = Владелец; + Строка.ШаблонСтрокиЗапуска = XDTOПредставление.CommandMask; + + КонецЕсли; + + КонецЦикла; + + Набор.Загрузить(Таблица); + Возврат Набор; + + КонецЕсли; + +КонецФункции + +// Заполняет описание профиля безопасности (в нотации программного интерфейса общего модуля +// АдминистрированиеКластераКлиентСервер) по менеджеру записи текущего элемента кэша. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджерЗаписи, +// Профиль - Структура. +// +Процедура ЗаполнитьСвойстваПрофиляБезопасностиВНотацииИнтерфейсаАдминистрирования(Знач Менеджер, Профиль) Экспорт + + ПриложениеОС = АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС(); + ПриложениеОС.Имя = Менеджер.ШаблонСтрокиЗапуска; + ПриложениеОС.ШаблонСтрокиЗапуска = Менеджер.ШаблонСтрокиЗапуска; + Профиль.ПриложенияОС.Добавить(ПриложениеОС); + +КонецПроцедуры + +// Возвращает текст запроса для получения текущего среза разрешений по данному +// элементу кэша. +// +// Параметры: +// СвернутьВладельцев - Булево - флаг необходимости сворачивания результата запроса +// по владельцам. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросТекущегоСреза(Знач СвернутьВладельцев = Истина) Экспорт + + Результат = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | РазрешенныеПриложенияОперационнойСистемы.ШаблонСтрокиЗапуска, + | РазрешенныеПриложенияОперационнойСистемы.Владелец КАК Владелец, + | РазрешенныеПриложенияОперационнойСистемы.ВнешнийМодуль + |ИЗ + | РегистрСведений.РазрешенныеПриложенияОперационнойСистемы КАК РазрешенныеПриложенияОперационнойСистемы"; + + Если СвернутьВладельцев Тогда + Результат = СтрЗаменить(Результат, "РазрешенныеПриложенияОперационнойСистемы.Владелец КАК Владелец,", ""); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает текст запроса для получения дельты измения разрешений по данному +// элементу кэша. +// +// Возвращаемое значение - Строка, текст запроса. +// +Функция ЗапросПолученияДельты() Экспорт + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_До.ШаблонСтрокиЗапуска, + | ВТ_До.ВнешнийМодуль + |ИЗ + | ВТ_До КАК ВТ_До + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_После КАК ВТ_После + | ПО ВТ_До.ВнешнийМодуль = ВТ_После.ВнешнийМодуль + | И ВТ_До.ШаблонСтрокиЗапуска = ВТ_После.ШаблонСтрокиЗапуска + |ГДЕ + | ВТ_После.ШаблонСтрокиЗапуска ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВТ_После.ШаблонСтрокиЗапуска, + | ВТ_После.ВнешнийМодуль + |ИЗ + | ВТ_После КАК ВТ_После + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_До КАК ВТ_До + | ПО ВТ_После.ВнешнийМодуль = ВТ_До.ВнешнийМодуль + | И ВТ_После.ШаблонСтрокиЗапуска = ВТ_До.ШаблонСтрокиЗапуска + |ГДЕ + | ВТ_До.ШаблонСтрокиЗапуска ЕСТЬ NULL"; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/РазрешенныеПриложенияОперационнойСистемы.mdo b/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/РазрешенныеПриложенияОперационнойСистемы.mdo new file mode 100644 index 000000000..743129add --- /dev/null +++ b/SSL/src/InformationRegisters/РазрешенныеПриложенияОперационнойСистемы/РазрешенныеПриложенияОперационнойСистемы.mdo @@ -0,0 +1,138 @@ + + + + + + + + + + + + РазрешенныеПриложенияОперационнойСистемы + + ru + Разрешенные приложения операционной системы + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Описание + + ru + Описание + + + String + + + + + Use + Use + + + + ВнешнийМодуль + + ru + Внешний модуль + + + AnyRef + + + + Use + Use + true + + true + + + БезопасныйРежим + + ru + Безопасный режим + + + DefinedType.БезопасныйРежим + + + + Use + Use + + true + + + Владелец + + ru + Владелец + + + AnyRef + + + + Use + Use + true + + true + + + ШаблонСтрокиЗапуска + + ru + Шаблон строки запуска + + + String + + 400 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl new file mode 100644 index 000000000..6faf4e1ba --- /dev/null +++ b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl @@ -0,0 +1,13 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ПриЗаписи(Отказ, Замещение) + + РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.mdo b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/РежимыПодключенияВнешнихМодулей.mdo similarity index 55% rename from SSL/src/InformationRegisters/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.mdo rename to SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/РежимыПодключенияВнешнихМодулей.mdo index 14abef975..0a0b87026 100644 --- a/SSL/src/InformationRegisters/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных/ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.mdo +++ b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/РежимыПодключенияВнешнихМодулей.mdo @@ -1,19 +1,20 @@ - + - - - - - - - + + + + + + + - ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных + РежимыПодключенияВнешнихМодулей ru - Очередь инсталляции поставляемых дополнительных отчетов и обработок в области данных + Режимы подключения внешних модулей + true InDialog Use @@ -49,14 +50,14 @@ Managed - - ПараметрыИнсталляции + + БезопасныйРежим ru - Параметры инсталляции + Безопасный режим - ValueStorage + DefinedType.БезопасныйРежим @@ -64,19 +65,20 @@ Use - - ПоставляемаяОбработка + + ВнешнийМодуль ru - Поставляемая обработка + Внешний модуль - CatalogRef.ПоставляемыеДополнительныеОтчетыИОбработки + AnyRef Use Use + true true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 41285f7b1..e7f517a59 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -42,7 +42,7 @@ // Устанавливаем отборы динамических списков и сохраняем их в реквизите для управления ими НастроитьОтборыДинамическихСписков(НастройкиОтборовДинамическихСписков); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ИспользуетсяВерсионирование Тогда Элементы.КоллизииАвторДругойВерсии.Заголовок = Нстр("ru = 'Версия получена из приложения'"); @@ -75,8 +75,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СтрокаПоискаПриИзменении(Элемент) @@ -149,8 +150,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НепроведенныеДокументы +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНепроведенныеДокументы &НаКлиенте Процедура НепроведенныеДокументыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -168,8 +170,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НезаполненныеРеквизиты +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНезаполненныеРеквизиты &НаКлиенте Процедура НезаполненныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -202,15 +205,14 @@ Если Элемент.ТекущиеДанные.ДругаяВерсияПринята Тогда - ПричинаКонфликта = "Конфликт был разрешен автоматически в пользу программы ""%1"". - |Версия в этой программе была замененена на версию из другой программы."; + ПричинаКонфликта = НСтр("ru = 'Конфликт был разрешен автоматически в пользу программы ""%1"". + |Версия в этой программе была замененена на версию из другой программы.'"); ПричинаКонфликта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаКонфликта, Элемент.ТекущиеДанные.АвторДругойВерсии); - Иначе - ПричинаКонфликта ="Конфликт был разрешен автоматически в пользу этой программы. - |Версия в этой программе была сохранена, версия из другой программы была отклонена."; + ПричинаКонфликта =НСтр("ru = 'Конфликт был разрешен автоматически в пользу этой программы. + |Версия в этой программе была сохранена, версия из другой программы была отклонена.'"); КонецЕсли; @@ -245,8 +247,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Изменить(Команда) @@ -479,8 +482,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура Игнорировать(Знач ВыделенныеСтроки, Пропустить, ИмяЭлемента) @@ -633,8 +637,11 @@ Элементы.УзелИнформационнойБазы.Видимость = Ложь; Элементы.НепроведенныеДокументыУзелИнформационнойБазы.Видимость = Ложь; Элементы.НезаполненныеРеквизитыУзелИнформационнойБазы.Видимость = Ложь; - Элементы.КоллизииАвторДругойВерсии.Видимость = Ложь; - Элементы.НепринятыеПоДатеАвторДругойВерсии.Видимость = Ложь; + + Если ИспользуетсяВерсионирование Тогда + Элементы.КоллизииАвторДругойВерсии.Видимость = Ложь; + Элементы.НепринятыеПоДатеАвторДругойВерсии.Видимость = Ложь; + КонецЕсли; ИначеЕсли УзлыОбмена.Количество() >= 7 Тогда @@ -1003,12 +1010,12 @@ &НаСервере Процедура ОбновитьЗаголовкиСтраниц() - УстановитьЗаголовокСтраницы(Элементы.СтраницаНепроведенныеДокументы, НСтр(" ru= 'Непроведенные документы'"), КоличествоНепроведенныхДокументов()); - УстановитьЗаголовокСтраницы(Элементы.СтраницаНезаполненныеРеквизиты, НСтр(" ru= 'Незаполненные реквизиты'"), КоличествоНезаполненныхРеквизитов()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНепроведенныеДокументы, НСтр("ru= 'Непроведенные документы'"), КоличествоНепроведенныхДокументов()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНезаполненныеРеквизиты, НСтр("ru= 'Незаполненные реквизиты'"), КоличествоНезаполненныхРеквизитов()); Если ИспользуетсяВерсионирование Тогда - УстановитьЗаголовокСтраницы(Элементы.СтраницаКоллизии, НСтр(" ru= 'Конфликты'"), КоличествоКоллизий()); - УстановитьЗаголовокСтраницы(Элементы.СтраницаНепринятыеПоДатеЗапрета, НСтр(" ru= 'Непринятые по дате запрета'"), КоличествоНепринятых()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаКоллизии, НСтр("ru= 'Конфликты'"), КоличествоКоллизий()); + УстановитьЗаголовокСтраницы(Элементы.СтраницаНепринятыеПоДатеЗапрета, НСтр("ru= 'Непринятые по дате запрета'"), КоличествоНепринятых()); КонецЕсли; КонецПроцедуры @@ -1161,4 +1168,6 @@ КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html index c02c1c1ef..88eb9e34a 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html @@ -1,10 +1,39 @@ - -

        При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя. Эти ситуации можно условно разделить на следующие категории:

        + +

        Предназначен для просмотра статистики по результатам синхронизации данных.

        +

        Результаты синхронизации данных в виде гиперссылки можно увидеть в списке Синхронизации данных, например, на рабочем столе программы. В зависимости от результатов гиперссылка принимает значения Предупреждений нет (в случае успешной синхронизации данных) или  Предупреждения (при этом в скобках указывается количество предупреждений). Для открытия списка предупреждений пройдите по гиперссылке.

        +

        При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя. В колонках списка выводится необходимая информация о данных, по которым возникли проблемы и причина, по которой они не были приняты. Причина кратко указывается в специальной колонке, при этом по выделенной строке в нижней части списка выводится подробная формулировка, с указанием проблемных полей списков или документов.

        +

        Отборы

        +

        Для удобства просмотра предусмотрены отборы:

        +
        • В поле Период  Выберите период, за который выдавать данные; +
        • В поле Отправитель  Выберите из списка информационную базу, которая вас интересует; +
        • В поле Причина напишите причину ошибки (данный отбор невозможен для вкладки Конфликты).

        Проблемные ситуации можно условно разделить на следующие категории, которые в списке находятся на отдельных вкладках:

        Непроведенные документы

        -

        В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для устранения проблемы проведения документа рекомендуется открыть форму документа и устранить проблемы,  мешающие его проведению (это могут быть, например, недостаточный остаток по товару). Проведение документа так же возможно по команде Провести. Для удаления документа из этого списка без устранения проблемы с проведением используйте команду Игнорировать.

        -

        Незаполненные реквизиты

        -

        Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент. Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов используйте команду Игнорировать.

        -

        Конфликты

        -

        При настроенной синхронизации данных между двумя программами возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обеих программах. Это приводит к возникновению двух различающихся версий одинаковых данных в этих программах. Такая ситуация называется конфликтом изменения данных.
        Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для выявления отличий между двумя версиями используйте команду Показать отличия. После принятия решения о версии, которая должна быть сохранена, используйте команды Подтвердить для сохранения результата автоматического разрешения конфликта или команду Пересмотреть для изменения результата рассмотрения конфликта на противоположный.

        -

        Непринятые по дате запрета

        -

        В этом списке отображаются данные, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов. Для сравнения отклоненных данных с текущими данными в программе используйте команду Показать отличия (при наличии данных в текущей программе). Для получения данных, несмотря на установленный запрет загрузки данных, используйте команду Принять версию.

        \ No newline at end of file +

        В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для решения проблемы с проведением документа рекомендуется открыть документ и устранить недочеты,  мешающие его проведению (это может быть, например, недостаточный остаток по товару). Внизу списка отражается причина невозможности автоматического проведения.

        +
        • Для того чтобы попытаться исправить ошибки в выбранных документах, нажмите Изменить выделенные.  +
        • После устранения ошибок можно Провести документ.  +
        • Для того чтобы открыть документ, нажмите Все действия - Изменить. +
        • Для скрытия документа из этого списка без устранения проблемы с проведением нажмите Игнорировать. +
        • Для того, чтобы показать проигнорированные документы, нажмите Все действия - Показывать проигнорированные. +
        • Для возвращения проигнорированного документа в список нажмите Все действия - Не игнорировать.

        Незаполненные реквизиты

        +

        Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент.

        +
        • Для того чтобы попытаться заполнить реквизиты в выбранных элементах, нажмите Изменить выделенные. +
        • Для того чтобы открыть элемент, нажмите Все действия - Изменить. +
        • Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов нажмите Игнорировать.  +
        • Для того, чтобы показать проигнорированные элементы, нажмите Все действия - Показывать проигнорированные. +
        • Для возвращения проигнорированного элемента в список нажмите Все действия - Не игнорировать.

        Конфликты

        +

        При настроенной синхронизации данных между двумя программами возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обеих программах. Это приводит к возникновению двух различающихся версий одинаковых данных в этих программах. Такая ситуация называется конфликтом изменения данных.
        Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для этого выделите элемент списка.

        +
        • В строке внизу списка выводится метод решения конфликта, который был выбран программой. +
        • Для выявления отличий между двумя версиями нажмите Показать отличия. +
        • Для принятия решения, какую версию принять, можно просмотреть обе версии. Для этого нажмите Все действия - Показать версию, созданную в этой информационной базе или Все действия - Показать версию, созданную в другой информационной базе. +
        • Для просмотра элемента списка нажмите Все действия - Изменить данные. +
        • После принятия решения о версии, которая должна быть сохранена, нажмите Подтвердить для сохранения результата автоматического разрешения конфликта или Пересмотреть для изменения результата рассмотрения конфликта на противоположный. После этого элемент становится неактивным, ему присваивается признак Рассмотрено и по умолчанию он скрывается из списка.  +
        • По умолчанию рассмотренные конфликты скрываются из списка. Для того чтобы показывать их тоже, нажмите Все действия - Показывать рассмотренные конфликты. +
        • Для того чтобы заново проверить рассмотренные конфликты и что-либо изменить, нажмите Все действия - Снять признак "Рассмотрено".

        Непринятые по дате запрета

        +

        В этом списке отображаются данные, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов.

        +
        • Для сравнения отклоненных данных с текущими данными в программе нажмите Показать отличия (при наличии данных в текущей программе). +
        • Для того чтобы открыть элемент, нажмите Все действия - Изменить. +
        • Для просмотра другой версии нажмите Показать непринятую версию. +
        • Для получения данных, несмотря на установленный запрет загрузки данных, нажмите Принять версию. +
        • Для удаления строки из списка без принятия решения нажмите Игнорировать.  +
        • Для того, чтобы показать проигнорированные элементы, нажмите Все действия - Показывать проигнорированные. +
        • Для возвращения проигнорированного элемента в список нажмите Все действия - Не игнорировать.
        \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index ab7051554..e97746f9a 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура ЗарегистрироватьОшибкуПроверкиОбъекта(Ссылка, УзелИнформационнойБазы, Причина, ТипПроблемы) Экспорт @@ -187,4 +186,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/РейтингАктивностиОбластейДанных.mdo b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/РейтингАктивностиОбластейДанных.mdo index cd3fe7ec3..aa6ce0e04 100644 --- a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/РейтингАктивностиОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/РейтингАктивностиОбластейДанных.mdo @@ -88,7 +88,7 @@ ru - Область данных + Номер области данных информационной базы diff --git a/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl b/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl index a73263969..91535b936 100644 --- a/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Создает новую сессию обмена сообщениями и возвращает ее идентификатор // @@ -163,4 +162,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl index dca2498bd..7bbed941d 100644 --- a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -15,4 +14,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДаннымиОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/СообщенияОбменаДаннымиОбластейДанных/ManagerModule.bsl index 0c08e4f00..ccf91b1dc 100644 --- a/SSL/src/InformationRegisters/СообщенияОбменаДаннымиОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СообщенияОбменаДаннымиОбластейДанных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -15,4 +14,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl index 53f2b1a20..74a606dd6 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи, Загрузка = Ложь) Экспорт @@ -109,4 +108,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl index 8bb56352d..4d376c3ba 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -34,7 +33,6 @@ КонецПроцедуры - - +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl index 0eefe522a..55697502b 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -24,3 +25,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl index 041d414b5..50c1e762f 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -50,3 +52,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl index 7af223786..0c43e4ff5 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура обновляет все данные регистра. // @@ -65,4 +64,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl index 18bc72887..d6247498a 100644 --- a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет либо одну, либо все записи из регистра // @@ -82,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления @@ -145,4 +145,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl index 926cd2637..66476ca23 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -22,4 +21,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl index a0934837c..0ed04075f 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -14,4 +13,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДаннымиОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДаннымиОбластейДанных/ManagerModule.bsl index 8e7c8a67d..d207ffe01 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДаннымиОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДаннымиОбластейДанных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -10,4 +9,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl index 4c62362a2..2d863c281 100644 --- a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl @@ -1,8 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет либо одну, либо все записи из регистра // @@ -40,8 +39,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления @@ -99,4 +99,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl index b188983be..c968dd4a5 100644 --- a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Удаляет либо одну, либо все записи из регистра // @@ -147,8 +146,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления @@ -225,4 +225,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 5fddc0540..fc0b87f4d 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Для внутреннего использования // @@ -36,5 +35,6 @@ МенеджерЗаписи.Записать(Истина); КонецПроцедуры +#КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl index 86c1b1380..246b86d6b 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -22,4 +21,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl index a0934837c..0ed04075f 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -14,4 +13,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДаннымиОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДаннымиОбластейДанных/ManagerModule.bsl index b9032bcf2..08c647ad9 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДаннымиОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДаннымиОбластейДанных/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -10,4 +9,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 0eefe522a..55697502b 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,8 +14,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -24,3 +25,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl index 49ef5f0ce..3dd0862cf 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,8 +12,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) @@ -39,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьДанныеРегистраНаСервере(ЕстьИзменения) @@ -52,3 +54,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 9bbbaf110..f713a5fd8 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Процедура обновляет данные регистра по результату изменения прав ролей, // сохраненному при обновлении регистра сведений ПраваРолей. @@ -39,8 +38,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура обновляет данные регистра при изменении состава ролей профилей и // изменении профилей у групп доступа. @@ -173,4 +173,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl index 596479720..3baeb10fe 100644 --- a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обработчик обновления информационной базы. Процедура ПереместитьДанныеВНовыйРегистр() Экспорт @@ -46,4 +45,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl index 591277ee6..7d0b06ba5 100644 --- a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обработчик обновления информационной базы. Функция ПереместитьДанныеВНовыйРегистр() Экспорт @@ -186,4 +185,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl index 2da7454c8..244cdb2bb 100644 --- a/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область СлужебныйПрограммныйИнтерфейс // Обработчик обновления информационной базы. Процедура ПереместитьДанныеВНовыйРегистр() Экспорт @@ -61,4 +60,6 @@ КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl index 8b809bfd4..4eb0654ee 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,8 +21,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтчетОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) @@ -37,8 +38,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) @@ -76,8 +78,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Функция ПолучитьРасписание() @@ -111,3 +114,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl index ea9636e1d..79d9b4438 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -28,8 +28,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) @@ -77,8 +78,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура СформироватьОтчет(Команда) @@ -94,8 +96,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура РезультатОбработкаРасшифровкиЗавершение(ВыбранныйВариант, Расшифровка) Экспорт @@ -282,3 +285,5 @@ Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); КонецФункции + +#КонецОбласти diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html index 4b8b95d96..a77b0432c 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html @@ -1,11 +1,41 @@ - -

        Отчет «Анализ журнала регистрации» предназначен для диагностики работы программы на основе данных журнала регистрации. Включает в себя следующие варианты отчетов:

        -

        ·         Анализ активности пользователей

        -

        ·         Активность пользователя

        -

        ·         Контроль журнала регистрации

        -

        ·         Продолжительность работы регламентных заданий

        -

        Анализ активности пользователей – предназначен для получения статистической информации по активности пользователей (часов работы, подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя)

        -

        Активность пользователя –  предназначен для получения подробной статистики по активности выбранного пользователя (список созданных и измененных документов/справочников/бизнес процессов/задач)

        -

        Контроль журнала регистрации – список критичных записей журнала регистрации

        -

        Продолжительность работы регламентных заданий – отображает продолжительность работы сеансов регламентных заданий.

        -

        Подсистема не имеет встроенного функционала для рассылки отчетов, для рассылки необходимо наличие подсистемы «Рассылка отчетов»

        \ No newline at end of file + +

        Отчет предназначен для диагностики работы программы на основе данных журнала регистрации. Выводит различную статистическую информацию о работе программы, об ошибках и предупреждениях во время ее работы, о количестве активных пользователей в различные периоды времени и времени выполнения регламентных заданий. 

        +

        Отчет открывается из раздела Администрирование - Поддержка и обслуживание - Отчеты и обработки - Отчеты администратора.

        +

        Необходимо помнить, что эта статистическая информация предназначена только для диагностики работы программы и загруженности сервера и не является средством для оценки эффективности работы сотрудников, расчета оплаты труда и т.д. 

        +

        Варианты отчета

        +

        Анализ активности пользователей

        +

        Выводит статистическую информацию по активности пользователей (часы работы, количество подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя, максимальное количество одновременно работающих пользователей). Для наглядности часть статистики выводится в виде диаграмм. 

        +

        Настройки: Выберите пользователей из списка (можно выбрать всех пользователей или группу пользователей), укажите период.

        +

        Дополнительные настройки: Нажмите  Настройки. Кроме основных настроек, доступны:

        +
        • +
          с помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм;
          +
        • +
           Выберите вид диаграммы из списка для вывода информации по количеству введенных и измененных документов и справочников.

        Активность пользователя

        +

        Выводится подробная статистика по активности выбранного пользователя (список созданных и измененных документов/справочников/бизнес-процессов/задач). Для наглядности часть статистики выводится в виде диаграмм. Может использоваться как расшифровка варианта отчета Анализ активности пользователей по конкретному пользователю.

        +

        Настройки: Выберите пользователя из списка, укажите период.

        +

        Дополнительные настройки: Нажмите   Настройки. Кроме основных настроек, доступны:

        +
        • +
          Включите соответствующие флажки, выберите значение Да, чтобы Выводить данные  о бизнес-процессах, задачах, справочниках, документах, или Нет, чтобы не выводить. По умолчанию в отчете выводятся данные о справочниках и документах.

        Контроль журнала регистрации

        +

        Представляет собой список критичных записей журнала регистрации (записи об ошибках и предупреждениях). Дает возможность контролировать проблемные ситуации в ходе эксплуатации программы.

        +

        Настройки: Укажите период.

        +

        Продолжительность работы регламентных заданий

        +

        Выводится время выполнения и продолжительность работы сеансов регламентных заданий в выбранный день. Позволяет провести анализ загруженности сервера регламентными заданиями, выявить интервалы с пиковыми нагрузками и разгрузить их.

        +

        Настройки: Выберите день, для того чтобы получить отчет за часть этого дня, укажите время начала и конца периода.

        +

        Дополнительные настройки: Нажмите   Настройки. Кроме основных настроек, доступны:

        +
        • +
          Выберите Да, чтобы Отображать фоновые задания; выключите флажок или выберите Нет, чтобы не отображать;
          +
        • +
          укажите минимальную продолжительность сеансов регламентных заданий в секундах, по умолчанию равно 1
          +
        • +
          укажите минимальное число одновременно работавших регламентных заданий за период, по умолчанию равно 2
          +
        • +
          Включите флажок, чтобы скрыть регламентные задания.

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index a7f7e01c8..e88ee9474 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Функция получает информацию по активности пользователей из журнала регистрации // по переданному периоду @@ -468,8 +467,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура формирования отчета // @@ -1568,4 +1568,6 @@ КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl index 2e572b5c5..6e5edae2a 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровкиОбъект, СтандартнаяОбработка, АдресХранилища) СтандартнаяОбработка = Ложь; @@ -84,7 +83,7 @@ Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(Пользователь) = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Формирование отчета возможно только для пользователя, у которого доступ к информационной базе разрешен!'"), , ); + НСтр("ru = 'Формирование отчета возможно только для пользователя, которому указано имя для входа в программу.'"), , ); Отказ = Истина; Возврат; КонецЕсли; @@ -97,13 +96,12 @@ Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(ПользователиИГруппы) = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Формирование отчета возможно только для пользователя, у которого доступ к информационной базе разрешен!'"), , ); + НСтр("ru = 'Формирование отчета возможно только для пользователя, которому указано имя для входа в программу.'"), , ); Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; - Если Не ЗначениеЗаполнено(ПользователиИГруппы) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -116,8 +114,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПараметрыОтчетаАктивностьПользователя(НастройкиОтчета) @@ -212,4 +211,6 @@ ДокументРезультат.Вывести(РезультатФормированияОтчета.Отчет); КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 352923f4c..68c0e1308 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -1575,7 +1575,7 @@ ru - Активности пользователя + Активность пользователя diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 12a4e82a3..8812fae81 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -2986,9 +2986,9 @@ Day 1 true - 2013-12-03T13:00:00 - 2013-12-12T13:59:59 - 2013-12-03T13:00:00 + 2014-06-10T10:00:00 + 2014-06-19T10:59:59 + 2014-06-10T10:00:00 Gradient 3 Day diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl index b87f4c2c8..96001a41c 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl @@ -1,7 +1,5 @@ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,7 +12,8 @@ Отказ = Истина; КонецЕсли; - Заголовок = "Ответы на вопрос № " + ПолныйКод + " опроса " + НаименованиеОпроса + " от " + Формат(ДатаОпроса,"ДФ=dd.MM.yyyy"); + ТекстЗаголовка = НСтр("ru = 'Ответы на вопрос № %1 опроса %2 от %3'"); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, ПолныйКод, НаименованиеОпроса, Формат(ДатаОпроса,"ДФ=dd.MM.yyyy")); СформироватьОтчёт(); @@ -27,8 +26,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура СформироватьОтчёт() @@ -52,7 +52,6 @@ ТаблицаОтчета.ОтображатьСетку = Ложь; ТаблицаОтчета.ОтображатьЗаголовки = Ложь; - ТаблицаОтчета.Показать(); КонецПроцедуры @@ -104,3 +103,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index daf6d1855..e8022babe 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,8 +19,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура СформироватьОтчет(ФормулировкиЭлементарныхВопросов) @@ -43,8 +43,6 @@ Для каждого СтрокаДерева Из ДеревоОтветов.Строки Цикл ВывестиВДокументРеспондентов(СтрокаДерева,Макет,ФормулировкиЭлементарныхВопросов); КонецЦикла; - - ТаблицаОтчета.Показать(); КонецПроцедуры @@ -377,3 +375,5 @@ КонецЦикла; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form index 19bbe53b0..afb3d7dbf 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form @@ -82,7 +82,7 @@ true false true - true + true true true @@ -91,7 +91,7 @@ Анализ ответов - Анализ ответов + АнализОтветов @@ -100,7 +100,7 @@ Анализ ответивших - Анализ ответивших + АнализОтветивших Normal diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl index 7dd6403bf..6105db80b 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,12 +8,13 @@ Возврат; КонецЕсли; - ВидОтчета = "Анализ ответов"; + ВидОтчета = "АнализОтветов"; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТаблицаОтчетаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) @@ -31,8 +31,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Сформировать(Команда) @@ -43,12 +44,12 @@ КонецЕсли; СформироватьОтчет(); - ТаблицаОтчета.Показать(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура СформироватьОтчет() @@ -60,4 +61,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 8b12f7399..3b7f30b2d 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Формирует табличный документ отчет // @@ -13,11 +12,11 @@ ТаблицаОтчета.Очистить(); - Если ВидОтчета = НСтр("ru='Анализ ответов'") Тогда + Если ВидОтчета = НСтр("ru='АнализОтветов'") Тогда СформироватьОтчетАнализОтветов(ТаблицаОтчета,Опрос); - ИначеЕсли ВидОтчета = НСтр("ru='Анализ ответивших'") Тогда + ИначеЕсли ВидОтчета = НСтр("ru='АнализОтветивших'") Тогда СформироватьОтчетАнализОтветивших(ТаблицаОтчета,Опрос); @@ -29,8 +28,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции /////////////////////////////////////////////////////////////////////////////////////////////////// // Анализ ответов @@ -96,7 +96,6 @@ ПолныйКод = АнкетированиеКлиентСервер.ПреобразоватьМассивВСтроку(МассивПолныйКод,"."); ПолныйКод = АнкетированиеКлиентСервер.УдалитьПоследниеСимволыИзСтроки(ПолныйКод,"0.","."); - Если СтрокаДерева.ЭтоРаздел Тогда ВывестиРаздел(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); Если СтрокаДерева.Строки.Количество() > 0 Тогда @@ -489,7 +488,6 @@ // Процедура ВывестиОтветВариантыОтвета(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) - Если СтрокаДерева.Строки[0].ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда Область = Макет.ПолучитьОбласть("ВариантыОтветов"); @@ -1081,7 +1079,6 @@ Запрос.УстановитьПараметр("Заполнил",НСтр("ru = 'Заполнил'")); Запрос.УстановитьПараметр("НачалЗаполнять",НСтр("ru = 'Начал заполнять'")); Запрос.УстановитьПараметр("НеЗаполнял",НСтр("ru = 'Не заполнял'")); - Возврат Запрос.Выполнить(); @@ -1112,6 +1109,6 @@ КонецФункции - +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl index e69de29bb..bea698eae 100644 --- a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl +++ b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.БизнесПроцессы); + Отчет.Описание = НСтр("ru = 'Список и сводная статистика по всем бизнес-процессам.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СписокБизнесПроцессов"); + Вариант.Описание = НСтр("ru = 'Список бизнес-процессов определенных видов за указанный интервал.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СтатистикаПоВидам"); + Вариант.Описание = НСтр("ru = 'Сводная диаграмма по количеству активных и завершенных бизнес-процессов.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl index ce606b116..38d81444a 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -35,3 +34,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl new file mode 100644 index 000000000..41e01b189 --- /dev/null +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl @@ -0,0 +1,150 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Обработчики событий подсистемы ВариантыОтчетов. + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + Свойства = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДатыЗапретаЗагрузки); + Отчет.Включен = Ложь; + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для пользователей, + |сгруппированные по разделам с объектами.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаЗагрузкиПоРазделамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для пользователей, + |сгруппированные по разделам.'"); + Иначе + УстановитьВариант = "ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для пользователей, + |сгруппированные по объектам.'"); + КонецЕсли; + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); + Вариант.Включен = Истина; + Вариант.Описание = Описание; + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователям"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для разделов с объектами, + |сгруппированные по пользователям.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для разделов, + |сгруппированные по пользователям.'"); + Иначе + УстановитьВариант = "ДатыЗапретаЗагрузкиПоПользователямБезРазделов"; + Описание = + НСтр("ru = 'Выводит даты запрета загрузки для объектов, + |сгруппированные по пользователям.'"); + КонецЕсли; + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); + Вариант.Включен = Истина; + Вариант.Описание = Описание; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index 3f11fa886..7fcc2d97b 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -17,8 +15,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных) @@ -51,5 +50,6 @@ КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl index 75c968dd5..7b0d2868c 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl @@ -1,6 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -35,3 +34,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl new file mode 100644 index 000000000..140440bc0 --- /dev/null +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl @@ -0,0 +1,150 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Обработчики событий подсистемы ВариантыОтчетов. + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + Свойства = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДатыЗапретаИзменения); + Отчет.Включен = Ложь; + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для пользователей, + |сгруппированные по разделам с объектами.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаИзмененияПоРазделамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для пользователей, + |сгруппированные по разделам.'"); + Иначе + УстановитьВариант = "ДатыЗапретаИзмененияПоОбъектамДляПользователей"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для пользователей, + |сгруппированные по объектам.'"); + КонецЕсли; + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); + Вариант.Включен = Истина; + Вариант.Описание = Описание; + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаИзмененияПоПользователям"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для разделов с объектами, + |сгруппированные по пользователям.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + УстановитьВариант = "ДатыЗапретаИзмененияПоПользователямБезОбъектов"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для разделов, + |сгруппированные по пользователям.'"); + Иначе + УстановитьВариант = "ДатыЗапретаИзмененияПоПользователямБезРазделов"; + Описание = + НСтр("ru = 'Выводит даты запрета изменения для объектов, + |сгруппированные по пользователям.'"); + КонецЕсли; + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, УстановитьВариант); + Вариант.Включен = Истина; + Вариант.Описание = Описание; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index 3f11fa886..7fcc2d97b 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -1,8 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -17,8 +15,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных) @@ -51,5 +50,6 @@ КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Form.form deleted file mode 100644 index 0840d8cdd..000000000 --- a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,710 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 23 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 4 - true - true - - true - - false - - ВыбратьВариантКнопкаExtendedTooltip - 24 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаExtendedTooltip - 22 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 6 - true - true - - true - - false - - СформироватьОтчетExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - Настройка - 7 - true - true - - true - - false - - НастройкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 8 - true - true - - true - - false - - ВыбратьНастройкуExtendedTooltip - 28 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 9 - true - true - - true - - false - - СохранитьНастройкуExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 10 - true - true - - true - - false - - СтандартнаяНастройкаExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 11 - true - true - - true - - false - - НовоеОкноExtendedTooltip - 31 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 12 - true - true - - true - - false - - ИзменитьВариантExtendedTooltip - 32 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 13 - true - true - - true - - false - - ВыбратьВариантExtendedTooltip - 33 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 14 - true - true - - true - - false - - СохранитьВариантExtendedTooltip - 34 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 15 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 35 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 16 - true - true - - true - - false - - СправкаExtendedTooltip - 36 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - ОсновнаяКоманднаяПанельExtendedTooltip - 25 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПользовательскиеНастройки - 17 - true - true - - true - - - Отчет.SettingsComposer.UserSettings - - false - None - HierarchicalList - List - Tree - None - - ПользовательскиеНастройкиКоманднаяПанель - 19 - Left - true - - - ПользовательскиеНастройкиСтрокаПоиска - 40 - - ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 41 - true - - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиСостояниеПросмотра - 43 - - ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 44 - true - - ViewStatusAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиУправлениеПоиском - 46 - - ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 47 - true - - SearchControlAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиExtendedTooltip - 37 - Label - true - true - - Left - - - - ПользовательскиеНастройкиКонтекстноеМеню - 18 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show - - - Результат - 20 - true - true - - true - - - Результат - - true - None - - РезультатExtendedTooltip - 38 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 21 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Отчет - 1 - - ReportObject.ЗависшиеЗадачи - - - true - - - true - -
        true
        -
        - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - ДанныеРасшифровки - 4 - - String - - - - true - - - true - - - - - - - - ShowOnComposition - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
        diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index e1e3e25d8..000000000 --- a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,11 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - ЗначениеРасшифровки = Неопределено; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровки, ЗначениеРасшифровки) Тогда - СтандартнаяОбработка = НЕ БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(ЗначениеРасшифровки); - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index d51b601fe..4d9fa03fb 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 e69de29bb..b0559b1a0 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl @@ -0,0 +1,32 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + // ЗависшиеЗадачи + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ЗависшиеЗадачи); + Отчет.Описание = НСтр("ru = 'Анализ зависших задач, которые не могут быть выполнены, так как у них не назначены исполнители.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СводкаПоЗависшимЗадачам"); + Вариант.Описание = НСтр("ru = 'Сводка по количеству зависших задач, назначенных на роли, для которых не задано ни одного исполнителя.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ЗависшиеЗадачиПоИсполнителям"); + Вариант.Описание = НСтр("ru = 'Список зависших задач, назначенных на роли, для которых не задано ни одного исполнителя.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ЗависшиеЗадачиПоОбъектамАдресации"); + Вариант.Описание = НСтр("ru = 'Список зависших задач по объектам адресации.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ПросроченныеЗадачи"); + Вариант.Описание = НСтр("ru = 'Список просроченных и зависших задач, которые не могут быть выполнены, так как у них не назначены исполнители.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo b/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo index b73fa8330..398897f0d 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo +++ b/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo @@ -10,7 +10,6 @@ Зависшие задачи
        true - Report.ЗависшиеЗадачи.Form.ФормаОтчета Report.ЗависшиеЗадачи.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов @@ -18,15 +17,6 @@ ru - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/Задания/ManagerModule.bsl b/SSL/src/Reports/Задания/ManagerModule.bsl index e69de29bb..277da51d0 100644 --- a/SSL/src/Reports/Задания/ManagerModule.bsl +++ b/SSL/src/Reports/Задания/ManagerModule.bsl @@ -0,0 +1,31 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.Задания); + Отчет.Описание = НСтр("ru = 'Список и сводная статистика по выполнению заданий.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СписокЗаданий"); + Вариант.Описание = НСтр("ru = 'Список всех заданий за указанный период.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СтатистикаЗаданий"); + Вариант.Описание = НСтр("ru = 'Сводная диаграмма по всем выполненным, отмененным заданиям и заданиям в работе.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СтатистикаЦикловВыполненияПроверки"); + Вариант.Описание = НСтр("ru = 'Топ 10 авторов по среднему количеству перепроверок заданий.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СтатистикаДлительности"); + Вариант.Описание = НСтр("ru = 'Топ 10 авторов по средней длительности выполнения заданий.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/Задания/Templates/Макет/Template.dcs b/SSL/src/Reports/Задания/Templates/Макет/Template.dcs index d2dd03dc6..9e7e64a2b 100644 --- a/SSL/src/Reports/Задания/Templates/Макет/Template.dcs +++ b/SSL/src/Reports/Задания/Templates/Макет/Template.dcs @@ -325,6 +325,23 @@ Дней + + + false + Период + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + d64e623b-4b8f-40d4-912a-e023f7b44b8b + + + false + Завершен + false + + Дата diff --git a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form deleted file mode 100644 index 8809189e0..000000000 --- a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,714 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 23 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 4 - true - true - - true - - false - - ВыбратьВариантКнопкаExtendedTooltip - 24 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаExtendedTooltip - 22 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 6 - true - true - - true - - false - - СформироватьОтчетExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - Настройка - 7 - true - true - - true - - false - - НастройкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 8 - true - true - - true - - false - - ВыбратьНастройкуExtendedTooltip - 28 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 9 - true - true - - true - - false - - СохранитьНастройкуExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 10 - true - true - - true - - false - - СтандартнаяНастройкаExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 11 - true - true - - true - - false - - НовоеОкноExtendedTooltip - 31 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 12 - true - true - - true - - false - - ИзменитьВариантExtendedTooltip - 32 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 13 - true - true - - true - - false - - ВыбратьВариантExtendedTooltip - 33 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 14 - true - true - - true - - false - - СохранитьВариантExtendedTooltip - 34 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 15 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 35 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 16 - true - true - - true - - false - - СправкаExtendedTooltip - 36 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - ОсновнаяКоманднаяПанельExtendedTooltip - 25 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПользовательскиеНастройки - 17 - true - true - - true - - - Отчет.SettingsComposer.UserSettings - - false - None - HierarchicalList - List - Tree - None - - ПользовательскиеНастройкиКоманднаяПанель - 19 - Left - true - - - ПользовательскиеНастройкиСтрокаПоиска - 40 - - ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 41 - true - - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиСостояниеПросмотра - 43 - - ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 44 - true - - ViewStatusAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиУправлениеПоиском - 46 - - ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 47 - true - - SearchControlAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиExtendedTooltip - 37 - Label - true - true - - Left - - - - ПользовательскиеНастройкиКонтекстноеМеню - 18 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show - - - Результат - 20 - true - true - - true - - - Результат - - true - None - - РезультатExtendedTooltip - 38 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 21 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Отчет - 1 - - ReportObject.Задачи - - - true - - - true - -
        true
        -
        - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - ДанныеРасшифровки - 4 - - String - - - - true - - - true - - - - - - - - ShowOnComposition - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
        diff --git a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index f0d6c1f6e..000000000 --- a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,28 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначения.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка) Тогда - Возврат; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - ЗначениеРасшифровки = Неопределено; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровки, ЗначениеРасшифровки) Тогда - СтандартнаяОбработка = НЕ БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(ЗначениеРасшифровки); - КонецЕсли; -КонецПроцедуры - - diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 3227a404e..088c651d8 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 e69de29bb..13e3140bd 100644 --- a/SSL/src/Reports/Задачи/ManagerModule.bsl +++ b/SSL/src/Reports/Задачи/ManagerModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.Задачи); + Отчет.Описание = НСтр("ru = 'Список и сводная статистика по задачам.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ТекущиеЗадачи"); + Вариант.Описание = НСтр("ru = 'Список всех задач в работе к заданному сроку.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "СправкаПоИсполнительскойДисциплине"); + Вариант.Описание = НСтр("ru = 'Сводка по количеству выполненных в срок и просроченных задачах у исполнителей.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 54c2b0c41..506226ad1 100644 --- a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -373,7 +373,6 @@ 2b010cb4-de38-4d2b-ab7e-10c40c23f459
        - false Автор Equal Справочник.Пользователи.ПустаяСсылка diff --git a/SSL/src/Reports/Задачи/Задачи.mdo b/SSL/src/Reports/Задачи/Задачи.mdo index ee217dd94..fa99f03ba 100644 --- a/SSL/src/Reports/Задачи/Задачи.mdo +++ b/SSL/src/Reports/Задачи/Задачи.mdo @@ -10,7 +10,6 @@ Задачи
        true - Report.Задачи.Form.ФормаОтчета Report.Задачи.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов @@ -18,15 +17,6 @@ ru - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Form.form deleted file mode 100644 index 8829e12ee..000000000 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,710 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 23 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 4 - true - true - - true - - false - - ВыбратьВариантКнопкаExtendedTooltip - 24 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаExtendedTooltip - 22 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 6 - true - true - - true - - false - - СформироватьОтчетExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - Настройка - 7 - true - true - - true - - false - - НастройкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 8 - true - true - - true - - false - - ВыбратьНастройкуExtendedTooltip - 28 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 9 - true - true - - true - - false - - СохранитьНастройкуExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 10 - true - true - - true - - false - - СтандартнаяНастройкаExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 11 - true - true - - true - - false - - НовоеОкноExtendedTooltip - 31 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 12 - true - true - - true - - false - - ИзменитьВариантExtendedTooltip - 32 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 13 - true - true - - true - - false - - ВыбратьВариантExtendedTooltip - 33 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 14 - true - true - - true - - false - - СохранитьВариантExtendedTooltip - 34 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 15 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 35 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 16 - true - true - - true - - false - - СправкаExtendedTooltip - 36 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - ОсновнаяКоманднаяПанельExtendedTooltip - 25 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПользовательскиеНастройки - 17 - true - true - - true - - - Отчет.SettingsComposer.UserSettings - - false - None - HierarchicalList - List - Tree - None - - ПользовательскиеНастройкиКоманднаяПанель - 19 - Left - true - - - ПользовательскиеНастройкиСтрокаПоиска - 40 - - ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 41 - true - - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиСостояниеПросмотра - 43 - - ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 44 - true - - ViewStatusAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиУправлениеПоиском - 46 - - ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 47 - true - - SearchControlAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиExtendedTooltip - 37 - Label - true - true - - Left - - - - ПользовательскиеНастройкиКонтекстноеМеню - 18 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show - - - Результат - 20 - true - true - - true - - - Результат - - true - None - - РезультатExtendedTooltip - 38 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 21 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Отчет - 1 - - ReportObject.ЗадачиИстекающиеНаДату - - - true - - - true - -
        true
        -
        - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - ДанныеРасшифровки - 4 - - String - - - - true - - - true - - - - - - - - ShowOnComposition - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
        diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index e1e3e25d8..000000000 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,11 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - ЗначениеРасшифровки = Неопределено; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровки, ЗначениеРасшифровки) Тогда - СтандартнаяОбработка = НЕ БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(ЗначениеРасшифровки); - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index 33be48683..6976c9acc 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/ЗадачиИстекающиеНаДату/ManagerModule.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl index e69de29bb..63a2e56ce 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl @@ -0,0 +1,22 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ЗадачиИстекающиеНаДату); + Отчет.Описание = НСтр("ru = 'Список задач, которые должны быть выполнены к указанной дате.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ЗадачиИстекающиеНаДату"); + Вариант.Описание = НСтр("ru = 'Список задач, которые должны быть выполнены к указанной дате.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo index c3d045a8c..a6800a2ae 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo @@ -10,7 +10,6 @@ Задачи, истекающие на дату
        true - Report.ЗадачиИстекающиеНаДату.Form.ФормаОтчета Report.ЗадачиИстекающиеНаДату.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов true @@ -19,15 +18,6 @@ ru - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl new file mode 100644 index 000000000..10d88a082 --- /dev/null +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -0,0 +1,340 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Формирует представление разрешений на использование внешних ресурсов по таблицам разрешений. +// +// Параметры: +// ТаблицыРазрешений - Структура - см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицыРазрешений(). +// +// Возвращаемое значение: ТабличныйДокумент - представление разрешений. +// +Функция ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ТаблицыРазрешений) Экспорт + + Макет = ПолучитьМакет("ПредставленияРазрешений"); + ТабличныйДокумент = Новый ТабличныйДокумент(); + + СформироватьПредставлениеРазрешений(ТабличныйДокумент, ТаблицыРазрешений, Макет, Истина); + + Возврат ТабличныйДокумент; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Формирует представление изменений в разрешениях на использование внешних ресурсов в результате +// применения запросов. +// +// Параметры: +// ОперацииАдминистрирования - ТаблицаЗначений, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОперацииАдминистрированияВЗапросах(), +// ДельтаРазрешений - Структура, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(), +// КакТребуемые - Булево - флаг использования в представлении терминов вида "требуются следующие ресурсы" вместо "будут предоставлены следующие ресурсы". +// +// Возвращаемое значение: ТабличныйДокумент. +// +Функция ПредставлениеРезультатаПримененияЗапросовНаИспользованиеВнешнихРесурсов(Знач ОперацииАдминистрирования, Знач ДельтаРазрешений, Знач КакТребуемые = Ложь) Экспорт + + ТабличныйДокумент = Новый ТабличныйДокумент(); + ЗаполнитьПредставлениеРезультатаПримененияЗапросовНаИспользованиеВнешнихРесурсов(ТабличныйДокумент, ОперацииАдминистрирования, ДельтаРазрешений); + Возврат ТабличныйДокумент; + +КонецФункции + +// Заполняет переданный табличный документ представлением изменений в разрешениях на использование +// внешних ресурсов в результате применения запросов. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент, который будет заполнен, +// ОперацииАдминистрирования - ТаблицаЗначений, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОперацииАдминистрированияВЗапросах(), +// ДельтаРазрешений - Структура, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(), +// КакТребуемые - Булево - флаг использования в представлении терминов вида "требуются следующие ресурсы" вместо "будут предоставлены следующие ресурсы". +// +Процедура ЗаполнитьПредставлениеРезультатаПримененияЗапросовНаИспользованиеВнешнихРесурсов(ТабличныйДокумент, Знач ОперацииАдминистрирования, Знач ДельтаРазрешений, Знач КакТребуемые = Ложь) Экспорт + + Макет = ПолучитьМакет("ПредставленияРазрешений"); + ОбластьОтступа = Макет.ПолучитьОбласть("Отступ"); + + СформироватьПредставлениеОпераций(ТабличныйДокумент, Макет, ОперацииАдминистрирования); + + ВыводитьГруппировки = ДельтаРазрешений.Количество() > 1; + + Для Каждого ФрагментИзменений Из ДельтаРазрешений Цикл + + Модуль = ФрагментИзменений.ВнешнийМодуль; + + Если Модуль = РаботаВБезопасномРежимеСлужебныйПовтИсп.СлужебныйИОМ() Тогда + + Словарь = СловарьМодуляКонфигурации(); + НаименованиеМодуля = Метаданные.Синоним; + + Иначе + + Словарь = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(Модуль).СловарьКонтейнераВнешнегоМодуля(); + НаименованиеМодуля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Модуль, "Наименование"); + + КонецЕсли; + + Разница = ФрагментИзменений.Изменения; + + КоличествоДобавляемых = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.КоличествоРазрешенийВТаблицах(Разница.Добавляемые); + КоличествоУдаляемых = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.КоличествоРазрешенийВТаблицах(Разница.Удаляемые); + + Если КоличествоДобавляемых > 0 Тогда + + ТабличныйДокумент.Вывести(ОбластьОтступа); + + Если КакТребуемые Тогда + ОбластьШапки = Макет.ПолучитьОбласть("ШапкаТребуемыеРазрешения"); + Иначе + ОбластьШапки = Макет.ПолучитьОбласть("ШапкаНовыеРазрешения"); + КонецЕсли; + ОбластьШапки.Параметры.ВидВнешнегоМодуляВРодительномПадеже = НРег(Словарь.Родительный); + ОбластьШапки.Параметры.Наименование = НаименованиеМодуля; + Если Модуль <> РаботаВБезопасномРежимеСлужебныйПовтИсп.СлужебныйИОМ() Тогда + ОбластьШапки.Параметры.Модуль = Модуль; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластьШапки); + + Если ВыводитьГруппировки Тогда + ТабличныйДокумент.НачатьГруппуСтрок(); + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластьОтступа); + + СформироватьПредставлениеРазрешений(ТабличныйДокумент, Разница.Добавляемые, Макет, КакТребуемые); + + Если ВыводитьГруппировки Тогда + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + КонецЕсли; + + КонецЕсли; + + Если КоличествоУдаляемых > 0 Тогда + + Если ВыводитьГруппировки Тогда + ТабличныйДокумент.НачатьГруппуСтрок(); + КонецЕсли; + + ОбластьШапки = Макет.ПолучитьОбласть("ШапкаУдаляемыеРазрешения"); + ОбластьШапки.Параметры.ВидВнешнегоМодуляВРодительномПадеже = НРег(Словарь.Родительный); + ОбластьШапки.Параметры.Наименование = НаименованиеМодуля; + ТабличныйДокумент.Вывести(ОбластьШапки); + СформироватьПредставлениеРазрешений(ТабличныйДокумент, Разница.Удаляемые, Макет, КакТребуемые); + + Если ВыводитьГруппировки Тогда + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Формирует представление операций администрирования разрешений на использование внешних ресурсов. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент, в который будет выведено представление операций, +// Макет - ТабличныйДокумент, полученный из макета отчета ПредставленияРазрешений, +// ОперацииАдминистрирования - ТаблицаЗначений, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОперацииАдминистрированияВЗапросах(). +// +Процедура СформироватьПредставлениеОпераций(ТабличныйДокумент, Знач Макет, Знач ОперацииАдминистрирования) + + Для Каждого Описание Из ОперацииАдминистрирования Цикл + + Если Описание.Операция = Перечисления.ОперацииСНаборамиРазрешений.Удаление Тогда + + ЭтоПрофильКонфигурации = (Описание.ВнешнийМодуль = РаботаВБезопасномРежимеСлужебныйПовтИсп.СлужебныйИОМ()); + + Если ЭтоПрофильКонфигурации Тогда + + Словарь = СловарьМодуляКонфигурации(); + НаименованиеМодуля = Метаданные.Синоним; + + Иначе + + Словарь = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(Описание.ВнешнийМодуль).СловарьКонтейнераВнешнегоМодуля(); + НаименованиеМодуля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Описание.ВнешнийМодуль, "Наименование"); + + КонецЕсли; + + Область = Макет.ПолучитьОбласть("ШапкаУдалениеПрофиляБезопасности"); + Область.Параметры["ВидВнешнегоМодуляВРодительномПадеже"] = НРег(Словарь.Родительный); + Область.Параметры["Наименование"] = НаименованиеМодуля; + + ТабличныйДокумент.Вывести(Область); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Формирует представление разрешений. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент, в который будет выведено представление операций, +// НаборыРазроешений - Структура, см. Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ТаблицыРазрешений(), +// Макет - ТабличныйДокумент, полученный из макета отчета ПредставленияРазрешений, +// КакТребуемые - Булево - флаг использования в представлении терминов вида "требуются следующие ресурсы" вместо "будут предоставлены следующие ресурсы". +// +Процедура СформироватьПредставлениеРазрешений(ТабличныйДокумент, Знач НаборыРазрешений, Знач Макет, Знач КакТребуемые = Ложь) + + ОбластиМакета = ОбластиМакета(КакТребуемые); + + ОбластьОтступа = Макет.ПолучитьОбласть("Отступ"); + + Для Каждого КлючИЗначение Из НаборыРазрешений Цикл + + ТипРазрешения = КлючИЗначение.Ключ; + Разрешения = КлючИЗначение.Значение; + + Если Разрешения.Количество() > 0 Тогда + + ИмяОбластиГруппы = ОбластиМакета.Найти(ТипРазрешения, "ТипРазрешения").Группа; + ОбластьГруппы = Макет.ПолучитьОбласть(ИмяОбластиГруппы); + ЗаполнитьЗначенияСвойств(ОбластьГруппы.Параметры, Новый Структура("Количество", Разрешения.Количество())); + ТабличныйДокумент.Вывести(ОбластьГруппы); + + ТабличныйДокумент.НачатьГруппуСтрок(ТипРазрешения, Истина); + + ИмяОбластиШапки = ОбластиМакета.Найти(ТипРазрешения, "ТипРазрешения").ШапкаТаблицы; + ОбластьШапки = Макет.ПолучитьОбласть(ИмяОбластиШапки); + ТабличныйДокумент.Вывести(ОбластьШапки); + + ИмяОбластиСтроки = ОбластиМакета.Найти(ТипРазрешения, "ТипРазрешения").СтрокаТаблицы; + ОбластьСтроки = Макет.ПолучитьОбласть(ИмяОбластиСтроки); + + Для Каждого Разрешение Из Разрешения Цикл + + Если ТипРазрешения = "FileSystemAccess" Тогда + + Если Разрешение.Адрес = "/temp" Тогда + Разрешение.Адрес = НСтр("ru = 'Каталог временных файлов'"); + КонецЕсли; + + Если Разрешение.Адрес = "/bin" Тогда + Разрешение.Адрес = НСтр("ru = 'Каталог, в который установлен сервер 1С:Предприятия'"); + КонецЕсли; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, Разрешение); + ТабличныйДокумент.Вывести(ОбластьСтроки); + + КонецЦикла; + + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + + ТабличныйДокумент.Вывести(ОбластьОтступа); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает словарь свойст конфигурации. +// +// Возвращаемое значение: Структура: +// * Именительный - синоним вида модуля в именительном падеже, +// * Родительный - синоним вида модуля в родительном падеже. +// +Функция СловарьМодуляКонфигурации() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Именительный", НСтр("ru = 'Программа'")); + Результат.Вставить("Родительный", НСтр("ru = 'Программы'")); + + Возврат Результат; + +КонецФункции + +// Возвращает соответствие типов разрешений областям макета ПредставленияРазрешений. +// +// Возвращаемое значение: ТаблицаЗначений: +// * ТипРазрешений - Строка - - имя XDTO-типа, описывающего типа разрешений. +// Тип должен быть определен в пакете {http://www.1c.ru/1cFresh/Application/Permissions/a.b.c.d}, +// * Группа - Строка - имя области макета, которая используется в качестве группы для типа разрешений, +// * ШапкаТаблицы - Строка - имя области макета, которая используется в качестве шапки таблицы для типа разрешений, +// * СтрокаТаблицы - Строка - имя области макета, которая используется в качестве строки таблицы для типа разрешений. +// +Функция ОбластиМакета(Знач КакТребуемые) + + Результат = Новый ТаблицаЗначений(); + Результат.Колонки.Добавить("ТипРазрешения", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Группа", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ШапкаТаблицы", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("СтрокаТаблицы", Новый ОписаниеТипов("Строка")); + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.ТипРазрешения = "FileSystemAccess"; + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияКаталогиФайловойСистемы"; + Иначе + НоваяСтрока.Группа = "РазрешенияКаталогиФайловойСистемы"; + КонецЕсли; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыКаталогиФайловойСистемы"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыКаталогиФайловойСистемы"; + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.ТипРазрешения = "CreateComObject"; + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияCOMОбъекты"; + Иначе + НоваяСтрока.Группа = "РазрешенияCOMОбъекты"; + КонецЕсли; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыCOMОбъекты"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыCOMОбъекты"; + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.ТипРазрешения = "AttachAddin"; + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияВнешниеКомпоненты"; + Иначе + НоваяСтрока.Группа = "РазрешенияВнешниеКомпоненты"; + КонецЕсли; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыВнешниеКомпоненты"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыВнешниеКомпоненты"; + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.ТипРазрешения = "RunApplication"; + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияПриложенияОС"; + Иначе + НоваяСтрока.Группа = "РазрешенияПриложенияОС"; + КонецЕсли; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыПриложенияОС"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыПриложенияОС"; + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.ТипРазрешения = "InternetResourceAccess"; + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияИнтернетРесурсы"; + Иначе + НоваяСтрока.Группа = "РазрешенияИнтернетРесурсы"; + КонецЕсли; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыИнтернетРесурсы"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыИнтернетРесурсы"; + + НоваяСтрока = Результат.Добавить(); + Если КакТребуемые Тогда + НоваяСтрока.Группа = "ТребованияПривилегированныйРежим"; + Иначе + НоваяСтрока.Группа = "РазрешенияПривилегированныйРежим"; + КонецЕсли; + НоваяСтрока.ТипРазрешения = "ExternalModulePrivilegedModeAllowed"; + НоваяСтрока.ШапкаТаблицы = "ШапкаТаблицыПривилегированныйРежим"; + НоваяСтрока.СтрокаТаблицы = "СтрокаТаблицыПривилегированныйРежим"; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl new file mode 100644 index 000000000..884c6f61a --- /dev/null +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl @@ -0,0 +1,57 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Для общей формы "Форма отчета" подсистемы "Варианты отчетов". +Функция ВерсияСтандартныхФункцийОтчетов() Экспорт + Возврат "1"; +КонецФункции + +// Для общей формы "Форма отчета" подсистемы "Варианты отчетов". +Функция ПолучитьНастройкиОтчета() Экспорт + МодульФункцииОтчетовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФункцииОтчетовКлиентСервер"); + НастройкиОтчета = МодульФункцииОтчетовКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + НастройкиОтчета.ВыводитьСуммуВыделенныхЯчеек = Ложь; + Возврат НастройкиОтчета; +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытийОбъекта + +// Вызывается при выполнении отчета с помощью метода СкомпоноватьРезультат(). +// +// Параметры: +// ДокументРезультат - ТабличныйДокумент - документ, в который выводится результат, +// ДанныеРасшифровки - Произвольный - переменная, в которую необходимо поместить +// данные расшифровки, +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения +// стандартной (системной) обработки события. +// +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДокументРезультат.Очистить(); + + НачатьТранзакцию(); + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина); + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); + + ЗапросыРазрешений = РаботаВБезопасномРежимеСлужебный.ЗапросыНаОбновлениеРазрешенийКонфигурации(); + + ОперацииАдминистрирования = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОперацииАдминистрированияВЗапросах(ЗапросыРазрешений); + Дельта = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ДельтаИзмененийРазрешенийНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений); + + ОтменитьТранзакцию(); + + Отчеты.ИспользуемыеВнешниеРесурсы.ЗаполнитьПредставлениеРезультатаПримененияЗапросовНаИспользованиеВнешнихРесурсов( + ДокументРезультат, ОперацииАдминистрирования, Дельта, Истина); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..e019f9ad8 --- /dev/null +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,13 @@ + + + + ИспользуемыеВнешниеРесурсы + + + ru + Внешние ресурсы, используемые программой и дополнительными модулями + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx new file mode 100644 index 000000000..eda155135 --- /dev/null +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx @@ -0,0 +1,1804 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 6 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + + 0 + + 7 + + + 8 + + + + + 2 + + + + + + 1 + + 7 + + + 9 + + + + + + 10 + + + ru + Для [ВидВнешнегоМодуляВРодительномПадеже] "[Наименование]" будут предоставлены следующие разрешения на использование внешних ресурсов: + + + Модуль + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 2 + + 7 + + + 9 + + + + + + 11 + + + ru + Будут удалены следующие ранее предоставленные для [ВидВнешнегоМодуляВРодительномПадеже] "[Наименование]" разрешения на использование внешних ресурсов: + + + Модуль + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 3 + + 7 + + + 9 + + + + + + 11 + + + ru + Будет удален профиль безопасности для [ВидВнешнегоМодуляВРодительномПадеже] "[Наименование]". + + + Модуль + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 4 + + 7 + + + 8 + + + + + 11 + + + ru + Для [ВидВнешнегоМодуляВРодительномПадеже] "[Наименование]" требуется использование следующих внешних ресурсов: + + + Модуль + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 5 + + 7 + + + 8 + + + + + 2 + + + + + + 6 + + 7 + + + 12 + + + + + 13 + + + ru + Каталоги файловой системы ([Количество]): + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + + 7 + + 7 + + + 12 + + + + + 13 + + + ru + Разрешения на использование каталогов файловой системы ([Количество]): + + + + + + + 12 + + + + + 12 + + + + + 12 + + + + + + 8 + + 7 + + + 14 + + + + + 15 + + + ru + Адрес + + + + + + 3 + + 16 + + + ru + Чтение данных + + + + + + + 16 + + + ru + Запись данных + + + + + + + + 9 + + 7 + + + 14 + + + + + 17 + Адрес + + + + 3 + + 18 + РазрешеноЧтениеДанных + + + + + 18 + РазрешенаЗаписьДанных + + + + + + 10 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 11 + + 7 + + + 14 + + + + + 19 + + + ru + COM-классы, установленные на серверах кластера 1С:Предприятия ([Количество]): + + + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 12 + + 7 + + + 14 + + + + + 19 + + + ru + Разрешения на использование COM-классов, установленных на серверах кластера 1С:Предприятия ([Количество]): + + + + + + + + 13 + + 7 + + + 14 + + + + + 15 + + + ru + Имя и идентификатор COM-класса + + + + + + 3 + + 16 + + + ru + Имя компьютера + + + + + + + + 14 + + 7 + + + 14 + + + + + 20 + + + ru + [ProgId] ([CLSID]) + + + + + + 3 + + 21 + ИмяКомпьютера + + + + + + 15 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 16 + + 7 + + + 8 + + + + + 19 + + + ru + Внешние компонент, поставляемые в составе программы ([Количество]): + + + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 17 + + 7 + + + 8 + + + + + 19 + + + ru + Разрешения на использование внешних компонент, поставляемых в составе программы ([Количество]): + + + + + + + + 18 + + 7 + + + 14 + + + + + 15 + + + ru + Имя макета и файла компоненты + + + + + + 3 + + 22 + + + ru + Контрольная сумма + + + + + + + + 19 + + 7 + + + 14 + + + + + 20 + + + ru + [ИмяМакета]\[ИмяФайла] + + + + + + 3 + + 23 + ХэшСумма + + + + + + 20 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 21 + + 7 + + + 8 + + + + + 19 + + + ru + Приложения операционной системы ([Количество]): + + + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 22 + + 7 + + + 8 + + + + + 19 + + + ru + Разрешения на исполнение приложений операционной системы ([Количество]): + + + + + + + + 23 + + 7 + + + 14 + + + + + 15 + + + ru + Шаблон командной строки + + + + + + + + 24 + + 7 + + + 14 + + + + + 24 + ШаблонСтрокиЗапуска + + + + + + 25 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 26 + + 7 + + + 8 + + + + + 19 + + + ru + Интернет-ресурсы ([Количество]): + + + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 27 + + 7 + + + 8 + + + + + 19 + + + ru + Разрешения на использование Интернет-ресурсов ([Количество]): + + + + + + + + 28 + + 7 + + + 14 + + + + + 15 + + + ru + Протокол: + + + + + + + 25 + + + ru + Адрес Интернет-ресурса + + + + + + 4 + + 16 + + + ru + Порт + + + + + + + + 29 + + 7 + + + 14 + + + + + 26 + Протокол + + + + + 27 + Адрес + + + + 4 + + 28 + Порт + + + + + + 30 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 31 + + 7 + + + 8 + + + + + 2 + + + ru + Расширенная работа с данными: + + + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 32 + + 7 + + + 8 + + + + + 2 + + + ru + Разрешения на расширенную работу с данными: + + + + + + + + 33 + + 29 + + + 14 + + + + + 30 + + + + + + 34 + + 7 + + + 14 + + + + + 30 + + + ru + • Использование привилегированного режима (будет разрешено программное выполнение операций с данными, для которых недостаточно прав доступа текущего пользователя программы) + + + + + + + + 35 + + 7 + + + 8 + + + + + 2 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 36 + + 7 + + + 8 + + + + + 2 + + + + + true + 31 + 37 + 37 + + 1 + 1 + 3 + + + 2 + 1 + 3 + + + 3 + 1 + 3 + + + 4 + 1 + 3 + + + 6 + 1 + 3 + + + 7 + 1 + 3 + + + 8 + 1 + 1 + + + 9 + 1 + 1 + + + 11 + 1 + 3 + + + 12 + 1 + 3 + + + 13 + 1 + 1 + + + 13 + 3 + 1 + + + 14 + 1 + 1 + + + 14 + 3 + 1 + + + 16 + 1 + 3 + + + 17 + 1 + 3 + + + 18 + 1 + 1 + + + 18 + 3 + 1 + + + 19 + 1 + 1 + + + 19 + 3 + 1 + + + 21 + 1 + 3 + + + 22 + 1 + 3 + + + 23 + 1 + 3 + + + 24 + 1 + 3 + + + 26 + 1 + 3 + + + 27 + 1 + 3 + + + 28 + 2 + 1 + + + 29 + 2 + 1 + + + 31 + 1 + 3 + + + 32 + 1 + 3 + + + 34 + 1 + 3 + + + 36 + 1 + 3 + + + Отступ + + Rows + 36 + 36 + -1 + -1 + + + + РазрешенияCOMОбъекты + + Rows + 12 + 12 + -1 + -1 + + + + РазрешенияВнешниеКомпоненты + + Rows + 17 + 17 + -1 + -1 + + + + РазрешенияИнтернетРесурсы + + Rows + 27 + 27 + -1 + -1 + + + + РазрешенияКаталогиФайловойСистемы + + Rows + 7 + 7 + -1 + -1 + + + + РазрешенияПривилегированныйРежим + + Rows + 32 + 32 + -1 + -1 + + + + РазрешенияПриложенияОС + + Rows + 22 + 22 + -1 + -1 + + + + СтрокаТаблицыCOMОбъекты + + Rows + 14 + 14 + -1 + -1 + + + + СтрокаТаблицыВнешниеКомпоненты + + Rows + 19 + 19 + -1 + -1 + + + + СтрокаТаблицыИнтернетРесурсы + + Rows + 29 + 29 + -1 + -1 + + + + СтрокаТаблицыКаталогиФайловойСистемы + + Rows + 9 + 9 + -1 + -1 + + + + СтрокаТаблицыПривилегированныйРежим + + Rows + 34 + 34 + -1 + -1 + + + + СтрокаТаблицыПриложенияОС + + Rows + 24 + 24 + -1 + -1 + + + + ТребованияCOMОбъекты + + Rows + 11 + 11 + -1 + -1 + + + + ТребованияВнешниеКомпоненты + + Rows + 16 + 16 + -1 + -1 + + + + ТребованияИнтернетРесурсы + + Rows + 26 + 26 + -1 + -1 + + + + ТребованияКаталогиФайловойСистемы + + Rows + 6 + 6 + -1 + -1 + + + + ТребованияПривилегированныйРежим + + Rows + 31 + 31 + -1 + -1 + + + + ТребованияПриложенияОС + + Rows + 21 + 21 + -1 + -1 + + + + ШапкаНовыеРазрешения + + Rows + 1 + 1 + -1 + -1 + + + + ШапкаТаблицыCOMОбъекты + + Rows + 13 + 13 + -1 + -1 + + + + ШапкаТаблицыВнешниеКомпоненты + + Rows + 18 + 18 + -1 + -1 + + + + ШапкаТаблицыИнтернетРесурсы + + Rows + 28 + 28 + -1 + -1 + + + + ШапкаТаблицыКаталогиФайловойСистемы + + Rows + 8 + 8 + -1 + -1 + + + + ШапкаТаблицыПривилегированныйРежим + + Rows + 33 + 33 + -1 + -1 + + + + ШапкаТаблицыПриложенияОС + + Rows + 23 + 23 + -1 + -1 + + + + ШапкаТребуемыеРазрешения + + Rows + 4 + 4 + -1 + -1 + + + + ШапкаУдалениеПрофиляБезопасности + + Rows + 3 + 3 + -1 + -1 + + + + ШапкаУдаляемыеРазрешения + + Rows + 2 + 2 + -1 + -1 + + + + Solid + + + None + + + + + 0 + 6 + + + 0 + 170 + + + 0 + 238 + + + 0 + 136 + + + 0 + 139 + + + 0 + 8 + + + 0 + + + 0 + 10 + + + 0 + 10 + Top + Wrap + + + 1 + 170 + Top + Wrap + Template + false + + + 1 + 170 + Wrap + Template + + + 0 + 160 + + + 0 + 160 + Wrap + Template + + + 0 + 10 + Wrap + + + 0 + 0 + 170 + style:ReportHeaderBackColor + + + 0 + 0 + 72 + style:ReportHeaderBackColor + + + 0 + 0 + 170 + Wrap + Parameter + false + + + 0 + 0 + Center + Parameter + + + ru + БЛ=Нет; БИ=Да + + + + + 0 + 170 + Wrap + Template + + + 0 + 0 + 170 + Wrap + Template + + + 0 + 0 + Wrap + Parameter + + + 0 + 0 + 160 + style:ReportHeaderBackColor + + + 0 + 0 + 160 + Wrap + Parameter + + + 0 + 0 + 170 + Wrap + Parameter + + + 0 + 0 + style:ReportHeaderBackColor + + + 0 + 0 + 170 + Parameter + + + 0 + 0 + Wrap + Parameter + false + + + 0 + 0 + Parameter + + + ru + ЧГ=0 + + + + + 0 + 6 + + + 0 + 1 + 170 + Wrap + + + 0 + 72 + + \ No newline at end of file diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo new file mode 100644 index 000000000..e3ebf334c --- /dev/null +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ИспользуемыеВнешниеРесурсы.mdo @@ -0,0 +1,29 @@ + + + + + + + ИспользуемыеВнешниеРесурсы + + ru + Используемые внешние ресурсы + + true + Report.ИспользуемыеВнешниеРесурсы.Template.ОсновнаяСхемаКомпоновкиДанных + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + + ПредставленияРазрешений + + ru + Представления разрешений + + + diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl b/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl index 1a782a306..ba033d842 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl @@ -4,8 +4,7 @@ // ссылок для начального анализа. Если не пуст, то отчет формируется автоматически при открытии. // -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,8 +29,9 @@ ПодключитьОбработчикОжидания("ЗапуститьФормирование", 0.1, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Сформировать(Команда) @@ -40,8 +40,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ЗапуститьФормирование() @@ -69,10 +70,22 @@ НаборСсылок.ЗагрузитьЗначения(ТекущийПараметр.ВыгрузитьЗначения()); Иначе - Для Каждого Элемент Из ТекущийПараметр Цикл - НаборСсылок.Добавить(Элемент.Ссылка); - КонецЦикла; + ЭтоПеречисляемыйТип = Ложь; + Попытка + // Перечисляемый + Для Каждого Элемент Из ТекущийПараметр Цикл + ЭтоПеречисляемыйТип = Истина; + Прервать; + КонецЦикла; + Исключение + ЭтоПеречисляемыйТип = Ложь; + КонецПопытки; + Если ЭтоПеречисляемыйТип Тогда + Для Каждого Элемент Из ТекущийПараметр Цикл + НаборСсылок.Добавить(Элемент.Ссылка); + КонецЦикла; + КонецЕсли; КонецЕсли; НовыеПараметры.Вставить(Новый ПараметрКомпоновкиДанных("НаборСсылок"), НаборСсылок); @@ -88,3 +101,4 @@ КонецЦикла; КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html b/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html new file mode 100644 index 000000000..f67dcc220 --- /dev/null +++ b/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html @@ -0,0 +1,13 @@ + +

        Отчет предназначен для просмотра сведений об использовании элементов списков в документах программы.

        +

        При работе в программе пользователи могут по ошибке допускать дублирование элементов, от которого необходимо избавляться, т.к. это мешает правильному учету в программе. При использовании этих дублирующихся элементов могут быть ссылки то на один, то на другой, в результате происходят ошибки, например, в бухгалтерском учете списание денежных средств проходит некорректно и т.п.

        +

        Для того чтобы была возможность удалить дубли из программы, сначала необходимо удалить ссылки на них в документах.  Отчет показывает, в каких документах программы используются данные объекты.

        +

        Отчет открывается из списков программы по команде Все действия - Места использования.

        +

        В отчете выводится:

        +
        • Наименование, Код выбранных элементов списка; +
        • Места использования - документ, его номер и дата; +
        • Количество Вхождений.

        Формирование отчета

        +
        • Выделите один или несколько элементов списка, выполните команду Все действия - Места использования, отчет формируется автоматически. +
        • Отчет сгруппирован по выбранным элементам списка. По каждому элементу выводятся документы программы, в которых имеются ссылки на этот элемент и количество вхождений, при этом подсчитывается суммарное количество вхождений по каждому элементу и общая сумма по отчету. +
        • С помощью двойного щелчка мыши по соответствующей ячейке отчета можно перейти к элементам списка или к документу, в котором имеется ссылка на эти элементы.

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index baa225b69..e69de29bb 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -1,5 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -Процедура Тест() Экспорт -КонецПроцедуры -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl index 980ac9cf5..6b753a250 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -23,8 +22,9 @@ ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Функция ПроцессорКомпоновки(ДанныеРасшифровки = Неопределено, ТипГенератора = "ГенераторМакетаКомпоновкиДанных") @@ -110,4 +110,6 @@ Возврат Результат; КонецФункции +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index b95d0a48c..1b98235cf 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -127,7 +127,12 @@ Основной - Основной + + + ru + Места использования объектов программы + + diff --git a/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo b/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo index 8e688d95f..c9a1b6952 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo +++ b/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo @@ -13,6 +13,11 @@ Report.МестаИспользованияСсылок.Form.МестаИспользования Report.МестаИспользованияСсылок.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + МестаИспользования diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index 530d213f2..6b3307d96 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -33,23 +33,25 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Если ТипЗнч(Расшифровка) = Тип("Строка") - И Лев(Расшифровка, СтрДлина("Открыть форму списка: ")) = "Открыть форму списка: " Тогда + И Лев(Расшифровка, СтрДлина("ОткрытьФормуСписка: ")) = "ОткрытьФормуСписка: " Тогда СтандартнаяОбработка = Ложь; - ОткрытьФорму(Сред(Расшифровка, СтрДлина("Открыть форму списка: ") + 1) + ".ФормаСписка"); + ОткрытьФорму(Сред(Расшифровка, СтрДлина("ОткрытьФормуСписка: ") + 1) + ".ФормаСписка"); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Сформировать(Команда) @@ -58,8 +60,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ВывестиОтчет(Ссылка) @@ -122,7 +125,9 @@ УстановитьПривилегированныйРежим(Ложь); Если ПользовательИБПрочитан Тогда - Область.Параметры.ДоступКИнформационнойБазеРазрешен = Истина; + Область.Параметры.ВходВПрограммуРазрешен = Пользователи.ВходВПрограммуРазрешен( + СвойстваПользователяИБ); + Документ.Вывести(Область, 2); Область = Макет.ПолучитьОбласть("СвойстваПользователяИБДетали2"); @@ -139,7 +144,7 @@ КонецЕсли; Документ.Вывести(Область, 2); Иначе - Область.Параметры.ДоступКИнформационнойБазеРазрешен = Ложь; + Область.Параметры.ВходВПрограммуРазрешен = Ложь; Документ.Вывести(Область, 2); КонецЕсли; Документ.ЗакончитьАвтогруппировкуСтрок(); @@ -843,8 +848,7 @@ КонечнаяСтрокаОбластиОбъекта = Неопределено; Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока"); - Область.Параметры.ОткрытьФормуСписка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Открыть форму списка: %1'"), ОписаниеОбъекта.Таблица); + Область.Параметры.ОткрытьФормуСписка = "ОткрытьФормуСписка: " + ОписаниеОбъекта.Таблица; Если ОписаниеОбъекта.ЧтениеБезОграничения Тогда Если ОписаниеОбъекта.Просмотр Тогда @@ -1093,8 +1097,7 @@ КонечнаяСтрокаОбластиОбъекта = Неопределено; Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрока"); - Область.Параметры.ОткрытьФормуСписка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Открыть форму списка: %1'"), ОписаниеОбъекта.Таблица); + Область.Параметры.ОткрытьФормуСписка = "ОткрытьФормуСписка: " + ОписаниеОбъекта.Таблица; Если ДобавлениеИспользуется Тогда Если ОписаниеОбъекта.Добавление И ОписаниеОбъекта.Изменение Тогда @@ -1929,3 +1932,5 @@ Возврат КорневыеЭлементы; КонецФункции + +#КонецОбласти diff --git a/SSL/src/Reports/ПраваДоступа/Help/ru.html b/SSL/src/Reports/ПраваДоступа/Help/ru.html new file mode 100644 index 000000000..a0c2b95d5 --- /dev/null +++ b/SSL/src/Reports/ПраваДоступа/Help/ru.html @@ -0,0 +1,22 @@ + +

        Просмотр полного списка прав пользователя.

        +

        Отчет открывается из карточки пользователя или внешнего пользователя (группы пользователей или группы внешних пользователей) со страницы Права доступа по команде Отчет по правам доступа.

        +

        Отчет с помощью стандартных команд можно распечатать или сохранить на компьютере в нужном формате.

        +

        В отчете выводятся сведения:

        +
        • +
          Свойства пользователя информационной базы:
          +
          • +
            доступ к информационной базе, имя для входа, имя пользователя операционной системы и другие сведения;
        • +
          Группы доступа пользователя:
          +
          • +
            Наименование группы, ответственный, профиль;
        • +
          Роли пользователя по профилям;
          +
        • +
          Просмотр объектов:
          +
          • +
            Включает таблицу из 3 колонок: Объект/Права/Ограничения, Группа доступа/Профиль/Роли, Ограничения на уровне записей/Виды и значения доступа;
        • +
          Редактирование объектов:
          +
          • +
            Включает таблицу из 3 колонок: Объект/Права/Ограничения, Группа доступа/Профиль/Роли, Ограничения на уровне записей/Виды и значения доступа;
        • +
          Права на объекты: Папки.

        Получение подробного отчета

        +

        Включите флажок Подробные сведения о правах доступа, нажмите Сформировать.

        \ No newline at end of file diff --git a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl new file mode 100644 index 000000000..a7f1e95ca --- /dev/null +++ b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl @@ -0,0 +1,107 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Обработчики событий подсистемы ВариантыОтчетов. + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ПраваДоступа); + Отчет.Включен = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx index a87632a73..5b88e3b43 100644 --- a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx +++ b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx @@ -277,7 +277,7 @@ ru - Доступ к информационной базе разрешен + Вход в программу разрешен @@ -285,7 +285,7 @@ 32 - ДоступКИнформационнойБазеРазрешен + ВходВПрограммуРазрешен diff --git a/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo b/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo index d8e21ed38..ab01d58e8 100644 --- a/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo +++ b/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo @@ -12,6 +12,11 @@ true Report.ПраваДоступа.Form.ФормаОтчета SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + ФормаОтчета diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Form.form deleted file mode 100644 index e8f168d5c..000000000 --- a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,710 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 23 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 4 - true - true - - true - - false - - ВыбратьВариантКнопкаExtendedTooltip - 24 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаExtendedTooltip - 22 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 6 - true - true - - true - - false - - СформироватьОтчетExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - Настройка - 7 - true - true - - true - - false - - НастройкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 8 - true - true - - true - - false - - ВыбратьНастройкуExtendedTooltip - 28 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 9 - true - true - - true - - false - - СохранитьНастройкуExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 10 - true - true - - true - - false - - СтандартнаяНастройкаExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 11 - true - true - - true - - false - - НовоеОкноExtendedTooltip - 31 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 12 - true - true - - true - - false - - ИзменитьВариантExtendedTooltip - 32 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 13 - true - true - - true - - false - - ВыбратьВариантExtendedTooltip - 33 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 14 - true - true - - true - - false - - СохранитьВариантExtendedTooltip - 34 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 15 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 35 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 16 - true - true - - true - - false - - СправкаExtendedTooltip - 36 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - ОсновнаяКоманднаяПанельExtendedTooltip - 25 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПользовательскиеНастройки - 17 - true - true - - true - - - Отчет.SettingsComposer.UserSettings - - false - None - HierarchicalList - List - Tree - None - - ПользовательскиеНастройкиКоманднаяПанель - 19 - Left - true - - - ПользовательскиеНастройкиСтрокаПоиска - 40 - - ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 41 - true - - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиСостояниеПросмотра - 43 - - ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 44 - true - - ViewStatusAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиУправлениеПоиском - 46 - - ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 47 - true - - SearchControlAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиExtendedTooltip - 37 - Label - true - true - - Left - - - - ПользовательскиеНастройкиКонтекстноеМеню - 18 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show - - - Результат - 20 - true - true - - true - - - Результат - - true - None - - РезультатExtendedTooltip - 38 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 21 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Отчет - 1 - - ReportObject.ПросроченныеЗадачи - - - true - - - true - -
        true
        -
        - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - ДанныеРасшифровки - 4 - - String - - - - true - - - true - - - - - - - - ShowOnComposition - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
        diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index e1e3e25d8..000000000 --- a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,11 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - ЗначениеРасшифровки = Неопределено; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровки, ЗначениеРасшифровки) Тогда - СтандартнаяОбработка = НЕ БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(ЗначениеРасшифровки); - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html index a0d96c545..ccc294b81 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/ПросроченныеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl index e69de29bb..d9b8d4fe6 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl @@ -0,0 +1,22 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Заполняет настройки вариантов отчета. +// Подробнее - см. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Отчет = МодульВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ПросроченныеЗадачи); + Отчет.Описание = НСтр("ru = 'Список задач, выполненных с нарушением сроков, по исполнителям.'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ЗадачиВыполненныеСНарушениемСроков"); + Вариант.Описание = НСтр("ru = 'Список задач, выполненных с нарушением сроков, по исполнителям.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo b/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo index 96af0a8de..6f7e88d35 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo +++ b/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo @@ -10,7 +10,6 @@ Просроченные задачи
        true - Report.ПросроченныеЗадачи.Form.ФормаОтчета Report.ПросроченныеЗадачи.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов true @@ -19,15 +18,6 @@ ru - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/СведенияОПользователях/Help/ru.html b/SSL/src/Reports/СведенияОПользователях/Help/ru.html new file mode 100644 index 000000000..9856f75c9 --- /dev/null +++ b/SSL/src/Reports/СведенияОПользователях/Help/ru.html @@ -0,0 +1,31 @@ + +

        Отчет предназначен для просмотра сведений обо всех пользователях или внешних пользователях программы, включая настройки для входа (свойства пользователя информационной базы).

        +

        Необходимость в отчете возникает, если требуется выполнить групповой анализ настроек для входа (имени для входа, видов аутентификации и других).

        +

        Отчет открывается из списка Пользователи (Внешние пользователи) по команде Все действия - Сведения о пользователях (о внешних пользователях).

        +

        В отчете выдаются сведения:

        +
        • Полное имя пользователя; +
        • Вход в программу разрешен - поле может принимать значение "Да" или остается пустым; +
        • Имя (для входа); +
        • Аутентификация стандартная - поле может принимать значение "Да" или остается пустым; +
        • Аутентификация ОС - поле может принимать значение "Да" или остается пустым; +
        • Пользователь ОС - имя, с которым пользователь входит в ОС; +
        • Аутентификация OpenID - поле может принимать значение "Да" или остается пустым; +
        • Режим запуска.

        Отборы пользователей

        +

        С помощью кнопки Настройки и другие отчеты можно открыть вкладку Настройки. Для отбора пользователей по одному или нескольким параметрам включите соответствующие флажки.

        +

        Возможен отбор пользователей по параметрам:

        +
        • Недействительные +
        • Помеченные на удаление +
        • Без пользователя информационной базы +
        • Вход в программу разрешен +
        • Аутентификация стандартная +
        • Аутентификация ОС +
        • Аутентификация OpenID

        Варианты отчета

        +

        С помощью кнопки Настройки и другие отчеты можно открыть вкладку Другие отчеты со списком других доступных вариантов отчета. Существует три варианта отчета:

        +
        • +
          Сведения о пользователях - открывается из списка Пользователи;
          +
        • +
          Сведения о внешних пользователях - открывается из списка Внешние пользователи;
          +
        • +
          Сведения о пользователях и внешних пользователях - общий отчет о всех пользователях программы, в котором предусмотрено поле Это внешний пользователь (принимает значение "Да" или остается пустым) для выделения и отбора внешних пользователей.

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl new file mode 100644 index 000000000..cde28bcc4 --- /dev/null +++ b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl @@ -0,0 +1,142 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Обработчики событий подсистемы ВариантыОтчетов. + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные методы: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// * Включен - Булево - +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// * ВидимостьПоУмолчанию - Булево - +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// * Описание - Строка - Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета +// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. +// "" - Выводить отчет в своей группе обычным шрифтом. +// "Важный" - Выводить отчет в своей группе жирным шрифтом. +// "СмТакже" - Выводить отчет в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (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Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура НастроитьВариантыОтчета(Настройки) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта( + Настройки, Метаданные.Отчеты.СведенияОПользователях, "СведенияОПользователях"); + + Вариант.Описание = + НСтр("ru = 'Выводит подробные сведения о пользователях, + |включая настройки для входа (если указаны).'"); + + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта( + Настройки, Метаданные.Отчеты.СведенияОПользователях, "СведенияОВнешнихПользователях"); + + Вариант.ФункциональныеОпции.Добавить("ИспользоватьВнешнихПользователей"); + Вариант.Описание = + НСтр("ru = 'Выводит подробные сведения о внешних пользователях, + |включая настройки для входа (если указаны).'"); + + Вариант = МодульВариантыОтчетов.ОписаниеВарианта( + Настройки, Метаданные.Отчеты.СведенияОПользователях, "СведенияОПользователяхИВнешнихПользователях"); + + Вариант.ФункциональныеОпции.Добавить("ИспользоватьВнешнихПользователей"); + Вариант.Описание = + НСтр("ru = 'Выводит подробные сведения о всех пользователях, + |включая настройки для входа (если указаны).'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если Не Параметры.Свойство("КлючВарианта") Тогда + СтандартнаяОбработка = Ложь; + Параметры.Вставить("КлючВарианта", "СведенияОПользователяхИВнешнихПользователях"); + ВыбраннаяФорма = "Отчет.СведенияОПользователях.Форма"; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl b/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl new file mode 100644 index 000000000..60ac8f8ac --- /dev/null +++ b/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl @@ -0,0 +1,208 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ДокументРезультат.Очистить(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + ИдентификаторыНесуществующихПользователейИБ = Новый Массив; + + ВнешниеНаборыДанных = Новый Структура; + ВнешниеНаборыДанных.Вставить("ПользователиИБ", ПользователиИБ(ИдентификаторыНесуществующихПользователейИБ)); + ВнешниеНаборыДанных.Вставить("КонтактнаяИнформация", КонтактнаяИнформация(Настройки)); + + Настройки.ПараметрыДанных.УстановитьЗначениеПараметра( + "ИдентификаторыНесуществующихПользователейИБ", ИдентификаторыНесуществующихПользователейИБ); + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.НачатьВывод(); + ЭлементРезультата = ПроцессорКомпоновки.Следующий(); + Пока ЭлементРезультата <> Неопределено Цикл + ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); + ЭлементРезультата = ПроцессорКомпоновки.Следующий(); + КонецЦикла; + ПроцессорВывода.ЗакончитьВывод(); + +КонецПроцедуры + +#Область СлужебныеПроцедурыИФункции + +Функция ПользователиИБ(ИдентификаторыНесуществующихПользователейИБ) + + ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ИдентификаторыНесуществующихПользователейИБ.Добавить(ПустойУникальныйИдентификатор); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ, + | Пользователи.СвойстваПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ, + | ВнешниеПользователи.СвойстваПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + Выгрузка.Индексы.Добавить("ИдентификаторПользователяИБ"); + Выгрузка.Колонки.Добавить("Сопоставлен", Новый ОписаниеТипов("Булево")); + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + ПользователиИБ = Новый ТаблицаЗначений; + ПользователиИБ.Колонки.Добавить("УникальныйИдентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + ПользователиИБ.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(100))); + ПользователиИБ.Колонки.Добавить("ВходВПрограммуРазрешен", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("АутентификацияСтандартная", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("ПоказыватьВСпискеВыбора", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("ЗапрещеноИзменятьПароль", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("АутентификацияOpenID", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("АутентификацияОС", Новый ОписаниеТипов("Булево")); + ПользователиИБ.Колонки.Добавить("ПользовательОС", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(1024))); + ПользователиИБ.Колонки.Добавить("Язык", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(100))); + ПользователиИБ.Колонки.Добавить("РежимЗапуска", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(100))); + + ВсеПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Для каждого ПользовательИБ Из ВсеПользователиИБ Цикл + СвойстваПользовательИБ = Пользователи.НовоеОписаниеПользователяИБ(); + Пользователи.ПрочитатьПользователяИБ(ПользовательИБ.УникальныйИдентификатор, СвойстваПользовательИБ); + НоваяСтрока = ПользователиИБ.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваПользовательИБ); + Язык = СвойстваПользовательИБ.Язык; + НоваяСтрока.Язык = ?(ЗначениеЗаполнено(Язык), Метаданные.Языки[Язык].Синоним, ""); + НоваяСтрока.ВходВПрограммуРазрешен = Пользователи.ВходВПрограммуРазрешен(СвойстваПользовательИБ); + + Строка = Выгрузка.Найти(СвойстваПользовательИБ.УникальныйИдентификатор, "ИдентификаторПользователяИБ"); + Если Строка <> Неопределено Тогда + Строка.Сопоставлен = Истина; + Если Не НоваяСтрока.ВходВПрограммуРазрешен Тогда + ЗаполнитьЗначенияСвойств(НоваяСтрока, + ПользователиСлужебный.ХранимыеСвойстваПользователяИБ(Строка)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Отбор = Новый Структура("Сопоставлен", Ложь); + Строки = Выгрузка.НайтиСтроки(Отбор); + Для каждого Строка Из Строки Цикл + ИдентификаторыНесуществующихПользователейИБ.Добавить(Строка.ИдентификаторПользователяИБ); + КонецЦикла; + + Возврат ПользователиИБ; + +КонецФункции + +Функция КонтактнаяИнформация(Настройки) + + ТипыСсылки = Новый Массив; + ТипыСсылки.Добавить(Тип("СправочникСсылка.Пользователи")); + ТипыСсылки.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + + Контакты = Новый ТаблицаЗначений; + Контакты.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(ТипыСсылки)); + Контакты.Колонки.Добавить("Телефон", Новый ОписаниеТипов("Строка")); + Контакты.Колонки.Добавить("ЭлектронныйАдрес", Новый ОписаниеТипов("Строка")); + + Если Не ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат Контакты; + КонецЕсли; + + ЗаполнитьКонтакты = Ложь; + ПолеТелефон = Новый ПолеКомпоновкиДанных("Телефон"); + ПолеЭлектронныйАдрес = Новый ПолеКомпоновкиДанных("ЭлектронныйАдрес"); + + Для каждого Элемент Из Настройки.Выбор.Элементы Цикл + Если ТипЗнч(Элемент) = Тип("ВыбранноеПолеКомпоновкиДанных") + И (Элемент.Поле = ПолеТелефон Или Элемент.Поле = ПолеЭлектронныйАдрес) + И Элемент.Использование Тогда + + ЗаполнитьКонтакты = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЗаполнитьКонтакты Тогда + Возврат Контакты; + КонецЕсли; + + ВидыКонтактнойИнформации = Новый Массив; + ВидыКонтактнойИнформации.Добавить(Справочники["ВидыКонтактнойИнформации"].EmailПользователя); + ВидыКонтактнойИнформации.Добавить(Справочники["ВидыКонтактнойИнформации"].ТелефонПользователя); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВидыКонтактнойИнформации", ВидыКонтактнойИнформации); + Запрос.Текст = + "ВЫБРАТЬ + | ПользователиКонтактнаяИнформация.Ссылка КАК Ссылка, + | ПользователиКонтактнаяИнформация.Вид, + | ПользователиКонтактнаяИнформация.Представление + |ИЗ + | Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация + |ГДЕ + | ПользователиКонтактнаяИнформация.Вид В (&ВидыКонтактнойИнформации) + | + |УПОРЯДОЧИТЬ ПО + | ПользователиКонтактнаяИнформация.Ссылка, + | ПользователиКонтактнаяИнформация.Тип.Порядок, + | ПользователиКонтактнаяИнформация.Вид"; + + Выборка = Запрос.Выполнить().Выбрать(); + + ТекущаяСсылка = Неопределено; + Телефоны = ""; + ЭлектронныеАдреса = ""; + + Пока Выборка.Следующий() Цикл + Если ТекущаяСсылка <> Выборка.Ссылка Тогда + Если ТекущаяСсылка <> Неопределено Тогда + Если ЗначениеЗаполнено(Телефоны) Или ЗначениеЗаполнено(ЭлектронныеАдреса) Тогда + НоваяСтрока = Контакты.Добавить(); + НоваяСтрока.Ссылка = ТекущаяСсылка; + НоваяСтрока.Телефон = Телефоны; + НоваяСтрока.ЭлектронныйАдрес = ЭлектронныеАдреса; + КонецЕсли; + КонецЕсли; + Телефоны = ""; + ЭлектронныеАдреса = ""; + ТекущаяСсылка = Выборка.Ссылка; + КонецЕсли; + Если Выборка.Вид = Справочники["ВидыКонтактнойИнформации"].ТелефонПользователя Тогда + Телефоны = Телефоны + ?(ЗначениеЗаполнено(Телефоны), ", ", ""); + Телефоны = Телефоны + Выборка.Представление; + КонецЕсли; + Если Выборка.Вид = Справочники["ВидыКонтактнойИнформации"].EmailПользователя Тогда + ЭлектронныеАдреса = ЭлектронныеАдреса + ?(ЗначениеЗаполнено(ЭлектронныеАдреса), ", ", ""); + ЭлектронныеАдреса = ЭлектронныеАдреса + Выборка.Представление; + КонецЕсли; + КонецЦикла; + + Возврат Контакты; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..d9045d41b --- /dev/null +++ b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,1322 @@ + + + + ИсточникДанных1 + Local + + + ПользователиИБ + + УникальныйИдентификатор + УникальныйИдентификатор + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уникальный идентификатор</v8:content> + </v8:item> + + + v8:UUID + + + + Имя + Имя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя (для входа)</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + ВходВПрограммуРазрешен + ВходВПрограммуРазрешен + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вход в программу разрешен</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + ПоказыватьВСпискеВыбора + ПоказыватьВСпискеВыбора + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показывать в списке выбора</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + ЗапрещеноИзменятьПароль + ЗапрещеноИзменятьПароль + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запрещено изменять пароль</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + ПользовательОС + ПользовательОС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователь ОС</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + Язык + Язык + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Язык</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + РежимЗапуска + РежимЗапуска + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Режим запуска</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + АутентификацияСтандартная + АутентификацияСтандартная + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Аутентификация стандартная</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + АутентификацияОС + АутентификацияОС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Аутентификация ОС</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + АутентификацияOpenID + АутентификацияOpenID + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Аутентификация open ID</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + ИсточникДанных1 + ПользователиИБ + + + Пользователи + + ПометкаУдаления + ПометкаУдаления + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + Наименование + Наименование + + xs:string + + 0 + Variable + + + + + Предопределенный + Предопределенный + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + Ссылка + Ссылка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя</v8:content> + </v8:item> + + + d5p1:CatalogRef.ВнешниеПользователи + d5p1:CatalogRef.Пользователи + + + + Комментарий + Комментарий + + xs:string + + 0 + Variable + + + + + Недействителен + Недействителен + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + ИдентификаторПользователяИБ + ИдентификаторПользователяИБ + + v8:UUID + + + + ЭтоВнешнийПользователь + ЭтоВнешнийПользователь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Это внешний пользователь</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + БезПользователяИнформационнойБазы + БезПользователяИнформационнойБазы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Без пользователя информационной базы</v8:content> + </v8:item> + + + ИсточникДанных1 + ВЫБРАТЬ + Пользователи.Ссылка, + ЛОЖЬ КАК ЭтоВнешнийПользователь, + ВЫБОР + КОГДА Пользователи.ИдентификаторПользователяИБ В (&ИдентификаторыНесуществующихПользователейИБ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК БезПользователяИнформационнойБазы, + Пользователи.ПометкаУдаления, + Пользователи.Наименование, + Пользователи.ИдентификаторПользователяИБ, + Пользователи.Недействителен, + Пользователи.Комментарий, + Пользователи.Предопределенный +ИЗ + Справочник.Пользователи КАК Пользователи +ГДЕ + Пользователи.Служебный = ЛОЖЬ + И &Пользователи + +ОБЪЕДИНИТЬ ВСЕ + +ВЫБРАТЬ + ВнешниеПользователи.Ссылка, + ИСТИНА, + ВЫБОР + КОГДА ВнешниеПользователи.ИдентификаторПользователяИБ В (&ИдентификаторыНесуществующихПользователейИБ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ, + ВнешниеПользователи.ПометкаУдаления, + ВнешниеПользователи.Наименование, + ВнешниеПользователи.ИдентификаторПользователяИБ, + ВнешниеПользователи.Недействителен, + ВнешниеПользователи.Комментарий, + ВнешниеПользователи.Предопределенный +ИЗ + Справочник.ВнешниеПользователи КАК ВнешниеПользователи +ГДЕ + &ВнешниеПользователи + + + КонтактнаяИнформация + + Ссылка + Ссылка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя</v8:content> + </v8:item> + + + d5p1:CatalogRef.ВнешниеПользователи + d5p1:CatalogRef.Пользователи + + + + Телефон + Телефон + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Телефон</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + ЭлектронныйАдрес + ЭлектронныйАдрес + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Электронный адрес</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ИсточникДанных1 + КонтактнаяИнформация + + + Пользователи + ПользователиИБ + ИдентификаторПользователяИБ + УникальныйИдентификатор + + + Пользователи + КонтактнаяИнформация + Ссылка + Ссылка + + + ВнешниеПользователи + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внешние пользователи</v8:content> + </v8:item> + + + xs:boolean + + true + false + false + Always + + + Пользователи + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователи</v8:content> + </v8:item> + + + xs:boolean + + true + false + false + Always + + + ИдентификаторыНесуществующихПользователейИБ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификаторы несуществующих пользователей ИБ</v8:content> + </v8:item> + + + v8:UUID + + + false + false + Always + + + СведенияОПользователяхИВнешнихПользователях + + + ru + Сведения о пользователях и внешних пользователях + + + + + + СистемныеПоля.НомерПоПорядку + Inaccessible + + + ЭтоВнешнийПользователь + + + Ссылка + + + false + Недействителен + + + false + ПометкаУдаления + + + ВходВПрограммуРазрешен + + + Имя + + + АутентификацияСтандартная + + + false + ПоказыватьВСпискеВыбора + + + false + ЗапрещеноИзменятьПароль + + + АутентификацияОС + + + ПользовательОС + + + АутентификацияOpenID + + + false + Язык + + + РежимЗапуска + + + false + Комментарий + + + false + Телефон + + + false + ЭлектронныйАдрес + + Normal + 7139addb-6cc1-4f4b-ada6-47ed96031db6 + + + + false + Недействителен + Equal + true + + + ru + Недействительные + + + 2fc6f1d8-ce85-45c1-8fc8-29b3e299b5f7 + + + false + ПометкаУдаления + Equal + true + + + ru + Помеченые на удаление + + + 9800e27b-27de-4259-86c0-8d4595eb319a + + + false + БезПользователяИнформационнойБазы + Equal + true + + + ru + Без пользователя информационной базы + + + cb47e2ce-6928-43e4-b904-cbe4b2952e49 + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Вход в программу разрешен + + + 8809ba69-2ea3-40bf-8e8b-82ab129baec6 + + + false + АутентификацияСтандартная + Equal + true + + + ru + Аутентификация стандартная + + + 6590234e-cc10-4899-9e2d-f86867903a54 + + + false + АутентификацияОС + Equal + true + + + ru + Аутентификация ОС + + + 19e3a1bb-4c84-420b-8a05-d3f78014fc1c + + + false + АутентификацияOpenID + Equal + true + + + ru + Аутентификация OpenID + + + 2b314b78-4b9a-41e9-bba0-bafdc8042eba + + + false + Недействителен + Equal + true + Normal + + + false + ПометкаУдаления + Equal + true + Normal + + + false + БезПользователяИнформационнойБазы + Equal + true + Normal + + + false + ВходВПрограммуРазрешен + Equal + true + Normal + + + false + АутентификацияСтандартная + Equal + true + Normal + + + false + ПоказыватьВСпискеВыбора + Equal + true + Normal + + + false + ЗапрещеноИзменятьПароль + Equal + true + Normal + + + false + АутентификацияОС + Equal + true + Normal + + + false + АутентификацияOpenID + Equal + true + Normal + + Normal + edb0415a-2b3b-48b7-8370-0f10583ef779 + + + + ВнешниеПользователи + true + Inaccessible + + + Пользователи + true + + + + + Ссылка + Asc + + + false + Имя + Asc + + Normal + 93bb09e7-08be-4ee5-8849-07ad558cb266 + + + Normal + + + + Заголовок + + + ru + Сведения о пользователях и внешних пользователях + + + + + ВыводитьПараметрыДанных + DontOutput + + + + + + + + + + + Normal + + + + СведенияОПользователях + + + ru + Сведения о пользователях + + + + + + СистемныеПоля.НомерПоПорядку + Inaccessible + + + Ссылка + + + false + Недействителен + + + false + ПометкаУдаления + + + ВходВПрограммуРазрешен + + + Имя + + + АутентификацияСтандартная + + + false + ПоказыватьВСпискеВыбора + + + false + ЗапрещеноИзменятьПароль + + + АутентификацияОС + + + ПользовательОС + + + АутентификацияOpenID + + + false + Язык + + + РежимЗапуска + + + false + Комментарий + + + false + Телефон + + + false + ЭлектронныйАдрес + + Normal + 7139addb-6cc1-4f4b-ada6-47ed96031db6 + + + + false + Недействителен + Equal + true + + + ru + Недействительные + + + 2fc6f1d8-ce85-45c1-8fc8-29b3e299b5f7 + + + false + ПометкаУдаления + Equal + true + + + ru + Помеченые на удаление + + + 9800e27b-27de-4259-86c0-8d4595eb319a + + + false + БезПользователяИнформационнойБазы + Equal + true + + + ru + Без пользователя информационной базы + + + cb47e2ce-6928-43e4-b904-cbe4b2952e49 + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Вход в программу разрешен + + + 8809ba69-2ea3-40bf-8e8b-82ab129baec6 + + + false + АутентификацияСтандартная + Equal + true + + + ru + Аутентификация стандартная + + + 6590234e-cc10-4899-9e2d-f86867903a54 + + + false + АутентификацияОС + Equal + true + + + ru + Аутентификация ОС + + + 19e3a1bb-4c84-420b-8a05-d3f78014fc1c + + + false + АутентификацияOpenID + Equal + true + + + ru + Аутентификация OpenID + + + 2b314b78-4b9a-41e9-bba0-bafdc8042eba + + + false + Недействителен + Equal + true + Normal + + + false + ПометкаУдаления + Equal + true + Normal + + + false + БезПользователяИнформационнойБазы + Equal + true + Normal + + + false + ВходВПрограммуРазрешен + Equal + true + Normal + + + false + АутентификацияСтандартная + Equal + true + Normal + + + false + ПоказыватьВСпискеВыбора + Equal + true + Normal + + + false + ЗапрещеноИзменятьПароль + Equal + true + Normal + + + false + АутентификацияОС + Equal + true + Normal + + + false + АутентификацияOpenID + Equal + true + Normal + + Normal + edb0415a-2b3b-48b7-8370-0f10583ef779 + + + + ВнешниеПользователи + false + Inaccessible + + + Пользователи + true + + + + + Ссылка + Asc + + + false + Имя + Asc + + Normal + 93bb09e7-08be-4ee5-8849-07ad558cb266 + + + Normal + + + + Заголовок + + + ru + Сведения о пользователях + + + + + ВыводитьПараметрыДанных + DontOutput + + + + + + + + + + + Normal + + + + СведенияОВнешнихПользователях + + + ru + Сведения о внешних пользователях + + + + + + СистемныеПоля.НомерПоПорядку + Inaccessible + + + Ссылка + + + false + Недействителен + + + false + ПометкаУдаления + + + ВходВПрограммуРазрешен + + + Имя + + + АутентификацияСтандартная + + + false + ЗапрещеноИзменятьПароль + + + АутентификацияOpenID + + + false + Язык + + + false + Комментарий + + Normal + 7139addb-6cc1-4f4b-ada6-47ed96031db6 + + + + false + Недействителен + Equal + true + + + ru + Недействительные + + + 2fc6f1d8-ce85-45c1-8fc8-29b3e299b5f7 + + + false + ПометкаУдаления + Equal + true + + + ru + Помеченые на удаление + + + 9800e27b-27de-4259-86c0-8d4595eb319a + + + false + БезПользователяИнформационнойБазы + Equal + true + + + ru + Без пользователя информационной базы + + + cb47e2ce-6928-43e4-b904-cbe4b2952e49 + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Вход в программу разрешен + + + 8809ba69-2ea3-40bf-8e8b-82ab129baec6 + + + false + АутентификацияСтандартная + Equal + true + + + ru + Аутентификация стандартная + + + 6590234e-cc10-4899-9e2d-f86867903a54 + + + false + АутентификацияOpenID + Equal + true + + + ru + Аутентификация OpenID + + + 2b314b78-4b9a-41e9-bba0-bafdc8042eba + + + false + Недействителен + Equal + true + Normal + + + false + ПометкаУдаления + Equal + true + Normal + + + false + БезПользователяИнформационнойБазы + Equal + true + Normal + + + false + ВходВПрограммуРазрешен + Equal + true + Normal + + + false + АутентификацияСтандартная + Equal + true + Normal + + + false + ЗапрещеноИзменятьПароль + Equal + true + Normal + + + false + АутентификацияOpenID + Equal + true + Normal + + Normal + edb0415a-2b3b-48b7-8370-0f10583ef779 + + + + ВнешниеПользователи + true + Inaccessible + + + Пользователи + false + + + + + Ссылка + Asc + + + false + Имя + Asc + + Normal + 93bb09e7-08be-4ee5-8849-07ad558cb266 + + + Normal + + + + Заголовок + + + ru + Сведения о внешних пользователях + + + + + ВыводитьПараметрыДанных + DontOutput + + + + + + + + + + + Normal + + + \ No newline at end of file diff --git a/SSL/src/Reports/СведенияОПользователях/СведенияОПользователях.mdo b/SSL/src/Reports/СведенияОПользователях/СведенияОПользователях.mdo new file mode 100644 index 000000000..8105feac7 --- /dev/null +++ b/SSL/src/Reports/СведенияОПользователях/СведенияОПользователях.mdo @@ -0,0 +1,28 @@ + + + + + + + СведенияОПользователях + + ru + Сведения о пользователях + + true + Report.СведенияОПользователях.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index d0835557c..724308fc1 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -47,6 +47,10 @@ Edit true + + TotalsControl + true + Constant.ПараметрыАдминистрированияИБ @@ -109,6 +113,29 @@ true + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + ExchangePlan.ОбменСообщениями @@ -331,6 +358,10 @@ Edit true + + TotalsControl + true + CommonCommand.НастройкаОбменаСообщениями @@ -357,6 +388,10 @@ Edit true + + TotalsControl + true + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active @@ -470,6 +505,25 @@ true + + Constant.ПрофильБезопасностиИнформационнойБазы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + DataProcessor.ОценкаПроизводительности @@ -492,97 +546,6 @@ false - - 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 - - CommonCommand.ДополнительныеПечатныеФормыОбъекта @@ -610,7 +573,7 @@ - InformationRegister.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных + InformationRegister.РежимыПодключенияВнешнихМодулей Read true @@ -627,6 +590,10 @@ Edit true + + TotalsControl + true + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ @@ -738,23 +705,8 @@ Edit true - - - Constant.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - Read - true - - - Update - true - - - View - true - - - Edit + TotalsControl true @@ -806,6 +758,10 @@ Edit true + + TotalsControl + true + Catalog.СценарииОбменовДанными @@ -957,6 +913,10 @@ Edit true + + TotalsControl + true + CommonForm.ПараметрыПроксиСервера @@ -1002,6 +962,10 @@ Edit true + + TotalsControl + true + CommonForm.ВходВОбластьДанных @@ -1028,6 +992,10 @@ Edit true + + TotalsControl + true + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных @@ -1047,6 +1015,10 @@ Edit true + + TotalsControl + true + Constant.ПарольСлужебногоПользователяМенеджераСервиса @@ -1104,6 +1076,10 @@ Edit true + + TotalsControl + true + Catalog.ШаблоныЗаданийОчереди @@ -1152,25 +1128,6 @@ true - - Constant.ПарольПользователяАгентаСервиса - - Read - true - - - Update - true - - - View - true - - - Edit - true - - Constant.СписокРасширенийФайловOpenDocument @@ -1265,6 +1222,10 @@ Edit true + + TotalsControl + true + InformationRegister.ВерсииПодсистем @@ -1284,6 +1245,10 @@ Edit true + + TotalsControl + true + InformationRegister.СостоянияОбменовДанными @@ -1345,6 +1310,10 @@ Edit true + + TotalsControl + true + InformationRegister.УдалитьВерсииПодсистем @@ -1364,6 +1333,10 @@ Edit true + + TotalsControl + true + Constant.ИзвлекатьТекстыФайловНаСервере @@ -1385,7 +1358,98 @@ - Constant.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса + 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.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов Read true @@ -1402,6 +1466,10 @@ Edit true + + TotalsControl + true + Constant.ПараметрыРаботыПользователей @@ -1470,6 +1538,10 @@ Edit true + + TotalsControl + true + Constant.МаксимальныйРазмерФайла @@ -1519,6 +1591,10 @@ Edit true + + TotalsControl + true + InformationRegister.УдалитьОбластиКРезервномуКопированию @@ -1538,6 +1614,10 @@ Edit true + + TotalsControl + true + Constant.РазделыОписанияИзмененийСистемы @@ -1659,53 +1739,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.НазначениеДополнительныхОбработок @@ -1724,6 +1757,10 @@ Edit true + + TotalsControl + true + Catalog.СтраныМира @@ -1802,25 +1839,6 @@ true - - Constant.АдресАгентаСервиса - - Read - true - - - Update - true - - - View - true - - - Edit - true - - InformationRegister.УдалитьОчередьИзвлеченияТекста @@ -1839,6 +1857,10 @@ Edit true + + TotalsControl + true + Constant.ПрефиксОбластиДанных @@ -1870,44 +1892,6 @@ true - - Constant.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - Constant.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса - - Read - true - - - Update - true - - - View - true - - - Edit - true - - Catalog.ДополнительныеОтчетыИОбработки @@ -1993,6 +1977,29 @@ true + + InformationRegister.РазрешенныеКаталогиФайловойСистемы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + DataProcessor.РезервноеКопированиеИБ @@ -2049,6 +2056,25 @@ true + + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.КэшПрограммныхИнтерфейсов @@ -2067,6 +2093,10 @@ Edit true + + TotalsControl + true + Constant.НеИспользоватьРазделениеПоОбластямДанных @@ -2221,6 +2251,25 @@ true + + Constant.ГлавныйУзел + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.СостоянияОбменовДаннымиОбластейДанных @@ -2239,6 +2288,29 @@ Edit true + + TotalsControl + true + + + + Constant.ИспользуютсяПрофилиБезопасности + + Read + true + + + Update + true + + + View + true + + + Edit + true + Constant.БлокировкаОтправкиБыстрыхСообщений @@ -2288,6 +2360,10 @@ Edit true + + TotalsControl + true + Constant.ИмяСлужебногоПользователяМенеджераСервиса @@ -2387,6 +2463,10 @@ Edit true + + TotalsControl + true + Constant.ИспользоватьНесколькоПроизводственныхКалендарей @@ -2570,6 +2650,10 @@ Edit true + + TotalsControl + true + InformationRegister.УдалитьЗамерыВремени @@ -2589,23 +2673,8 @@ Edit true - - - Constant.ИмяПользователяАгентаСервиса - Read - true - - - Update - true - - - View - true - - - Edit + TotalsControl true @@ -2646,6 +2715,10 @@ Edit true + + TotalsControl + true + CommonCommand.ОтчетыОбъекта @@ -2692,25 +2765,6 @@ true - - InformationRegister.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных - - Read - true - - - Update - true - - - View - true - - - Edit - true - - DataProcessor.УправлениеПолнотекстовымПоиском.Command.УправлениеПолнотекстовымПоиском @@ -2848,6 +2902,29 @@ true + + InformationRegister.РазрешенныеВнешниеКомпоненты + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + InformationRegister.УдалитьОбластиДанных @@ -2866,6 +2943,10 @@ Edit true + + TotalsControl + true + InformationRegister.СостоянияУспешныхОбменовДанными @@ -2915,6 +2996,10 @@ Edit true + + TotalsControl + true + Constant.ЭтоАвтономноеРабочееМесто @@ -3007,6 +3092,10 @@ Edit true + + TotalsControl + true + SessionParameter.ПараметрыКлиентаНаСервере @@ -3064,7 +3153,7 @@ - InformationRegister.УдалитьСтраныМира + Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных Read true @@ -3082,6 +3171,52 @@ true + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.УдалитьСтраныМира + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + CommonForm.МониторСинхронизацииДанныхВМоделиСервиса @@ -3089,6 +3224,29 @@ true + + InformationRegister.РазрешенныеИнтернетРесурсы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.ПредставлениеОбластиДанных @@ -3213,7 +3371,7 @@ - Constant.НастройкаАвтономногоРабочегоМестаЗавершена + Constant.ИспользоватьСинхронизациюДанных Read true @@ -3232,7 +3390,7 @@ - Constant.ИспользоватьСинхронизациюДанных + InformationRegister.РазрешенныеCOMКлассы Read true @@ -3249,6 +3407,10 @@ Edit true + + TotalsControl + true + Catalog.СообщенияСистемы @@ -3351,6 +3513,29 @@ true + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.ПараметрыДополнительныхРеквизитовИСведений @@ -3395,6 +3580,10 @@ Edit true + + TotalsControl + true + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой @@ -3433,6 +3622,10 @@ Edit true + + TotalsControl + true + CommonForm.ПодключениеКонечнойТочки diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 4f66405c0..d5a8883bd 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -145,6 +145,25 @@ false + + InformationRegister.НомераОтсканированныхФайлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский @@ -592,6 +611,20 @@ false + + InformationRegister.ВерсииПодсистем + + Read + true + + + + InformationRegister.УдалитьВерсииПодсистем + + Read + true + + CommonForm.ОтчетОСохраненииФайлов @@ -635,94 +668,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.ПолнотекстовыйПоискВДанных @@ -992,6 +937,13 @@ false + + Constant.ГлавныйУзел + + Read + true + + CommonForm.РедактированиеТабличногоДокумента @@ -1269,7 +1221,14 @@ - DataProcessor.ГрупповоеИзменениеОбъектов + SessionParameter.ПараметрыКлиентаНаСервере + + Get + true + + + + DataProcessor.ГрупповоеИзменениеРеквизитов Use true diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index 62f48fcfa..fcf85ef97 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2489,17 +2412,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2896,37 +2808,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3400,17 +3281,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3477,94 +3347,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3653,17 +3435,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4214,17 +3985,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4819,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5248,17 +4986,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5490,17 +5217,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6502,17 +6218,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6876,6 +6581,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -7008,17 +6744,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7042,7 +6767,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7360,17 +7085,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7437,94 +7151,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7547,17 +7173,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7668,17 +7283,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7834,7 +7438,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7987,17 +7591,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8659,7 +8252,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9065,17 +8658,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9154,7 +8736,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9571,17 +9153,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10792,17 +10363,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10968,17 +10528,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12145,17 +11694,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12223,7 +11761,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12519,17 +12057,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14312,17 +13839,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14686,17 +14202,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15346,17 +14851,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15765,7 +15259,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15962,17 +15456,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16270,17 +15753,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights index 2d4b333c2..bce78bbf5 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights @@ -444,45 +444,6 @@ false - - Catalog.ВидыДокументовФизическихЛиц - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - CommonForm.ПраваДоступа diff --git a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights index db07b5a83..751de4cb4 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights @@ -56,6 +56,45 @@ true + + Catalog.ПользовательскиеНастройкиОтчетов + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + CommonForm.ФормаНастроекОтчета diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index eb7242af4..16cc235d2 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -768,7 +768,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -960,7 +960,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -977,6 +977,13 @@ false + + Catalog.СтроковыеКонтактыВзаимодействий + + Read + true + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий @@ -1318,7 +1325,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -1539,6 +1546,13 @@ true + + DocumentJournal.Взаимодействия.Command.НастройкиРаботыСПочтой + + View + true + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения @@ -1595,7 +1609,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -1748,8 +1762,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -1762,12 +1776,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -1779,7 +1791,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -1787,71 +1799,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -1861,30 +1873,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -1897,30 +1909,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1930,20 +1942,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1953,17 +1965,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -1971,16 +1983,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -1990,11 +2004,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2004,80 +2018,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2087,20 +2101,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2110,17 +2124,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -2128,16 +2142,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -2147,11 +2163,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2161,47 +2177,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2209,30 +2225,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2242,20 +2258,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2265,17 +2281,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -2283,16 +2299,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -2302,11 +2320,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2316,47 +2334,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2364,30 +2382,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2397,20 +2415,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2420,17 +2438,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -2438,16 +2456,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -2457,11 +2477,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2471,47 +2491,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2519,30 +2539,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2552,20 +2572,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2575,17 +2595,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -2593,16 +2613,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -2612,11 +2634,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2626,47 +2648,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2674,30 +2696,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2707,20 +2729,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2730,17 +2752,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -2748,16 +2770,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -2767,11 +2791,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2781,47 +2805,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2829,30 +2853,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2862,20 +2886,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2885,17 +2909,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -2903,16 +2927,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -2922,11 +2948,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2936,47 +2962,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2984,30 +3010,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3017,20 +3043,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3040,17 +3066,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -3058,16 +3084,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -3077,11 +3105,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3091,47 +3119,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3139,30 +3167,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3172,20 +3200,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3195,17 +3223,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -3213,16 +3241,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -3232,11 +3262,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3246,47 +3276,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3294,30 +3324,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3327,20 +3357,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3350,17 +3380,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -3368,16 +3398,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -3387,11 +3419,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3401,47 +3433,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3449,30 +3481,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3482,20 +3514,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3505,17 +3537,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -3523,16 +3555,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -3542,11 +3576,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3556,47 +3590,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3604,30 +3638,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3637,20 +3671,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3660,17 +3694,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -3678,16 +3712,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -3697,11 +3733,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3711,47 +3747,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3759,30 +3795,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3792,20 +3828,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3815,17 +3851,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -3833,16 +3869,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -3852,11 +3890,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3866,47 +3904,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3914,30 +3952,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3947,20 +3985,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3970,17 +4008,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -3988,16 +4026,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -4007,11 +4047,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4021,47 +4061,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -4069,30 +4109,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4102,20 +4142,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4125,17 +4165,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -4143,16 +4183,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -4162,11 +4204,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4176,47 +4218,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -4224,30 +4266,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4257,20 +4299,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4280,17 +4322,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -4298,16 +4340,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -4317,11 +4361,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4331,47 +4375,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -4416,9 +4460,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -4446,12 +4490,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -4463,10 +4505,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -4474,71 +4516,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -4549,34 +4591,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -4591,33 +4633,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4625,14 +4667,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -4640,22 +4682,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4665,20 +4707,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4688,250 +4730,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4939,21 +4993,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4961,38 +5015,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5002,20 +5056,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5025,17 +5079,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -5043,16 +5097,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -5062,11 +5118,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5076,52 +5132,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5129,33 +5185,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5163,14 +5219,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -5178,22 +5234,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5203,20 +5259,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5226,250 +5282,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5477,21 +5545,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5499,38 +5567,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5540,20 +5608,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5563,17 +5631,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -5581,16 +5649,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -5600,11 +5670,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5614,52 +5684,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5667,33 +5737,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5701,14 +5771,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -5716,22 +5786,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5741,20 +5811,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5764,250 +5834,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6015,21 +6097,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6037,38 +6119,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6078,20 +6160,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6101,17 +6183,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -6119,16 +6201,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -6138,11 +6222,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6152,52 +6236,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6205,33 +6289,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6239,14 +6323,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -6254,22 +6338,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6279,20 +6363,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6302,250 +6386,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6553,21 +6649,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6575,38 +6671,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6616,20 +6712,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6639,17 +6735,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -6657,16 +6753,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -6676,11 +6774,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6690,52 +6788,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6743,33 +6841,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6777,14 +6875,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -6792,22 +6890,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6817,20 +6915,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6840,250 +6938,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7091,21 +7201,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7113,38 +7223,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7154,20 +7264,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7177,17 +7287,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -7195,16 +7305,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -7214,11 +7326,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7228,52 +7340,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7281,33 +7393,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7315,14 +7427,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -7330,22 +7442,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7355,20 +7467,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7378,250 +7490,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7629,21 +7753,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7651,38 +7775,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7692,20 +7816,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7715,17 +7839,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -7733,16 +7857,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -7752,11 +7878,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7766,52 +7892,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7819,33 +7945,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7853,14 +7979,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -7868,22 +7994,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7893,20 +8019,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7916,250 +8042,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8167,21 +8305,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8189,38 +8327,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8230,20 +8368,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8253,17 +8391,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -8271,16 +8409,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -8290,11 +8430,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8304,52 +8444,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8357,33 +8497,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8391,14 +8531,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -8406,22 +8546,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8431,20 +8571,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8454,250 +8594,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8705,21 +8857,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8727,38 +8879,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8768,20 +8920,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8791,17 +8943,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -8809,16 +8961,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -8828,11 +8982,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8842,52 +8996,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8895,33 +9049,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8929,14 +9083,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -8944,22 +9098,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8969,20 +9123,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8992,250 +9146,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9243,21 +9409,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9265,38 +9431,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9306,20 +9472,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9329,17 +9495,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -9347,16 +9513,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -9366,11 +9534,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9380,52 +9548,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9433,33 +9601,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -9467,14 +9635,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -9482,22 +9650,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9507,20 +9675,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9530,250 +9698,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9781,21 +9961,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9803,38 +9983,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9844,20 +10024,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9867,17 +10047,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -9885,16 +10065,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -9904,11 +10086,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9918,52 +10100,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9971,33 +10153,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10005,14 +10187,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -10020,22 +10202,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10045,20 +10227,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10068,250 +10250,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10319,21 +10513,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10341,38 +10535,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10382,20 +10576,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10405,17 +10599,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -10423,16 +10617,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -10442,11 +10638,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -10456,52 +10652,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10509,33 +10705,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10543,14 +10739,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -10558,22 +10754,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10583,20 +10779,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10606,250 +10802,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10857,21 +11065,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10879,38 +11087,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10920,20 +11128,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10943,17 +11151,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -10961,16 +11169,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -10980,11 +11190,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -10994,52 +11204,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11047,33 +11257,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -11081,14 +11291,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -11096,22 +11306,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11121,20 +11331,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11144,250 +11354,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11395,21 +11617,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11417,38 +11639,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11458,20 +11680,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11481,17 +11703,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -11499,16 +11721,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -11518,11 +11742,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -11532,52 +11756,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11585,33 +11809,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -11619,14 +11843,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -11634,22 +11858,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11659,20 +11883,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11682,250 +11906,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11933,21 +12169,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11955,38 +12191,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11996,20 +12232,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12019,17 +12255,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -12037,16 +12273,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -12056,11 +12294,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12070,52 +12308,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12123,33 +12361,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -12157,14 +12395,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -12172,22 +12410,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12197,20 +12435,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12220,250 +12458,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12471,21 +12721,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12493,38 +12743,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12534,20 +12784,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12557,17 +12807,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -12575,16 +12825,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -12594,11 +12846,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12608,52 +12860,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12661,33 +12913,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -12695,14 +12947,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -12710,22 +12962,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12735,20 +12987,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12758,250 +13010,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13009,21 +13273,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13031,38 +13295,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13072,20 +13336,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13095,17 +13359,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -13113,16 +13377,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -13132,11 +13398,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13146,52 +13412,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13238,12 +13504,10 @@ // Пример4: ПоНаборамЗначений("Справочник.ВложенияЭлектронныхПисем", "", "", "Владелец") // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -13255,10 +13519,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -13269,34 +13533,34 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа Или #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -13306,12 +13570,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ -#Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ @@ -13331,9 +13595,9 @@ И НомераНаборов.Изменение #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -13348,23 +13612,23 @@ НаборыЗначений.Ссылка = Т.Ссылка #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ @@ -13373,7 +13637,7 @@ #Иначе НомераНаборов.Объект = Т.#Параметр(4) #КонецЕсли - #Иначе + #Иначе ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Ссылка = Т.Ссылка @@ -13384,10 +13648,10 @@ И НомераНаборов.Изменение #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -13402,20 +13666,20 @@ НаборыЗначений.Ссылка = Т.Ссылка #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -13431,136 +13695,148 @@ #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + #Если Не &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13568,21 +13844,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13590,23 +13866,23 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) ) diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights index d7ef29986..febc04eff 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights @@ -685,17 +685,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -971,17 +960,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1313,7 +1291,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1356,17 +1334,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1511,7 +1478,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1873,50 +1840,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2434,17 +2357,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3090,29 +3002,6 @@ false - - InformationRegister.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - Catalog.ВерсииФайлов.Attribute.ПодписанЭП @@ -3322,17 +3211,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3399,94 +3277,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3575,17 +3365,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4125,17 +3904,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4726,28 +4494,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл @@ -5144,17 +4890,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5386,17 +5121,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6376,17 +6100,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6849,17 +6562,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6872,7 +6574,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7179,17 +6881,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7256,94 +6947,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7366,17 +6969,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7466,17 +7058,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7632,7 +7213,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7792,17 +7373,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8432,7 +8002,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8838,17 +8408,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -8916,7 +8475,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9300,17 +8859,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10468,17 +10016,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10644,17 +10181,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11810,17 +11336,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -11888,7 +11403,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12184,17 +11699,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -13943,17 +13447,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14317,17 +13810,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -14966,17 +14448,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15374,7 +14845,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15571,17 +15042,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -15879,17 +15339,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index fcf362f1d..0bb4c2684 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -197,8 +197,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -211,12 +211,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -228,7 +226,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -236,71 +234,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -310,30 +308,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -346,30 +344,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -379,20 +377,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -402,17 +400,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -420,16 +418,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -439,11 +439,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -453,80 +453,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -536,20 +536,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -559,17 +559,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -577,16 +577,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -596,11 +598,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -610,47 +612,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -658,30 +660,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -691,20 +693,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -714,17 +716,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -732,16 +734,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -751,11 +755,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -765,47 +769,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -813,30 +817,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -846,20 +850,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -869,17 +873,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -887,16 +891,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -906,11 +912,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -920,47 +926,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -968,30 +974,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1001,20 +1007,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1024,17 +1030,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1042,16 +1048,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -1061,11 +1069,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1075,47 +1083,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1123,30 +1131,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1156,20 +1164,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1179,17 +1187,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -1197,16 +1205,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -1216,11 +1226,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1230,47 +1240,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1278,30 +1288,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1311,20 +1321,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1334,17 +1344,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -1352,16 +1362,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -1371,11 +1383,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1385,47 +1397,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1433,30 +1445,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1466,20 +1478,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1489,17 +1501,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -1507,16 +1519,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -1526,11 +1540,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1540,47 +1554,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1588,30 +1602,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1621,20 +1635,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1644,17 +1658,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -1662,16 +1676,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -1681,11 +1697,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1695,47 +1711,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1743,30 +1759,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1776,20 +1792,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1799,17 +1815,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -1817,16 +1833,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -1836,11 +1854,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1850,47 +1868,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1898,30 +1916,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1931,20 +1949,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1954,17 +1972,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -1972,16 +1990,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -1991,11 +2011,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2005,47 +2025,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2053,30 +2073,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2086,20 +2106,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2109,17 +2129,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -2127,16 +2147,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -2146,11 +2168,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2160,47 +2182,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2208,30 +2230,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2241,20 +2263,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2264,17 +2286,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -2282,16 +2304,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -2301,11 +2325,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2315,47 +2339,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2363,30 +2387,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2396,20 +2420,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2419,17 +2443,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -2437,16 +2461,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -2456,11 +2482,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2470,47 +2496,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2518,30 +2544,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2551,20 +2577,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2574,17 +2600,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -2592,16 +2618,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -2611,11 +2639,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2625,47 +2653,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2673,30 +2701,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2706,20 +2734,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2729,17 +2757,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -2747,16 +2775,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -2766,11 +2796,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2780,47 +2810,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2865,9 +2895,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -2895,12 +2925,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -2912,10 +2940,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -2923,71 +2951,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -2998,34 +3026,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -3040,33 +3068,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3074,14 +3102,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -3089,22 +3117,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3114,20 +3142,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3137,250 +3165,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3388,21 +3428,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3410,38 +3450,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3451,20 +3491,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3474,17 +3514,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -3492,16 +3532,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -3511,11 +3553,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3525,52 +3567,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3578,33 +3620,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3612,14 +3654,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -3627,22 +3669,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3652,20 +3694,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3675,250 +3717,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3926,21 +3980,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3948,38 +4002,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3989,20 +4043,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4012,17 +4066,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -4030,16 +4084,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -4049,11 +4105,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4063,52 +4119,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4116,33 +4172,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4150,14 +4206,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -4165,22 +4221,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4190,20 +4246,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4213,250 +4269,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4464,21 +4532,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4486,38 +4554,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4527,20 +4595,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4550,17 +4618,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -4568,16 +4636,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -4587,11 +4657,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4601,52 +4671,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4654,33 +4724,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4688,14 +4758,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -4703,22 +4773,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4728,20 +4798,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4751,250 +4821,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5002,21 +5084,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5024,38 +5106,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5065,20 +5147,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5088,17 +5170,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -5106,16 +5188,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -5125,11 +5209,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5139,52 +5223,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5192,33 +5276,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5226,14 +5310,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -5241,22 +5325,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5266,20 +5350,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5289,250 +5373,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5540,21 +5636,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5562,38 +5658,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5603,20 +5699,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5626,17 +5722,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -5644,16 +5740,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -5663,11 +5761,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5677,52 +5775,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5730,33 +5828,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5764,14 +5862,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -5779,22 +5877,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5804,20 +5902,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5827,250 +5925,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6078,21 +6188,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6100,38 +6210,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6141,20 +6251,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6164,17 +6274,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -6182,16 +6292,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -6201,11 +6313,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6215,52 +6327,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6268,33 +6380,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6302,14 +6414,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -6317,22 +6429,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6342,20 +6454,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6365,250 +6477,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6616,21 +6740,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6638,38 +6762,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6679,20 +6803,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6702,17 +6826,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -6720,16 +6844,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -6739,11 +6865,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6753,52 +6879,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6806,33 +6932,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6840,14 +6966,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -6855,22 +6981,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6880,20 +7006,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6903,250 +7029,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7154,21 +7292,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7176,38 +7314,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7217,20 +7355,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7240,17 +7378,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -7258,16 +7396,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -7277,11 +7417,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7291,52 +7431,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7344,33 +7484,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7378,14 +7518,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -7393,22 +7533,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7418,20 +7558,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7441,250 +7581,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7692,21 +7844,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7714,38 +7866,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7755,20 +7907,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7778,17 +7930,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -7796,16 +7948,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -7815,11 +7969,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7829,52 +7983,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7882,33 +8036,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7916,14 +8070,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -7931,22 +8085,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7956,20 +8110,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7979,250 +8133,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8230,21 +8396,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8252,38 +8418,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8293,20 +8459,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8316,17 +8482,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -8334,16 +8500,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -8353,11 +8521,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8367,52 +8535,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8420,33 +8588,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8454,14 +8622,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -8469,22 +8637,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8494,20 +8662,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8517,250 +8685,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8768,21 +8948,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8790,38 +8970,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8831,20 +9011,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8854,17 +9034,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -8872,16 +9052,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -8891,11 +9073,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8905,52 +9087,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8958,33 +9140,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8992,14 +9174,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -9007,22 +9189,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9032,20 +9214,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9055,250 +9237,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9306,21 +9500,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9328,38 +9522,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9369,20 +9563,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9392,17 +9586,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -9410,16 +9604,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -9429,11 +9625,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9443,52 +9639,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9496,33 +9692,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -9530,14 +9726,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -9545,22 +9741,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9570,20 +9766,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9593,250 +9789,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9844,21 +10052,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9866,38 +10074,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9907,20 +10115,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9930,17 +10138,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -9948,16 +10156,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -9967,11 +10177,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9981,52 +10191,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10034,33 +10244,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10068,14 +10278,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -10083,22 +10293,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10108,20 +10318,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10131,250 +10341,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10382,21 +10604,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10404,38 +10626,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10445,20 +10667,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10468,17 +10690,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -10486,16 +10708,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -10505,11 +10729,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -10519,52 +10743,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10572,33 +10796,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10606,14 +10830,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -10621,22 +10845,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10646,20 +10870,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10669,250 +10893,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10920,21 +11156,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10942,38 +11178,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10983,20 +11219,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11006,17 +11242,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -11024,16 +11260,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -11043,11 +11281,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -11057,52 +11295,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11110,33 +11348,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -11144,14 +11382,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -11159,22 +11397,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11184,20 +11422,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11207,250 +11445,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11458,21 +11708,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11480,38 +11730,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11521,20 +11771,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11544,17 +11794,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -11562,16 +11812,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -11581,11 +11833,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -11595,52 +11847,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights index 61f7956ac..bf0ec8d58 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights @@ -701,17 +701,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -987,17 +976,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1329,7 +1307,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1372,17 +1350,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1527,7 +1494,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1885,50 +1852,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2446,17 +2369,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3322,17 +3234,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3388,94 +3289,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3564,17 +3377,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4136,17 +3938,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4749,28 +4540,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5178,17 +4947,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5420,17 +5178,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6432,17 +6179,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6916,17 +6652,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6950,7 +6675,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7268,17 +6993,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7341,94 +7055,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7451,17 +7077,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7572,17 +7187,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7738,7 +7342,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7891,17 +7495,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8552,7 +8145,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8958,17 +8551,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9047,7 +8629,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9464,17 +9046,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10674,17 +10245,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10850,17 +10410,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12016,17 +11565,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12094,7 +11632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12390,17 +11928,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14179,17 +13706,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14553,17 +14069,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15213,17 +14718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15632,7 +15126,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15829,17 +15323,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16137,17 +15620,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights index 1822d0734..0ce0f2ca3 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights @@ -725,17 +725,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1022,17 +1011,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1375,7 +1353,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1418,17 +1396,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1573,7 +1540,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1946,50 +1913,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2518,17 +2441,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3387,17 +3299,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3464,94 +3365,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3640,17 +3453,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4201,17 +4003,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4806,28 +4597,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5235,17 +5004,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5477,17 +5235,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6478,17 +6225,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6984,17 +6720,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7018,7 +6743,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7336,17 +7061,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7413,94 +7127,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7523,17 +7149,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7644,17 +7259,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7818,7 +7422,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7971,17 +7575,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8632,7 +8225,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9038,17 +8631,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9116,7 +8698,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9533,17 +9115,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10754,17 +10325,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10930,17 +10490,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12096,17 +11645,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12174,7 +11712,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12481,17 +12019,6 @@ true - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14241,17 +13768,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14626,17 +14142,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15282,17 +14787,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15701,7 +15195,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15898,17 +15392,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16206,17 +15689,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights deleted file mode 100644 index e4adcad0f..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ /dev/null @@ -1,16509 +0,0 @@ - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь - - 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 - - - - 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 - - - - 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.ДокументыФизическихЛиц - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа2 - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Содержание - - 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.ФизическиеЛица - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - 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 - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - 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 - - - - 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 - - - - 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 - - - - InformationRegister.ДокументыФизическихЛиц.Command.ДокументыФизическогоЛица - - View - true - - - - 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.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.ВерсииФайлов.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.Файлы.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 - - - - 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 - - - - 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 - - - - Catalog.Пользователи.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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.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.СтраныМира.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 - - - - 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 - - - - 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 - - - - InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.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 - - - - 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 - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - 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 - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.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.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.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 - - - - 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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Предмет - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - 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 - - - - 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 - - - - 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 - - - - Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации - - View - false - - - Edit - false - - - - Document.Анкета.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа3 - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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.АдресныйКлассификатор.Dimension.КодРайонаВКоде - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - Catalog.СтраныМира.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.ФайлыВРабочемКаталоге.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 - - - - 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 deleted file mode 100644 index a6a9ca354..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц - - ru - Добавление и изменение персональных данных физических лиц - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index 1301232f6..db4aab1e4 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -49,6 +49,13 @@ false + + Catalog.РассылкиОтчетов.Command.СобытияРассылки + + View + true + + Configuration.БиблиотекаСтандартныхПодсистем @@ -80,13 +87,6 @@ true - - Catalog.РассылкиОтчетов.Command.СобытияРассылки - - View - true - - InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск diff --git a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights index d4ef86c8c..d556f221a 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2478,17 +2401,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3358,17 +3270,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3435,94 +3336,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3611,17 +3424,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4172,17 +3974,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4777,28 +4568,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5206,17 +4975,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5448,17 +5206,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6460,17 +6207,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6966,17 +6702,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7000,7 +6725,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7318,17 +7043,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7395,94 +7109,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7505,17 +7131,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7626,17 +7241,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7792,7 +7396,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7945,17 +7549,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8568,7 +8161,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8974,17 +8567,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9063,7 +8645,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9480,17 +9062,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10701,17 +10272,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10877,17 +10437,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12054,17 +11603,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12132,7 +11670,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12428,17 +11966,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14221,17 +13748,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14584,17 +14100,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15244,17 +14749,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15663,7 +15157,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15860,17 +15354,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16168,17 +15651,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights deleted file mode 100644 index ef43f3011..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights +++ /dev/null @@ -1,16666 +0,0 @@ - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа2 - - 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.ДокументыФизическихЛиц.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 - - - - 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 - - - - 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 - - - - 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.ФизическиеЛица - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - 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 - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.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 - - - - Document.НазначениеОпросов.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.ПользовательскиеНастройкиДоступаКОбработкам.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 - - - - 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 - - - - Catalog.Пользователи.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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.СтраныМира.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 - - - - 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 - - - - 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 - - - - InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.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 - - - - 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 - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - 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 - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.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.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.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 - - - - 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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - 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 - - - - 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 - - - - 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 - - - - Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации - - View - false - - - Edit - false - - - - Document.Анкета.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа3 - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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.АдресныйКлассификатор.Dimension.КодРайонаВКоде - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - Catalog.СтраныМира.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.ФайлыВРабочемКаталоге.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 - - - - 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 deleted file mode 100644 index 3aa8f9fad..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/ДобавлениеИзменениеФизическихЛиц.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ДобавлениеИзменениеФизическихЛиц - - ru - Добавление и изменение физических лиц - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights index dcdcd2363..6d7d4d7e7 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights @@ -676,17 +676,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -962,17 +951,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1255,7 +1233,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1287,17 +1265,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1442,7 +1409,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1793,50 +1760,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2365,17 +2288,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3212,17 +3124,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3278,94 +3179,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3454,17 +3267,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -3966,17 +3768,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4560,28 +4351,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -4978,17 +4747,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5220,17 +4978,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6210,17 +5957,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6705,17 +6441,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6739,7 +6464,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7057,17 +6782,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7123,94 +6837,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7233,17 +6859,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7354,17 +6969,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7520,7 +7124,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7673,17 +7277,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8334,7 +7927,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8740,17 +8333,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -8829,7 +8411,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9235,17 +8817,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10434,17 +10005,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10610,17 +10170,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11765,17 +11314,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -11843,7 +11381,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12128,17 +11666,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -13844,17 +13371,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14158,17 +13674,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -14818,17 +14323,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15237,7 +14731,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15423,17 +14917,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -15731,17 +15214,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index bd61ef807..e02b9f9bc 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2489,17 +2412,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2896,37 +2808,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3400,17 +3281,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3477,94 +3347,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3653,17 +3435,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4214,17 +3985,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4819,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5248,17 +4986,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5490,17 +5217,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6502,17 +6218,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6876,6 +6581,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -7008,17 +6744,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7042,7 +6767,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7360,17 +7085,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7437,94 +7151,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7547,17 +7173,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7668,17 +7283,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7834,7 +7438,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7987,17 +7591,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8659,7 +8252,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9065,17 +8658,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9154,7 +8736,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9571,17 +9153,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10792,17 +10363,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10968,17 +10528,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12145,17 +11694,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12223,7 +11761,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12519,17 +12057,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14312,17 +13839,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14686,17 +14202,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15346,17 +14851,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15765,7 +15259,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15962,17 +15456,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16270,17 +15753,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index 90dd30e98..1bef02a46 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1906,50 +1873,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2478,17 +2401,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2885,37 +2797,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3389,17 +3270,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3466,94 +3336,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3642,17 +3424,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4192,17 +3963,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4797,28 +4557,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5226,17 +4964,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5468,17 +5195,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6392,17 +6108,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6766,6 +6471,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -6887,17 +6623,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6921,7 +6646,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7228,17 +6953,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7305,94 +7019,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7415,17 +7041,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7536,17 +7151,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7702,7 +7306,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7855,17 +7459,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8527,7 +8120,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8933,17 +8526,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9022,7 +8604,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9439,17 +9021,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10649,17 +10220,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10814,17 +10374,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11980,17 +11529,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12058,7 +11596,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12343,17 +11881,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14103,17 +13630,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14477,17 +13993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15137,17 +14642,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15556,7 +15050,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15753,17 +15247,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16050,17 +15533,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index 66cc328c5..1361982a9 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1906,50 +1873,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2478,17 +2401,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2885,37 +2797,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3389,17 +3270,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3466,94 +3336,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3642,17 +3424,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4192,17 +3963,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4797,28 +4557,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5226,17 +4964,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5468,17 +5195,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6392,17 +6108,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6766,6 +6471,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -6887,17 +6623,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6921,7 +6646,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7228,17 +6953,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7305,94 +7019,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7415,17 +7041,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7536,17 +7151,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7702,7 +7306,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7855,17 +7459,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8527,7 +8120,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8933,17 +8526,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9022,7 +8604,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9439,17 +9021,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10649,17 +10220,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10814,17 +10374,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11980,17 +11529,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12058,7 +11596,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12343,17 +11881,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14103,17 +13630,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14477,17 +13993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15137,17 +14642,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15556,7 +15050,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15753,17 +15247,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16050,17 +15533,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index 5971a2a4b..39c429b97 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1906,50 +1873,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2478,17 +2401,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2885,37 +2797,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3389,17 +3270,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3466,94 +3336,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3642,17 +3424,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4192,17 +3963,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4797,28 +4557,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5226,17 +4964,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5468,17 +5195,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6392,17 +6108,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6766,6 +6471,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -6887,17 +6623,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6921,7 +6646,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7228,17 +6953,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7305,94 +7019,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7415,17 +7041,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7536,17 +7151,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7702,7 +7306,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7855,17 +7459,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8527,7 +8120,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8933,17 +8526,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9022,7 +8604,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9439,17 +9021,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10649,17 +10220,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10814,17 +10374,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11980,17 +11529,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12058,7 +11596,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12343,17 +11881,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14103,17 +13630,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14477,17 +13993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15137,17 +14642,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15556,7 +15050,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15753,17 +15247,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16050,17 +15533,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index 614ad81e5..bca2ec210 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -214,9 +214,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -244,12 +244,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -261,10 +259,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -272,71 +270,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -347,34 +345,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -389,33 +387,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -423,14 +421,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -438,22 +436,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -463,20 +461,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -486,250 +484,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -737,21 +747,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -759,38 +769,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -800,20 +810,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -823,17 +833,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -841,16 +851,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -860,11 +872,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -874,52 +886,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -927,33 +939,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -961,14 +973,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -976,22 +988,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1001,20 +1013,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1024,250 +1036,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1275,21 +1299,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1297,38 +1321,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1338,20 +1362,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1361,17 +1385,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -1379,16 +1403,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -1398,11 +1424,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1412,52 +1438,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1465,33 +1491,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -1499,14 +1525,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -1514,22 +1540,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1539,20 +1565,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1562,250 +1588,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1813,21 +1851,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1835,38 +1873,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1876,20 +1914,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1899,17 +1937,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1917,16 +1955,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -1936,11 +1976,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1950,52 +1990,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2003,33 +2043,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -2037,14 +2077,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -2052,22 +2092,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2077,20 +2117,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2100,250 +2140,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2351,21 +2403,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2373,38 +2425,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2414,20 +2466,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2437,17 +2489,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -2455,16 +2507,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -2474,11 +2528,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2488,52 +2542,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2541,33 +2595,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -2575,14 +2629,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -2590,22 +2644,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2615,20 +2669,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2638,250 +2692,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2889,21 +2955,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2911,38 +2977,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2952,20 +3018,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2975,17 +3041,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -2993,16 +3059,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -3012,11 +3080,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3026,52 +3094,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3079,33 +3147,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3113,14 +3181,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -3128,22 +3196,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3153,20 +3221,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3176,250 +3244,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3427,21 +3507,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3449,38 +3529,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3490,20 +3570,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3513,17 +3593,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -3531,16 +3611,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -3550,11 +3632,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3564,52 +3646,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3617,33 +3699,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3651,14 +3733,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -3666,22 +3748,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3691,20 +3773,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3714,250 +3796,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3965,21 +4059,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3987,38 +4081,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4028,20 +4122,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4051,17 +4145,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -4069,16 +4163,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -4088,11 +4184,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4102,52 +4198,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4155,33 +4251,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4189,14 +4285,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -4204,22 +4300,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4229,20 +4325,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4252,250 +4348,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4503,21 +4611,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4525,38 +4633,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4566,20 +4674,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4589,17 +4697,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -4607,16 +4715,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -4626,11 +4736,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4640,52 +4750,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4693,33 +4803,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4727,14 +4837,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -4742,22 +4852,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4767,20 +4877,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4790,250 +4900,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5041,21 +5163,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5063,38 +5185,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5104,20 +5226,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5127,17 +5249,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -5145,16 +5267,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -5164,11 +5288,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5178,52 +5302,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5231,33 +5355,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5265,14 +5389,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -5280,22 +5404,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5305,20 +5429,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5328,250 +5452,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5579,21 +5715,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5601,38 +5737,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5642,20 +5778,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5665,17 +5801,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -5683,16 +5819,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -5702,11 +5840,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5716,52 +5854,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5769,33 +5907,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5803,14 +5941,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -5818,22 +5956,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5843,20 +5981,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5866,250 +6004,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6117,21 +6267,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6139,38 +6289,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6180,20 +6330,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6203,17 +6353,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -6221,16 +6371,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -6240,11 +6392,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6254,52 +6406,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6307,33 +6459,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6341,14 +6493,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -6356,22 +6508,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6381,20 +6533,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6404,250 +6556,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6655,21 +6819,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6677,38 +6841,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6718,20 +6882,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6741,17 +6905,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -6759,16 +6923,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -6778,11 +6944,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6792,52 +6958,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6845,33 +7011,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6879,14 +7045,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -6894,22 +7060,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6919,20 +7085,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6942,250 +7108,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7193,21 +7371,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7215,38 +7393,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7256,20 +7434,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7279,17 +7457,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -7297,16 +7475,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -7316,11 +7496,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7330,52 +7510,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7383,33 +7563,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7417,14 +7597,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -7432,22 +7612,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7457,20 +7637,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7480,250 +7660,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7731,21 +7923,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7753,38 +7945,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7794,20 +7986,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7817,17 +8009,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -7835,16 +8027,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -7854,11 +8048,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7868,52 +8062,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7921,33 +8115,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7955,14 +8149,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -7970,22 +8164,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7995,20 +8189,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8018,250 +8212,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8269,21 +8475,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8291,38 +8497,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8332,20 +8538,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8355,17 +8561,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -8373,16 +8579,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -8392,11 +8600,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8406,52 +8614,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8459,33 +8667,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8493,14 +8701,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -8508,22 +8716,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8533,20 +8741,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8556,250 +8764,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8807,21 +9027,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8829,38 +9049,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8870,20 +9090,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8893,17 +9113,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -8911,16 +9131,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -8930,11 +9152,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8944,52 +9166,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index ed54f4edc..a0896fd44 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - InformationRegister.КурсыВалют.StandardAttribute.Active @@ -1456,7 +1423,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1829,50 +1796,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2401,17 +2324,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3281,17 +3193,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3358,94 +3259,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3534,17 +3347,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4080,17 +3882,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4685,28 +4476,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5114,17 +4883,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5356,17 +5114,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6368,17 +6115,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6874,17 +6610,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6908,7 +6633,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7226,17 +6951,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7303,94 +7017,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7413,17 +7039,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7534,17 +7149,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7700,7 +7304,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7853,17 +7457,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8514,7 +8107,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8920,17 +8513,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9009,7 +8591,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9426,17 +9008,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10654,17 +10225,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10830,17 +10390,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11919,17 +11468,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -11997,7 +11535,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12293,17 +11831,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14082,17 +13609,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14456,17 +13972,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15116,17 +14621,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15535,7 +15029,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15732,17 +15226,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16040,17 +15523,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии @@ -16538,8 +16010,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -16552,12 +16024,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -16569,7 +16039,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -16577,71 +16047,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -16651,30 +16121,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -16687,30 +16157,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16720,20 +16190,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16743,17 +16213,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -16761,16 +16231,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -16780,11 +16252,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16794,80 +16266,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16877,20 +16349,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16900,17 +16372,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -16918,16 +16390,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -16937,11 +16411,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16951,47 +16425,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -16999,30 +16473,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17032,20 +16506,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17055,17 +16529,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -17073,16 +16547,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -17092,11 +16568,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17106,47 +16582,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17154,30 +16630,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17187,20 +16663,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17210,17 +16686,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -17228,16 +16704,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -17247,11 +16725,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17261,47 +16739,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17309,30 +16787,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17342,20 +16820,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17365,17 +16843,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -17383,16 +16861,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -17402,11 +16882,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17416,47 +16896,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17464,30 +16944,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17497,20 +16977,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17520,17 +17000,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -17538,16 +17018,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -17557,11 +17039,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17571,47 +17053,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17619,30 +17101,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17652,20 +17134,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17675,17 +17157,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -17693,16 +17175,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -17712,11 +17196,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17726,47 +17210,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17774,30 +17258,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17807,20 +17291,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17830,17 +17314,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -17848,16 +17332,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -17867,11 +17353,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17881,47 +17367,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17929,30 +17415,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17962,20 +17448,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17985,17 +17471,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -18003,16 +17489,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -18022,11 +17510,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18036,47 +17524,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18084,30 +17572,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18117,20 +17605,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18140,17 +17628,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -18158,16 +17646,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -18177,11 +17667,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18191,47 +17681,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18239,30 +17729,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18272,20 +17762,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18295,17 +17785,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -18313,16 +17803,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -18332,11 +17824,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18346,47 +17838,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18394,30 +17886,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18427,20 +17919,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18450,17 +17942,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -18468,16 +17960,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -18487,11 +17981,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18501,47 +17995,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18549,30 +18043,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18582,20 +18076,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18605,17 +18099,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -18623,16 +18117,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -18642,11 +18138,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18656,47 +18152,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18704,30 +18200,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18737,20 +18233,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18760,17 +18256,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -18778,16 +18274,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -18797,11 +18295,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18811,47 +18309,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18859,30 +18357,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18892,20 +18390,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18915,17 +18413,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -18933,16 +18431,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -18952,11 +18452,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18966,47 +18466,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -19014,30 +18514,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19047,20 +18547,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19070,17 +18570,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -19088,16 +18588,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -19107,11 +18609,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19121,47 +18623,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли diff --git a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights index 12c456990..df7e6829e 100644 --- a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights +++ b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1906,50 +1873,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2478,17 +2401,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3358,17 +3270,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3435,94 +3336,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3611,17 +3424,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4172,17 +3974,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4777,28 +4568,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5206,17 +4975,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5448,17 +5206,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6460,17 +6207,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6955,17 +6691,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6989,7 +6714,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7307,17 +7032,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7384,94 +7098,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7494,17 +7120,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7615,17 +7230,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7781,7 +7385,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7934,17 +7538,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8606,7 +8199,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9012,17 +8605,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9101,7 +8683,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9493,17 +9075,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10714,17 +10285,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10890,17 +10450,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12067,17 +11616,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12145,7 +11683,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12441,17 +11979,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14223,17 +13750,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14597,17 +14113,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15246,17 +14751,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15665,7 +15159,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15862,17 +15356,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16170,17 +15653,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index 3532b218c..cfbd3699e 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -88,7 +88,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -187,7 +187,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -260,7 +260,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -375,7 +375,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -385,6 +385,47 @@ false + + Catalog.ПрофилиГруппДоступа + + Read + true + + ПрофилиГруппДоступа +ГДЕ + ПрофилиГруппДоступа.ЭтоГруппа + ИЛИ ИСТИНА В + (ВЫБРАТЬ ПЕРВЫЕ 1 + ИСТИНА + ИЗ + РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступа.Ответственный + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И СоставыГруппПользователей.Пользователь = &ТекущийПользователь + #Иначе + И СоставыГруппПользователей.Пользователь = &ТекущийВнешнийПользователь + #КонецЕсли + И Выбор + Когда ГруппыДоступа.Ссылка = Значение(Справочник.ГруппыДоступа.Администраторы) + Тогда ГруппыДоступа.Профиль = Значение(Справочник.ПрофилиГруппДоступа.Администратор) + Иначе ГруппыДоступа.Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) + Конец + ) + + + + + View + true + + + InputByString + true + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации @@ -414,8 +455,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -428,12 +469,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -445,7 +484,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -453,71 +492,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -527,30 +566,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -563,30 +602,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -596,20 +635,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -619,17 +658,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -637,16 +676,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -656,11 +697,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -670,80 +711,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -753,20 +794,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -776,17 +817,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -794,16 +835,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -813,11 +856,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -827,47 +870,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -875,30 +918,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -908,20 +951,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -931,17 +974,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -949,16 +992,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -968,11 +1013,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -982,47 +1027,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1030,30 +1075,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1063,20 +1108,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1086,17 +1131,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -1104,16 +1149,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -1123,11 +1170,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1137,47 +1184,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1185,30 +1232,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1218,20 +1265,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1241,17 +1288,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1259,16 +1306,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -1278,11 +1327,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1292,47 +1341,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1340,30 +1389,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1373,20 +1422,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1396,17 +1445,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -1414,16 +1463,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -1433,11 +1484,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1447,47 +1498,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1495,30 +1546,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1528,20 +1579,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1551,17 +1602,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -1569,16 +1620,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -1588,11 +1641,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1602,47 +1655,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1650,30 +1703,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1683,20 +1736,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1706,17 +1759,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -1724,16 +1777,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -1743,11 +1798,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1757,47 +1812,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1805,30 +1860,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1838,20 +1893,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1861,17 +1916,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -1879,16 +1934,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -1898,11 +1955,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1912,47 +1969,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1960,30 +2017,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1993,20 +2050,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2016,17 +2073,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -2034,16 +2091,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -2053,11 +2112,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2067,47 +2126,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2115,30 +2174,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2148,20 +2207,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2171,17 +2230,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -2189,16 +2248,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -2208,11 +2269,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2222,47 +2283,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2270,30 +2331,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2303,20 +2364,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2326,17 +2387,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -2344,16 +2405,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -2363,11 +2426,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2377,47 +2440,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2425,30 +2488,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2458,20 +2521,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2481,17 +2544,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -2499,16 +2562,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -2518,11 +2583,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2532,47 +2597,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2580,30 +2645,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2613,20 +2678,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2636,17 +2701,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -2654,16 +2719,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -2673,11 +2740,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2687,47 +2754,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2735,30 +2802,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2768,20 +2835,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2791,17 +2858,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -2809,16 +2876,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -2828,11 +2897,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2842,47 +2911,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2890,30 +2959,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2923,20 +2992,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2946,17 +3015,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -2964,16 +3033,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -2983,11 +3054,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2997,47 +3068,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3082,9 +3153,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -3112,12 +3183,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -3129,10 +3198,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -3140,71 +3209,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3215,34 +3284,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -3257,33 +3326,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3291,14 +3360,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -3306,22 +3375,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3331,20 +3400,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3354,250 +3423,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3605,21 +3686,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3627,38 +3708,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3668,20 +3749,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3691,17 +3772,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -3709,16 +3790,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -3728,11 +3811,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3742,52 +3825,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3795,33 +3878,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3829,14 +3912,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -3844,22 +3927,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3869,20 +3952,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3892,250 +3975,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4143,21 +4238,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4165,38 +4260,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4206,20 +4301,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4229,17 +4324,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -4247,16 +4342,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -4266,11 +4363,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4280,52 +4377,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4333,33 +4430,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4367,14 +4464,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -4382,22 +4479,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4407,20 +4504,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4430,250 +4527,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4681,21 +4790,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4703,38 +4812,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4744,20 +4853,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4767,17 +4876,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -4785,16 +4894,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -4804,11 +4915,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4818,52 +4929,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4871,33 +4982,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4905,14 +5016,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -4920,22 +5031,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4945,20 +5056,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4968,250 +5079,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5219,21 +5342,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5241,38 +5364,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5282,20 +5405,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5305,17 +5428,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -5323,16 +5446,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -5342,11 +5467,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5356,52 +5481,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5409,33 +5534,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5443,14 +5568,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -5458,22 +5583,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5483,20 +5608,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5506,250 +5631,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5757,21 +5894,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5779,38 +5916,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5820,20 +5957,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5843,17 +5980,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -5861,16 +5998,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -5880,11 +6019,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5894,52 +6033,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5947,33 +6086,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5981,14 +6120,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -5996,22 +6135,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6021,20 +6160,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6044,250 +6183,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6295,21 +6446,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6317,38 +6468,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6358,20 +6509,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6381,17 +6532,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -6399,16 +6550,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -6418,11 +6571,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6432,52 +6585,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6485,33 +6638,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6519,14 +6672,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -6534,22 +6687,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6559,20 +6712,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6582,250 +6735,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6833,21 +6998,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6855,38 +7020,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6896,20 +7061,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6919,17 +7084,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -6937,16 +7102,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -6956,11 +7123,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6970,52 +7137,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7023,33 +7190,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7057,14 +7224,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -7072,22 +7239,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7097,20 +7264,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7120,250 +7287,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7371,21 +7550,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7393,38 +7572,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7434,20 +7613,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7457,17 +7636,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -7475,16 +7654,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -7494,11 +7675,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7508,52 +7689,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7561,33 +7742,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7595,14 +7776,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -7610,22 +7791,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7635,20 +7816,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7658,250 +7839,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7909,21 +8102,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7931,38 +8124,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7972,20 +8165,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7995,17 +8188,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -8013,16 +8206,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -8032,11 +8227,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8046,52 +8241,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8099,33 +8294,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8133,14 +8328,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -8148,22 +8343,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8173,20 +8368,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8196,250 +8391,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8447,21 +8654,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8469,38 +8676,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8510,20 +8717,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8533,17 +8740,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -8551,16 +8758,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -8570,11 +8779,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8584,52 +8793,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8637,33 +8846,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8671,14 +8880,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -8686,22 +8895,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8711,20 +8920,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8734,250 +8943,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8985,21 +9206,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9007,38 +9228,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9048,20 +9269,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9071,17 +9292,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -9089,16 +9310,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -9108,11 +9331,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9122,52 +9345,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9175,33 +9398,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -9209,14 +9432,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -9224,22 +9447,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9249,20 +9472,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9272,250 +9495,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9523,21 +9758,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9545,38 +9780,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9586,20 +9821,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9609,17 +9844,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -9627,16 +9862,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -9646,11 +9883,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -9660,52 +9897,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -9713,33 +9950,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -9747,14 +9984,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -9762,22 +9999,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9787,20 +10024,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -9810,250 +10047,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10061,21 +10310,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10083,38 +10332,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10124,20 +10373,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10147,17 +10396,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -10165,16 +10414,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -10184,11 +10435,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -10198,52 +10449,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10251,33 +10502,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10285,14 +10536,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -10300,22 +10551,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10325,20 +10576,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10348,250 +10599,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10599,21 +10862,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10621,38 +10884,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10662,20 +10925,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10685,17 +10948,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -10703,16 +10966,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -10722,11 +10987,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -10736,52 +11001,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -10789,33 +11054,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -10823,14 +11088,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -10838,22 +11103,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10863,20 +11128,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -10886,250 +11151,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11137,21 +11414,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11159,38 +11436,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11200,20 +11477,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11223,17 +11500,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -11241,16 +11518,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -11260,11 +11539,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -11274,52 +11553,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11327,33 +11606,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -11361,14 +11640,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -11376,22 +11655,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11401,20 +11680,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11424,250 +11703,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11675,21 +11966,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11697,38 +11988,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11738,20 +12029,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -11761,17 +12052,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -11779,16 +12070,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -11798,11 +12091,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -11812,52 +12105,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -11894,8 +12187,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", // кроме случая В(n) = "Условие" (или ""). @@ -11913,12 +12206,10 @@ // "Склады","Т.СкладПолучатель",")", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -11930,7 +12221,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -11938,71 +12229,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -12017,30 +12308,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -12055,30 +12346,30 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12088,20 +12379,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12111,17 +12402,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -12129,16 +12420,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -12148,11 +12441,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12162,51 +12455,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12214,30 +12507,30 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12247,20 +12540,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12270,17 +12563,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -12288,16 +12581,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -12307,11 +12602,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12321,51 +12616,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12373,30 +12668,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12406,20 +12701,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12429,17 +12724,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -12447,16 +12742,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -12466,11 +12763,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12480,51 +12777,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12532,30 +12829,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12565,20 +12862,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12588,17 +12885,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -12606,16 +12903,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -12625,11 +12924,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12639,51 +12938,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12691,30 +12990,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12724,20 +13023,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12747,17 +13046,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -12765,16 +13064,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -12784,11 +13085,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12798,51 +13099,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -12850,30 +13151,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12883,20 +13184,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -12906,17 +13207,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -12924,16 +13225,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -12943,11 +13246,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -12957,51 +13260,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13009,30 +13312,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13042,20 +13345,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13065,17 +13368,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -13083,16 +13386,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -13102,11 +13407,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13116,51 +13421,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13168,30 +13473,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13201,20 +13506,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13224,17 +13529,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -13242,16 +13547,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -13261,11 +13568,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13275,51 +13582,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13327,30 +13634,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13360,20 +13667,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13383,17 +13690,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -13401,16 +13708,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -13420,11 +13729,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13434,51 +13743,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13486,30 +13795,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13519,20 +13828,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13542,17 +13851,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -13560,16 +13869,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -13579,11 +13890,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13593,51 +13904,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13645,30 +13956,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13678,20 +13989,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13701,17 +14012,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -13719,16 +14030,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -13738,11 +14051,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13752,51 +14065,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13804,30 +14117,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13837,20 +14150,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13860,17 +14173,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -13878,16 +14191,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -13897,11 +14212,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -13911,51 +14226,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -13963,30 +14278,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -13996,20 +14311,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14019,17 +14334,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -14037,16 +14352,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -14056,11 +14373,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -14070,51 +14387,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14122,30 +14439,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14155,20 +14472,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14178,17 +14495,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -14196,16 +14513,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -14215,11 +14534,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -14229,51 +14548,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14281,30 +14600,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14314,20 +14633,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14337,17 +14656,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -14355,16 +14674,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -14374,11 +14695,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -14388,51 +14709,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14440,30 +14761,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14473,20 +14794,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14496,17 +14817,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -14514,16 +14835,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -14533,11 +14856,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -14547,51 +14870,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -14638,12 +14961,10 @@ // Пример4: ПоНаборамЗначений("Справочник.ВложенияЭлектронныхПисем", "", "", "Владелец") // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -14655,10 +14976,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -14669,34 +14990,34 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Т.ЭтоГруппа ИЛИ +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Т.ЭтоГруппа Или #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -14706,12 +15027,12 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ -#Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ @@ -14731,9 +15052,9 @@ И НомераНаборов.Изменение #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -14748,23 +15069,23 @@ НаборыЗначений.Ссылка = Т.Ссылка #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ @@ -14773,7 +15094,7 @@ #Иначе НомераНаборов.Объект = Т.#Параметр(4) #КонецЕсли - #Иначе + #Иначе ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Ссылка = Т.Ссылка @@ -14784,10 +15105,10 @@ И НомераНаборов.Изменение #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -14802,20 +15123,20 @@ НаборыЗначений.Ссылка = Т.Ссылка #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -14831,136 +15152,148 @@ #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + #Если Не &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14968,21 +15301,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -14990,23 +15323,23 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) ) diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index edbc96a65..6c97fead2 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2489,17 +2412,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -2896,41 +2808,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка @@ -3404,17 +3281,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3481,94 +3347,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3657,17 +3435,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4218,17 +3985,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4823,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5252,17 +4986,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5494,17 +5217,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6506,17 +6218,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6880,6 +6581,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -7012,17 +6748,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7046,7 +6771,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7364,17 +7089,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7441,94 +7155,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7551,17 +7177,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7672,17 +7287,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7838,7 +7442,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7991,17 +7595,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8663,7 +8256,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9069,17 +8662,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9158,7 +8740,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9575,17 +9157,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10796,17 +10367,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10972,17 +10532,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12149,17 +11698,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12227,7 +11765,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12523,17 +12061,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14316,17 +13843,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14690,17 +14206,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15350,17 +14855,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15769,7 +15263,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15966,17 +15460,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16274,17 +15757,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights index 336ee0ea4..a18c44ab1 100644 --- a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights @@ -216,6 +216,38 @@ false + + Catalog.ПользовательскиеНастройкиОтчетов + + Read + true + + ГДЕ Пользователь = &ТекущийПользователь + + + + Insert + true + + ГДЕ Пользователь = &ТекущийПользователь + + + + Update + true + + ГДЕ Пользователь = &ТекущийПользователь + + + + View + true + + + InputByString + true + + CommonForm.ФормаНастроекОтчета diff --git a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights index 9f26f5c63..94548bbe3 100644 --- a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights @@ -710,17 +710,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -996,17 +985,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1349,7 +1327,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1392,17 +1370,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1547,7 +1514,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1916,50 +1883,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2484,17 +2407,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3370,17 +3282,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3447,94 +3348,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3623,17 +3436,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -3663,17 +3465,6 @@ false - - Constant.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - - Read - true - - - View - true - - Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач @@ -4191,17 +3982,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4799,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5224,17 +4982,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5466,17 +5213,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6488,17 +6224,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6990,28 +6715,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - - - Constant.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса - - Read - true - - - View - true - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7031,7 +6734,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7349,17 +7052,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7426,94 +7118,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7536,17 +7140,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7671,17 +7264,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7837,7 +7419,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7997,17 +7579,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8041,21 +7612,6 @@ false - - Catalog.ПоставляемыеДополнительныеОтчетыИОбработки - - Read - true - - БезопасныйРежим - ХранилищеОбработки - ПоставляемыеДополнительныеОтчетыИОбработки ИЗ Справочник.ПоставляемыеДополнительныеОтчетыИОбработки КАК ПоставляемыеДополнительныеОтчетыИОбработки - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных КАК ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных - ПО ПоставляемыеДополнительныеОтчетыИОбработки.Ссылка = ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.ПоставляемаяОбработка -ГДЕ НЕ ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.ИспользуемаяОбработка ЕСТЬ NULL - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined @@ -8687,7 +8243,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9093,17 +8649,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9182,7 +8727,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9591,17 +9136,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -9822,28 +9356,6 @@ false - - Constant.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса - - Read - true - - - View - true - - - - Constant.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса - - Read - true - - - View - true - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -10817,17 +10329,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10993,17 +10494,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12166,17 +11656,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12244,7 +11723,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12540,17 +12019,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14363,17 +13831,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14744,17 +14201,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15400,17 +14846,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15822,7 +15257,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -16019,17 +15454,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16327,17 +15751,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights index f2653a9c3..b17da5404 100644 --- a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -60,7 +60,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты Edit false @@ -143,7 +143,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты Edit false @@ -185,7 +185,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты Edit false @@ -227,7 +227,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты Edit false @@ -258,8 +258,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -272,12 +272,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -289,7 +287,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -297,71 +295,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -371,30 +369,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -407,30 +405,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -440,20 +438,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -463,17 +461,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -481,16 +479,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -500,11 +500,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -514,80 +514,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -597,20 +597,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -620,17 +620,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -638,16 +638,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -657,11 +659,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -671,47 +673,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -719,30 +721,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -752,20 +754,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -775,17 +777,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -793,16 +795,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -812,11 +816,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -826,47 +830,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -874,30 +878,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -907,20 +911,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -930,17 +934,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -948,16 +952,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -967,11 +973,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -981,47 +987,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1029,30 +1035,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1062,20 +1068,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1085,17 +1091,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1103,16 +1109,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -1122,11 +1130,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1136,47 +1144,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1184,30 +1192,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1217,20 +1225,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1240,17 +1248,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -1258,16 +1266,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -1277,11 +1287,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1291,47 +1301,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1339,30 +1349,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1372,20 +1382,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1395,17 +1405,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -1413,16 +1423,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -1432,11 +1444,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1446,47 +1458,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1494,30 +1506,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1527,20 +1539,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1550,17 +1562,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -1568,16 +1580,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -1587,11 +1601,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1601,47 +1615,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1649,30 +1663,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1682,20 +1696,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1705,17 +1719,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -1723,16 +1737,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -1742,11 +1758,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1756,47 +1772,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1804,30 +1820,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1837,20 +1853,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1860,17 +1876,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -1878,16 +1894,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -1897,11 +1915,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1911,47 +1929,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1959,30 +1977,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1992,20 +2010,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2015,17 +2033,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -2033,16 +2051,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -2052,11 +2072,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2066,47 +2086,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2114,30 +2134,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2147,20 +2167,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2170,17 +2190,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -2188,16 +2208,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -2207,11 +2229,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2221,47 +2243,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2269,30 +2291,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2302,20 +2324,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2325,17 +2347,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -2343,16 +2365,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -2362,11 +2386,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2376,47 +2400,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2424,30 +2448,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2457,20 +2481,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2480,17 +2504,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -2498,16 +2522,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -2517,11 +2543,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2531,47 +2557,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2579,30 +2605,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2612,20 +2638,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2635,17 +2661,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -2653,16 +2679,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -2672,11 +2700,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2686,47 +2714,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2734,30 +2762,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2767,20 +2795,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2790,17 +2818,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -2808,16 +2836,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -2827,11 +2857,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2841,47 +2871,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли diff --git a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights index dc6869e32..7e7265e4f 100644 --- a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights +++ b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights @@ -122,13 +122,6 @@ true - - Subsystem.СтандартныеПодсистемы.Subsystem.ФизическиеЛица - - View - true - - Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index d17f032dd..cc60b78f0 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -36,6 +36,13 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Dimension.БезопасныйРежим + + Edit + false + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы @@ -326,6 +333,13 @@ false + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.Dimension.ШаблонСтрокиЗапуска + + Edit + false + + Catalog.ПапкиЭлектронныхПисем @@ -379,6 +393,49 @@ false + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.StandardAttribute.Period + + Edit + false + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений @@ -785,6 +842,13 @@ false + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Dimension.Владелец + + Edit + false + + DataProcessor.НастройкаРезервногоКопированияИБ @@ -1098,6 +1162,13 @@ false + + InformationRegister.РазрешенныеВнешниеКомпоненты.Dimension.ИмяМакета + + Edit + false + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование @@ -1193,6 +1264,17 @@ false + + Constant.ПрофильБезопасностиИнформационнойБазы + + Update + false + + + Edit + false + + DataProcessor.ОценкаПроизводительности @@ -1204,6 +1286,13 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Dimension.Владелец + + Edit + false + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы @@ -1239,37 +1328,9 @@ - Configuration.БиблиотекаСтандартныхПодсистем + InformationRegister.РазрешенныеИнтернетРесурсы.Attribute.Описание - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports + Edit false @@ -1318,6 +1379,70 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы.Resource.Протокол + + Edit + false + + + + InformationRegister.РазрешенныеИнтернетРесурсы.Dimension.Владелец + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.РежимЗамещения + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Period + + Edit + false + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки @@ -1361,6 +1486,13 @@ false + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.Dimension.БезопасныйРежим + + Edit + false + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаОбработкиДляОтладкиЗагрузки @@ -1372,29 +1504,6 @@ false - - Catalog.ФизическиеЛица - - InteractiveDelete - false - - - InteractiveDeletePredefinedData - false - - - InteractiveSetDeletionMarkPredefinedData - false - - - InteractiveClearDeletionMarkPredefinedData - false - - - InteractiveDeleteMarkedPredefinedData - false - - Constant.РежимИспользованияИнформационнойБазы @@ -1536,11 +1645,14 @@ - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.Attribute.Описание - View + Edit false + + + InformationRegister.РазрешенныеCOMКлассы.Resource.ИмяКомпьютера Edit false @@ -1585,17 +1697,6 @@ false - - Constant.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - - Update - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас @@ -1986,6 +2087,13 @@ false + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.МоментВремени + + Edit + false + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил @@ -2169,17 +2277,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - CommonForm.ПараметрыПроксиСервера @@ -2230,6 +2327,13 @@ false + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.Dimension.БезопасныйРежим + + Edit + false + + Document.ТелефонныйЗвонок @@ -2237,6 +2341,13 @@ false + + InformationRegister.РазрешенныеCOMКлассы.Dimension.Владелец + + Edit + false + + Catalog.РолиИсполнителей @@ -2329,6 +2440,13 @@ false + + InformationRegister.РазрешенныеВнешниеКомпоненты.Dimension.Владелец + + Edit + false + + CommonForm.ВходВОбластьДанных @@ -2609,6 +2727,13 @@ false + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Dimension.Идентификатор + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска @@ -2799,49 +2924,6 @@ false - - Constant.ПарольПользователяАгентаСервиса - - Read - false - - - Update - false - - - View - false - - - Edit - false - - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания @@ -3036,6 +3118,20 @@ false + + InformationRegister.РазрешенныеCOMКлассы.Resource.CLSID + + Edit + false + + + + InformationRegister.РазрешенныеВнешниеКомпоненты.Dimension.ИмяФайла + + Edit + false + + Constant.ПоддержкаРезервногоКопирования @@ -3176,6 +3272,17 @@ false + + Catalog.ПользовательскиеНастройкиОтчетов + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + InformationRegister.СостоянияОбменовДанными @@ -3361,6 +3468,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + InformationRegister.АдресныеСокращения.Resource.Наименование @@ -3398,11 +3540,7 @@ - Constant.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса - - Update - false - + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Dimension.БезопасныйРежим Edit false @@ -3419,6 +3557,49 @@ false + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.StandardAttribute.Period + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования @@ -3616,6 +3797,13 @@ false + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.УдаляемыеРазрешения + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -3634,29 +3822,6 @@ false - - Catalog.ВидыДокументовФизическихЛиц - - InteractiveDelete - false - - - InteractiveDeletePredefinedData - false - - - InteractiveSetDeletionMarkPredefinedData - false - - - InteractiveClearDeletionMarkPredefinedData - false - - - InteractiveDeleteMarkedPredefinedData - false - - CommonAttribute.ОбластьДанныхОсновныеДанные @@ -3887,6 +4052,20 @@ false + + InformationRegister.РазрешенныеCOMКлассы.Dimension.ProgId + + Edit + false + + + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Attribute.Описание + + Edit + false + + Document.Анкета @@ -3901,17 +4080,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ПроизводственныеКалендари @@ -4034,93 +4202,6 @@ false - - Catalog.ПоставляемыеДополнительныеОтчетыИОбработки - - Read - true - - БезопасныйРежим - ХранилищеОбработки - ПоставляемыеДополнительныеОтчетыИОбработки ИЗ Справочник.ПоставляемыеДополнительныеОтчетыИОбработки КАК ПоставляемыеДополнительныеОтчетыИОбработки - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных КАК ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных - ПО ПоставляемыеДополнительныеОтчетыИОбработки.Ссылка = ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.ПоставляемаяОбработка -ГДЕ НЕ ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных.ИспользуемаяОбработка ЕСТЬ NULL - - - - Insert - false - - - Update - false - - - Delete - false - - - View - false - - - InteractiveInsert - false - - - Edit - false - - - InteractiveDelete - false - - - InteractiveSetDeletionMark - false - - - InteractiveClearDeletionMark - false - - - InteractiveDeleteMarked - false - - - InputByString - false - - - InteractiveDeletePredefinedData - false - - - InteractiveSetDeletionMarkPredefinedData - false - - - InteractiveClearDeletionMarkPredefinedData - false - - - InteractiveDeleteMarkedPredefinedData - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы @@ -4211,6 +4292,13 @@ false + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.Dimension.Владелец + + Edit + false + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки @@ -4222,6 +4310,13 @@ false + + InformationRegister.РежимыПодключенияВнешнихМодулей.Dimension.ВнешнийМодуль + + Edit + false + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных @@ -4263,50 +4358,7 @@ - Constant.АдресАгентаСервиса - - Read - false - - - Update - false - - - View - false - - - Edit - false - - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Dimension.Владелец Edit false @@ -4319,6 +4371,13 @@ false + + InformationRegister.РазрешенныеВнешниеКомпоненты.Dimension.БезопасныйРежим + + Edit + false + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица @@ -4377,6 +4436,13 @@ false + + InformationRegister.РазрешенныеCOMКлассы.Dimension.БезопасныйРежим + + Edit + false + + InformationRegister.ПраваРолей.Resource.Добавление @@ -4445,18 +4511,14 @@ - Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение - - View - false - + InformationRegister.РазрешенныеВнешниеКомпоненты.Resource.ХэшСумма Edit false - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение View false @@ -4495,28 +4557,6 @@ false - - Constant.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса - - Update - false - - - Edit - false - - - - Constant.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса - - Update - false - - - Edit - false - - InformationRegister.УдалитьОчередьЗаданий.Resource.УдалитьРегламентноеЗадание @@ -4656,6 +4696,49 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.StandardAttribute.Period + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования @@ -4689,6 +4772,13 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы.Resource.Адрес + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Resource.ЭксклюзивноеВыполнение @@ -4754,6 +4844,49 @@ false + + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень @@ -4913,6 +5046,13 @@ false + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Dimension.Идентификатор + + Edit + false + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене @@ -5063,6 +5203,17 @@ false + + Constant.ГлавныйУзел + + Update + false + + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Dimension.Идентификатор @@ -5119,6 +5270,17 @@ false + + Constant.ИспользуютсяПрофилиБезопасности + + Update + false + + + Edit + false + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил @@ -5385,6 +5547,13 @@ false + + InformationRegister.РазрешенныеВнешниеКомпоненты.Attribute.Описание + + Edit + false + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -6038,49 +6207,6 @@ false - - Constant.ИмяПользователяАгентаСервиса - - Read - false - - - Update - false - - - View - false - - - Edit - false - - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - InformationRegister.УдалитьОчередьЗаданий.Resource.Ключ @@ -6196,6 +6322,13 @@ false + + InformationRegister.РазрешенныеCOMКлассы.Attribute.Описание + + Edit + false + + Catalog.НазначенияСертификатовЭП @@ -6302,6 +6435,13 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Resource.РазрешенаЗаписьДанных + + Edit + false + + InformationRegister.УдалитьСтраныМира.Dimension.ОбластьДанных @@ -6586,6 +6726,49 @@ false + + InformationRegister.РазрешенныеВнешниеКомпоненты + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенныеВнешниеКомпоненты.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенныеВнешниеКомпоненты.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенныеВнешниеКомпоненты.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенныеВнешниеКомпоненты.StandardAttribute.Period + + Edit + false + + InformationRegister.УдалитьОбластиДанных @@ -7120,6 +7303,60 @@ false + + Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + Update + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Period + + Edit + false + + InformationRegister.АдресныеСокращения.Dimension.Код @@ -7138,6 +7375,13 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы.Dimension.БезопасныйРежим + + Edit + false + + InformationRegister.УдалитьСтраныМира @@ -7177,6 +7421,13 @@ false + + InformationRegister.РежимыПодключенияВнешнихМодулей.Resource.БезопасныйРежим + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия @@ -7191,6 +7442,49 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенныеИнтернетРесурсы.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенныеИнтернетРесурсы.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенныеИнтернетРесурсы.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенныеИнтернетРесурсы.StandardAttribute.Period + + Edit + false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.КодОбработчика @@ -7384,6 +7678,13 @@ false + + InformationRegister.РазрешенныеПриложенияОперационнойСистемы.Attribute.Описание + + Edit + false + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -7409,17 +7710,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа @@ -7443,49 +7733,6 @@ false - - Constant.НастройкаАвтономногоРабочегоМестаЗавершена - - Read - false - - - Update - false - - - View - false - - - Edit - false - - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена @@ -7511,6 +7758,20 @@ false + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.ДобавляемыеРазрешения + + Edit + false + + + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.Dimension.Владелец + + Edit + false + + InformationRegister.СообщенияОбменаДанными.Resource.ИмяФайлаСообщения @@ -7522,6 +7783,20 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Dimension.Адрес + + Edit + false + + + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Attribute.МоментВремени + + Edit + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии @@ -7540,6 +7815,13 @@ false + + InformationRegister.РазрешенныеКаталогиФайловойСистемы.Resource.РазрешеноЧтениеДанных + + Edit + false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность @@ -7558,6 +7840,49 @@ false + + InformationRegister.РазрешенныеCOMКлассы + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенныеCOMКлассы.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенныеCOMКлассы.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенныеCOMКлассы.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенныеCOMКлассы.StandardAttribute.Period + + Edit + false + + Catalog.СообщенияСистемы @@ -7745,6 +8070,13 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы.Resource.Порт + + Edit + false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя @@ -7818,6 +8150,13 @@ false + + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов.Attribute.Операция + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы @@ -7825,6 +8164,49 @@ false + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.StandardAttribute.Active + + Edit + false + + + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.РазрешенияПереходаВПривилегированныйРежим.StandardAttribute.Period + + Edit + false + + SessionParameter.ОбластьДанныхЗначение @@ -7990,6 +8372,13 @@ false + + InformationRegister.РазрешенныеИнтернетРесурсы.Dimension.Псевдоним + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Resource.Использование diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights index 01e4ce06b..183fb21e9 100644 --- a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights @@ -702,17 +702,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -988,17 +977,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1330,7 +1308,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1362,17 +1340,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1517,7 +1484,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1879,50 +1846,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2447,17 +2370,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3250,17 +3162,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3327,94 +3228,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3510,17 +3323,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4060,17 +3862,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4654,28 +4445,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5072,17 +4841,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5314,17 +5072,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6248,17 +5995,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись @@ -6699,17 +6435,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6733,7 +6458,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7040,17 +6765,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7117,94 +6831,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 - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление @@ -7216,17 +6842,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7337,17 +6952,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7492,7 +7096,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7634,17 +7238,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8284,7 +7877,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8690,17 +8283,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -8768,7 +8350,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9163,17 +8745,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10292,17 +9863,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10468,17 +10028,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11630,17 +11179,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -11697,7 +11235,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -11978,17 +11516,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -13727,17 +13254,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14108,17 +13624,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -14728,17 +14233,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15070,7 +14564,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15267,17 +14761,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -15564,17 +15047,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии @@ -16022,8 +15494,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -16036,12 +15508,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -16053,7 +15523,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -16061,71 +15531,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -16135,30 +15605,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -16171,30 +15641,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16204,20 +15674,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16227,17 +15697,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -16245,16 +15715,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -16264,11 +15736,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16278,80 +15750,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16361,20 +15833,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16384,17 +15856,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -16402,16 +15874,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -16421,11 +15895,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16435,47 +15909,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -16483,30 +15957,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16516,20 +15990,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16539,17 +16013,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -16557,16 +16031,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -16576,11 +16052,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16590,47 +16066,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -16638,30 +16114,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16671,20 +16147,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16694,17 +16170,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -16712,16 +16188,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -16731,11 +16209,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16745,47 +16223,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -16793,30 +16271,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16826,20 +16304,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16849,17 +16327,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -16867,16 +16345,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -16886,11 +16366,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16900,47 +16380,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -16948,30 +16428,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16981,20 +16461,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17004,17 +16484,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -17022,16 +16502,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -17041,11 +16523,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17055,47 +16537,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17103,30 +16585,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17136,20 +16618,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17159,17 +16641,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -17177,16 +16659,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -17196,11 +16680,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17210,47 +16694,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17258,30 +16742,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17291,20 +16775,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17314,17 +16798,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -17332,16 +16816,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -17351,11 +16837,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17365,47 +16851,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17413,30 +16899,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17446,20 +16932,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17469,17 +16955,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -17487,16 +16973,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -17506,11 +16994,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17520,47 +17008,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17568,30 +17056,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17601,20 +17089,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17624,17 +17112,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -17642,16 +17130,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -17661,11 +17151,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17675,47 +17165,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17723,30 +17213,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17756,20 +17246,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17779,17 +17269,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -17797,16 +17287,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -17816,11 +17308,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17830,47 +17322,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17878,30 +17370,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17911,20 +17403,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17934,17 +17426,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -17952,16 +17444,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -17971,11 +17465,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17985,47 +17479,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18033,30 +17527,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18066,20 +17560,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18089,17 +17583,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -18107,16 +17601,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -18126,11 +17622,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18140,47 +17636,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18188,30 +17684,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18221,20 +17717,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18244,17 +17740,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -18262,16 +17758,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -18281,11 +17779,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18295,47 +17793,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18343,30 +17841,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18376,20 +17874,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18399,17 +17897,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -18417,16 +17915,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -18436,11 +17936,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18450,47 +17950,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18498,30 +17998,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18531,20 +18031,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18554,17 +18054,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -18572,16 +18072,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -18591,11 +18093,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18605,47 +18107,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18690,9 +18192,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -18720,12 +18222,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -18737,10 +18237,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -18748,71 +18248,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -18823,34 +18323,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -18865,33 +18365,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -18899,14 +18399,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -18914,22 +18414,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18939,20 +18439,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18962,250 +18462,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19213,21 +18725,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19235,38 +18747,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19276,20 +18788,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19299,17 +18811,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -19317,16 +18829,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -19336,11 +18850,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19350,52 +18864,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -19403,33 +18917,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -19437,14 +18951,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -19452,22 +18966,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19477,20 +18991,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19500,250 +19014,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19751,21 +19277,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19773,38 +19299,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19814,20 +19340,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19837,17 +19363,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -19855,16 +19381,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -19874,11 +19402,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19888,52 +19416,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -19941,33 +19469,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -19975,14 +19503,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -19990,22 +19518,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20015,20 +19543,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20038,250 +19566,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20289,21 +19829,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20311,38 +19851,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20352,20 +19892,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20375,17 +19915,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -20393,16 +19933,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -20412,11 +19954,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -20426,52 +19968,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -20479,33 +20021,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -20513,14 +20055,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -20528,22 +20070,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20553,20 +20095,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20576,250 +20118,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20827,21 +20381,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20849,38 +20403,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20890,20 +20444,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -20913,17 +20467,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -20931,16 +20485,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -20950,11 +20506,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -20964,52 +20520,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -21017,33 +20573,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -21051,14 +20607,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -21066,22 +20622,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21091,20 +20647,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21114,250 +20670,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21365,21 +20933,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21387,38 +20955,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21428,20 +20996,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21451,17 +21019,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -21469,16 +21037,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -21488,11 +21058,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -21502,52 +21072,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -21555,33 +21125,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -21589,14 +21159,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -21604,22 +21174,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21629,20 +21199,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21652,250 +21222,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21903,21 +21485,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21925,38 +21507,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21966,20 +21548,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -21989,17 +21571,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -22007,16 +21589,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -22026,11 +21610,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -22040,52 +21624,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -22093,33 +21677,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -22127,14 +21711,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -22142,22 +21726,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22167,20 +21751,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22190,250 +21774,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22441,21 +22037,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22463,38 +22059,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22504,20 +22100,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22527,17 +22123,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -22545,16 +22141,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -22564,11 +22162,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -22578,52 +22176,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -22631,33 +22229,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -22665,14 +22263,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -22680,22 +22278,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22705,20 +22303,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22728,250 +22326,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -22979,21 +22589,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23001,38 +22611,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23042,20 +22652,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23065,17 +22675,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -23083,16 +22693,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -23102,11 +22714,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -23116,52 +22728,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -23169,33 +22781,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -23203,14 +22815,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -23218,22 +22830,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23243,20 +22855,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23266,250 +22878,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23517,21 +23141,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23539,38 +23163,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23580,20 +23204,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23603,17 +23227,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -23621,16 +23245,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -23640,11 +23266,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -23654,52 +23280,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -23707,33 +23333,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -23741,14 +23367,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -23756,22 +23382,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23781,20 +23407,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -23804,250 +23430,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24055,21 +23693,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24077,38 +23715,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24118,20 +23756,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24141,17 +23779,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -24159,16 +23797,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -24178,11 +23818,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -24192,52 +23832,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -24245,33 +23885,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -24279,14 +23919,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -24294,22 +23934,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24319,20 +23959,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24342,250 +23982,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24593,21 +24245,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24615,38 +24267,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24656,20 +24308,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24679,17 +24331,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -24697,16 +24349,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -24716,11 +24370,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -24730,52 +24384,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -24783,33 +24437,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -24817,14 +24471,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -24832,22 +24486,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24857,20 +24511,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -24880,250 +24534,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25131,21 +24797,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25153,38 +24819,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25194,20 +24860,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25217,17 +24883,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -25235,16 +24901,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -25254,11 +24922,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -25268,52 +24936,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -25321,33 +24989,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -25355,14 +25023,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -25370,22 +25038,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25395,20 +25063,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25418,250 +25086,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25669,21 +25349,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25691,38 +25371,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25732,20 +25412,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25755,17 +25435,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -25773,16 +25453,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -25792,11 +25474,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -25806,52 +25488,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -25859,33 +25541,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -25893,14 +25575,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -25908,22 +25590,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25933,20 +25615,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -25956,250 +25638,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26207,21 +25901,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26229,38 +25923,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26270,20 +25964,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26293,17 +25987,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -26311,16 +26005,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -26330,11 +26026,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -26344,52 +26040,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -26397,33 +26093,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -26431,14 +26127,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -26446,22 +26142,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26471,20 +26167,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26494,250 +26190,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26745,21 +26453,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26767,38 +26475,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26808,20 +26516,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -26831,17 +26539,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -26849,16 +26557,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -26868,11 +26578,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -26882,52 +26592,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -26935,33 +26645,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -26969,14 +26679,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -26984,22 +26694,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27009,20 +26719,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27032,250 +26742,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27283,21 +27005,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27305,38 +27027,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27346,20 +27068,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -27369,17 +27091,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -27387,16 +27109,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -27406,11 +27130,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -27420,52 +27144,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights index b93d03b76..0ba927c21 100644 --- a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights +++ b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2489,17 +2412,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3369,17 +3281,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3446,94 +3347,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3622,17 +3435,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4183,17 +3985,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4788,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5217,17 +4986,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5459,17 +5217,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6471,17 +6218,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6977,17 +6713,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7011,7 +6736,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7329,17 +7054,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7406,94 +7120,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7516,17 +7142,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7637,17 +7252,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7803,7 +7407,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7956,17 +7560,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8628,7 +8221,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9034,17 +8627,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9123,7 +8705,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9540,17 +9122,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10761,17 +10332,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10937,17 +10497,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12114,17 +11663,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12192,7 +11730,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12488,17 +12026,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14281,17 +13808,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14655,17 +14171,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15315,17 +14820,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15734,7 +15228,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15931,17 +15425,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16239,17 +15722,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights index 94ddd20bf..76a9f5b1a 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights @@ -1029,17 +1029,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1513,17 +1502,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1939,7 +1917,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -2015,17 +1993,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -2170,7 +2137,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -2730,50 +2697,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -3390,17 +3313,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике @@ -4424,17 +4336,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -4501,94 +4402,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 - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ВключатьТелоИсходногоПисьма @@ -4787,17 +4600,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -5512,17 +5314,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -6300,28 +6091,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -6795,17 +6564,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -7213,17 +6971,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -8357,17 +8104,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -9083,17 +8819,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -9128,7 +8853,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -9479,17 +9204,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - InformationRegister.УведомленияОПрочтении.Resource.ТребуетсяОтправка @@ -9611,94 +9325,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -9743,17 +9369,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -9897,17 +9512,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.Attribute.ИспользоватьFTPРесурс @@ -10162,7 +9766,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -10355,17 +9959,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -11261,7 +10854,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -11722,17 +11315,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -11811,7 +11393,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -12569,17 +12151,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - InformationRegister.УведомленияОПрочтении.StandardAttribute.Active @@ -14171,17 +13742,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов @@ -14402,17 +13962,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -15791,17 +15340,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -15979,7 +15517,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -16359,17 +15897,6 @@ true - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -18456,17 +17983,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -18940,17 +18456,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -19776,17 +19281,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -20246,7 +19740,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -20520,17 +20014,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -20861,17 +20344,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights index 0b11b2f23..f8a8353a4 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights @@ -960,17 +960,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1444,17 +1433,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1841,7 +1819,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1917,17 +1895,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -2072,7 +2039,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -2639,50 +2606,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -3306,17 +3229,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -4332,17 +4244,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -4409,94 +4310,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 - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ВключатьТелоИсходногоПисьма @@ -4695,17 +4508,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -5388,17 +5190,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -6154,28 +5945,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -6649,17 +6418,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -7081,17 +6839,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -8225,17 +7972,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -8929,17 +8665,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -8974,7 +8699,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -9332,17 +9057,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - InformationRegister.УведомленияОПрочтении.Resource.ТребуетсяОтправка @@ -9453,94 +9167,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -9585,17 +9211,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -9739,17 +9354,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.Attribute.ИспользоватьFTPРесурс @@ -9993,7 +9597,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -10186,17 +9790,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -11067,7 +10660,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -11517,17 +11110,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -11606,7 +11188,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -12309,17 +11891,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - InformationRegister.УведомленияОПрочтении.StandardAttribute.Active @@ -13911,17 +13482,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов @@ -14120,17 +13680,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -15491,17 +15040,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -15668,7 +15206,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -16085,17 +15623,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -18145,17 +17672,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -18618,17 +18134,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -19410,17 +18915,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -19880,7 +19374,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -20121,17 +19615,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -20458,17 +19941,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights index 0a1692f35..1ad9a4fab 100644 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights @@ -215,21 +215,6 @@ false - - Catalog.ВидыДокументовФизическихЛиц - - Read - true - - - View - true - - - InputByString - true - - CommonForm.ПраваДоступа @@ -703,8 +688,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -717,12 +702,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -734,7 +717,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -742,71 +725,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -816,30 +799,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -852,30 +835,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -885,20 +868,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -908,17 +891,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -926,16 +909,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -945,11 +930,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -959,80 +944,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1042,20 +1027,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1065,17 +1050,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -1083,16 +1068,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -1102,11 +1089,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1116,47 +1103,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1164,30 +1151,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1197,20 +1184,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1220,17 +1207,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -1238,16 +1225,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -1257,11 +1246,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1271,47 +1260,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1319,30 +1308,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1352,20 +1341,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1375,17 +1364,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -1393,16 +1382,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -1412,11 +1403,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1426,47 +1417,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1474,30 +1465,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1507,20 +1498,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1530,17 +1521,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1548,16 +1539,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -1567,11 +1560,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1581,47 +1574,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1629,30 +1622,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1662,20 +1655,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1685,17 +1678,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -1703,16 +1696,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -1722,11 +1717,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1736,47 +1731,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1784,30 +1779,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1817,20 +1812,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1840,17 +1835,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -1858,16 +1853,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -1877,11 +1874,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1891,47 +1888,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -1939,30 +1936,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1972,20 +1969,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1995,17 +1992,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -2013,16 +2010,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -2032,11 +2031,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2046,47 +2045,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2094,30 +2093,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2127,20 +2126,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2150,17 +2149,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -2168,16 +2167,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -2187,11 +2188,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2201,47 +2202,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2249,30 +2250,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2282,20 +2283,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2305,17 +2306,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -2323,16 +2324,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -2342,11 +2345,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2356,47 +2359,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2404,30 +2407,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2437,20 +2440,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2460,17 +2463,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -2478,16 +2481,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -2497,11 +2502,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2511,47 +2516,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2559,30 +2564,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2592,20 +2597,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2615,17 +2620,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -2633,16 +2638,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -2652,11 +2659,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2666,47 +2673,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2714,30 +2721,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2747,20 +2754,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2770,17 +2777,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -2788,16 +2795,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -2807,11 +2816,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2821,47 +2830,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -2869,30 +2878,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2902,20 +2911,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2925,17 +2934,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -2943,16 +2952,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -2962,11 +2973,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2976,47 +2987,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3024,30 +3035,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3057,20 +3068,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3080,17 +3091,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -3098,16 +3109,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -3117,11 +3130,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3131,47 +3144,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3179,30 +3192,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3212,20 +3225,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3235,17 +3248,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -3253,16 +3266,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -3272,11 +3287,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3286,47 +3301,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -3363,8 +3378,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", // кроме случая В(n) = "Условие" (или ""). @@ -3382,12 +3397,10 @@ // "Склады","Т.СкладПолучатель",")", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -3399,7 +3412,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -3407,71 +3420,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -3486,30 +3499,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -3524,30 +3537,30 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3557,20 +3570,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3580,17 +3593,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -3598,16 +3611,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -3617,11 +3632,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3631,51 +3646,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3683,30 +3698,30 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3716,20 +3731,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3739,17 +3754,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -3757,16 +3772,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -3776,11 +3793,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3790,51 +3807,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3842,30 +3859,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3875,20 +3892,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3898,17 +3915,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -3916,16 +3933,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -3935,11 +3954,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3949,51 +3968,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4001,30 +4020,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4034,20 +4053,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4057,17 +4076,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -4075,16 +4094,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -4094,11 +4115,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4108,51 +4129,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4160,30 +4181,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4193,20 +4214,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4216,17 +4237,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -4234,16 +4255,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -4253,11 +4276,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4267,51 +4290,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4319,30 +4342,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4352,20 +4375,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4375,17 +4398,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -4393,16 +4416,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -4412,11 +4437,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4426,51 +4451,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4478,30 +4503,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4511,20 +4536,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4534,17 +4559,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -4552,16 +4577,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -4571,11 +4598,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4585,51 +4612,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4637,30 +4664,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4670,20 +4697,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4693,17 +4720,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -4711,16 +4738,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -4730,11 +4759,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4744,51 +4773,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4796,30 +4825,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4829,20 +4858,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4852,17 +4881,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -4870,16 +4899,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -4889,11 +4920,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4903,51 +4934,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4955,30 +4986,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4988,20 +5019,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5011,17 +5042,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -5029,16 +5060,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -5048,11 +5081,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5062,51 +5095,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5114,30 +5147,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5147,20 +5180,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5170,17 +5203,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -5188,16 +5221,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -5207,11 +5242,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5221,51 +5256,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5273,30 +5308,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5306,20 +5341,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5329,17 +5364,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -5347,16 +5382,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -5366,11 +5403,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5380,51 +5417,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5432,30 +5469,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5465,20 +5502,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5488,17 +5525,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -5506,16 +5543,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -5525,11 +5564,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5539,51 +5578,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5591,30 +5630,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5624,20 +5663,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5647,17 +5686,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -5665,16 +5704,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -5684,11 +5725,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5698,51 +5739,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5750,30 +5791,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5783,20 +5824,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5806,17 +5847,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -5824,16 +5865,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -5843,11 +5886,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5857,51 +5900,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5909,30 +5952,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5942,20 +5985,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5965,17 +6008,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -5983,16 +6026,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -6002,11 +6047,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6016,51 +6061,51 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 23f8b7251..1e8343407 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -718,17 +718,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -1004,17 +993,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1346,7 +1324,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1389,17 +1367,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1544,7 +1511,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1917,50 +1884,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2489,17 +2412,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3369,17 +3281,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3446,94 +3347,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3622,17 +3435,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4183,17 +3985,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4788,28 +4579,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5217,17 +4986,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5459,17 +5217,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6471,17 +6218,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6977,17 +6713,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -7011,7 +6736,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7329,17 +7054,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7406,94 +7120,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7516,17 +7142,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7637,17 +7252,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7803,7 +7407,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7956,17 +7560,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8624,7 +8217,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -9030,17 +8623,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -9119,7 +8701,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9536,17 +9118,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10764,17 +10335,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10940,17 +10500,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -12113,17 +11662,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -12191,7 +11729,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12487,17 +12025,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14283,17 +13810,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14657,17 +14173,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15317,17 +14822,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15736,7 +15230,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15933,17 +15427,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -16241,17 +15724,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии @@ -16739,8 +16211,8 @@ // можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но @@ -16753,12 +16225,10 @@ // "Поставщики","Контрагент", "","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -16770,7 +16240,7 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -16778,71 +16248,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(4)" = "" И "#Параметр(5)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(8)" = "" И "#Параметр(9)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) И ("#Параметр(10)" = "" И "#Параметр(11)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(14)" = "" И "#Параметр(15)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) И ("#Параметр(16)" = "" И "#Параметр(17)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(20)" = "" И "#Параметр(21)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) И ("#Параметр(22)" = "" И "#Параметр(23)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(26)" = "" И "#Параметр(27)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) И ("#Параметр(28)" = "" И "#Параметр(29)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(32)" = "" И "#Параметр(33)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) И ("#Параметр(34)" = "" И "#Параметр(35)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) ) #Тогда Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -16852,30 +16322,30 @@ Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -16888,30 +16358,30 @@ ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). //// Проверка значения поля группы параметров 1. -#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(5) ) -#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда - Т.#Параметр(5) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(5)) - #Если НЕ "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16921,20 +16391,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(5) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -16944,17 +16414,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(4)", ",") #Тогда НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" @@ -16962,16 +16432,18 @@ НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) @@ -16981,11 +16453,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -16995,80 +16467,80 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(5) #КонецЕсли - #Иначе // "Т.#Параметр(5)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(5)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли //// Проверка значения поля группы параметров 2. #Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - И Т.#Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17078,20 +16550,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17101,17 +16573,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -17119,16 +16591,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) @@ -17138,11 +16612,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17152,47 +16626,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(7) #КонецЕсли - #Иначе // "Т.#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17200,30 +16674,30 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(9) ) -#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда - И Т.#Параметр(9) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(9)) - #Если НЕ "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17233,20 +16707,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(9) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17256,17 +16730,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(8)", ",") #Тогда НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" @@ -17274,16 +16748,18 @@ НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) @@ -17293,11 +16769,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17307,47 +16783,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(9) #КонецЕсли - #Иначе // "Т.#Параметр(9)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(9)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17355,30 +16831,30 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(11) ) -#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда - И Т.#Параметр(11) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(11)) - #Если НЕ "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17388,20 +16864,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(11) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17411,17 +16887,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(10)", ",") #Тогда НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" @@ -17429,16 +16905,18 @@ НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) @@ -17448,11 +16926,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17462,47 +16940,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(11) #КонецЕсли - #Иначе // "Т.#Параметр(11)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(11)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17510,30 +16988,30 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - И Т.#Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17543,20 +17021,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17566,17 +17044,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -17584,16 +17062,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) @@ -17603,11 +17083,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17617,47 +17097,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(13) #КонецЕсли - #Иначе // "Т.#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17665,30 +17145,30 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(15) ) -#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда - И Т.#Параметр(15) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(15)) - #Если НЕ "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17698,20 +17178,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(15) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17721,17 +17201,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(14)", ",") #Тогда НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" @@ -17739,16 +17219,18 @@ НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) @@ -17758,11 +17240,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17772,47 +17254,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(15) #КонецЕсли - #Иначе // "Т.#Параметр(15)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(15)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17820,30 +17302,30 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(17) ) -#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда - И Т.#Параметр(17) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(17)) - #Если НЕ "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17853,20 +17335,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(17) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -17876,17 +17358,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(16)", ",") #Тогда НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" @@ -17894,16 +17376,18 @@ НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) @@ -17913,11 +17397,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -17927,47 +17411,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(17) #КонецЕсли - #Иначе // "Т.#Параметр(17)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(17)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -17975,30 +17459,30 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - И Т.#Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18008,20 +17492,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18031,17 +17515,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -18049,16 +17533,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) @@ -18068,11 +17554,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18082,47 +17568,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(19) #КонецЕсли - #Иначе // "Т.#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18130,30 +17616,30 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(21) ) -#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда - И Т.#Параметр(21) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(21)) - #Если НЕ "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18163,20 +17649,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(21) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18186,17 +17672,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(20)", ",") #Тогда НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" @@ -18204,16 +17690,18 @@ НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) @@ -18223,11 +17711,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18237,47 +17725,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(21) #КонецЕсли - #Иначе // "Т.#Параметр(21)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(21)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18285,30 +17773,30 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(23) ) -#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда - И Т.#Параметр(23) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(23)) - #Если НЕ "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18318,20 +17806,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(23) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18341,17 +17829,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(22)", ",") #Тогда НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" @@ -18359,16 +17847,18 @@ НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) @@ -18378,11 +17868,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18392,47 +17882,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(23) #КонецЕсли - #Иначе // "Т.#Параметр(23)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(23)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18440,30 +17930,30 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - И Т.#Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18473,20 +17963,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18496,17 +17986,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -18514,16 +18004,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) @@ -18533,11 +18025,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18547,47 +18039,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(25) #КонецЕсли - #Иначе // "Т.#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18595,30 +18087,30 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(27) ) -#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда - И Т.#Параметр(27) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(27)) - #Если НЕ "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18628,20 +18120,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(27) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18651,17 +18143,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(26)", ",") #Тогда НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" @@ -18669,16 +18161,18 @@ НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) @@ -18688,11 +18182,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18702,47 +18196,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(27) #КонецЕсли - #Иначе // "Т.#Параметр(27)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(27)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18750,30 +18244,30 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(29) ) -#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда - И Т.#Параметр(29) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(29)) - #Если НЕ "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18783,20 +18277,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(29) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18806,17 +18300,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(28)", ",") #Тогда НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" @@ -18824,16 +18318,18 @@ НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) @@ -18843,11 +18339,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -18857,47 +18353,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(29) #КонецЕсли - #Иначе // "Т.#Параметр(29)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(29)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -18905,30 +18401,30 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - И Т.#Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18938,20 +18434,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -18961,17 +18457,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -18979,16 +18475,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) @@ -18998,11 +18496,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19012,47 +18510,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(31) #КонецЕсли - #Иначе // "Т.#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -19060,30 +18558,30 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(33) ) -#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда - И Т.#Параметр(33) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(33)) - #Если НЕ "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19093,20 +18591,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(33) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19116,17 +18614,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(32)", ",") #Тогда НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" @@ -19134,16 +18632,18 @@ НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) @@ -19153,11 +18653,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19167,47 +18667,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(33) #КонецЕсли - #Иначе // "Т.#Параметр(33)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(33)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли @@ -19215,30 +18715,30 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. И ( #Параметр(35) ) -#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда - И Т.#Параметр(35) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(Т.#Параметр(35)) - #Если НЕ "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда И ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19248,20 +18748,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = Т.#Параметр(35) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -19271,17 +18771,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(34)", ",") #Тогда НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" @@ -19289,16 +18789,18 @@ НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда И ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) @@ -19308,11 +18810,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -19322,47 +18824,47 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = Т.#Параметр(35) #КонецЕсли - #Иначе // "Т.#Параметр(35)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(Т.#Параметр(35)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #КонецЕсли diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index df3191919..59415a4fc 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -184,9 +184,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -214,12 +214,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -231,10 +229,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -242,71 +240,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -317,34 +315,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -359,33 +357,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -393,14 +391,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -408,22 +406,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -433,20 +431,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -456,250 +454,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -707,21 +717,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -729,38 +739,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -770,20 +780,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -793,17 +803,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -811,16 +821,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -830,11 +842,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -844,52 +856,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -897,33 +909,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -931,14 +943,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -946,22 +958,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -971,20 +983,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -994,250 +1006,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1245,21 +1269,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1267,38 +1291,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1308,20 +1332,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1331,17 +1355,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -1349,16 +1373,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -1368,11 +1394,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1382,52 +1408,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1435,33 +1461,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -1469,14 +1495,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -1484,22 +1510,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1509,20 +1535,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1532,250 +1558,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1783,21 +1821,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1805,38 +1843,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1846,20 +1884,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1869,17 +1907,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1887,16 +1925,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -1906,11 +1946,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1920,52 +1960,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1973,33 +2013,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -2007,14 +2047,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -2022,22 +2062,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2047,20 +2087,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2070,250 +2110,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2321,21 +2373,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2343,38 +2395,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2384,20 +2436,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2407,17 +2459,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -2425,16 +2477,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -2444,11 +2498,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2458,52 +2512,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2511,33 +2565,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -2545,14 +2599,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -2560,22 +2614,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2585,20 +2639,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2608,250 +2662,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2859,21 +2925,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2881,38 +2947,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2922,20 +2988,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2945,17 +3011,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -2963,16 +3029,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -2982,11 +3050,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2996,52 +3064,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3049,33 +3117,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3083,14 +3151,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -3098,22 +3166,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3123,20 +3191,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3146,250 +3214,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3397,21 +3477,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3419,38 +3499,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3460,20 +3540,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3483,17 +3563,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -3501,16 +3581,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -3520,11 +3602,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3534,52 +3616,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3587,33 +3669,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3621,14 +3703,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -3636,22 +3718,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3661,20 +3743,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3684,250 +3766,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3935,21 +4029,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3957,38 +4051,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3998,20 +4092,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4021,17 +4115,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -4039,16 +4133,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -4058,11 +4154,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4072,52 +4168,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4125,33 +4221,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4159,14 +4255,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -4174,22 +4270,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4199,20 +4295,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4222,250 +4318,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4473,21 +4581,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4495,38 +4603,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4536,20 +4644,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4559,17 +4667,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -4577,16 +4685,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -4596,11 +4706,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4610,52 +4720,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4663,33 +4773,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4697,14 +4807,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -4712,22 +4822,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4737,20 +4847,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4760,250 +4870,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5011,21 +5133,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5033,38 +5155,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5074,20 +5196,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5097,17 +5219,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -5115,16 +5237,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -5134,11 +5258,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5148,52 +5272,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5201,33 +5325,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5235,14 +5359,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -5250,22 +5374,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5275,20 +5399,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5298,250 +5422,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5549,21 +5685,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5571,38 +5707,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5612,20 +5748,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5635,17 +5771,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -5653,16 +5789,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -5672,11 +5810,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5686,52 +5824,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5739,33 +5877,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5773,14 +5911,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -5788,22 +5926,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5813,20 +5951,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5836,250 +5974,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6087,21 +6237,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6109,38 +6259,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6150,20 +6300,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6173,17 +6323,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -6191,16 +6341,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -6210,11 +6362,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6224,52 +6376,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6277,33 +6429,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6311,14 +6463,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -6326,22 +6478,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6351,20 +6503,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6374,250 +6526,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6625,21 +6789,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6647,38 +6811,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6688,20 +6852,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6711,17 +6875,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -6729,16 +6893,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -6748,11 +6914,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6762,52 +6928,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6815,33 +6981,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6849,14 +7015,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -6864,22 +7030,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6889,20 +7055,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6912,250 +7078,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7163,21 +7341,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7185,38 +7363,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7226,20 +7404,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7249,17 +7427,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -7267,16 +7445,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -7286,11 +7466,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7300,52 +7480,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7353,33 +7533,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7387,14 +7567,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -7402,22 +7582,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7427,20 +7607,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7450,250 +7630,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7701,21 +7893,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7723,38 +7915,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7764,20 +7956,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7787,17 +7979,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -7805,16 +7997,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -7824,11 +8018,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7838,52 +8032,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7891,33 +8085,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7925,14 +8119,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -7940,22 +8134,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7965,20 +8159,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7988,250 +8182,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8239,21 +8445,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8261,38 +8467,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8302,20 +8508,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8325,17 +8531,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -8343,16 +8549,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -8362,11 +8570,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8376,52 +8584,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8429,33 +8637,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8463,14 +8671,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -8478,22 +8686,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8503,20 +8711,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8526,250 +8734,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8777,21 +8997,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8799,38 +9019,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8840,20 +9060,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8863,17 +9083,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -8881,16 +9101,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -8900,11 +9122,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8914,52 +9136,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index 557e4c2b0..68a291954 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -168,9 +168,9 @@ // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Объект", "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" // можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// Когда В(n) = "Условие" (или ""), Тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", -// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" ИЛИ "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "Объект" (или " "), то @@ -198,12 +198,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Право. -#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ - "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление" ИЛИ "#Параметр(2)" = "") - ИЛИ "#Параметр(2)" = "Чтение" И #ИмяТекущегоПраваДоступа <> "Чтение" - ИЛИ "#Параметр(2)" = "Изменение" И #ИмяТекущегоПраваДоступа <> "Изменение" - ИЛИ "#Параметр(2)" = "Добавление" И #ИмяТекущегоПраваДоступа <> "Добавление" - ИЛИ "#Параметр(2)" = "Удаление" И #ИмяТекущегоПраваДоступа <> "Удаление" #Тогда +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли @@ -215,10 +213,10 @@ #КонецЕсли // Проверка правильности параметра Модификатор. -#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" - ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" - ИЛИ "#Параметр(3)" = "") #Тогда +#Если Не ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + Или "#Параметр(3)" = "РасширенноеИЛИ" + Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -226,71 +224,71 @@ // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если &ОграничиватьДоступНаУровнеЗаписей - И НЕ (Истина + И Не (Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - ИЛИ &ВидыДоступаСОтключеннымИспользованием = "Все" - И НЕ СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - ИЛИ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). @@ -301,34 +299,34 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли -Истина В +ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И Истина В + И ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И ТаблицыГруппДоступа.Изменение #КонецЕсли ) И ГруппыДоступа.Ссылка В ( - Выбрать + ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи @@ -343,33 +341,33 @@ #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) - #Если НЕ "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда +#ИначеЕсли "#Параметр(6)" = "Объект" Или "#Параметр(6)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -377,14 +375,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) ) #КонецЕсли @@ -392,22 +390,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(7)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -417,20 +415,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -440,250 +438,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(7) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -691,21 +701,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -713,38 +723,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -754,20 +764,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -777,17 +787,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" @@ -795,16 +805,18 @@ НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) @@ -814,11 +826,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -828,52 +840,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли - #Иначе // "#Параметр(7)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -881,33 +893,33 @@ //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) - #Если НЕ "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда +#ИначеЕсли "#Параметр(9)" = "Объект" Или "#Параметр(9)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -915,14 +927,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) ) #КонецЕсли @@ -930,22 +942,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(10)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -955,20 +967,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -978,250 +990,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(10) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1229,21 +1253,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1251,38 +1275,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1292,20 +1316,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1315,17 +1339,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" @@ -1333,16 +1357,18 @@ НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) @@ -1352,11 +1378,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1366,52 +1392,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли - #Иначе // "#Параметр(10)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1419,33 +1445,33 @@ //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) - #Если НЕ "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда +#ИначеЕсли "#Параметр(12)" = "Объект" Или "#Параметр(12)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -1453,14 +1479,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) ) #КонецЕсли @@ -1468,22 +1494,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(13)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(13)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1493,20 +1519,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1516,250 +1542,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(13) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1767,21 +1805,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1789,38 +1827,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1830,20 +1868,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -1853,17 +1891,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(12)", ",") #Тогда НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" @@ -1871,16 +1909,18 @@ НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) @@ -1890,11 +1930,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -1904,52 +1944,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(13) #КонецЕсли - #Иначе // "#Параметр(13)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -1957,33 +1997,33 @@ //// Проверка значения поля группы параметров 4. #Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) - #Если НЕ "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда +#ИначеЕсли "#Параметр(15)" = "Объект" Или "#Параметр(15)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -1991,14 +2031,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) ) #КонецЕсли @@ -2006,22 +2046,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(16)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(16)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2031,20 +2071,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2054,250 +2094,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(16) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2305,21 +2357,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2327,38 +2379,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2368,20 +2420,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(16) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2391,17 +2443,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(15)", ",") #Тогда НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" @@ -2409,16 +2461,18 @@ НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) @@ -2428,11 +2482,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2442,52 +2496,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(16) #КонецЕсли - #Иначе // "#Параметр(16)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -2495,33 +2549,33 @@ //// Проверка значения поля группы параметров 5. #Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) - #Если НЕ "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда +#ИначеЕсли "#Параметр(18)" = "Объект" Или "#Параметр(18)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -2529,14 +2583,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) ) #КонецЕсли @@ -2544,22 +2598,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(19)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(19)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2569,20 +2623,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2592,250 +2646,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(19) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2843,21 +2909,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2865,38 +2931,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2906,20 +2972,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(19) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -2929,17 +2995,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(18)", ",") #Тогда НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" @@ -2947,16 +3013,18 @@ НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) @@ -2966,11 +3034,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -2980,52 +3048,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(19) #КонецЕсли - #Иначе // "#Параметр(19)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3033,33 +3101,33 @@ //// Проверка значения поля группы параметров 6. #Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) - #Если НЕ "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда +#ИначеЕсли "#Параметр(21)" = "Объект" Или "#Параметр(21)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3067,14 +3135,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) ) #КонецЕсли @@ -3082,22 +3150,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(22)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(22)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3107,20 +3175,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3130,250 +3198,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(22) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3381,21 +3461,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3403,38 +3483,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3444,20 +3524,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(22) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3467,17 +3547,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(21)", ",") #Тогда НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" @@ -3485,16 +3565,18 @@ НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) @@ -3504,11 +3586,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -3518,52 +3600,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(22) #КонецЕсли - #Иначе // "#Параметр(22)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -3571,33 +3653,33 @@ //// Проверка значения поля группы параметров 7. #Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) - #Если НЕ "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда +#ИначеЕсли "#Параметр(24)" = "Объект" Или "#Параметр(24)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -3605,14 +3687,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) ) #КонецЕсли @@ -3620,22 +3702,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(25)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(25)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3645,20 +3727,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3668,250 +3750,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(25) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3919,21 +4013,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3941,38 +4035,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -3982,20 +4076,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(25) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4005,17 +4099,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(24)", ",") #Тогда НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" @@ -4023,16 +4117,18 @@ НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) @@ -4042,11 +4138,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4056,52 +4152,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(25) #КонецЕсли - #Иначе // "#Параметр(25)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4109,33 +4205,33 @@ //// Проверка значения поля группы параметров 8. #Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) - #Если НЕ "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда +#ИначеЕсли "#Параметр(27)" = "Объект" Или "#Параметр(27)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4143,14 +4239,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) ) #КонецЕсли @@ -4158,22 +4254,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(28)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(28)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4183,20 +4279,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4206,250 +4302,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(28) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4457,21 +4565,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4479,38 +4587,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4520,20 +4628,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(28) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4543,17 +4651,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(27)", ",") #Тогда НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" @@ -4561,16 +4669,18 @@ НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) @@ -4580,11 +4690,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -4594,52 +4704,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(28) #КонецЕсли - #Иначе // "#Параметр(28)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -4647,33 +4757,33 @@ //// Проверка значения поля группы параметров 9. #Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) - #Если НЕ "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда +#ИначеЕсли "#Параметр(30)" = "Объект" Или "#Параметр(30)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -4681,14 +4791,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) ) #КонецЕсли @@ -4696,22 +4806,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(31)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(31)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4721,20 +4831,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4744,250 +4854,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(31) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -4995,21 +5117,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5017,38 +5139,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5058,20 +5180,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(31) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5081,17 +5203,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(30)", ",") #Тогда НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" @@ -5099,16 +5221,18 @@ НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) @@ -5118,11 +5242,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5132,52 +5256,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(31) #КонецЕсли - #Иначе // "#Параметр(31)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5185,33 +5309,33 @@ //// Проверка значения поля группы параметров 10. #Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) - #Если НЕ "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда +#ИначеЕсли "#Параметр(33)" = "Объект" Или "#Параметр(33)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5219,14 +5343,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) ) #КонецЕсли @@ -5234,22 +5358,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(34)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(34)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5259,20 +5383,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5282,250 +5406,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(34) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5533,21 +5669,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5555,38 +5691,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5596,20 +5732,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(34) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5619,17 +5755,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(33)", ",") #Тогда НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" @@ -5637,16 +5773,18 @@ НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) @@ -5656,11 +5794,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -5670,52 +5808,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(34) #КонецЕсли - #Иначе // "#Параметр(34)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -5723,33 +5861,33 @@ //// Проверка значения поля группы параметров 11. #Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) - #Если НЕ "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда +#ИначеЕсли "#Параметр(36)" = "Объект" Или "#Параметр(36)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -5757,14 +5895,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) ) #КонецЕсли @@ -5772,22 +5910,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(37)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(37)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5797,20 +5935,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -5820,250 +5958,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(37) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6071,21 +6221,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6093,38 +6243,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6134,20 +6284,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(37) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6157,17 +6307,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(36)", ",") #Тогда НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" @@ -6175,16 +6325,18 @@ НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) @@ -6194,11 +6346,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6208,52 +6360,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(37) #КонецЕсли - #Иначе // "#Параметр(37)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6261,33 +6413,33 @@ //// Проверка значения поля группы параметров 12. #Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) - #Если НЕ "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда +#ИначеЕсли "#Параметр(39)" = "Объект" Или "#Параметр(39)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6295,14 +6447,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) ) #КонецЕсли @@ -6310,22 +6462,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(40)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(40)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6335,20 +6487,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6358,250 +6510,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(40) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6609,21 +6773,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6631,38 +6795,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6672,20 +6836,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(40) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6695,17 +6859,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(39)", ",") #Тогда НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" @@ -6713,16 +6877,18 @@ НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) @@ -6732,11 +6898,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -6746,52 +6912,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(40) #КонецЕсли - #Иначе // "#Параметр(40)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -6799,33 +6965,33 @@ //// Проверка значения поля группы параметров 13. #Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) - #Если НЕ "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда +#ИначеЕсли "#Параметр(42)" = "Объект" Или "#Параметр(42)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -6833,14 +6999,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) ) #КонецЕсли @@ -6848,22 +7014,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(43)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(43)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6873,20 +7039,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -6896,250 +7062,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(43) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7147,21 +7325,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7169,38 +7347,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7210,20 +7388,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(43) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7233,17 +7411,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(42)", ",") #Тогда НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" @@ -7251,16 +7429,18 @@ НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) @@ -7270,11 +7450,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7284,52 +7464,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(43) #КонецЕсли - #Иначе // "#Параметр(43)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7337,33 +7517,33 @@ //// Проверка значения поля группы параметров 14. #Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) - #Если НЕ "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда +#ИначеЕсли "#Параметр(45)" = "Объект" Или "#Параметр(45)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7371,14 +7551,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) ) #КонецЕсли @@ -7386,22 +7566,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(46)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(46)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7411,20 +7591,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7434,250 +7614,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(46) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7685,21 +7877,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7707,38 +7899,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7748,20 +7940,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(46) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7771,17 +7963,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(45)", ",") #Тогда НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" @@ -7789,16 +7981,18 @@ НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) @@ -7808,11 +8002,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -7822,52 +8016,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(46) #КонецЕсли - #Иначе // "#Параметр(46)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -7875,33 +8069,33 @@ //// Проверка значения поля группы параметров 15. #Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) - #Если НЕ "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда +#ИначеЕсли "#Параметр(48)" = "Объект" Или "#Параметр(48)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -7909,14 +8103,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) ) #КонецЕсли @@ -7924,22 +8118,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(49)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(49)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7949,20 +8143,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -7972,250 +8166,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(49) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8223,21 +8429,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8245,38 +8451,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8286,20 +8492,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(49) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8309,17 +8515,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(48)", ",") #Тогда НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" @@ -8327,16 +8533,18 @@ НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) @@ -8346,11 +8554,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8360,52 +8568,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(49) #КонецЕсли - #Иначе // "#Параметр(49)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. @@ -8413,33 +8621,33 @@ //// Проверка значения поля группы параметров 16. #Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> Неопределено - И Истина В +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) - #Если НЕ "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) -#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда +#ИначеЕсли "#Параметр(51)" = "Объект" Или "#Параметр(51)" = " " #Тогда ( // Проверка права объекта ведущей таблицы (зависимость по правам) ( - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта ГДЕ ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Проверка ведущего права для права Чтение // Право Чтение может зависеть только от права Чтение @@ -8447,14 +8655,14 @@ // Проверка ведущего права для права Изменение // Право Изменение может зависеть от ведущих прав Чтение, Изменение И НЕ - ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = Ложь - И НЕ Истина В + ( ТаблицыГруппДоступаПроверкаПраваОбъекта.Изменение = ЛОЖЬ + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) ) #КонецЕсли @@ -8462,22 +8670,22 @@ ) // Проверка ограничения права объекта ведущей таблицы И - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Выбор Когда Истина В + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ВЫБОР КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы ГДЕ - ТипЗначения(Идентификаторы.ЗначениеПустойСсылки) = ТипЗначения(#Параметр(52)) + ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#Параметр(52)) И Идентификаторы.ЗначениеПустойСсылки В (&ТипыВладельцевНастроекПрав) ) - Тогда + ТОГДА ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8487,20 +8695,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8510,250 +8718,262 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) - Иначе + ИНАЧЕ #КонецЕсли - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда НЕ ( - Истина В // Не все проверки отключены. + ИСТИНА В // Не все проверки отключены. ( - Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора с не отключенной проверкой. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - Истина В // Не все проверки текущего набора отключены. + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) ) И НЕ #Иначе ( #КонецЕсли - Истина В + ИСТИНА В ( - Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - И НомераНаборов.Чтение = Истина + И НомераНаборов.Чтение = ИСТИНА #Иначе // Право Изменение может зависеть от ведущих прав Чтение, Изменение - И Выбор - Когда Истина В + И ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа ГДЕ ЗависимостиПравДоступа.ПодчиненнаяТаблица = СвойстваТекущейТаблицы.Ссылка - И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ТИПЗНАЧЕНИЯ(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) ) - Тогда НомераНаборов.Чтение - Иначе НомераНаборов.Изменение - Конец + ТОГДА НомераНаборов.Чтение + ИНАЧЕ НомераНаборов.Изменение + КОНЕЦ #КонецЕсли И - #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда - Истина В // Не все проверки текущего набора отключены. + #Если "#Параметр(3)" = "РасширенноеИЛИ" Или "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + ИСТИНА В // Не все проверки текущего набора отключены. ( - Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Выбор первой не отключенной проверки текущего набора. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора - И НЕ Истина В + И НЕ ИСТИНА В ( - Выбрать Первые 1 Истина // Поиск настроек ограничений доступа + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА // Поиск настроек ограничений доступа ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЗначенияПоУмолчанию.БезНастройки = Истина + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЗначенияПоУмолчанию.БезНастройки = ИСТИНА ) ) И #КонецЕсли - НЕ Ложь В // Все проверки успешны. + НЕ ЛОЖЬ В // Все проверки успешны. ( - Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ НаборыЗначений.Объект = #Параметр(52) И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - Выбор + ВЫБОР #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда #Если НЕ &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Когда НаборыЗначений.ЗначениеБезГрупп - Тогда - Истина В + КОГДА НаборыЗначений.ЗначениеБезГрупп + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - Когда НаборыЗначений.СтандартноеЗначение + КОГДА НаборыЗначений.СтандартноеЗначение #Иначе - Когда - Истина В + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ - ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) ) #КонецЕсли #Если &ВидыДоступаСОтключеннымИспользованием = "Все" #Тогда - Тогда - Истина + ТОГДА + ИСТИНА #Иначе - Тогда - Выбор - #Если НЕ #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - Когда - НЕ Истина В + ТОГДА + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ВЫБОР + #КонецЕсли + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + КОГДА + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыСсылок ГДЕ - ТипЗначения(ТипыСсылок.ЗначениеПустойСсылки) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ТИПЗНАЧЕНИЯ(ТипыСсылок.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) И ТипыСсылок.ЗначениеПустойСсылки В (&ТипыЗначенийДоступаСГруппами) ) - Тогда - Истина В + ТОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) - И ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) + И ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) #КонецЕсли - #Если НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") - ИЛИ НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда - Когда - Истина В + #Если Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОГДА + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) - Тогда - Истина + ТОГДА + ИСТИНА #КонецЕсли - Иначе - Истина В + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + ИНАЧЕ + #КонецЕсли + ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа И ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) - Левое Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК Значения ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа ГДЕ - ЕстьNull(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) + ЕСТЬNULL(Значения.ЗначениеРазрешено, ЗначенияПоУмолчанию.ВсеРазрешены) ) - Конец + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") + Или Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") #Тогда + КОНЕЦ + #КонецЕсли #КонецЕсли // Проверка заведомого ложного или истинного однострочного набора значений. - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - Тогда Истина - Когда НаборыЗначений.ЗначениеДоступа = Значение(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - Тогда Ложь + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) + ТОГДА ИСТИНА + КОГДА НаборыЗначений.ЗначениеДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) + ТОГДА ЛОЖЬ // Проверка права доступа пользователя к таблице ЗначенияДоступа. - Когда ТипЗначения(НаборыЗначений.ЗначениеДоступа) = Тип(Справочник.ИдентификаторыОбъектовМетаданных) + КОГДА ТИПЗНАЧЕНИЯ(НаборыЗначений.ЗначениеДоступа) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда // Право Чтение может зависеть только от права Чтение - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа ) #Иначе - Тогда Истина В - ( Выбрать Первые 1 Истина + ТОГДА ИСТИНА В + ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект ГДЕ ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Таблица = НаборыЗначений.ЗначениеДоступа - И НЕ(НаборыЗначений.Уточнение <> Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Ложь) + И НЕ(НаборыЗначений.Уточнение <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = ЛОЖЬ) ) #КонецЕсли - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Иначе + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + ИНАЧЕ ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8761,21 +8981,21 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = НаборыЗначений.ЗначениеДоступа И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8783,38 +9003,38 @@ И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - И НастройкиПрав.Таблица = Выбор - Когда НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) - Тогда НаборыЗначений.Уточнение - Иначе Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) Конец + И НастройкиПрав.Таблица = ВЫБОР + КОГДА НаборыЗначений.Уточнение В (&ИдентификаторыТаблицСОтдельнымиНастройкамиПрав) + ТОГДА НаборыЗначений.Уточнение + ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КОНЕЦ #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #Иначе - Иначе - Ложь + ИНАЧЕ + ЛОЖЬ #КонецЕсли - Конец - ) // НЕ Ложь В + КОНЕЦ + ) // НЕ ЛОЖЬ В ) ) - #Если НЕ &ТипыВладельцевНастроекПрав = "" #Тогда - Конец + #Если Не &ТипыВладельцевНастроекПрав = "" #Тогда + КОНЕЦ #КонецЕсли ) #ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда ( - Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8824,20 +9044,20 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) - И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( - Выбрать Первые 1 Ложь + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - Внутреннее Соединение РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(52) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель @@ -8847,17 +9067,17 @@ #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе - И НастройкиПрав.Таблица = Значение(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли - Внутреннее Соединение РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) -#ИначеЕсли НЕ СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(51)", ",") #Тогда НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" @@ -8865,16 +9085,18 @@ НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда ( - #Если (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - ИЛИ (НЕ СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда НЕ ( - НЕ Истина В + НЕ ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) @@ -8884,11 +9106,11 @@ #Иначе ( #КонецЕсли - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка @@ -8898,52 +9120,52 @@ // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(52) #КонецЕсли - #Иначе // "#Параметр(52)" <> "Т.Ссылка" - Выбрать Первые 1 Истина + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) #КонецЕсли ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ = - Выбор - Когда Истина В + ВЫБОР + КОГДА ИСТИНА В ( - Выбрать Первые 1 Истина + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТипЗначения(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТипЗначения(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = Ложь + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) - Тогда Истина - Иначе Ложь - Конец + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ ) ) #Иначе - Истина + ИСТИНА #КонецЕсли #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. diff --git a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights index 63f9d54de..e9c301de7 100644 --- a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights @@ -701,17 +701,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера - - View - false - - - Edit - false - - BusinessProcess.Задание.Attribute.Выполнено @@ -982,17 +971,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение @@ -1303,7 +1281,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения View false @@ -1342,17 +1320,6 @@ false - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - View - false - - - Edit - false - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType @@ -1497,7 +1464,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке View false @@ -1854,50 +1821,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 - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение @@ -2422,17 +2345,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление @@ -3282,17 +3194,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3351,94 +3252,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.ОбновлениеКонфигурации.Attribute.РезультатОбновления @@ -3527,17 +3340,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа @@ -4067,17 +3869,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Номер - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 @@ -4663,28 +4454,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим @@ -5088,17 +4857,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель @@ -5330,17 +5088,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Серия - - View - false - - - Edit - false - - Document.Встреча.Attribute.Ответственный @@ -6330,17 +6077,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу @@ -6824,17 +6560,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток @@ -6858,7 +6583,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты View false @@ -7176,17 +6901,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -7249,94 +6963,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 - - Catalog.Файлы.TabularSection.СертификатыШифрования @@ -7359,17 +6985,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера - - View - false - - - Edit - false - - Document.Встреча.Attribute.МестоПроведенияВстречи @@ -7480,17 +7095,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.Представление - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -7641,7 +7245,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты View false @@ -7790,17 +7394,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт @@ -8450,7 +8043,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции View false @@ -8852,17 +8445,6 @@ false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления @@ -8937,7 +8519,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты View false @@ -9346,17 +8928,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ @@ -10555,17 +10126,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат @@ -10731,17 +10291,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 @@ -11903,17 +11452,6 @@ false - - Catalog.ФизическиеЛица.Attribute.Пол - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения @@ -11981,7 +11519,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты View false @@ -12273,17 +11811,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента - - View - false - - - Edit - false - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта @@ -14026,17 +13553,6 @@ false - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов @@ -14375,17 +13891,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации - - View - false - - - Edit - false - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен @@ -15046,17 +14551,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ - - View - false - - - Edit - false - - Document.Встреча.TabularSection.Участники @@ -15465,7 +14959,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты View false @@ -15658,17 +15152,6 @@ false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроизводитьУдаление - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован @@ -15966,17 +15449,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии diff --git a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights deleted file mode 100644 index 79d59af24..000000000 --- a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ /dev/null @@ -1,16648 +0,0 @@ - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь - - View - false - - - Edit - false - - - - Catalog.ФизическиеЛица.Attribute.ДатаРождения - - 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 - - - - 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 - - - - 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.ДокументыФизическихЛиц - - Read - true - - - View - true - - - - InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Active - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Recorder - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Period - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа2 - - 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.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность - - 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 - - - - 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 - - - - 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 - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Содержание - - View - false - - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо - - 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.ФизическиеЛица - - Read - true - - - View - true - - - InputByString - true - - - - 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 - - - - 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 - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - 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 - - - - 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.Номер - - 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 - - - - InformationRegister.ДокументыФизическихЛиц.Command.ДокументыФизическогоЛица - - View - true - - - - 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.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ - - View - false - - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи - - 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 - - - - 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.Серия - - 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 - - - - 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 - - - - 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.КемВыдан - - Edit - false - - - - Catalog.ВерсииФайлов.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.Файлы.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 - - - - 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 - - - - 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 - - - - Catalog.Пользователи.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.СрокДействия - - 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 - - - - 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 - - - - 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.Представление - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.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.СтраныМира.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 - - - - 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 - - - - 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 - - - - InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.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 - - - - 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 - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - 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 - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.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.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.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 - - - - 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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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.КодПодразделения - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Предмет - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил - - 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 - - - - 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 - - - - 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 - - - - 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.Пол - - 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 - - - - 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.УдалитьВидДокумента - - 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.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - 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 - - - - 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 - - - - 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 - - - - Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации - - View - false - - - Edit - false - - - - Document.Анкета.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления - - View - false - - - Edit - false - - - - InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа3 - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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.АдресныйКлассификатор.Dimension.КодРайонаВКоде - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - Catalog.СтраныМира.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.ФайлыВРабочемКаталоге.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 - - - - 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 deleted file mode 100644 index 85040e737..000000000 --- a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/ЧтениеПерсональныхДанныхФизическихЛиц.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ЧтениеПерсональныхДанныхФизическихЛиц - - ru - Чтение персональных данных физических лиц - - diff --git a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights deleted file mode 100644 index 8921b4a95..000000000 --- a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights +++ /dev/null @@ -1,16698 +0,0 @@ - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа2 - - 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.ДокументыФизическихЛиц.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 - - - - 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 - - - - 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 - - - - 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.ФизическиеЛица - - Read - true - - - View - true - - - InputByString - true - - - - 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 - - - - 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 - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.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 - - - - Document.НазначениеОпросов.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.ПользовательскиеНастройкиДоступаКОбработкам.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 - - - - 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 - - - - Catalog.Пользователи.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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.СтраныМира.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 - - - - 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 - - - - 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 - - - - InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.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 - - - - 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 - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - 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 - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.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.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.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 - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.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 - - - - 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 - - - - 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 - - - - 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.УниверсальныйОбменДанными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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - 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 - - - - 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 - - - - 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 - - - - Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации - - View - false - - - Edit - false - - - - Document.Анкета.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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - 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 - - - - Catalog.СтраныМира.Attribute.КодАльфа3 - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.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 - - - - 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 - - - - 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.ОбновлениеКонфигурации.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 - - - - 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 - - - - 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 - - - - 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.АдресныйКлассификатор.Dimension.КодРайонаВКоде - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - Catalog.СтраныМира.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.ФайлыВРабочемКаталоге.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 - - - - 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 deleted file mode 100644 index a5c6f6d73..000000000 --- a/SSL/src/Roles/ЧтениеФизическихЛиц/ЧтениеФизическихЛиц.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ЧтениеФизическихЛиц - - ru - Чтение физических лиц - - diff --git a/SSL/src/ScheduledJobs/ОбновлениеАгрегатов/ОбновлениеАгрегатов.mdo b/SSL/src/ScheduledJobs/ОбновлениеАгрегатов/ОбновлениеАгрегатов.mdo index d5fbe6d3e..1d4fdf732 100644 --- a/SSL/src/ScheduledJobs/ОбновлениеАгрегатов/ОбновлениеАгрегатов.mdo +++ b/SSL/src/ScheduledJobs/ОбновлениеАгрегатов/ОбновлениеАгрегатов.mdo @@ -5,7 +5,7 @@ ru Обновление агрегатов - CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.ОбновлениеАгрегатов + CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.ОбновлениеАгрегатовОбработчикЗадания Обновление агрегатов ОбновлениеАгрегатов true diff --git a/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo b/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo index bdebee831..755a9e001 100644 --- a/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo +++ b/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo @@ -5,7 +5,7 @@ ru Обновление индекса ППД - CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППД + CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию Обновление индекса ППД true true diff --git a/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo index b4381d188..74b881f99 100644 --- a/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo +++ b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo @@ -5,7 +5,7 @@ ru Отложенное обновление ИБ - CommonModule.ОбновлениеИнформационнойБазы.ВыполнитьОтложенноеОбновление + CommonModule.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновление Отложенное обновление ИБ true diff --git a/SSL/src/ScheduledJobs/ПерестроениеАгрегатов/ПерестроениеАгрегатов.mdo b/SSL/src/ScheduledJobs/ПерестроениеАгрегатов/ПерестроениеАгрегатов.mdo index cf4cd87dd..4110bd342 100644 --- a/SSL/src/ScheduledJobs/ПерестроениеАгрегатов/ПерестроениеАгрегатов.mdo +++ b/SSL/src/ScheduledJobs/ПерестроениеАгрегатов/ПерестроениеАгрегатов.mdo @@ -5,7 +5,7 @@ ru Перестроение агрегатов - CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.ПерестроениеАгрегатов + CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.ПерестроениеАгрегатовОбработчикЗадания Перестроение агрегатов ПерестроениеАгрегатов true diff --git a/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo b/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo index fcb6ef473..3f42ed9b2 100644 --- a/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo +++ b/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo @@ -5,7 +5,7 @@ ru Слияние индекса ППД - CommonModule.ПолнотекстовыйПоискСервер.СлияниеИндексаППД + CommonModule.ПолнотекстовыйПоискСервер.СлияниеИндексаППДПоРасписанию Слияние индекса ППД true true diff --git a/SSL/src/ScheduledJobs/УстановкаПериодаРассчитанныхИтогов/УстановкаПериодаРассчитанныхИтогов.mdo b/SSL/src/ScheduledJobs/УстановкаПериодаРассчитанныхИтогов/УстановкаПериодаРассчитанныхИтогов.mdo index 455d0ab90..388438e9a 100644 --- a/SSL/src/ScheduledJobs/УстановкаПериодаРассчитанныхИтогов/УстановкаПериодаРассчитанныхИтогов.mdo +++ b/SSL/src/ScheduledJobs/УстановкаПериодаРассчитанныхИтогов/УстановкаПериодаРассчитанныхИтогов.mdo @@ -5,7 +5,7 @@ ru Установка периода рассчитанных итогов - CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.УстановкаПериодаРассчитанныхИтогов + CommonModule.УправлениеИтогамиИАгрегатамиСлужебный.УстановкаПериодаРассчитанныхИтоговОбработчикЗадания Установка периода рассчитанных итогов true true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca deleted file mode 100644 index f38ee5d1f..000000000 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - ДеревоВариантовОтчета - - - ДеревоВариантовОтчетаПредставление - - - ДеревоВариантовОтчетаАвтор - - - - - ДеревоВариантовОтчета.СкрытОтбором - Equal - true - - - - - Видимость - false - - - Отображать - false - - - - - - - ДеревоВариантовОтчетаПредставление - - - ДеревоВариантовОтчетаАвтор - - - - - ДеревоВариантовОтчета.АвторТекущийПользователь - Equal - true - - - - - ЦветТекста - style:МоиВариантыОтчетовЦвет - - - false - Видимость - false - - - false - Отображать - false - - - - diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html index 9a2a264a1..58d96632b 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 33076ea31..5f6d61acb 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -1,9 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -22,24 +22,6 @@ ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); - ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); - ГруппаДерева.НомерГруппы = 1; - ГруппаДерева.Наименование = НСтр("ru = 'Используемые'"); - ГруппаДерева.ИндексКартинки = 0; - ГруппаДерева.КартинкаАвтора = -1; - - ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); - ГруппаДерева.НомерГруппы = 2; - ГруппаДерева.Наименование = НСтр("ru = 'Не используемые'"); - ГруппаДерева.ИндексКартинки = 0; - ГруппаДерева.КартинкаАвтора = -1; - - ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); - ГруппаДерева.НомерГруппы = 3; - ГруппаДерева.Наименование = НСтр("ru = 'Помеченные на удаление'"); - ГруппаДерева.ИндексКартинки = 1; - ГруппаДерева.КартинкаАвтора = -1; - Если НЕ ПолныеПраваНаВарианты Тогда Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторов.Видимость = Ложь; Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторовКМ.Видимость = Ложь; @@ -68,8 +50,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборАвторПриИзменении(Элемент) @@ -84,8 +67,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоВариантовОтчета +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревовариантовотчета &НаКлиенте Процедура ДеревоВариантовОтчетаПриАктивизацииСтроки(Элемент) @@ -146,8 +130,9 @@ ВыбратьИЗакрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПоказыватьЛичныеВариантыОтчетовДругихАвторов(Команда) @@ -169,8 +154,25 @@ ЗаполнитьСписокВариантов(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ДеревоВариантовОтчета, ДеревоВариантовОтчетаПредставление, ДеревоВариантовОтчетаАвтор"; + Инструкция.Отборы.Вставить("ДеревоВариантовОтчета.СкрытОтбором", Истина); + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ДеревоВариантовОтчетаПредставление, ДеревоВариантовОтчетаАвтор"; + Инструкция.Отборы.Вставить("ДеревоВариантовОтчета.АвторТекущийПользователь", Истина); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.МоиВариантыОтчетовЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +КонецПроцедуры &НаКлиенте Процедура ВыбратьИЗакрыть() @@ -408,21 +410,38 @@ КонецЕсли; - // Вывод вариантов из таблицы в дерево. - Для Каждого ГруппаДерева Из ДеревоВариантовОтчета.ПолучитьЭлементы() Цикл - ВариантыГруппы = ТаблицаВариантов.Скопировать(Новый Структура("НомерГруппы", ГруппаДерева.НомерГруппы)); - ВариантыГруппы.Сортировать("Наименование ВОЗР"); - ГруппаДерева.СкрытОтбором = (ВариантыГруппы.Количество() = 0); - ГруппаДереваНаборСтрок = ГруппаДерева.ПолучитьЭлементы(); - ГруппаДереваНаборСтрок.Очистить(); - Для Каждого СтрокаТаблицы Из ВариантыГруппы Цикл - Вариант = ГруппаДереваНаборСтрок.Добавить(); - ЗаполнитьЗначенияСвойств(Вариант, СтрокаТаблицы); - Если Вариант.КлючВарианта = ТекущийКлючВарианта Тогда - Элементы.ДеревоВариантовОтчета.ТекущаяСтрока = Вариант.ПолучитьИдентификатор(); + ТаблицаВариантов.Сортировать("НомерГруппы ВОЗР, Наименование ВОЗР"); + ДеревоВариантовОтчета.ПолучитьЭлементы().Очистить(); + ГруппыДерева = Новый Соответствие; + ГруппыДерева.Вставить(1, ДеревоВариантовОтчета.ПолучитьЭлементы()); + + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + Если Не ЗначениеЗаполнено(СтрокаТаблицы.КлючВарианта) Тогда + Продолжить; + КонецЕсли; + НаборСтрокДерева = ГруппыДерева.Получить(СтрокаТаблицы.НомерГруппы); + Если НаборСтрокДерева = Неопределено Тогда + ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); + ГруппаДерева.НомерГруппы = СтрокаТаблицы.НомерГруппы; + Если СтрокаТаблицы.НомерГруппы = 2 Тогда + ГруппаДерева.Наименование = НСтр("ru = 'Скрытые в панелях отчетов'"); + ГруппаДерева.ИндексКартинки = 0; + ГруппаДерева.КартинкаАвтора = -1; + ИначеЕсли СтрокаТаблицы.НомерГруппы = 3 Тогда + ГруппаДерева.Наименование = НСтр("ru = 'Помеченные на удаление'"); + ГруппаДерева.ИндексКартинки = 1; + ГруппаДерева.КартинкаАвтора = -1; КонецЕсли; - Вариант.КартинкаАвтора = ?(Вариант.ТолькоДляАвтора, -1, 0); - КонецЦикла; + НаборСтрокДерева = ГруппаДерева.ПолучитьЭлементы(); + ГруппыДерева.Вставить(СтрокаТаблицы.НомерГруппы, НаборСтрокДерева); + КонецЕсли; + + Вариант = НаборСтрокДерева.Добавить(); + ЗаполнитьЗначенияСвойств(Вариант, СтрокаТаблицы); + Если Вариант.КлючВарианта = ТекущийКлючВарианта Тогда + Элементы.ДеревоВариантовОтчета.ТекущаяСтрока = Вариант.ПолучитьИдентификатор(); + КонецЕсли; + Вариант.КартинкаАвтора = ?(Вариант.ТолькоДляАвтора, -1, 0); КонецЦикла; КонецПроцедуры @@ -436,3 +455,4 @@ ИндексКартинки = ?(ПометкаУдаления, 4, ?(Пользовательский, 3, 5)); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca deleted file mode 100644 index 16ff4c248..000000000 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - ВариантыОтчета - - - ВариантыОтчетаНаименование - - - - - ВариантыОтчета.Пользовательский - Equal - false - - - - - ЦветТекста - style:СкрытыйВариантОтчетаЦвет - - - false - Видимость - false - - - false - Доступность - false - - - - - - - ВариантыОтчета - - - ВариантыОтчетаНаименование - - - - - ПолныеПраваНаВарианты - Equal - false - - - ВариантыОтчета.АвторТекущийПользователь - Equal - false - - - - - ЦветТекста - style:СкрытыйВариантОтчетаЦвет - - - false - Доступность - false - - - - - false - - - ВариантыОтчета - - - ВариантыОтчетаНаименование - - - - - ВариантыОтчета.Порядок - Equal - 3 - - - - - ЦветТекста - style:СкрытыйВариантОтчетаЦвет - - - false - Доступность - false - - - - diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index 48c29e10a..d68c7c6e4 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -2108,7 +2108,7 @@ ru << Назад - 3 + 2 ru Назад @@ -2130,7 +2130,7 @@ ru Сохранить - 2 + 3 ru Сохранить diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html index e64619404..755982cdf 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 42c6c5473..15f3cb1d7 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -1,8 +1,9 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -92,8 +93,9 @@ ТекущийЭлемент = Элементы.Наименование; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) @@ -129,8 +131,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВариантыОтчета +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВариантыотчета &НаКлиенте Процедура ВариантыОтчетаПриАктивизацииСтроки(Элемент) @@ -191,8 +194,9 @@ Отказ = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоподсистем &НаКлиенте Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) @@ -204,8 +208,9 @@ ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Назад(Команда) @@ -230,8 +235,31 @@ СохранитьИЗакрыть(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; + Инструкция.Отборы.Вставить("ВариантыОтчета.Пользовательский", Ложь); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; + Инструкция.Отборы.Вставить("ПолныеПраваНаВарианты", Ложь); + Инструкция.Отборы.Вставить("ВариантыОтчета.АвторТекущийПользователь", Ложь); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; + Инструкция.Отборы.Вставить("ВариантыОтчета.Порядок", 3); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); + ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Клиент @@ -676,3 +704,5 @@ КонецЕсли; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index 0c527f517..7115f6d5e 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +#Область ПрограммныйИнтерфейс // Удаляет настройку из хранилища. // @@ -196,8 +196,9 @@ #КонецЕсли КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ +#КонецОбласти + +#Область ОбработчикиСобытий #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -216,7 +217,7 @@ // "ХранилищеНастроекМенеджер.<Имя хранилища>.ОбработкаЗагрузки" в синтакс-помощнике. // Процедура ОбработкаЗагрузки(КлючОтчета, КлючВарианта, Настройки, ОписаниеНастроек, Пользователь) - Если Не ПравоЧтения() Тогда + Если Не ВариантыОтчетовПовтИсп.ПравоЧтения() Тогда Возврат; КонецЕсли; @@ -272,7 +273,7 @@ // "ХранилищеНастроекМенеджер.<Имя хранилища>.ОбработкаСохранения" в синтакс-помощнике. // Процедура ОбработкаСохранения(КлючОтчета, КлючВарианта, Настройки, ОписаниеНастроек, Пользователь) - Если Не ПравоСохранения() Тогда + Если Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для сохранения вариантов отчетов'"); КонецЕсли; @@ -320,7 +321,7 @@ // "ХранилищеНастроекМенеджер.<Имя хранилища>.ОбработкаПолученияОписания" в синтакс-помощнике. // Процедура ОбработкаПолученияОписания(КлючОтчета, КлючВарианта, ОписаниеНастроек, Пользователь) - Если Не ПравоЧтения() Тогда + Если Не ВариантыОтчетовПовтИсп.ПравоЧтения() Тогда Возврат; КонецЕсли; @@ -382,7 +383,7 @@ // "ХранилищеНастроекМенеджер.<Имя хранилища>.ОбработкаУстановкиОписания" в синтакс-помощнике. // Процедура ОбработкаУстановкиОписания(КлючОтчета, КлючВарианта, ОписаниеНастроек, Пользователь) - Если Не ПравоСохранения() Тогда + Если Не ВариантыОтчетовПовтИсп.ПравоДобавления() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для сохранения вариантов отчетов'"); КонецЕсли; @@ -419,15 +420,4 @@ #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Возвращает Истина если у пользователя есть право на сохранение вариантов отчетов. -Функция ПравоСохранения() - Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); -КонецФункции - -// Возвращает Истина если у пользователя есть право чтения вариантов отчетов. -Функция ПравоЧтения() - Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов); -КонецФункции +#КонецОбласти diff --git a/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo b/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo index 2ac732d5d..981d585f1 100644 --- a/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo +++ b/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo @@ -7,9 +7,9 @@ - 22 - 39 - 121 + 28 + 85 + 174 diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index 6d554fa30..b6df30b9b 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -35,6 +35,22 @@ DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных + + CommonCommand.ПанельОтчетовАдминистрирование + + + + Catalog.ВариантыОтчетов.StandardCommand.OpenList + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList + + + + Catalog.РассылкиОтчетов.StandardCommand.OpenList + + DataProcessor.ПанельАдминистрированияБСП.Command.ПоддержкаИОбслуживание @@ -65,10 +81,6 @@ Catalog.ТомаХраненияФайлов.StandardCommand.OpenList - - Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList - - InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList @@ -77,10 +89,6 @@ CommonCommand.ОткрытьОбменыДанными - - Catalog.ВариантыОтчетов.StandardCommand.OpenList - - CommonCommand.СинхронизацияДанныхВМоделиСервиса @@ -145,10 +153,6 @@ Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList - - Catalog.РассылкиОтчетов.StandardCommand.OpenList - - Catalog.СценарииОбменовДанными.StandardCommand.OpenList @@ -166,10 +170,6 @@ Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкиСистемнойУчетнойЗаписи - - InformationRegister.НомераОтсканированныхФайлов.Command.НомераОтсканированныхФайлов - - Catalog.НазначенияСертификатовЭП.StandardCommand.OpenList @@ -191,6 +191,10 @@ Report.АнализЖурналаРегистрации.StandardCommand.Open + + Report.СведенияОПользователях.StandardCommand.Open + + DataProcessor.АктивныеПользователи.StandardCommand.Open @@ -271,10 +275,6 @@ CommonForm.НастройкиКриптографии.StandardCommand.Open - - CommonForm.ПараметрыАдминистрированияСервернойИБ.StandardCommand.Open - - CommonForm.ПараметрыПроксиСервера.StandardCommand.Open @@ -287,10 +287,6 @@ Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ - - CommonForm.НастройкиАгентаСервиса.StandardCommand.Open - - CommonForm.НастройкаОтправкиSMS.StandardCommand.Open @@ -308,7 +304,7 @@ - DataProcessor.ГрупповоеИзменениеОбъектов.Command.ГрупповоеИзменениеРеквизитов + DataProcessor.ГрупповоеИзменениеРеквизитов.Command.ГрупповоеИзменениеРеквизитов @@ -332,6 +328,10 @@ Catalog.ВнешниеПользователи.StandardCommand.OpenList DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных + CommonCommand.ПанельОтчетовАдминистрирование + Catalog.ВариантыОтчетов.StandardCommand.OpenList + Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList + Catalog.РассылкиОтчетов.StandardCommand.OpenList NavigationPanelOrdinary @@ -345,7 +345,6 @@ Catalog.ГруппыВнешнихПользователей.StandardCommand.OpenList Catalog.ГруппыПользователей.StandardCommand.OpenList Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList - Catalog.РассылкиОтчетов.StandardCommand.OpenList Catalog.СценарииОбменовДанными.StandardCommand.OpenList Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList Catalog.НазначенияСертификатовЭП.StandardCommand.OpenList @@ -359,6 +358,10 @@ Catalog.ВнешниеПользователи.StandardCommand.OpenList DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных + CommonCommand.ПанельОтчетовАдминистрирование + Catalog.ВариантыОтчетов.StandardCommand.OpenList + Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList + Catalog.РассылкиОтчетов.StandardCommand.OpenList NavigationPanelOrdinary @@ -376,10 +379,8 @@ DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации Catalog.ТомаХраненияФайлов.StandardCommand.OpenList - Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList CommonCommand.ОткрытьОбменыДанными - Catalog.ВариантыОтчетов.StandardCommand.OpenList CommonCommand.СинхронизацияДанныхВМоделиСервиса Catalog.Валюты.StandardCommand.OpenList Catalog.КлассификаторБанковРФ.StandardCommand.OpenList @@ -398,11 +399,9 @@ Catalog.ГруппыВнешнихПользователей.StandardCommand.OpenList Catalog.ГруппыПользователей.StandardCommand.OpenList Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList - Catalog.РассылкиОтчетов.StandardCommand.OpenList Catalog.СценарииОбменовДанными.StandardCommand.OpenList Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкиСистемнойУчетнойЗаписи - InformationRegister.НомераОтсканированныхФайлов.Command.НомераОтсканированныхФайлов Catalog.НазначенияСертификатовЭП.StandardCommand.OpenList @@ -439,6 +438,7 @@ ActionsPanelReports Report.АнализЖурналаРегистрации.StandardCommand.Open + Report.СведенияОПользователях.StandardCommand.Open ActionsPanelTools @@ -463,16 +463,14 @@ DataProcessor.УправлениеПолнотекстовымПоиском.Command.УправлениеПолнотекстовымПоиском DataProcessor.РезервноеКопированиеИБ.StandardCommand.Open CommonForm.НастройкиКриптографии.StandardCommand.Open - CommonForm.ПараметрыАдминистрированияСервернойИБ.StandardCommand.Open CommonForm.ПараметрыПроксиСервера.StandardCommand.Open DataProcessor.ЗагрузкаКурсовВалют.StandardCommand.Open Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ - CommonForm.НастройкиАгентаСервиса.StandardCommand.Open CommonForm.НастройкаОтправкиSMS.StandardCommand.Open DataProcessor.ОценкаПроизводительности.StandardCommand.Open CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.StandardCommand.Open - DataProcessor.ГрупповоеИзменениеОбъектов.Command.ГрупповоеИзменениеРеквизитов + DataProcessor.ГрупповоеИзменениеРеквизитов.Command.ГрупповоеИзменениеРеквизитов DataProcessor.ОбновлениеИнформационнойБазы.StandardCommand.Open DataProcessor.УниверсальныйОбменДаннымиXML.StandardCommand.Open diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 23e09f840..99e199134 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -58,13 +58,11 @@ DataProcessor.ПанельАдминистрированияБСП CommonForm.НастройкиКриптографии CommonForm.ПараметрыПроксиСервера - CommonForm.ПараметрыАдминистрированияСервернойИБ InformationRegister.НомераОтсканированныхФайлов Catalog.Валюты DataProcessor.ОценкаПроизводительности CommonForm.НастройкаОтправкиSMS CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным - CommonForm.НастройкиАгентаСервиса DataProcessor.ЗагрузкаКурсовВалют Catalog.КлассификаторБанковРФ Catalog.Организации @@ -77,9 +75,11 @@ Report.ДатыЗапретаЗагрузки Report.ДатыЗапретаИзменения DataProcessor.ПанельАдминистрированияБСПВМоделиСервиса - DataProcessor.ГрупповоеИзменениеОбъектов + DataProcessor.ГрупповоеИзменениеРеквизитов DataProcessor.ОбновлениеИнформационнойБазы Catalog.КлючевыеОперации DataProcessor.УниверсальныйОбменДаннымиXML Catalog.НазначенияСертификатовЭП + Report.СведенияОПользователях + CommonCommand.ПанельОтчетовАдминистрирование diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html index 718276ac0..55e6aad08 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 e34d9b625..92675378e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -168,5 +168,42 @@ CommonPicture.Успешно32 ScheduledJob.УдалениеПомеченных CommonPicture.Успешно + CommonModule.ФизическиеЛицаКлиентСервер + CommonTemplate.КомпонентаСклоненияФИО + CommonModule.АдминистрированиеКластераCOMКлиентСервер + CommonModule.АдминистрированиеКластераRASКлиентСервер + CommonModule.АдминистрированиеКластераКлиентСервер + Constant.ПараметрыАдминистрированияИБ + DataProcessor.ПоискИУдалениеДублей + CommonModule.РаботаВБезопасномРежимеКлиент + CommonModule.РаботаВБезопасномРежимеПереопределяемый + CommonModule.РаботаВБезопасномРежимеСлужебный + FunctionalOption.ИспользуютсяПрофилиБезопасности + DefinedType.БезопасныйРежим + XDTOPackage.V8AddinBundle + XDTOPackage.ApplicationPermissions_1_0_0_1 + Constant.ИспользуютсяПрофилиБезопасности + Constant.ПрофильБезопасностиИнформационнойБазы + Enum.ОперацииСНаборамиРазрешений + DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов + InformationRegister.РежимыПодключенияВнешнихМодулей + InformationRegister.РазрешенныеКаталогиФайловойСистемы + InformationRegister.РазрешенныеCOMКлассы + InformationRegister.РазрешенныеВнешниеКомпоненты + InformationRegister.РазрешенныеПриложенияОперационнойСистемы + InformationRegister.РазрешенныеИнтернетРесурсы + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов + InformationRegister.РазрешенияПереходаВПривилегированныйРежим + InformationRegister.ЗапросыАдминистрированияРазрешенийИспользованияВнешнихРесурсов + CommonModule.РаботаВБезопасномРежиме + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности + CommonModule.РаботаВБезопасномРежимеСлужебныйПовтИсп + Enum.СостоянияЗапросовНаИспользованиеВнешнихРесурсов + CommonPicture.ПримечаниеЖурналаРегистрации + Constant.ГлавныйУзел + CommonForm.ВосстановлениеСвязиСГлавнымУзлом + CommonModule.НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный + CommonModule.НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент + Report.ИспользуемыеВнешниеРесурсы Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html index 00a298d6f..de02aaf20 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 b0c3a12c7..74ab9c811 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 4feda85b8..0d06f4068 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -43,5 +43,7 @@ Constant.ПараметрыВариантовОтчетов EventSubscription.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных CommonPicture.Сумма + Catalog.ПользовательскиеНастройкиОтчетов + CommonCommand.ПанельОтчетовАдминистрирование Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html index d75be6ee3..18c21c9ba 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/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html index a9775005a..512912d2e 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/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo index 1139bebca..e86979067 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo @@ -11,7 +11,7 @@ ru - DataProcessor.ГрупповоеИзменениеОбъектов + DataProcessor.ГрупповоеИзменениеРеквизитов CommonModule.ГрупповоеИзменениеОбъектовКлиент Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html index 2697792be..1e41b341c 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 23a908473..55ff48094 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -51,5 +51,6 @@ XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы + Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html index 1874c4b6e..4272b53b7 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 3d4a7d72d..fad34672e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo @@ -14,11 +14,10 @@ CommonModule.СоединенияИБ CommonModule.СоединенияИБГлобальный CommonModule.СоединенияИБКлиент - Constant.ПараметрыАдминистрированияИБ DataProcessor.БлокировкаРаботыПользователей CommonModule.СоединенияИБКлиентСервер DataProcessor.АктивныеПользователи - CommonForm.ПараметрыАдминистрированияСервернойИБ + CommonForm.ПараметрыАдминистрированияПрограммы CommonModule.СоединенияИБВызовСервераПовтИсп InformationRegister.УдалитьБлокировкиСеансовОбластиДанных CommonModule.СоединенияИБВызовСервера diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo index 30bfe08bd..4d172c334 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo @@ -16,5 +16,6 @@ Role.ИспользованиеЗаметок CommonModule.ЗаметкиПользователяСлужебный EventSubscription.УстановитьПометкуУдаленияЗаметкамПользователя + CommonModule.ЗаметкиПользователя Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html index 29f4acff7..4184b7533 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/КалендарныеГрафики/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html index c90200a89..f31deafec 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 28dc74013..262bc442c 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/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html index bcc434591..bbd84b2e4 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 4e77273a3..262c2ead9 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 dcf3b554d..d28384915 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 abf3de4c0..4b182f927 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -128,5 +128,6 @@ Constant.ЗагрузитьСообщениеОбменаДанными Constant.КаталогСообщенийОбменаДаннымиДляLinux Constant.КаталогСообщенийОбменаДаннымиДляWindows + Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index be7aa755f..aa9f2ca7f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -25,5 +25,6 @@ ScheduledJob.ОтложенноеОбновлениеИБ SessionParameter.ВыполняетсяОбновлениеИБ CommonModule.ОбновлениеИнформационнойБазыГлобальный + CommonModule.ОбновлениеИнформационнойБазыСлужебный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html index 333936f72..6e4214ace 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/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo index 28aa18a14..8ff289b66 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo @@ -9,7 +9,6 @@ CommonModule.ОтправкаSMS CommonModule.ОтправкаSMSЧерезМТС CommonModule.ОтправкаSMSПереопределяемый - WSReference.ОтправкаSMSЧерезМТС Constant.ПровайдерSMS Constant.ЛогинДляОтправкиSMS Constant.ПарольДляОтправкиSMS diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html index 3089f7eab..f01720904 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 9cf75dea5..bcdab9c78 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -35,5 +35,6 @@ CommonPicture.ИспользованиеМакета CommonModule.УправлениеПечатьюКлиентПовтИсп CommonModule.УправлениеПечатьюСлужебныйКлиент + CommonTemplate.КомпонентаПечатиQRКода Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html index 143c12c27..ada59366b 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 c4c348c9e..fb2bf96e0 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 64d38fef3..1ee5b1b90 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/Пользователи/Пользователи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo index 4f6840af6..f2ba19e17 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -59,5 +59,6 @@ Constant.ПараметрыРаботыПользователей CommonForm.ГруппыПользователей SessionParameter.АвторизованныйПользователь + Report.СведенияОПользователях Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html index 286c78b0f..07db60138 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 54330dc48..98ba446e5 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -20,5 +20,6 @@ CommonModule.ПрисоединенныеФайлыСлужебныйКлиент CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера CommonModule.ПрисоединенныеФайлыПереопределяемый + CommonModule.ПрисоединенныеФайлыКлиентСервер Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo index c6ca7a6b5..ab789512b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo @@ -23,15 +23,11 @@ Constant.РазмерБлокаПередачиФайла Constant.КаталогОбменаФайламиВМоделиСервиса Constant.КаталогОбменаФайламиВМоделиСервисаLinux - Constant.ПарольПользователяАгентаСервиса - Constant.ИмяПользователяАгентаСервиса - Constant.АдресАгентаСервиса XDTOPackage.AgentScripts XDTOPackage.Сообщения CommonModule.СообщенияВМоделиСервисаПовтИсп Constant.КлючОбластиДанных XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_1 - CommonForm.НастройкиАгентаСервиса XDTOPackage.УправлениеПриложениями InformationRegister.РейтингАктивностиОбластейДанных XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_2 diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo deleted file mode 100644 index 51a36aeff..000000000 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo +++ /dev/null @@ -1,40 +0,0 @@ - - - ДополнительныеОтчетыИОбработкиВМоделиСервиса - - ru - Дополнительные отчеты и обработки в модели сервиса - - true - true - Constant.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса - Constant.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса - Constant.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса - Constant.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса - CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервиса - CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаПовтИсп - Enum.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса - Catalog.ПоставляемыеДополнительныеОтчетыИОбработки - EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов - EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольУдаления - CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость - CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс - XDTOPackage.ApplicationExtensionsCompatibility_1_0_0_1 - InformationRegister.ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных - CommonModule.ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса - InformationRegister.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных - CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест - 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 - CommonModule.ДополнительныеОтчетыИОбработкиВАвтономномРежиме - InformationRegister.ИспользованиеДополнительныхОтчетовИОбработокСервисаВАвтономномРабочемМесте - Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса - diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo index b94d498fe..e8dc03b35 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo @@ -27,7 +27,6 @@ Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы CommonModule.ОбменДаннымиВМоделиСервисаКлиент Constant.ПрефиксПоследнегоАвтономногоРабочегоМеста - Constant.НастройкаАвтономногоРабочегоМестаЗавершена EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете CommonModule.АвтономнаяРаботаСлужебныйВызовСервера FunctionalOption.ИспользоватьАвтономнуюРаботуВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo index 6910a436f..375ffc3f2 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo @@ -10,7 +10,6 @@ БазоваяФункциональностьВМоделиСервиса БанкиВМоделиСервиса ВалютыВМоделиСервиса - ДополнительныеОтчетыИОбработкиВМоделиСервиса КалендарныеГрафикиВМоделиСервиса ОбменДаннымиВМоделиСервиса ОбменСообщениями diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html index 54ca338b0..2d6fb3abb 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 159187630..b34e5cb9c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -11,7 +11,7 @@ ru - CommonModule.ЭлектроннаяПочта + CommonModule.РаботаСПочтовымиСообщениямиСлужебный CommonModule.РаботаСПочтовымиСообщениямиКлиент CommonModule.РаботаСПочтовымиСообщениями CommonForm.ПодтверждениеПароляУчетнойЗаписи @@ -24,6 +24,6 @@ CommonPicture.ПриложитьФайл CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты - CommonModule.ЭлектроннаяПочтаВызовСервера + CommonModule.РаботаСПочтовымиСообщениямиВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html index 3edecea16..82bbe4958 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 4133789ae..f04314a3c 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 fee003adb..6ef5ca056 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -11,5 +11,6 @@ DataProcessor.НастройкаРезервногоКопированияИБ DataProcessor.РезервноеКопированиеИБ CommonModule.РезервноеКопированиеИБВызовСервера + CommonCommand.ПоказатьРезультатРезервногоКопирования Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html index b1148f0cc..47bbdb68c 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/УправлениеДоступом/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html index ff513a8b7..a3d725f54 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 b4f2f5b81..49f6d5e58 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 deleted file mode 100644 index 952179dde..000000000 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo +++ /dev/null @@ -1,22 +0,0 @@ - - - ФизическиеЛица - - ru - Физические лица - - true - Catalog.ВидыДокументовФизическихЛиц - Catalog.ФизическиеЛица - Enum.ПолФизическогоЛица - InformationRegister.ДокументыФизическихЛиц - Role.ДобавлениеИзменениеФизическихЛиц - Role.ЧтениеПерсональныхДанныхФизическихЛиц - Role.ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц - CommonModule.ФизическиеЛица - Role.ЧтениеФизическихЛиц - CommonModule.ФизическиеЛицаКлиент - CommonModule.ФизическиеЛицаКлиентСервер - CommonTemplate.КомпонентаСклоненияФИО - Subsystem.СтандартныеПодсистемы - diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index f07c94bc1..f86dc7a7c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -55,6 +55,5 @@ УправлениеДоступом УправлениеИтогамиИАгрегатами ФайловыеФункции - ФизическиеЛица ЭлектроннаяПодпись diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html index 7f55e047f..4c5c54ec9 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/Дополнительно/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl index 477f8bea2..f6cba4849 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,3 +14,5 @@ БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.ДатаИсполнения); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/ConditionalAppearance.dcssca b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/ConditionalAppearance.dcssca deleted file mode 100644 index edf32eb4b..000000000 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/ConditionalAppearance.dcssca +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - ДеревоЗадач - - - - - ДеревоЗадач.Просрочена - Equal - true - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - - - - - ДеревоЗадач - - - - - ДеревоЗадач.Выполнена - Equal - true - - - - - false - ЦветФона - #3BD563 - - - ЦветТекста - style:ЗавершенныйБизнесПроцесс - - - - diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form index 3d13ec2ce..ebecb563d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form @@ -292,14 +292,6 @@ 3 Left - - Selection - СписокВыбор - - - BeforeRowChange - СписокПередНачаломИзменения - СписокСтрокаПоиска 82 @@ -1430,7 +1422,7 @@ ru Изменить - 2 + 1 ru Изменить задачу @@ -1456,7 +1448,7 @@ ru Обновить - 3 + 2 ru Обновить список задач diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index d16c1db0a..5dd304a1c 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -56,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоказыватьВыполненныеПриИзменении(Элемент) @@ -66,21 +69,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломИзменения(Элемент, Отказ); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоЗадач +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоЗадач &НаКлиенте Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -90,8 +81,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -110,8 +102,44 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЗадач.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗадач.Просрочена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЗадач.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗадач.Выполнена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗавершенныйБизнесПроцесс); + +КонецПроцедуры &НаСервере Процедура ОбновитьСписокЗадач() @@ -138,14 +166,7 @@ Возврат; КонецЕсли; - СтандартнаяОбработка = Истина; - Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - СтандартнаяОбработка = Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; - - Если СтандартнаяОбработка Тогда - ПоказатьЗначение(,Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; + ПоказатьЗначение(,Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); КонецПроцедуры @@ -298,4 +319,4 @@ КонецПроцедуры - +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/ConditionalAppearance.dcssca b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/ConditionalAppearance.dcssca deleted file mode 100644 index 7e63a6dc1..000000000 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/ConditionalAppearance.dcssca +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - ДеревоЗадач - - - - - ДеревоЗадач.Просрочена - Equal - true - - - - - ЦветТекста - style:ПросроченныеДанныеЦвет - - - - - - - ДеревоЗадач - - - - - ДеревоЗадач.Выполнена - Equal - true - - - - - ЦветТекста - style:ЗавершенныйБизнесПроцесс - - - - diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form index 056702ea5..806b138fb 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form @@ -519,10 +519,6 @@ Left true - - Selection - СписокВыбор - СписокСтрокаПоиска 96 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index 44799f799..406dbfbb8 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -1,8 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -53,24 +55,18 @@ УстановитьОтбор(Настройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоказыватьВыполненныеПриИзменении(Элемент) УстановитьОтбор(Новый Структура("ПоказыватьВыполненные", ПоказыватьВыполненные)); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоЗадач +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоЗадач &НаКлиенте Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -80,8 +76,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Обновить(Команда) @@ -100,8 +97,44 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЗадач.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗадач.Просрочена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоЗадач.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗадач.Выполнена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗавершенныйБизнесПроцесс); + +КонецПроцедуры &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) @@ -341,14 +374,8 @@ Возврат; КонецЕсли; - СтандартнаяОбработка = Истина; - Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - СтандартнаяОбработка = Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; - - Если СтандартнаяОбработка Тогда - ПоказатьЗначение(,Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; + ПоказатьЗначение(,Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form index ba77671bd..d81943669 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form @@ -790,10 +790,6 @@ Left true - - Selection - СписокВыбор - BeforeAddRow СписокПередНачаломДобавления diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html index ed2a191a3..0bfe0bf98 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 bb1bf07f1..3edafc7fa 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -41,8 +41,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СгруппироватьПоВажности(Команда) @@ -76,8 +77,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -85,13 +87,9 @@ Родитель, Группа); КонецПроцедуры -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПринятьКИсполнению(Команда) @@ -114,8 +112,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРеквизита) @@ -178,3 +177,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form index a6b8cd91d..77663bbae 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form @@ -682,18 +682,10 @@ Left true - - Selection - СписокВыбор - BeforeAddRow СписокПередНачаломДобавления - - BeforeRowChange - СписокПередНачаломИзменения - СписокСтрокаПоиска 119 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html index ed2a191a3..0bfe0bf98 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 367ded2ba..77873fd53 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -44,8 +44,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СгруппироватьПоВажности(Команда) @@ -72,8 +73,9 @@ СгруппироватьПоКолонке("ПредметСтрокой"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -81,18 +83,9 @@ Родитель, Группа); КонецПроцедуры -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры +#КонецОбласти -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломИзменения(Элемент, Отказ); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПринятьКИсполнению(Команда) @@ -115,8 +108,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРеквизита) @@ -146,3 +140,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html index 223d74cde..29a168371 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/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index eb4060321..df997b9a4 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -91,8 +91,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИсполнительПриИзменении(Элемент) @@ -123,8 +124,9 @@ УстановитьСостояниеЭлементов(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура OK(Команда) @@ -137,8 +139,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьТипыОбъектовАдресации() @@ -204,3 +207,5 @@ Комментарий); КонецФункции + +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index d77df8224..f7b276987 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -28,13 +28,14 @@ БизнесПроцессыИЗадачиКлиент.ФормаЗадачиОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ДекорацияОткрытьФормуЗадачиНажатие(Элемент) - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Ссылка); + ПоказатьЗначение(,Объект.Ссылка); Модифицированность = Ложь; Закрыть(); @@ -44,11 +45,7 @@ Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ПоказатьЗначение(,Объект.Предмет); - КонецЕсли; + ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры @@ -61,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрытьВыполнить(Команда) @@ -85,14 +83,15 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализацияФормы() Если ЗначениеЗаполнено(Объект.БизнесПроцесс) Тогда - ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьФормуВыполненияЗадачи(Объект.Ссылка); + ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(Объект.Ссылка); ЕстьФормаЗадачи = ПараметрыФормы.Свойство("ИмяФормы"); Элементы.ГруппаФормаВыполнения.Видимость = ЕстьФормаЗадачи; Элементы.Выполнена.Доступность = НЕ ЕстьФормаЗадачи; @@ -119,3 +118,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index a6ab1d21a..e361c786a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -1339,31 +1339,18 @@ true - None - - СписокКоманднаяПанель - 3 - Left - true - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 139 + + Ссылка + 134 + true + true + + + Список.Ref + - СписокСтрокаПоискаРасширеннаяПодсказка - 141 + СсылкаРасширеннаяПодсказка + 136 Label true true @@ -1372,20 +1359,36 @@ - СписокСтрокаПоискаКонтекстноеМеню - 140 + СсылкаКонтекстноеМеню + 135 true - Список - + LabelField + Enter + true + Left + true + true + true - - - СписокСостояниеПросмотра + + None + + СписокКоманднаяПанель + 3 + Left + true + + + BeforeAddRow + СписокПередНачаломДобавления + + + СписокСтрокаПоиска 142 - СписокСостояниеПросмотраРасширеннаяПодсказка + СписокСтрокаПоискаРасширеннаяПодсказка 144 Label true @@ -1395,10 +1398,33 @@ - СписокСостояниеПросмотраКонтекстноеМеню + СписокСтрокаПоискаКонтекстноеМеню 143 true + Список + + true + + + + СписокСостояниеПросмотра + 145 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 146 + true + ViewStatusAddition Список @@ -1407,10 +1433,10 @@ СписокУправлениеПоиском - 145 + 148 СписокУправлениеПоискомРасширеннаяПодсказка - 147 + 150 Label true true @@ -1420,7 +1446,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 146 + 149 true SearchControlAddition @@ -1829,6 +1855,9 @@ true + + Список.Ref +
              true
              ВЫБРАТЬ diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index d2c4eef2d..85f9ab2c2 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -85,8 +85,9 @@ ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастроек, Настройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) @@ -103,8 +104,9 @@ УстановитьОтбор(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +#КонецОбласти + +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ПринятьКИсполнению(Команда) @@ -127,8 +129,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -138,18 +141,9 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры +#КонецОбласти -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломИзменения(Элемент, Отказ); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОтбор() @@ -202,3 +196,5 @@ Элементы.Список.Обновить(); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index a3294ca79..c890464af 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/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index e69de29bb..220636d35 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -0,0 +1,47 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Групповое изменение объектов + +// Возвращает список реквизитов, которые не нужно редактировать +// с помощью обработки группового изменения объектов +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Автор"); + Результат.Добавить("Важность"); + Результат.Добавить("ДатаИсполнения"); + Результат.Добавить("ДатаНачала"); + Результат.Добавить("ДатаПринятияКИсполнению"); + Результат.Добавить("Предмет"); + Результат.Добавить("ПринятаКИсполнению"); + Результат.Добавить("СрокИсполнения"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы = "ФормаОбъекта" И Параметры.Свойство("Ключ") Тогда + ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(Параметры.Ключ); + ИмяФормыЗадачи = ""; + Результат = ПараметрыФормы.Свойство("ИмяФормы", ИмяФормыЗадачи); + Если Результат Тогда + ВыбраннаяФорма = ИмяФормыЗадачи; + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 4ca4f1d19..7d0206f59 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Область ПрограммныйИнтерфейс // Возвращает Истина, если в задаче указан исполнитель или роль исполнителя. // @@ -130,8 +129,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции Процедура УстановитьСостояниеПодчиненныхБизнесПроцессов(НовоеСостояние) @@ -155,5 +155,6 @@ КонецПроцедуры +#КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/WsDefinitions.wsdl b/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/WsDefinitions.wsdl deleted file mode 100644 index 0b686d317..000000000 --- a/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/WsDefinitions.wsdl +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/ОтправкаSMSЧерезМТС.mdo b/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/ОтправкаSMSЧерезМТС.mdo deleted file mode 100644 index 8c870a1b0..000000000 --- a/SSL/src/WSReferences/ОтправкаSMSЧерезМТС/ОтправкаSMSЧерезМТС.mdo +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - ОтправкаSMSЧерезМТС - - ru - Отправка SMS через МТС - - http://www.mcommunicator.ru/m2m/m2m_api.asmx?WSDL - diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index 9a9792b7f..2c3ef0dce 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -392,11 +392,9 @@ Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() - ИнформационнаяБазаЗаблокированаДляОбновления = - ОбновлениеИнформационнойБазы.ИнформационнаяБазаЗаблокированаДляОбновления() - ; - Если ЗначениеЗаполнено(ИнформационнаяБазаЗаблокированаДляОбновления) Тогда - ВызватьИсключение ИнформационнаяБазаЗаблокированаДляОбновления; + ИБЗаблокированаДляОбновления = ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления(); + Если ЗначениеЗаполнено(ИБЗаблокированаДляОбновления) Тогда + ВызватьИсключение ИБЗаблокированаДляОбновления; КонецЕсли; КонецПроцедуры @@ -413,9 +411,17 @@ Параметры.Добавить(КодУзлаИнформационнойБазы); Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", Параметры, - КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + КлючФоновогоЗадания, НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка @@ -468,9 +474,17 @@ Параметры.Добавить(КодУзлаИнформационнойБазы); Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", Параметры, - КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + КлючФоновогоЗадания, НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка @@ -600,3 +614,4 @@ Возврат Результат; КонецФункции +#КонецОбласти 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 3590d4e59..bf613725b 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -423,7 +423,7 @@ Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() - Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазы.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда + Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда ВызватьИсключение НСтр("ru = 'Синхронизация данных временно недоступна в связи с обновлением приложения в Интернете.'"); @@ -443,9 +443,17 @@ Параметры.Добавить(КодУзлаИнформационнойБазы); Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", Параметры, - КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + КлючФоновогоЗадания, НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка @@ -498,9 +506,17 @@ Параметры.Добавить(КодУзлаИнформационнойБазы); Параметры.Добавить(ИдентификаторФайла); + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы); + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда + ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", Параметры, - КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + КлючФоновогоЗадания, НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка @@ -656,3 +672,5 @@ Возврат СтрДлина(Формат(Число, "ЧДЦ=0; ЧГ=0")); КонецФункции + +#КонецОбласти diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl index 8925cd029..e5180f301 100644 --- a/SSL/src/WebServices/MessageExchange/Module.bsl +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -169,3 +169,4 @@ КонецФункции +#КонецОбласти 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 088378973..4ffe001c1 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -181,3 +181,4 @@ КонецФункции +#КонецОбласти diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl index c0c3d2d98..6b8307f9d 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -52,7 +52,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; Параметры = Новый Массив; Параметры.Добавить(ИндексСтрокиСценария); @@ -83,7 +83,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; Параметры = Новый Массив; Параметры.Добавить(ИндексСтрокиСценария); @@ -134,3 +134,4 @@ Возврат Истина; КонецФункции +#КонецОбласти 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 b392cf880..ce3aead17 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -52,7 +52,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; РежимОбмена = РежимОбменаДанными(СценарийОбменаДанными); @@ -105,7 +105,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; РежимОбмена = РежимОбменаДанными(СценарийОбменаДанными); @@ -190,3 +190,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl index 8ffe9942c..dcf41f93c 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_1_6_1/Module.bsl @@ -1,5 +1,5 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики операций @@ -71,7 +71,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; РежимОбмена = РежимОбменаДанными(СценарийОбменаДанными); @@ -124,7 +124,7 @@ СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; - Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы + СтрокаСценария.КодЭтогоУзла; РежимОбмена = РежимОбменаДанными(СценарийОбменаДанными); @@ -209,3 +209,5 @@ Возврат Результат; КонецФункции + +#КонецОбласти diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/ApplicationExtensionsCompatibility_1_0_0_1.mdo b/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/ApplicationExtensionsCompatibility_1_0_0_1.mdo deleted file mode 100644 index df3095650..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/ApplicationExtensionsCompatibility_1_0_0_1.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - ApplicationExtensionsCompatibility_1_0_0_1 - - ru - Application extensions compatibility 1 0 0 1 - - http://www.1c.ru/1cFresh/ApplicationExtensions/Compatibility/1.0.0.1 - diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/Package.xdto b/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/Package.xdto deleted file mode 100644 index 7a9638d85..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsCompatibility_1_0_0_1/Package.xdto +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file 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 deleted file mode 100644 index 27417ac43..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - 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 deleted file mode 100644 index 3acfccc26..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ 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 deleted file mode 100644 index 6ce4984cd..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - 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 deleted file mode 100644 index 7d26a94d7..000000000 --- a/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/ApplicationPermissions_1_0_0_1.mdo b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/ApplicationPermissions_1_0_0_1.mdo new file mode 100644 index 000000000..e1a3a2b40 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/ApplicationPermissions_1_0_0_1.mdo @@ -0,0 +1,9 @@ + + + ApplicationPermissions_1_0_0_1 + + ru + Application permissions 1 0 0 1 + + http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.1 + diff --git a/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/Package.xdto b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/Package.xdto new file mode 100644 index 000000000..46b966d61 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_1/Package.xdto @@ -0,0 +1,37 @@ + + + + IMAP + POP3 + SMTP + HTTP + HTTPS + FTP + FTPS + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/V8AddinBundle/Package.xdto b/SSL/src/XDTOPackages/V8AddinBundle/Package.xdto new file mode 100644 index 000000000..6f0bdbe28 --- /dev/null +++ b/SSL/src/XDTOPackages/V8AddinBundle/Package.xdto @@ -0,0 +1,23 @@ + + + plugin + native + com + + + i386 + x86_64 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/V8AddinBundle/V8AddinBundle.mdo b/SSL/src/XDTOPackages/V8AddinBundle/V8AddinBundle.mdo new file mode 100644 index 000000000..26895a4a4 --- /dev/null +++ b/SSL/src/XDTOPackages/V8AddinBundle/V8AddinBundle.mdo @@ -0,0 +1,9 @@ + + + V8AddinBundle + + ru + V8 addin bundle + + http://v8.1c.ru/8.2/addin/bundle +